mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-11-30 13:01:23 +03:00
always set error when returning error in auth.c
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
622d5a43b3
commit
637fc7ea59
75
src/auth.c
75
src/auth.c
@@ -384,6 +384,7 @@ int ssh_userauth_none(ssh_session session, const char *username) {
|
||||
}
|
||||
|
||||
if (user == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
leave_function();
|
||||
return rc;
|
||||
}
|
||||
@@ -415,10 +416,12 @@ int ssh_userauth_none(ssh_session session, const char *username) {
|
||||
|
||||
method = ssh_string_from_char("none");
|
||||
if (method == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
service = ssh_string_from_char("ssh-connection");
|
||||
if (service == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -521,6 +524,7 @@ int ssh_userauth_offer_pubkey(ssh_session session, const char *username,
|
||||
}
|
||||
|
||||
if (user == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
leave_function();
|
||||
return rc;
|
||||
}
|
||||
@@ -552,14 +556,17 @@ int ssh_userauth_offer_pubkey(ssh_session session, const char *username,
|
||||
|
||||
service = ssh_string_from_char("ssh-connection");
|
||||
if (service == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
method = ssh_string_from_char("publickey");
|
||||
if (method == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
algo = ssh_string_from_char(ssh_type_to_char(type));
|
||||
if (algo == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -570,6 +577,7 @@ int ssh_userauth_offer_pubkey(ssh_session session, const char *username,
|
||||
buffer_add_u8(session->out_buffer, 0) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, algo) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, publickey) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -665,6 +673,7 @@ int ssh_userauth_pubkey(ssh_session session, const char *username,
|
||||
}
|
||||
|
||||
if (user == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
leave_function();
|
||||
return rc;
|
||||
}
|
||||
@@ -690,24 +699,32 @@ int ssh_userauth_pubkey(ssh_session session, const char *username,
|
||||
|
||||
service = ssh_string_from_char("ssh-connection");
|
||||
if (service == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
method = ssh_string_from_char("publickey");
|
||||
if (method == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
algo = ssh_string_from_char(ssh_type_to_char(privatekey->type));
|
||||
if (algo == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
if (publickey == NULL) {
|
||||
pk = publickey_from_privatekey(privatekey);
|
||||
if (pk == NULL) {
|
||||
/* most likely oom, and publickey_from_privatekey does not
|
||||
* return any more information */
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
pkstr = publickey_to_string(pk);
|
||||
publickey_free(pk);
|
||||
if (pkstr == NULL) {
|
||||
/* same as above */
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@@ -720,6 +737,7 @@ int ssh_userauth_pubkey(ssh_session session, const char *username,
|
||||
buffer_add_u8(session->out_buffer, 1) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, algo) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, (publickey == NULL ? pkstr : publickey)) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -731,8 +749,10 @@ int ssh_userauth_pubkey(ssh_session session, const char *username,
|
||||
|
||||
sign = ssh_do_sign(session,session->out_buffer, privatekey);
|
||||
if(sign == NULL)
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
if (buffer_add_ssh_string(session->out_buffer,sign) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
ssh_string_free(sign);
|
||||
@@ -797,6 +817,7 @@ int ssh_userauth_privatekey_file(ssh_session session, const char *username,
|
||||
|
||||
pubkeyfile = malloc(strlen(filename) + 1 + 4);
|
||||
if (pubkeyfile == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
leave_function();
|
||||
return SSH_AUTH_ERROR;
|
||||
}
|
||||
@@ -878,6 +899,7 @@ int ssh_userauth_agent_pubkey(ssh_session session, const char *username,
|
||||
}
|
||||
|
||||
if (user == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
leave_function();
|
||||
return rc;
|
||||
}
|
||||
@@ -890,18 +912,22 @@ int ssh_userauth_agent_pubkey(ssh_session session, const char *username,
|
||||
|
||||
service = ssh_string_from_char("ssh-connection");
|
||||
if (service == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
method = ssh_string_from_char("publickey");
|
||||
if (method == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
algo = ssh_string_from_char(ssh_type_to_char(publickey->type));
|
||||
if (algo == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
key = publickey_to_string(publickey);
|
||||
if (key == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -913,6 +939,7 @@ int ssh_userauth_agent_pubkey(ssh_session session, const char *username,
|
||||
buffer_add_u8(session->out_buffer, 1) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, algo) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, key) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -920,6 +947,7 @@ int ssh_userauth_agent_pubkey(ssh_session session, const char *username,
|
||||
|
||||
if (sign) {
|
||||
if (buffer_add_ssh_string(session->out_buffer, sign) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
ssh_string_free(sign);
|
||||
@@ -1009,6 +1037,7 @@ int ssh_userauth_password(ssh_session session, const char *username,
|
||||
}
|
||||
|
||||
if (user == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
leave_function();
|
||||
return rc;
|
||||
}
|
||||
@@ -1041,14 +1070,17 @@ int ssh_userauth_password(ssh_session session, const char *username,
|
||||
|
||||
service = ssh_string_from_char("ssh-connection");
|
||||
if (service == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
method = ssh_string_from_char("password");
|
||||
if (method == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
pwd = ssh_string_from_char(password);
|
||||
if (pwd == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -1058,6 +1090,7 @@ int ssh_userauth_password(ssh_session session, const char *username,
|
||||
buffer_add_ssh_string(session->out_buffer, method) < 0 ||
|
||||
buffer_add_u8(session->out_buffer, 0) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, pwd) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -1410,18 +1443,22 @@ static int kbdauth_init(ssh_session session, const char *user,
|
||||
|
||||
usr = ssh_string_from_char(user);
|
||||
if (usr == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
sub = (submethods ? ssh_string_from_char(submethods) : ssh_string_from_char(""));
|
||||
if (sub == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
service = ssh_string_from_char("ssh-connection");
|
||||
if (service == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
method = ssh_string_from_char("keyboard-interactive");
|
||||
if (method == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -1431,6 +1468,7 @@ static int kbdauth_init(ssh_session session, const char *user,
|
||||
buffer_add_ssh_string(session->out_buffer, method) < 0 ||
|
||||
buffer_add_u32(session->out_buffer, 0) < 0 ||
|
||||
buffer_add_ssh_string(session->out_buffer, sub) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -1602,6 +1640,7 @@ static int kbdauth_send(ssh_session session) {
|
||||
if (buffer_add_u8(session->out_buffer, SSH2_MSG_USERAUTH_INFO_RESPONSE) < 0 ||
|
||||
buffer_add_u32(session->out_buffer,
|
||||
htonl(session->kbdint->nprompts)) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -1612,10 +1651,12 @@ static int kbdauth_send(ssh_session session) {
|
||||
answer = ssh_string_from_char("");
|
||||
}
|
||||
if (answer == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (buffer_add_ssh_string(session->out_buffer, answer) < 0) {
|
||||
ssh_set_error_oom(session);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -1672,7 +1713,7 @@ int ssh_userauth_kbdint(ssh_session session, const char *user,
|
||||
int rc = SSH_AUTH_ERROR;
|
||||
|
||||
if (session->version == 1) {
|
||||
/* No keyb-interactive for ssh1 */
|
||||
ssh_set_error(session, SSH_NO_ERROR, "No keyboard-interactive for ssh1");
|
||||
return SSH_AUTH_DENIED;
|
||||
}
|
||||
|
||||
@@ -1725,8 +1766,12 @@ int ssh_userauth_kbdint(ssh_session session, const char *user,
|
||||
* @returns The number of prompts.
|
||||
*/
|
||||
int ssh_userauth_kbdint_getnprompts(ssh_session session) {
|
||||
if(session==NULL || session->kbdint == NULL)
|
||||
if(session==NULL)
|
||||
return SSH_ERROR;
|
||||
if(session->kbdint == NULL) {
|
||||
ssh_set_error_invalid(session, __FUNCTION__);
|
||||
return SSH_ERROR;
|
||||
}
|
||||
return session->kbdint->nprompts;
|
||||
}
|
||||
|
||||
@@ -1741,8 +1786,12 @@ int ssh_userauth_kbdint_getnprompts(ssh_session session) {
|
||||
* @returns The name of the message block. Do not free it.
|
||||
*/
|
||||
const char *ssh_userauth_kbdint_getname(ssh_session session) {
|
||||
if(session==NULL || session->kbdint == NULL)
|
||||
if(session==NULL)
|
||||
return NULL;
|
||||
if(session->kbdint == NULL) {
|
||||
ssh_set_error_invalid(session, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
return session->kbdint->name;
|
||||
}
|
||||
|
||||
@@ -1758,8 +1807,12 @@ const char *ssh_userauth_kbdint_getname(ssh_session session) {
|
||||
*/
|
||||
|
||||
const char *ssh_userauth_kbdint_getinstruction(ssh_session session) {
|
||||
if(session==NULL || session->kbdint == NULL)
|
||||
if(session==NULL)
|
||||
return NULL;
|
||||
if(session->kbdint == NULL) {
|
||||
ssh_set_error_invalid(session, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
return session->kbdint->instruction;
|
||||
}
|
||||
|
||||
@@ -1781,9 +1834,14 @@ const char *ssh_userauth_kbdint_getinstruction(ssh_session session) {
|
||||
*/
|
||||
const char *ssh_userauth_kbdint_getprompt(ssh_session session, unsigned int i,
|
||||
char *echo) {
|
||||
if(session==NULL || session->kbdint == NULL)
|
||||
if(session==NULL)
|
||||
return NULL;
|
||||
if(session->kbdint == NULL) {
|
||||
ssh_set_error_invalid(session, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
if (i > session->kbdint->nprompts) {
|
||||
ssh_set_error_invalid(session, __FUNCTION__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1844,14 +1902,18 @@ const char *ssh_userauth_kbdint_getanswer(ssh_session session, unsigned int i) {
|
||||
*/
|
||||
int ssh_userauth_kbdint_setanswer(ssh_session session, unsigned int i,
|
||||
const char *answer) {
|
||||
if (session == NULL || answer == NULL || session->kbdint == NULL ||
|
||||
if (session == NULL)
|
||||
return -1;
|
||||
if (answer == NULL || session->kbdint == NULL ||
|
||||
i > session->kbdint->nprompts) {
|
||||
ssh_set_error_invalid(session, __FUNCTION__);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (session->kbdint->answers == NULL) {
|
||||
session->kbdint->answers = malloc(sizeof(char*) * session->kbdint->nprompts);
|
||||
if (session->kbdint->answers == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
return -1;
|
||||
}
|
||||
memset(session->kbdint->answers, 0, sizeof(char *) * session->kbdint->nprompts);
|
||||
@@ -1864,6 +1926,7 @@ int ssh_userauth_kbdint_setanswer(ssh_session session, unsigned int i,
|
||||
|
||||
session->kbdint->answers[i] = strdup(answer);
|
||||
if (session->kbdint->answers[i] == NULL) {
|
||||
ssh_set_error_oom(session);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user