diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-05-07 15:04:02 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-05-08 12:30:36 +0200 |
commit | 6a6d0ea7cd7b313b8f4d2f85f42a66a2f6e78b57 (patch) | |
tree | e3d229c3c8e8a2c2d97ac9c30167e17813d7b525 | |
parent | efb4cb0bf9ab2abd209072041e04160f8b09ae5d (diff) | |
download | strongswan-6a6d0ea7cd7b313b8f4d2f85f42a66a2f6e78b57.tar.bz2 strongswan-6a6d0ea7cd7b313b8f4d2f85f42a66a2f6e78b57.tar.xz |
charon-cmd: --agent optionally takes the path to an ssh-agent socket
If not given it is read from the SSH_AUTH_SOCK environment variable.
-rw-r--r-- | src/charon-cmd/cmd/cmd_connection.c | 3 | ||||
-rw-r--r-- | src/charon-cmd/cmd/cmd_creds.c | 28 | ||||
-rw-r--r-- | src/charon-cmd/cmd/cmd_options.c | 9 |
3 files changed, 24 insertions, 16 deletions
diff --git a/src/charon-cmd/cmd/cmd_connection.c b/src/charon-cmd/cmd/cmd_connection.c index 8b42befe9..9c25df907 100644 --- a/src/charon-cmd/cmd/cmd_connection.c +++ b/src/charon-cmd/cmd/cmd_connection.c @@ -1,4 +1,7 @@ /* + * Copyright (C) 2013 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * * Copyright (C) 2013 Martin Willi * Copyright (C) 2013 revosec AG * diff --git a/src/charon-cmd/cmd/cmd_creds.c b/src/charon-cmd/cmd/cmd_creds.c index 31e578995..98337db55 100644 --- a/src/charon-cmd/cmd/cmd_creds.c +++ b/src/charon-cmd/cmd/cmd_creds.c @@ -1,4 +1,7 @@ /* + * Copyright (C) 2013 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * * Copyright (C) 2013 Martin Willi * Copyright (C) 2013 revosec AG * @@ -49,9 +52,9 @@ struct private_cmd_creds_t { bool prompted; /** - * Provide keys via ssh-agent + * Path to ssh-agent socket */ - bool agent; + char *agent; /** * Local identity @@ -138,17 +141,9 @@ static void load_agent(private_cmd_creds_t *this) public_key_t *pubkey; identification_t *id; certificate_t *cert; - char *agent; - - agent = getenv("SSH_AUTH_SOCK"); - if (!agent) - { - DBG1(DBG_CFG, "ssh-agent socket not found"); - exit(1); - } - privkey = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, - KEY_ANY, BUILD_AGENT_SOCKET, agent, BUILD_END); + privkey = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ANY, + BUILD_AGENT_SOCKET, this->agent, BUILD_END); if (!privkey) { DBG1(DBG_CFG, "failed to load private key from ssh-agent"); @@ -192,7 +187,12 @@ METHOD(cmd_creds_t, handle, bool, this->identity = arg; break; case CMD_OPT_AGENT: - this->agent = TRUE; + this->agent = arg ?: getenv("SSH_AUTH_SOCK"); + if (!this->agent) + { + DBG1(DBG_CFG, "no ssh-agent socket defined"); + exit(1); + } break; default: return FALSE; @@ -201,7 +201,7 @@ METHOD(cmd_creds_t, handle, bool, { load_agent(this); /* only do this once */ - this->agent = FALSE; + this->agent = NULL; } return TRUE; } diff --git a/src/charon-cmd/cmd/cmd_options.c b/src/charon-cmd/cmd/cmd_options.c index f25719a51..06d0996cc 100644 --- a/src/charon-cmd/cmd/cmd_options.c +++ b/src/charon-cmd/cmd/cmd_options.c @@ -1,4 +1,7 @@ /* + * Copyright (C) 2013 Tobias Brunner + * Hochschule fuer Technik Rapperswil + * * Copyright (C) 2013 Martin Willi * Copyright (C) 2013 revosec AG * @@ -35,8 +38,10 @@ cmd_option_t cmd_options[CMD_OPT_COUNT] = { "trusted certificate, for authentication or trust chain validation", {}}, { CMD_OPT_RSA, "rsa", required_argument, "path", "RSA private key to use for authentication", {}}, - { CMD_OPT_AGENT, "agent", no_argument, "", - "use SSH agent for authentication", {}}, + { CMD_OPT_AGENT, "agent", optional_argument, "socket", + "use SSH agent for authentication. If socket is not specified", { + "it is read from the SSH_AUTH_SOCK environment variable", + }}, { CMD_OPT_LOCAL_TS, "local-ts", required_argument, "subnet", "additional traffic selector to propose for our side", {}}, { CMD_OPT_REMOTE_TS, "remote-ts", required_argument, "subnet", |