mirror of
				https://gogs.blitter.com/RLabs/xs
				synced 2024-08-14 10:26:42 +00:00 
			
		
		
		
	Excessive debugging off; client logout (exit) causing panic on server-side, debug TBD
This commit is contained in:
		
							parent
							
								
									5ea75e456d
								
							
						
					
					
						commit
						65b7af8063
					
				
					 2 changed files with 30 additions and 13 deletions
				
			
		|  | @ -9,7 +9,6 @@ import ( | |||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"os/user" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
| 
 | ||||
| 	hkex "blitter.com/hkexsh" | ||||
|  | @ -27,7 +26,8 @@ type cmdSpec struct { | |||
| 
 | ||||
| /* -------------------------------------------------------------- */ | ||||
| 
 | ||||
| // Run a command (via os.exec) as a specific user | ||||
| /* | ||||
|  // Run a command (via os.exec) as a specific user | ||||
| // | ||||
| // Uses ptys to support commands which expect a terminal. | ||||
| func runCmdAs(who string, cmd string, conn hkex.Conn) (err error) { | ||||
|  | @ -66,6 +66,7 @@ func runCmdAs(who string, cmd string, conn hkex.Conn) (err error) { | |||
| 	} | ||||
| 	return | ||||
| } | ||||
| */ | ||||
| 
 | ||||
| // Run a command (via default shell) as a specific user | ||||
| // | ||||
|  | @ -111,8 +112,11 @@ func runShellAs(who string, cmd string, interactive bool, conn hkex.Conn) (err e | |||
| 	} | ||||
| 	// Make sure to close the pty at the end. | ||||
| 	defer func() { _ = ptmx.Close() }() // Best effort. | ||||
| 	// Copy stdin to the pty and the pty to stdout. | ||||
| 	go func() { _, _ = io.Copy(ptmx, conn) }() | ||||
| 	// Copy stdin to the pty.. (bgnd goroutine) | ||||
| 	go func() { | ||||
| 		_, _ = io.Copy(ptmx, conn) | ||||
| 	}() | ||||
| 	// ..and the pty to stdout. | ||||
| 	_, _ = io.Copy(conn, ptmx) | ||||
| 
 | ||||
| 	//err = c.Run()  // returns when c finishes. | ||||
|  | @ -176,10 +180,10 @@ func main() { | |||
| 			//passed down to the command handlers. | ||||
| 			var rec cmdSpec | ||||
| 			var len1, len2, len3, len4 uint32 | ||||
| 			 | ||||
| 
 | ||||
| 			n, err := fmt.Fscanf(c, "%d %d %d %d\n", &len1, &len2, &len3, &len4) | ||||
| 			log.Printf("cmdSpec read:%d %d %d %d\n", len1, len2, len3, len4) | ||||
| 			 | ||||
| 
 | ||||
| 			if err != nil || n < 4 { | ||||
| 				log.Println("[Bad cmdSpec fmt]") | ||||
| 				return err | ||||
|  |  | |||
							
								
								
									
										27
									
								
								hkexnet.go
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								hkexnet.go
									
										
									
									
									
								
							|  | @ -299,10 +299,10 @@ func (hl HKExListener) Accept() (hc Conn, err error) { | |||
| // See go doc io.Reader | ||||
| func (c Conn) Read(b []byte) (n int, err error) { | ||||
| 	//log.Printf("[Decrypting...]\r\n") | ||||
| 	//log.Printf("Read() requests %d bytes\n", len(b)) | ||||
| 	log.Printf("Read() requests %d bytes\n", len(b)) | ||||
| 	for { | ||||
| 		//log.Printf("c.dBuf.Len(): %d\n", c.dBuf.Len()) | ||||
| 		if c.dBuf.Len() >= 1 /* len(b) */ { | ||||
| 		if c.dBuf.Len() > 0 /* len(b) */ { | ||||
| 			break | ||||
| 		} | ||||
| 
 | ||||
|  | @ -311,13 +311,21 @@ func (c Conn) Read(b []byte) (n int, err error) { | |||
| 
 | ||||
| 		// Read the hmac LSB and payload len first | ||||
| 		err = binary.Read(c.c, binary.BigEndian, &hmacIn) | ||||
| 		if err != nil && err.Error() != "EOF" { | ||||
| 			panic(err) | ||||
| 		if err != nil { | ||||
| 			if err.Error() != "EOF" { | ||||
| 				log.Println("Error was:", err.Error()) | ||||
| 			} else { | ||||
| 				return 0, err | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		err = binary.Read(c.c, binary.BigEndian, &payloadLen) | ||||
| 		if err != nil { | ||||
| 			//			if err.Error() != "EOF" { | ||||
| 			panic(err) | ||||
| 			//			} else { | ||||
| 			//				return 0, err | ||||
| 			//			} | ||||
| 		} | ||||
| 		if payloadLen > 16384 { | ||||
| 			panic("Insane payloadLen") | ||||
|  | @ -359,10 +367,15 @@ func (c Conn) Read(b []byte) (n int, err error) { | |||
| 		hTmp := c.rm.Sum(nil)[0] | ||||
| 		log.Printf("<%04x) HMAC:(i)%02x (c)%02x\r\n", decryptN, hmacIn, hTmp) | ||||
| 	} | ||||
| 	//log.Printf("Read() got %d bytes\n", c.dBuf.Len()) | ||||
| 	copy(b, c.dBuf.Next(len(b))) | ||||
| 	retN := c.dBuf.Len() | ||||
| 	if retN > len(b) { | ||||
| 		retN = len(b) | ||||
| 	} | ||||
| 
 | ||||
| 	log.Printf("Read() got %d bytes\n", retN) | ||||
| 	copy(b, c.dBuf.Next(retN)) | ||||
| 	//log.Printf("As Read() returns, c.dBuf is %d long: %s\n", c.dBuf.Len(), hex.Dump(c.dBuf.Bytes())) | ||||
| 	return len(b), nil | ||||
| 	return retN, nil | ||||
| } | ||||
| 
 | ||||
| // Write a byte slice | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue