(conn net.Conn)
| 506 | } |
| 507 | |
| 508 | func (s *serverImpl) handleConnection(conn net.Conn) { |
| 509 | addr := conn.RemoteAddr().(*net.TCPAddr) |
| 510 | connectionID := GenerateConnectionID() |
| 511 | logger := s.logger. |
| 512 | WithLabel("remoteAddr", addr.IP.String()). |
| 513 | WithLabel("connectionId", connectionID) |
| 514 | connectionMeta := metadata.ConnectionMetadata{ |
| 515 | RemoteAddress: metadata.RemoteAddress(*addr), |
| 516 | ConnectionID: connectionID, |
| 517 | Metadata: map[string]metadata.Value{}, |
| 518 | Environment: map[string]metadata.Value{}, |
| 519 | Files: map[string]metadata.BinaryValue{}, |
| 520 | } |
| 521 | |
| 522 | handlerNetworkConnection, connectionMeta, err := s.handler.OnNetworkConnection(connectionMeta) |
| 523 | if err != nil { |
| 524 | logger.Info(err) |
| 525 | _ = conn.Close() |
| 526 | s.wg.Done() |
| 527 | return |
| 528 | } |
| 529 | shutdownHandlerID := fmt.Sprintf("network-%s", connectionID) |
| 530 | s.shutdownHandlers.Register(shutdownHandlerID, handlerNetworkConnection) |
| 531 | |
| 532 | logger.Debug( |
| 533 | messageCodes.NewMessage( |
| 534 | messageCodes.MSSHConnected, "Client connected", |
| 535 | ), |
| 536 | ) |
| 537 | |
| 538 | // HACK: check HACKS.md "OnHandshakeSuccess conformanceTestHandler" |
| 539 | wrapper := networkConnectionWrapper{ |
| 540 | NetworkConnectionHandler: handlerNetworkConnection, |
| 541 | } |
| 542 | |
| 543 | sshConn, channels, globalRequests, err := ssh.NewServerConn( |
| 544 | conn, |
| 545 | s.createConfiguration(connectionMeta, &wrapper, logger), |
| 546 | ) |
| 547 | abortCleanup := func() { |
| 548 | logger.Info(messageCodes.Wrap(err, messageCodes.ESSHHandshakeFailed, "SSH handshake failed")) |
| 549 | handlerNetworkConnection.OnHandshakeFailed(connectionMeta, err) |
| 550 | s.shutdownHandlers.Unregister(shutdownHandlerID) |
| 551 | logger.Debug(messageCodes.NewMessage(messageCodes.MSSHDisconnected, "Client disconnected")) |
| 552 | handlerNetworkConnection.OnDisconnect() |
| 553 | _ = conn.Close() |
| 554 | s.wg.Done() |
| 555 | } |
| 556 | if err != nil { |
| 557 | abortCleanup() |
| 558 | return |
| 559 | } |
| 560 | var authenticatedMetadata metadata.ConnectionAuthenticatedMetadata |
| 561 | marshaledMetadata, ok := sshConn.Permissions.Extensions["containerssh-metadata"] |
| 562 | if !ok { |
| 563 | abortCleanup() |
| 564 | return |
| 565 | } |
no test coverage detected