diff --git a/integration/integration_test.go b/integration/integration_test.go index 06ad761c224ba..003a303c791de 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -183,7 +183,6 @@ func TestIntegrations(t *testing.T) { t.Run("PAM", suite.bind(testPAM)) t.Run("PortForwarding", suite.bind(testPortForwarding)) t.Run("ProxyHostKeyCheck", suite.bind(testProxyHostKeyCheck)) - t.Run("RecordingModesSessionTrackers", suite.bind(testRecordingModesSessionTrackers)) t.Run("ReverseTunnelCollapse", suite.bind(testReverseTunnelCollapse)) t.Run("RotateRollback", suite.bind(testRotateRollback)) t.Run("RotateSuccess", suite.bind(testRotateSuccess)) @@ -1039,83 +1038,6 @@ func testSessionRecordingModes(t *testing.T, suite *integrationTestSuite) { } } -func testRecordingModesSessionTrackers(t *testing.T, suite *integrationTestSuite) { - ctx := t.Context() - - cfg := suite.defaultServiceConfig() - cfg.Auth.Enabled = true - cfg.Proxy.DisableWebService = true - cfg.Proxy.DisableWebInterface = true - cfg.Proxy.Enabled = true - cfg.SSH.Enabled = true - - teleport := suite.NewTeleportWithConfig(t, nil, nil, cfg) - defer teleport.StopAll() - - // startSession starts an interactive session, users must terminate the - // session by typing "exit" in the terminal. - startSession := func(username string) (*Terminal, chan error) { - term := NewTerminal(250) - errCh := make(chan error) - - go func() { - cl, err := teleport.NewClient(helpers.ClientConfig{ - Login: username, - Cluster: helpers.Site, - Host: Host, - }) - if err != nil { - errCh <- trace.Wrap(err) - return - } - cl.Stdout = term - cl.Stdin = term - - ctx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - errCh <- cl.SSH(ctx, nil) - }() - - return term, errCh - } - - err := teleport.WaitForNodeCount(ctx, helpers.Site, 1) - require.NoError(t, err) - - auth := teleport.Process.GetAuthServer() - for _, mode := range []string{types.RecordAtNode, types.RecordAtProxy} { - t.Run(mode, func(t *testing.T) { - rc := types.DefaultSessionRecordingConfig() - rc.SetMode(mode) - - _, err := auth.UpsertSessionRecordingConfig(ctx, rc) - require.NoError(t, err) - - // Start session. - term, errCh := startSession(suite.Me.Username) - - // Validate that the session tracker exists and contains - // the correct target address. - var sessionID string - require.EventuallyWithT(t, func(t *assert.CollectT) { - trackers, err := auth.GetActiveSessionTrackers(ctx) - require.NoError(t, err) - require.Len(t, trackers, 1) - require.Equal(t, helpers.HostID, trackers[0].GetAddress()) - sessionID = trackers[0].GetSessionID() - }, 30*time.Second, 100*time.Millisecond) - - // Wait for the session to terminate without error. - term.Type("exit\n\r") - require.NoError(t, waitForError(errCh, 30*time.Second)) - - // Manually clean up the tracker for the session to prevent - // it leaking into the next test case. - require.NoError(t, auth.RemoveSessionTracker(ctx, sessionID)) - }) - } -} - func testLeafProxySessionRecording(t *testing.T, suite *integrationTestSuite) { tests := []struct { rootRecordingMode string diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index 3db6ed18cdad9..f13a700082cef 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -505,10 +505,6 @@ func (s *Server) GetSELinuxEnabled() bool { // GetInfo returns a services.Server that represents the target server. func (s *Server) GetInfo() types.Server { - return s.getBasicInfo() -} - -func (s *Server) getBasicInfo() *types.ServerV2 { // Only set the address for non-tunnel nodes. var addr string if !s.targetServer.GetUseTunnel() { diff --git a/lib/srv/forward/sshserver_test.go b/lib/srv/forward/sshserver_test.go index d5630ac8c6b20..5b6bd78cd87e8 100644 --- a/lib/srv/forward/sshserver_test.go +++ b/lib/srv/forward/sshserver_test.go @@ -27,11 +27,14 @@ import ( "sync/atomic" "testing" + "github.com/google/uuid" "github.com/stretchr/testify/require" "golang.org/x/crypto/ssh" "github.com/gravitational/teleport" + apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/api/utils/keys" apisshutils "github.com/gravitational/teleport/api/utils/sshutils" "github.com/gravitational/teleport/lib/fixtures" @@ -273,3 +276,103 @@ func TestCheckTCPIPForward(t *testing.T) { // TODO(atburke): Add test for handleForwardedTCPIPRequest once we have // infrastructure for higher-level tests here. + +func TestEventMetadata(t *testing.T) { + nodeID := uuid.NewString() + proxyID := uuid.NewString() + + for _, tt := range []struct { + name string + subkind string + spec types.ServerSpecV2 + labels map[string]string + expectMetadata events.ServerMetadata + }{ + { + name: "tunnel node", + labels: map[string]string{ + "stcLabel": "stcResult", + }, + spec: types.ServerSpecV2{ + Addr: "127.0.0.1:3022", + CmdLabels: map[string]types.CommandLabelV2{ + "cmdLabel": {Result: "cmdResult"}, + }, + Hostname: "server01", + UseTunnel: true, + }, + expectMetadata: events.ServerMetadata{ + ServerVersion: teleport.Version, + ServerID: nodeID, + ServerNamespace: apidefaults.Namespace, + ServerAddr: "", + ServerHostname: "server01", + ServerLabels: map[string]string{ + "stcLabel": "stcResult", + "cmdLabel": "cmdResult", + }, + ServerSubKind: types.SubKindTeleportNode, + ForwardedBy: proxyID, + }, + }, { + name: "tunnel node", + labels: map[string]string{ + "stcLabel": "stcResult", + }, + spec: types.ServerSpecV2{ + Addr: "127.0.0.1:3022", + CmdLabels: map[string]types.CommandLabelV2{ + "cmdLabel": {Result: "cmdResult"}, + }, + Hostname: "server01", + }, + expectMetadata: events.ServerMetadata{ + ServerVersion: teleport.Version, + ServerID: nodeID, + ServerNamespace: apidefaults.Namespace, + ServerAddr: "127.0.0.1:3022", + ServerHostname: "server01", + ServerLabels: map[string]string{ + "stcLabel": "stcResult", + "cmdLabel": "cmdResult", + }, + ServerSubKind: types.SubKindTeleportNode, + ForwardedBy: proxyID, + }, + }, { + name: "agentless node", + subkind: types.SubKindOpenSSHNode, + labels: map[string]string{ + "stcLabel": "stcResult", + }, + spec: types.ServerSpecV2{ + Addr: "openssh.example.com:22", + Hostname: "agentless-host", + }, + expectMetadata: events.ServerMetadata{ + ServerVersion: teleport.Version, + ServerID: nodeID, + ServerNamespace: apidefaults.Namespace, + ServerAddr: "openssh.example.com:22", + ServerHostname: "agentless-host", + ServerLabels: map[string]string{ + "stcLabel": "stcResult", + }, + ServerSubKind: types.SubKindOpenSSHNode, + ForwardedBy: proxyID, + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + targetServer, err := types.NewNode(nodeID, tt.subkind, tt.spec, tt.labels) + require.NoError(t, err) + + forwardSrv := &Server{ + proxyUUID: proxyID, + targetServer: targetServer, + } + + require.EqualValues(t, tt.expectMetadata, forwardSrv.EventMetadata()) + }) + } +} diff --git a/lib/srv/regular/sshserver_test.go b/lib/srv/regular/sshserver_test.go index 67de639000cb8..fe011c7c607ae 100644 --- a/lib/srv/regular/sshserver_test.go +++ b/lib/srv/regular/sshserver_test.go @@ -3068,7 +3068,7 @@ func TestHandlePuTTYWinadj(t *testing.T) { require.Equal(t, "hello once more\n", string(out)) } -func TestTargetMetadata(t *testing.T) { +func TestEventMetadata(t *testing.T) { ctx := context.Background() testServer, err := authtest.NewTestServer(authtest.ServerConfig{ Auth: authtest.AuthServerConfig{