summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Engel <cjengel@us.ibm.com>2017-11-20 13:17:50 -0600
committerGitHub <noreply@github.com>2017-11-20 13:17:50 -0600
commit19fe5f4d6886d9ccc58c8c123cdcfd9a2f9beb68 (patch)
treea1fde451406babc707f5febe6536724bd2673321
parent0f9cc90f16ec44a53dc9b390867357c1b73d49c6 (diff)
parent28a0e0cd238a2ef9383f6cbb37aced034aa92881 (diff)
downloadsb-signing-framework-19fe5f4d6886d9ccc58c8c123cdcfd9a2f9beb68.tar.gz
sb-signing-framework-19fe5f4d6886d9ccc58c8c123cdcfd9a2f9beb68.zip
Merge pull request #3 from hellerda/sshkey-password-retries-for-sf_clientHEADmaster
Support PW entry retries for encrypted sshkey for sf_client
-rw-r--r--src/client/pscp_sftp.c50
1 files changed, 44 insertions, 6 deletions
diff --git a/src/client/pscp_sftp.c b/src/client/pscp_sftp.c
index 7a41945..de7a434 100644
--- a/src/client/pscp_sftp.c
+++ b/src/client/pscp_sftp.c
@@ -29,6 +29,7 @@
#define PSCP_PKEY_PASSPHRASE_MAX 256
#define PSCP_SFTP_MAX_POLLING_ATTEMPTS 10
#define PSCP_SFTP_POLLING_DURATION 5
+#define PSCP_SSHKEY_GETPW_MAX_RETRIES 2
struct pscp_sftp_session
{
@@ -106,14 +107,51 @@ struct pscp_sftp_session* startSftpSession(const char * sftp_url, const char *
}
if(status == CURLE_OK)
{
- char passphrase[PSCP_PKEY_PASSPHRASE_MAX];
- bzero(passphrase, PSCP_PKEY_PASSPHRASE_MAX);
- status = GetPassword(passphrase, PSCP_PKEY_PASSPHRASE_MAX, verbose);
- if(status == 0)
- {
+ status = curl_easy_setopt(sftp->curl, CURLOPT_URL, sftp_url);
+ }
+ if(status == CURLE_OK)
+ {
+ status = curl_easy_setopt(sftp->curl, CURLOPT_CONNECT_ONLY, 1L);
+ }
+ if(status == CURLE_OK)
+ {
+ int retry = 0;
+ while(retry <= PSCP_SSHKEY_GETPW_MAX_RETRIES) {
+
+ char passphrase[PSCP_PKEY_PASSPHRASE_MAX];
+ bzero(passphrase, PSCP_PKEY_PASSPHRASE_MAX);
+
+ status = GetPassword(passphrase, PSCP_PKEY_PASSPHRASE_MAX, verbose);
+ if(status != 0)
+ {
+ fprintf(stderr, "ERROR: unable to get password, error: %d\n", status);
+ bzero(passphrase, PSCP_PKEY_PASSPHRASE_MAX);
+ break;
+ }
status = curl_easy_setopt(sftp->curl, CURLOPT_KEYPASSWD, passphrase);
+ bzero(passphrase, PSCP_PKEY_PASSPHRASE_MAX);
+ if(status != CURLE_OK)
+ {
+ fprintf(stderr, "ERROR: unable to set CURLOPT_KEYPASSWD, curl error: %d\n", status);
+ break;
+ }
+ status = curl_easy_perform(sftp->curl);
+ if(status == 0)
+ {
+ status = curl_easy_setopt(sftp->curl, CURLOPT_CONNECT_ONLY, 0L);
+ break;
+ }
+ if(status != CURLE_LOGIN_DENIED)
+ {
+ fprintf(stderr, "ERROR: unable to establish session with %s\n", sftp->url);
+ break;
+ }
+ retry++;
+ }
+ if(status == CURLE_LOGIN_DENIED)
+ {
+ fprintf(stderr, "ERROR: unable to connect to %s with provided credentials\n", sftp->url);
}
- bzero(passphrase, PSCP_PKEY_PASSPHRASE_MAX);
}
if(status != 0 && sftp)
OpenPOWER on IntegriCloud