From 5d1406e884e18cb3bcfca08b0001f5ac7962b29e Mon Sep 17 00:00:00 2001 From: Ben Kibbey Date: Thu, 9 Apr 2009 18:50:25 -0400 Subject: [PATCH] Added support for a passphrase in the url string. --- doc/libpwmd.3 | 6 +++--- src/libpwmd.c | 26 +++++++++++++++++++++----- src/libpwmd.h.in | 4 ++-- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/doc/libpwmd.3 b/doc/libpwmd.3 index aacdef51..48e6c9fe 100644 --- a/doc/libpwmd.3 +++ b/doc/libpwmd.3 @@ -1,4 +1,4 @@ -.TH "libpwmd.h" 3 "8 Apr 2009" "Version 6.0.0" "libpwmd" \" -*- nroff -*- +.TH "libpwmd.h" 3 "9 Apr 2009" "Version 6.0.0" "libpwmd" \" -*- nroff -*- .ad l .nh .SH NAME @@ -625,7 +625,7 @@ This allows for connecting to a pwmd server by parsing the given URL string. Whe or - ssh[46]://[username@]hostname[:port],identity,known_hosts + ssh[46]://[username[:passphrase]@]hostname[:port],identity,known_hosts .fi .PP @@ -656,7 +656,7 @@ This allows for connecting to a pwmd server by parsing the given URL string. Whe or - ssh[46]://[username@]hostname[:port],identity,known_hosts + ssh[46]://[username[:passphrase]@]hostname[:port],identity,known_hosts .fi .PP diff --git a/src/libpwmd.c b/src/libpwmd.c index 357d8cc2..c8f78305 100644 --- a/src/libpwmd.c +++ b/src/libpwmd.c @@ -814,10 +814,10 @@ gpg_error_t pwmd_get_hostkey_async(pwm_t *pwm, const char *host, int port) * Any missing parameters are checked for in init_tcp_conn(). */ static int parse_ssh_url(char *str, char **host, int *port, char **user, - char **identity, char **known_hosts) + char **identity, char **known_hosts, char **passphrase) { char *p; - char *t; + char *t, *t2; int len; *host = *user = *identity = *known_hosts = NULL; @@ -829,6 +829,15 @@ static int parse_ssh_url(char *str, char **host, int *port, char **user, *user = pwmd_malloc(len); snprintf(*user, len, "%s", str); p++; + t2 = strchr(*user, ':'); + + if (t2) { + *t2 = 0; + t2++; + len = strlen(t2)+1; + *passphrase = pwmd_malloc(len); + snprintf(*passphrase, len, "%s", t2); + } } else p = str; @@ -851,8 +860,6 @@ static int parse_ssh_url(char *str, char **host, int *port, char **user, t = strchr(p, ','); if (t) { - char *t2; - if (!*host) { len = strlen(p)-strlen(t)+1; *host = pwmd_malloc(len); @@ -914,6 +921,7 @@ static gpg_error_t _pwmd_connect_url(pwm_t *pwm, const char *url, int async) char *identity = NULL; char *known_hosts = NULL; char *username = NULL; + char *passphrase = NULL; if (!strncmp(p, "ssh6://", 7)) { rc = pwmd_setopt(pwm, PWMD_OPTION_IP_VERSION, PWMD_IPV6); @@ -932,11 +940,12 @@ static gpg_error_t _pwmd_connect_url(pwm_t *pwm, const char *url, int async) return rc; rc = parse_ssh_url(p, &host, &port, &username, &identity, - &known_hosts); + &known_hosts, &passphrase); if (rc) return rc; + fprintf(stderr, "%s\n%i\n%s\n%s\n%s\n%s\n",host,port,username,identity,known_hosts,passphrase); if (async) rc = pwmd_ssh_connect_async(pwm, host, port, identity, username, known_hosts); @@ -956,6 +965,13 @@ static gpg_error_t _pwmd_connect_url(pwm_t *pwm, const char *url, int async) if (known_hosts) pwmd_free(known_hosts); + if (passphrase) { + if (pwm->password) + pwmd_free(pwm->password); + + pwm->password = passphrase; + } + return rc; #endif } diff --git a/src/libpwmd.h.in b/src/libpwmd.h.in index 9ffb3658..7498ac83 100644 --- a/src/libpwmd.h.in +++ b/src/libpwmd.h.in @@ -464,7 +464,7 @@ gpg_error_t pwmd_ssh_connect_async(pwm_t *pwm, const char *host, int port, * * or * - * ssh[46]://[username@]hostname[:port],identity,known_hosts + * ssh[46]://[username[:passphrase]@]hostname[:port],identity,known_hosts * \endcode * * The parameters in square brackets are optional and if not specified the @@ -489,7 +489,7 @@ gpg_error_t pwmd_connect_url(pwm_t *pwm, const char *url) * * or * - * ssh[46]://[username@]hostname[:port],identity,known_hosts + * ssh[46]://[username[:passphrase]@]hostname[:port],identity,known_hosts * \endcode * * The parameters in square brackets are optional and if not specified the -- 2.11.4.GIT