@@ -310,8 +310,8 @@ func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error)
310
310
s .sessionID = s .transport .getSessionID ()
311
311
s .algorithms = s .transport .getAlgorithms ()
312
312
313
- var packet [] byte
314
- if packet , err = s . transport . readPacket (); err != nil {
313
+ packet , err := s . transport . readPacket ()
314
+ if err != nil {
315
315
return nil , err
316
316
}
317
317
@@ -546,13 +546,36 @@ userAuthLoop:
546
546
return nil , & ServerAuthError {Errors : authErrs }
547
547
}
548
548
549
- var userAuthReq userAuthRequestMsg
550
- if packet , err := s . transport . readPacket (); err != nil {
549
+ packet , err := s . transport . readPacket ()
550
+ if err != nil {
551
551
if err == io .EOF {
552
552
return nil , & ServerAuthError {Errors : authErrs }
553
553
}
554
554
return nil , err
555
- } else if err = Unmarshal (packet , & userAuthReq ); err != nil {
555
+ }
556
+
557
+ // Check if this is a service request (re-authentication)
558
+ if len (packet ) > 0 && packet [0 ] == msgServiceRequest {
559
+ var serviceRequest serviceRequestMsg
560
+ if err = Unmarshal (packet , & serviceRequest ); err != nil {
561
+ return nil , err
562
+ }
563
+
564
+ if serviceRequest .Service == serviceUserAuth {
565
+ serviceAccept := serviceAcceptMsg {
566
+ Service : serviceUserAuth ,
567
+ }
568
+ if err := s .transport .writePacket (Marshal (& serviceAccept )); err != nil {
569
+ return nil , err
570
+ }
571
+ continue userAuthLoop
572
+ } else {
573
+ return nil , fmt .Errorf ("ssh: unknown service %q" , serviceRequest .Service )
574
+ }
575
+ }
576
+
577
+ var userAuthReq userAuthRequestMsg
578
+ if err = Unmarshal (packet , & userAuthReq ); err != nil {
556
579
return nil , err
557
580
}
558
581
0 commit comments