SSH1: fix a few bugs that stopped the samplessh to work

This commit is contained in:
Aris Adamantiadis
2011-01-26 22:37:04 +01:00
parent f6c31db3fc
commit eb49bf4bfd
2 changed files with 18 additions and 4 deletions

View File

@@ -226,7 +226,7 @@ int ssh_userauth_none(ssh_session session, const char *username) {
#ifdef WITH_SSH1 #ifdef WITH_SSH1
if (session->version == 1) { if (session->version == 1) {
ssh_userauth1_none(session, username); rc = ssh_userauth1_none(session, username);
leave_function(); leave_function();
return rc; return rc;
} }
@@ -332,7 +332,7 @@ int ssh_userauth_offer_pubkey(ssh_session session, const char *username,
#ifdef WITH_SSH1 #ifdef WITH_SSH1
if (session->version == 1) { if (session->version == 1) {
ssh_userauth1_offer_pubkey(session, username, type, publickey); rc = ssh_userauth1_offer_pubkey(session, username, type, publickey);
leave_function(); leave_function();
return rc; return rc;
} }

View File

@@ -35,38 +35,46 @@
#ifdef WITH_SSH1 #ifdef WITH_SSH1
static int wait_auth1_status(ssh_session session) { static int wait_auth1_status(ssh_session session) {
enter_function();
/* wait for a packet */ /* wait for a packet */
if (packet_read(session) != SSH_OK) { if (packet_read(session) != SSH_OK) {
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
if(packet_translate(session) != SSH_OK) { if(packet_translate(session) != SSH_OK) {
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
switch(session->in_packet.type) { switch(session->in_packet.type) {
case SSH_SMSG_SUCCESS: case SSH_SMSG_SUCCESS:
leave_function();
return SSH_AUTH_SUCCESS; return SSH_AUTH_SUCCESS;
case SSH_SMSG_FAILURE: case SSH_SMSG_FAILURE:
leave_function();
return SSH_AUTH_DENIED; return SSH_AUTH_DENIED;
} }
ssh_set_error(session, SSH_FATAL, "Was waiting for a SUCCESS or " ssh_set_error(session, SSH_FATAL, "Was waiting for a SUCCESS or "
"FAILURE, got %d", session->in_packet.type); "FAILURE, got %d", session->in_packet.type);
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
static int send_username(ssh_session session, const char *username) { static int send_username(ssh_session session, const char *username) {
ssh_string user = NULL; ssh_string user = NULL;
/* returns SSH_AUTH_SUCCESS or SSH_AUTH_DENIED */ /* returns SSH_AUTH_SUCCESS or SSH_AUTH_DENIED */
enter_function();
if(session->auth_service_asked) { if(session->auth_service_asked) {
leave_function();
return session->auth_service_asked; return session->auth_service_asked;
} }
if (!username) { if (!username) {
if(!(username = session->username)) { if(!(username = session->username)) {
if (ssh_options_set(session, SSH_OPTIONS_USER, NULL) < 0) { if (ssh_options_set(session, SSH_OPTIONS_USER, NULL) < 0) {
leave_function();
return session->auth_service_asked = SSH_AUTH_ERROR; return session->auth_service_asked = SSH_AUTH_ERROR;
} else { } else {
username = session->username; username = session->username;
@@ -75,24 +83,30 @@ static int send_username(ssh_session session, const char *username) {
} }
user = string_from_char(username); user = string_from_char(username);
if (user == NULL) { if (user == NULL) {
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
if (buffer_add_u8(session->out_buffer, SSH_CMSG_USER) < 0) { if (buffer_add_u8(session->out_buffer, SSH_CMSG_USER) < 0) {
string_free(user); string_free(user);
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
if (buffer_add_ssh_string(session->out_buffer, user) < 0) { if (buffer_add_ssh_string(session->out_buffer, user) < 0) {
string_free(user); string_free(user);
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
string_free(user); string_free(user);
if (packet_send(session) != SSH_OK) { if (packet_send(session) != SSH_OK) {
leave_function();
return SSH_AUTH_ERROR; return SSH_AUTH_ERROR;
} }
session->auth_service_asked = wait_auth1_status(session); session->auth_service_asked = wait_auth1_status(session);
if(session->auth_service_asked != SSH_AUTH_ERROR)
session->auth_methods=SSH_AUTH_METHOD_PASSWORD;
leave_function();
return session->auth_service_asked; return session->auth_service_asked;
} }