From b13bcd6ee3b373f2de2c6921ea7e474465516134 Mon Sep 17 00:00:00 2001 From: tgic Date: Thu, 10 Mar 2016 02:39:08 +0800 Subject: [PATCH] fix except msg 61 and stuck on banner --- ssh/sshpiper.go | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/ssh/sshpiper.go b/ssh/sshpiper.go index 25ba0036..7bf3f5a7 100644 --- a/ssh/sshpiper.go +++ b/ssh/sshpiper.go @@ -409,7 +409,7 @@ func (pipe *pipedConn) pipeAuth(initUserAuthMsg *userAuthRequestMsg) error { return err } - success := packet[0] == msgUserAuthSuccess + success := packet[0] == msgUserAuthSuccess || packet[0] == msgUserAuthBanner if err = pipe.downstream.transport.writePacket(packet); err != nil { return err @@ -420,11 +420,52 @@ func (pipe *pipedConn) pipeAuth(initUserAuthMsg *userAuthRequestMsg) error { } } - userAuthMsg, err = pipe.downstream.nextAuthMsg() - if err != nil { + var packet []byte + + for { + + if packet, err = pipe.downstream.transport.readPacket(); err != nil { + return err + } + + // we can only handle auth req at the moment + if packet[0] == msgUserAuthRequest { + break + } + + // pipe to auth succ if not a authreq + // typically, authinfo see RFC 4256 + // TODO support hook this msg + err = pipe.upstream.transport.writePacket(packet) + if err != nil { + return err + } + + // TODO clean up dup code + packet, err := pipe.upstream.transport.readPacket() + if err != nil { + return err + } + + success := packet[0] == msgUserAuthSuccess || packet[0] == msgUserAuthBanner + + if err = pipe.downstream.transport.writePacket(packet); err != nil { + return err + } + + if success { + return nil + } + } + + var userAuthReq userAuthRequestMsg + + if err = Unmarshal(packet, &userAuthReq); err != nil { return err } + userAuthMsg = &userAuthReq + } }