Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove SHA-1 signed keys #16912

Closed
wants to merge 20 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,9 @@ replace (
github.com/pkg/sftp => github.com/gravitational/sftp v1.13.6-0.20220927202521-0e74d42f8055
github.com/sirupsen/logrus => github.com/gravitational/logrus v1.4.4-0.20210817004754-047e20245621
github.com/vulcand/predicate => github.com/gravitational/predicate v1.2.1
// Our fork includes support for RFC 8308 https://go-review.googlesource.com/c/crypto/+/396714/
// It should be dropped as soon as this PR is merged into upstream.
golang.org/x/crypto => github.com/gravitational/crypto v0.0.0-20221005181411-e69ec148c162
)

// Exclude etcd/v3 from the modules graph.
Expand Down
35 changes: 2 additions & 33 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gravitational/configure v0.0.0-20180808141939-c3428bd84c23 h1:havbccuFO5fRj0O67oHXI7doShLig3rSIXfMrd/UnkA=
github.com/gravitational/configure v0.0.0-20180808141939-c3428bd84c23/go.mod h1:XL9nebvlfNVvRzRPWdDcWootcyA0l7THiH/A+W1233g=
github.com/gravitational/crypto v0.0.0-20221005181411-e69ec148c162 h1:R+PxEtx6oEmd9JthL3ieb+dpM3Q9eKsE1QTq6pvVODo=
github.com/gravitational/crypto v0.0.0-20221005181411-e69ec148c162/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
github.com/gravitational/form v0.0.0-20151109031454-c4048f792f70 h1:To76nCJtM3DI0mdq3nGLzXqTV1wNOJByxv01+u9/BxM=
github.com/gravitational/form v0.0.0-20151109031454-c4048f792f70/go.mod h1:88hFR45MpUd23d2vNWE/dYtesU50jKsbz0I9kH7UaBY=
github.com/gravitational/go-libfido2 v1.5.3-0.20220630200200-45a8c53e4500 h1:54z7/KbhT1dTmM1HnFQ5ggu5GZ4nUFARYaO6MNsxB1M=
Expand Down Expand Up @@ -1477,36 +1479,6 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI=
golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220126234351-aa10faf2a1f8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be h1:fmw3UbQh+nxngCAHrDCCztao/kbYFnWjoqop8dHx05A=
golang.org/x/crypto v0.0.0-20220926161630-eccd6366d1be/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
Expand Down Expand Up @@ -1571,7 +1543,6 @@ golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190310074541-c10a0554eabf/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
Expand Down Expand Up @@ -1689,7 +1660,6 @@ golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190310054646-10058d7d4faa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down Expand Up @@ -1784,7 +1754,6 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI=
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
Expand Down
6 changes: 5 additions & 1 deletion integration/helpers/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,11 @@ func CreateAgent(me *user.User, key *client.Key) (*teleagent.AgentServer, string
}

// create a (unstarted) agent and add the agent key(s) to it
keyring := agent.NewKeyring()
keyring, ok := agent.NewKeyring().(agent.ExtendedAgent)
if !ok {
return nil, "", "", trace.Errorf("unexpected keyring type: %T, expected agent.ExtendedKeyring", keyring)
}

if err := keyring.Add(agentKey); err != nil {
return nil, "", "", trace.Wrap(err)
}
Expand Down
4 changes: 2 additions & 2 deletions lib/client/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ type Config struct {
UseKeyPrincipals bool

// Agent is used when SkipLocalAuth is true
Agent agent.Agent
Agent agent.ExtendedAgent

// PreloadKey is a key with which to initialize a local in-memory keystore.
PreloadKey *Key
Expand Down Expand Up @@ -4209,7 +4209,7 @@ func loopbackPool(proxyAddr string) *x509.CertPool {
}

// connectToSSHAgent connects to the system SSH agent and returns an agent.Agent.
func connectToSSHAgent() agent.Agent {
func connectToSSHAgent() agent.ExtendedAgent {
socketPath := os.Getenv(teleport.SSHAuthSock)
conn, err := agentconn.Dial(socketPath)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion lib/client/api_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ func TestApplyProxySettings(t *testing.T) {
type mockAgent struct {
// Agent is embedded to avoid redeclaring all interface methods.
// Only the Signers method is implemented by testAgent.
agent.Agent
agent.ExtendedAgent
ValidPrincipals []string
}

Expand Down
4 changes: 2 additions & 2 deletions lib/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -1570,7 +1570,7 @@ func (proxy *ProxyClient) ConnectToNode(ctx context.Context, nodeAddress NodeDet
if proxy.teleportClient.localAgent == nil {
return nil, trace.BadParameter("cluster is in proxy recording mode and requires agent forwarding for connections, but no agent was initialized")
}
err = agent.ForwardToAgent(proxy.Client.Client, proxy.teleportClient.localAgent.Agent)
err = agent.ForwardToAgent(proxy.Client.Client, proxy.teleportClient.localAgent.ExtendedAgent)
if err != nil && !strings.Contains(err.Error(), "agent: already have handler for") {
return nil, trace.Wrap(err)
}
Expand Down Expand Up @@ -1676,7 +1676,7 @@ func (proxy *ProxyClient) PortForwardToNode(ctx context.Context, nodeAddress Nod
if proxy.teleportClient.localAgent == nil {
return nil, trace.BadParameter("cluster is in proxy recording mode and requires agent forwarding for connections, but no agent was initialized")
}
err = agent.ForwardToAgent(proxy.Client.Client, proxy.teleportClient.localAgent.Agent)
err = agent.ForwardToAgent(proxy.Client.Client, proxy.teleportClient.localAgent.ExtendedAgent)
if err != nil && !strings.Contains(err.Error(), "agent: already have handler for") {
return nil, trace.Wrap(err)
}
Expand Down
36 changes: 20 additions & 16 deletions lib/client/keyagent.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ type LocalKeyAgent struct {
// log holds the structured logger.
log *logrus.Entry

// Agent is the teleport agent
agent.Agent
// ExtendedAgent is the teleport agent
agent.ExtendedAgent

// keyStore is the storage backend for certificates and keys
keyStore LocalKeyStore

// sshAgent is the system ssh agent
sshAgent agent.Agent
sshAgent agent.ExtendedAgent

// noHosts is a in-memory map used in tests to track which hosts a user has
// manually (via keyboard input) refused connecting to.
Expand Down Expand Up @@ -139,7 +139,7 @@ func shouldAddKeysToAgent(addKeysToAgent string) bool {
// LocalAgentConfig contains parameters for creating the local keys agent.
type LocalAgentConfig struct {
Keystore LocalKeyStore
Agent agent.Agent
Agent agent.ExtendedAgent
ProxyHost string
Username string
KeysOption string
Expand All @@ -152,20 +152,24 @@ type LocalAgentConfig struct {
// and loads them into the local and system agent
func NewLocalAgent(conf LocalAgentConfig) (a *LocalKeyAgent, err error) {
if conf.Agent == nil {
conf.Agent = agent.NewKeyring()
keyring, ok := agent.NewKeyring().(agent.ExtendedAgent)
if !ok {
return nil, trace.Errorf("unexpected keyring type: %T, expected agent.ExtendedKeyring", keyring)
}
conf.Agent = keyring
}
a = &LocalKeyAgent{
log: logrus.WithFields(logrus.Fields{
trace.Component: teleport.ComponentKeyAgent,
}),
Agent: conf.Agent,
keyStore: conf.Keystore,
noHosts: make(map[string]bool),
username: conf.Username,
proxyHost: conf.ProxyHost,
insecure: conf.Insecure,
siteName: conf.Site,
loadAllCAs: conf.LoadAllCAs,
ExtendedAgent: conf.Agent,
keyStore: conf.Keystore,
noHosts: make(map[string]bool),
username: conf.Username,
proxyHost: conf.ProxyHost,
insecure: conf.Insecure,
siteName: conf.Site,
loadAllCAs: conf.LoadAllCAs,
}

if shouldAddKeysToAgent(conf.KeysOption) {
Expand Down Expand Up @@ -242,7 +246,7 @@ func (a *LocalKeyAgent) LoadKey(key Key) error {
}

a.log.Infof("Loading SSH key for user %q and cluster %q.", a.username, key.ClusterName)
agents := []agent.Agent{a.Agent}
agents := []agent.ExtendedAgent{a.ExtendedAgent}
if a.sshAgent != nil {
agents = append(agents, a.sshAgent)
}
Expand Down Expand Up @@ -271,7 +275,7 @@ func (a *LocalKeyAgent) LoadKey(key Key) error {
// UnloadKey will unload key for user from the teleport ssh agent as well as
// the system agent.
func (a *LocalKeyAgent) UnloadKey() error {
agents := []agent.Agent{a.Agent}
agents := []agent.ExtendedAgent{a.ExtendedAgent}
if a.sshAgent != nil {
agents = append(agents, a.sshAgent)
}
Expand Down Expand Up @@ -301,7 +305,7 @@ func (a *LocalKeyAgent) UnloadKey() error {
// UnloadKeys will unload all Teleport keys from the teleport agent as well as
// the system agent.
func (a *LocalKeyAgent) UnloadKeys() error {
agents := []agent.Agent{a.Agent}
agents := []agent.ExtendedAgent{a.ExtendedAgent}
if a.sshAgent != nil {
agents = append(agents, a.sshAgent)
}
Expand Down
8 changes: 4 additions & 4 deletions lib/client/keyagent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ func TestAddKey(t *testing.T) {
}

// get all agent keys from teleport agent and system agent
teleportAgentKeys, err := lka.Agent.List()
teleportAgentKeys, err := lka.ExtendedAgent.List()
require.NoError(t, err)
systemAgentKeys, err := lka.sshAgent.List()
require.NoError(t, err)
Expand Down Expand Up @@ -182,7 +182,7 @@ func TestLoadKey(t *testing.T) {
require.NoError(t, err)

// get all the keys in the teleport and system agent
teleportAgentKeys, err := lka.Agent.List()
teleportAgentKeys, err := lka.ExtendedAgent.List()
require.NoError(t, err)
teleportAgentInitialKeyCount := len(teleportAgentKeys)
systemAgentKeys, err := lka.sshAgent.List()
Expand All @@ -197,7 +197,7 @@ func TestLoadKey(t *testing.T) {
require.NoError(t, err)

// get all the keys in the teleport and system agent
teleportAgentKeys, err = lka.Agent.List()
teleportAgentKeys, err = lka.ExtendedAgent.List()
require.NoError(t, err)
systemAgentKeys, err = lka.sshAgent.List()
require.NoError(t, err)
Expand All @@ -207,7 +207,7 @@ func TestLoadKey(t *testing.T) {
require.Len(t, systemAgentKeys, systemAgentInitialKeyCount+2)

// now sign data using the teleport agent and system agent
teleportAgentSignature, err := lka.Agent.Sign(teleportAgentKeys[0], userdata)
teleportAgentSignature, err := lka.ExtendedAgent.Sign(teleportAgentKeys[0], userdata)
require.NoError(t, err)
systemAgentSignature, err := lka.sshAgent.Sign(systemAgentKeys[0], userdata)
require.NoError(t, err)
Expand Down
4 changes: 2 additions & 2 deletions lib/client/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -267,14 +267,14 @@ func (ns *NodeSession) createServerSession(ctx context.Context) (*tracessh.Sessi

// selectKeyAgent picks the appropriate key agent for forwarding to the
// server, if any.
func selectKeyAgent(tc *TeleportClient) agent.Agent {
func selectKeyAgent(tc *TeleportClient) agent.ExtendedAgent {
switch tc.ForwardAgent {
case ForwardAgentYes:
log.Debugf("Selecting system key agent.")
return tc.localAgent.sshAgent
case ForwardAgentLocal:
log.Debugf("Selecting local Teleport key agent.")
return tc.localAgent.Agent
return tc.localAgent.ExtendedAgent
default:
log.Debugf("No Key Agent selected.")
return nil
Expand Down
Loading