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:
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)) {
|
(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);
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user