mirror of
https://gogs.blitter.com/RLabs/xs
synced 2024-08-14 10:26:42 +00:00
tightened up some const types
This commit is contained in:
parent
8b0b833d6e
commit
b810fa7f4a
5 changed files with 39 additions and 36 deletions
|
@ -13,9 +13,10 @@ const (
|
||||||
//KEX_DH
|
//KEX_DH
|
||||||
//KEX_ETC
|
//KEX_ETC
|
||||||
)
|
)
|
||||||
|
// Sent from client to server in order to specify which
|
||||||
|
// algo shall be used (eg., HerraduraKEx, [TODO: others...])
|
||||||
|
type KEXAlg uint8
|
||||||
|
|
||||||
// const CSExtendedCode - extended (>255 UNIX exit status) codes
|
|
||||||
// This indicate channel-related or internal errors
|
|
||||||
const (
|
const (
|
||||||
CSENone = 32 + iota
|
CSENone = 32 + iota
|
||||||
CSEBadAuth // Failed login password
|
CSEBadAuth // Failed login password
|
||||||
|
@ -24,6 +25,9 @@ const (
|
||||||
CSEExecFail // cmd.Start() (exec) failed
|
CSEExecFail // cmd.Start() (exec) failed
|
||||||
CSEPtyExecFail // pty.Start() (exec w/pty) failed
|
CSEPtyExecFail // pty.Start() (exec w/pty) failed
|
||||||
)
|
)
|
||||||
|
// Extended (>255 UNIX exit status) codes
|
||||||
|
// This indicate channel-related or internal errors
|
||||||
|
type CSExtendedCode uint32
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CSONone = iota // No error, normal packet
|
CSONone = iota // No error, normal packet
|
||||||
|
@ -32,6 +36,23 @@ const (
|
||||||
CSOExitStatus // Remote cmd exit status
|
CSOExitStatus // Remote cmd exit status
|
||||||
CSOChaff // Dummy packet, do not pass beyond decryption
|
CSOChaff // Dummy packet, do not pass beyond decryption
|
||||||
)
|
)
|
||||||
|
// Channel status type
|
||||||
|
type CSOType uint32
|
||||||
|
|
||||||
const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1
|
const MAX_PAYLOAD_LEN = 4*1024*1024*1024 - 1
|
||||||
|
|
||||||
|
const (
|
||||||
|
CAlgAES256 = iota
|
||||||
|
CAlgTwofish128 // golang.org/x/crypto/twofish
|
||||||
|
CAlgBlowfish64 // golang.org/x/crypto/blowfish
|
||||||
|
CAlgNoneDisallowed
|
||||||
|
)
|
||||||
|
// Available ciphers for hkex.Conn
|
||||||
|
type CSCipherAlg uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
HmacSHA256 = iota
|
||||||
|
HmacNoneDisallowed
|
||||||
|
)
|
||||||
|
// Available HMACs for hkex.Conn (TODO: not currently used)
|
||||||
|
type CSHmacAlg uint32
|
||||||
|
|
|
@ -29,20 +29,6 @@ import (
|
||||||
_ "crypto/sha256"
|
_ "crypto/sha256"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Available ciphers for hkex.Conn
|
|
||||||
const (
|
|
||||||
CAlgAES256 = iota
|
|
||||||
CAlgTwofish128 // golang.org/x/crypto/twofish
|
|
||||||
CAlgBlowfish64 // golang.org/x/crypto/blowfish
|
|
||||||
CAlgNoneDisallowed
|
|
||||||
)
|
|
||||||
|
|
||||||
// Available HMACs for hkex.Conn (TODO: not currently used)
|
|
||||||
const (
|
|
||||||
HmacSHA256 = iota
|
|
||||||
HmacNoneDisallowed
|
|
||||||
)
|
|
||||||
|
|
||||||
/* Support functionality to set up encryption after a channel has
|
/* Support functionality to set up encryption after a channel has
|
||||||
been negotiated via hkexnet.go
|
been negotiated via hkexnet.go
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -48,10 +48,6 @@ import (
|
||||||
"blitter.com/go/hkexsh/herradurakex"
|
"blitter.com/go/hkexsh/herradurakex"
|
||||||
)
|
)
|
||||||
|
|
||||||
// KEx type - sent from client to server in order to specify which
|
|
||||||
// algo shall be used (eg., HerraduraKEx, [TODO: others...])
|
|
||||||
type KEX uint8
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
|
|
||||||
type (
|
type (
|
||||||
|
@ -74,7 +70,7 @@ type (
|
||||||
|
|
||||||
// Conn is a HKex connection - a superset of net.Conn
|
// Conn is a HKex connection - a superset of net.Conn
|
||||||
Conn struct {
|
Conn struct {
|
||||||
kex KEX // KEX alg (typedef uint8)
|
kex KEXAlg
|
||||||
m *sync.Mutex
|
m *sync.Mutex
|
||||||
c net.Conn // which also implements io.Reader, io.Writer, ...
|
c net.Conn // which also implements io.Reader, io.Writer, ...
|
||||||
h *hkex.HerraduraKEx // TODO: make an interface?
|
h *hkex.HerraduraKEx // TODO: make an interface?
|
||||||
|
@ -86,7 +82,7 @@ type (
|
||||||
|
|
||||||
chaff ChaffConfig
|
chaff ChaffConfig
|
||||||
|
|
||||||
closeStat *uint32 // close status (CSOExitStatus)
|
closeStat *CSOType // close status (CSOExitStatus)
|
||||||
r cipher.Stream //read cipherStream
|
r cipher.Stream //read cipherStream
|
||||||
rm hash.Hash
|
rm hash.Hash
|
||||||
w cipher.Stream //write cipherStream
|
w cipher.Stream //write cipherStream
|
||||||
|
@ -95,11 +91,11 @@ type (
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (hc Conn) GetStatus() uint32 {
|
func (hc Conn) GetStatus() CSOType {
|
||||||
return *hc.closeStat
|
return *hc.closeStat
|
||||||
}
|
}
|
||||||
|
|
||||||
func (hc *Conn) SetStatus(stat uint32) {
|
func (hc *Conn) SetStatus(stat CSOType) {
|
||||||
*hc.closeStat = stat
|
*hc.closeStat = stat
|
||||||
log.Println("closeStat:", *hc.closeStat)
|
log.Println("closeStat:", *hc.closeStat)
|
||||||
}
|
}
|
||||||
|
@ -263,7 +259,7 @@ func Dial(protocol string, ipport string, extensions ...string) (hc *Conn, err e
|
||||||
// NOTE: kex default of KEX_HERRADURA may be overridden by
|
// NOTE: kex default of KEX_HERRADURA may be overridden by
|
||||||
// future extension args to applyConnExtensions(), which is
|
// future extension args to applyConnExtensions(), which is
|
||||||
// called prior to Dial()
|
// called prior to Dial()
|
||||||
hc = &Conn{m: &sync.Mutex{}, c: c, closeStat: new(uint32), h: hkex.New(0, 0), dBuf: new(bytes.Buffer)}
|
hc = &Conn{m: &sync.Mutex{}, c: c, closeStat: new(CSOType), h: hkex.New(0, 0), dBuf: new(bytes.Buffer)}
|
||||||
hc.applyConnExtensions(extensions...)
|
hc.applyConnExtensions(extensions...)
|
||||||
|
|
||||||
// TODO: Factor out ALL params following this to helpers for
|
// TODO: Factor out ALL params following this to helpers for
|
||||||
|
@ -297,7 +293,7 @@ func Dial(protocol string, ipport string, extensions ...string) (hc *Conn, err e
|
||||||
func (hc *Conn) Close() (err error) {
|
func (hc *Conn) Close() (err error) {
|
||||||
hc.DisableChaff()
|
hc.DisableChaff()
|
||||||
s := make([]byte, 4)
|
s := make([]byte, 4)
|
||||||
binary.BigEndian.PutUint32(s, *hc.closeStat)
|
binary.BigEndian.PutUint32(s, uint32(*hc.closeStat))
|
||||||
log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat)
|
log.Printf("** Writing closeStat %d at Close()\n", *hc.closeStat)
|
||||||
hc.WritePacket(s, CSOExitStatus)
|
hc.WritePacket(s, CSOExitStatus)
|
||||||
err = hc.c.Close()
|
err = hc.c.Close()
|
||||||
|
@ -395,13 +391,13 @@ func (hl *HKExListener) Accept() (hc Conn, err error) {
|
||||||
// Open raw Conn c
|
// Open raw Conn c
|
||||||
c, err := hl.l.Accept()
|
c, err := hl.l.Accept()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
hc := Conn{m: &sync.Mutex{}, c: nil, h: nil, closeStat: new(uint32), cipheropts: 0, opts: 0,
|
hc := Conn{m: &sync.Mutex{}, c: nil, h: nil, closeStat: new(CSOType), cipheropts: 0, opts: 0,
|
||||||
r: nil, w: nil}
|
r: nil, w: nil}
|
||||||
return hc, err
|
return hc, err
|
||||||
}
|
}
|
||||||
log.Println("[Accepted]")
|
log.Println("[Accepted]")
|
||||||
|
|
||||||
hc = Conn{ /*kex: from client,*/ m: &sync.Mutex{}, c: c, h: hkex.New(0, 0), closeStat: new(uint32), WinCh: make(chan WinSize, 1),
|
hc = Conn{ /*kex: from client,*/ m: &sync.Mutex{}, c: c, h: hkex.New(0, 0), closeStat: new(CSOType), WinCh: make(chan WinSize, 1),
|
||||||
dBuf: new(bytes.Buffer)}
|
dBuf: new(bytes.Buffer)}
|
||||||
|
|
||||||
// TODO: Factor out ALL params following this to helpers for
|
// TODO: Factor out ALL params following this to helpers for
|
||||||
|
@ -517,7 +513,7 @@ func (hc Conn) Read(b []byte) (n int, err error) {
|
||||||
hc.WinCh <- WinSize{hc.Rows, hc.Cols}
|
hc.WinCh <- WinSize{hc.Rows, hc.Cols}
|
||||||
} else if ctrlStatOp == CSOExitStatus {
|
} else if ctrlStatOp == CSOExitStatus {
|
||||||
if len(payloadBytes) > 0 {
|
if len(payloadBytes) > 0 {
|
||||||
hc.SetStatus(binary.BigEndian.Uint32(payloadBytes))
|
hc.SetStatus(CSOType(binary.BigEndian.Uint32(payloadBytes)))
|
||||||
} else {
|
} else {
|
||||||
log.Println("[truncated payload, cannot determine CSOExitStatus]")
|
log.Println("[truncated payload, cannot determine CSOExitStatus]")
|
||||||
hc.SetStatus(CSETruncCSO)
|
hc.SetStatus(CSETruncCSO)
|
||||||
|
|
|
@ -191,7 +191,7 @@ func doCopyMode(conn *hkexnet.Conn, remoteDest bool, files string, rec *hkexsh.S
|
||||||
|
|
||||||
// If local side status was OK, use remote side's status
|
// If local side status was OK, use remote side's status
|
||||||
if exitStatus == 0 {
|
if exitStatus == 0 {
|
||||||
exitStatus = conn.GetStatus()
|
exitStatus = uint32(conn.GetStatus())
|
||||||
log.Println("Received remote exitStatus:", exitStatus)
|
log.Println("Received remote exitStatus:", exitStatus)
|
||||||
}
|
}
|
||||||
log.Printf("*** client->server cp finished , status %d ***\n", conn.GetStatus())
|
log.Printf("*** client->server cp finished , status %d ***\n", conn.GetStatus())
|
||||||
|
|
|
@ -327,7 +327,7 @@ func runShellAs(who, ttype string, cmd string, interactive bool, conn hkexnet.Co
|
||||||
log.Printf("Exit Status: %d", exitStatus)
|
log.Printf("Exit Status: %d", exitStatus)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn.SetStatus(exitStatus)
|
conn.SetStatus(hkexnet.CSOType(exitStatus))
|
||||||
}
|
}
|
||||||
wg.Wait() // Wait on pty->stdout completion to client
|
wg.Wait() // Wait on pty->stdout completion to client
|
||||||
}
|
}
|
||||||
|
@ -522,7 +522,7 @@ func main() {
|
||||||
log.Printf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)
|
log.Printf("[Error generating autologin token for %s@%s]\n", rec.Who(), hname)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
log.Printf("[Autologin token generation completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
||||||
hc.SetStatus(cmdStatus)
|
hc.SetStatus(hkexnet.CSOType(cmdStatus))
|
||||||
}
|
}
|
||||||
} else if rec.Op()[0] == 'c' {
|
} else if rec.Op()[0] == 'c' {
|
||||||
// Non-interactive command
|
// Non-interactive command
|
||||||
|
@ -539,7 +539,7 @@ func main() {
|
||||||
log.Printf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)
|
log.Printf("[Error spawning cmd for %s@%s]\n", rec.Who(), hname)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
||||||
hc.SetStatus(cmdStatus)
|
hc.SetStatus(hkexnet.CSOType(cmdStatus))
|
||||||
}
|
}
|
||||||
} else if rec.Op()[0] == 's' {
|
} else if rec.Op()[0] == 's' {
|
||||||
// Interactive session
|
// Interactive session
|
||||||
|
@ -559,7 +559,7 @@ func main() {
|
||||||
log.Printf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)
|
log.Printf("[Error spawning shell for %s@%s]\n", rec.Who(), hname)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
log.Printf("[Shell completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
||||||
hc.SetStatus(cmdStatus)
|
hc.SetStatus(hkexnet.CSOType(cmdStatus))
|
||||||
}
|
}
|
||||||
} else if rec.Op()[0] == 'D' {
|
} else if rec.Op()[0] == 'D' {
|
||||||
// File copy (destination) operation - client copy to server
|
// File copy (destination) operation - client copy to server
|
||||||
|
@ -576,7 +576,7 @@ func main() {
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
||||||
}
|
}
|
||||||
hc.SetStatus(cmdStatus)
|
hc.SetStatus(hkexnet.CSOType(cmdStatus))
|
||||||
|
|
||||||
// Send CSOExitStatus *before* client closes channel
|
// Send CSOExitStatus *before* client closes channel
|
||||||
s := make([]byte, 4)
|
s := make([]byte, 4)
|
||||||
|
@ -598,7 +598,7 @@ func main() {
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
log.Printf("[Command completed for %s@%s, status %d]\n", rec.Who(), hname, cmdStatus)
|
||||||
}
|
}
|
||||||
hc.SetStatus(cmdStatus)
|
hc.SetStatus(hkexnet.CSOType(cmdStatus))
|
||||||
//fmt.Println("Waiting for EOF from other end.")
|
//fmt.Println("Waiting for EOF from other end.")
|
||||||
//_, _ = hc.Read(nil /*ackByte*/)
|
//_, _ = hc.Read(nil /*ackByte*/)
|
||||||
//fmt.Println("Got remote end ack.")
|
//fmt.Println("Got remote end ack.")
|
||||||
|
|
Loading…
Reference in a new issue