From f0b361ecc16b124813cb494e9d193abd442c1be0 Mon Sep 17 00:00:00 2001 From: James Housley Date: Tue, 19 Jun 2007 11:31:33 +0000 Subject: Change rsa and rsa_pub from static arrays in ssh_conn to be dynamically allocated when needed --- lib/ssh.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) (limited to 'lib/ssh.c') diff --git a/lib/ssh.c b/lib/ssh.c index 05f101411..108c0156a 100644 --- a/lib/ssh.c +++ b/lib/ssh.c @@ -369,24 +369,21 @@ static CURLcode ssh_statemach_act(struct connectdata *conn) (strstr(sshc->authlist, "publickey") != NULL)) { char *home; - sshc->rsa_pub[0] = sshc->rsa[0] = '\0'; + sshc->rsa_pub = sshc->rsa = NULL; /* To ponder about: should really the lib be messing about with the HOME environment variable etc? */ home = curl_getenv("HOME"); if (data->set.ssh_public_key) - snprintf(sshc->rsa_pub, sizeof(sshc->rsa_pub), "%s", - data->set.ssh_public_key); + sshc->rsa_pub = aprintf("%s", data->set.ssh_public_key); else if (home) - snprintf(sshc->rsa_pub, sizeof(sshc->rsa_pub), "%s/.ssh/id_dsa.pub", - home); + sshc->rsa_pub = aprintf("%s/.ssh/id_dsa.pub", home); if (data->set.ssh_private_key) - snprintf(sshc->rsa, sizeof(sshc->rsa), "%s", - data->set.ssh_private_key); + sshc->rsa = aprintf("%s", data->set.ssh_private_key); else if (home) - snprintf(sshc->rsa, sizeof(sshc->rsa), "%s/.ssh/id_dsa", home); + sshc->rsa = aprintf("%s/.ssh/id_dsa", home); sshc->passphrase = data->set.key_passwd; if (!sshc->passphrase) @@ -394,12 +391,21 @@ static CURLcode ssh_statemach_act(struct connectdata *conn) curl_free(home); - infof(conn->data, "Using ssh public key file %s\n", sshc->rsa_pub); - infof(conn->data, "Using ssh private key file %s\n", sshc->rsa); + if (sshc->rsa_pub) { + infof(conn->data, "Using ssh public key file %s\n", sshc->rsa_pub); + } + if (sshc->rsa) { + infof(conn->data, "Using ssh private key file %s\n", sshc->rsa); + } - if (sshc->rsa_pub[0]) { + if (sshc->rsa_pub && sshc->rsa_pub) { state(conn, SSH_AUTH_PKEY); } else { + /* One or both aprint()'s might have failed, + move on to password authentication */ + curl_free(sshc->rsa_pub); + curl_free(sshc->rsa); + state(conn, SSH_AUTH_PASS_INIT); } } else { @@ -416,7 +422,11 @@ static CURLcode ssh_statemach_act(struct connectdata *conn) if (rc == LIBSSH2_ERROR_EAGAIN) { break; } - else if (rc == 0) { + + curl_free(sshc->rsa_pub); + curl_free(sshc->rsa); + + if (rc == 0) { sshc->authed = TRUE; infof(conn->data, "Initialized SSH public key authentication\n"); state(conn, SSH_AUTH_DONE); -- cgit v1.2.3