mirror of
https://github.com/moparisthebest/curl
synced 2024-11-11 12:05:06 -05:00
Change rsa and rsa_pub from static arrays in ssh_conn to be dynamically
allocated when needed
This commit is contained in:
parent
df7eed16dd
commit
f0b361ecc1
30
lib/ssh.c
30
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);
|
||||
|
||||
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);
|
||||
|
@ -451,8 +451,8 @@ struct SSHPROTO {
|
||||
struct ssh_conn {
|
||||
const char *authlist; /* List of auth. methods, managed by libssh2 */
|
||||
const char *passphrase;
|
||||
char rsa_pub[PATH_MAX];
|
||||
char rsa[PATH_MAX];
|
||||
char *rsa_pub;
|
||||
char *rsa;
|
||||
bool authed;
|
||||
sshstate state; /* always use ssh.c:state() to change state! */
|
||||
CURLcode actualCode; /* the actual error code */
|
||||
|
Loading…
Reference in New Issue
Block a user