1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

Change rsa and rsa_pub from static arrays in ssh_conn to be dynamically

allocated when needed
This commit is contained in:
James Housley 2007-06-19 11:31:33 +00:00
parent df7eed16dd
commit f0b361ecc1
2 changed files with 24 additions and 14 deletions

View File

@ -369,24 +369,21 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
(strstr(sshc->authlist, "publickey") != NULL)) { (strstr(sshc->authlist, "publickey") != NULL)) {
char *home; 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 /* To ponder about: should really the lib be messing about with the
HOME environment variable etc? */ HOME environment variable etc? */
home = curl_getenv("HOME"); home = curl_getenv("HOME");
if (data->set.ssh_public_key) if (data->set.ssh_public_key)
snprintf(sshc->rsa_pub, sizeof(sshc->rsa_pub), "%s", sshc->rsa_pub = aprintf("%s", data->set.ssh_public_key);
data->set.ssh_public_key);
else if (home) else if (home)
snprintf(sshc->rsa_pub, sizeof(sshc->rsa_pub), "%s/.ssh/id_dsa.pub", sshc->rsa_pub = aprintf("%s/.ssh/id_dsa.pub", home);
home);
if (data->set.ssh_private_key) if (data->set.ssh_private_key)
snprintf(sshc->rsa, sizeof(sshc->rsa), "%s", sshc->rsa = aprintf("%s", data->set.ssh_private_key);
data->set.ssh_private_key);
else if (home) 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; sshc->passphrase = data->set.key_passwd;
if (!sshc->passphrase) if (!sshc->passphrase)
@ -394,12 +391,21 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
curl_free(home); curl_free(home);
if (sshc->rsa_pub) {
infof(conn->data, "Using ssh public key file %s\n", 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); 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); state(conn, SSH_AUTH_PKEY);
} else { } 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); state(conn, SSH_AUTH_PASS_INIT);
} }
} else { } else {
@ -416,7 +422,11 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
if (rc == LIBSSH2_ERROR_EAGAIN) { if (rc == LIBSSH2_ERROR_EAGAIN) {
break; break;
} }
else if (rc == 0) {
curl_free(sshc->rsa_pub);
curl_free(sshc->rsa);
if (rc == 0) {
sshc->authed = TRUE; sshc->authed = TRUE;
infof(conn->data, "Initialized SSH public key authentication\n"); infof(conn->data, "Initialized SSH public key authentication\n");
state(conn, SSH_AUTH_DONE); state(conn, SSH_AUTH_DONE);

View File

@ -451,8 +451,8 @@ struct SSHPROTO {
struct ssh_conn { struct ssh_conn {
const char *authlist; /* List of auth. methods, managed by libssh2 */ const char *authlist; /* List of auth. methods, managed by libssh2 */
const char *passphrase; const char *passphrase;
char rsa_pub[PATH_MAX]; char *rsa_pub;
char rsa[PATH_MAX]; char *rsa;
bool authed; bool authed;
sshstate state; /* always use ssh.c:state() to change state! */ sshstate state; /* always use ssh.c:state() to change state! */
CURLcode actualCode; /* the actual error code */ CURLcode actualCode; /* the actual error code */