Add return value and error checks to ssh_send_kex().

git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@422 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Andreas Schneider
2009-04-07 19:37:45 +00:00
parent d51dc0d80e
commit 586ed9103f
2 changed files with 54 additions and 21 deletions

View File

@@ -563,7 +563,7 @@ socket_t ssh_connect_host(SSH_SESSION *session, const char *host,const char
/* in kex.c */ /* in kex.c */
extern const char *ssh_kex_nums[]; extern const char *ssh_kex_nums[];
void ssh_send_kex(SSH_SESSION *session,int server_kex); int ssh_send_kex(SSH_SESSION *session, int server_kex);
void ssh_list_kex(SSH_SESSION *session, KEX *kex); void ssh_list_kex(SSH_SESSION *session, KEX *kex);
int set_kex(SSH_SESSION *session); int set_kex(SSH_SESSION *session);
int ssh_get_kex(SSH_SESSION *session, int server_kex); int ssh_get_kex(SSH_SESSION *session, int server_kex);

View File

@@ -368,29 +368,62 @@ int set_kex(SSH_SESSION *session){
} }
/* this function only sends the predefined set of kex methods */ /* this function only sends the predefined set of kex methods */
/* TODO add return value! */ int ssh_send_kex(SSH_SESSION *session, int server_kex) {
void ssh_send_kex(SSH_SESSION *session, int server_kex){ KEX *kex = (server_kex ? &session->server_kex : &session->client_kex);
STRING *str; STRING *str = NULL;
int i=0; int i;
KEX *kex=(server_kex ? &session->server_kex : &session->client_kex);
enter_function(); enter_function();
buffer_add_u8(session->out_buffer,SSH2_MSG_KEXINIT);
buffer_add_data(session->out_buffer,kex->cookie,16); if (buffer_add_u8(session->out_buffer, SSH2_MSG_KEXINIT) < 0) {
if (hashbufout_add_cookie(session) < 0) { goto error;
return; }
if (buffer_add_data(session->out_buffer, kex->cookie, 16) < 0) {
goto error;
}
if (hashbufout_add_cookie(session) < 0) {
goto error;
}
ssh_list_kex(session, kex);
for (i = 0; i < 10; i++) {
str = string_from_char(kex->methods[i]);
if (str == NULL) {
goto error;
} }
ssh_list_kex(session, kex);
for(i=0;i<10;i++){ if (buffer_add_ssh_string(session->out_hashbuf, str) < 0) {
str=string_from_char(kex->methods[i]); goto error;
buffer_add_ssh_string(session->out_hashbuf,str);
buffer_add_ssh_string(session->out_buffer,str);
free(str);
} }
i=0; if (buffer_add_ssh_string(session->out_buffer, str) < 0) {
buffer_add_u8(session->out_buffer,0); goto error;
buffer_add_u32(session->out_buffer,0); }
packet_send(session); string_free(str);
}
if (buffer_add_u8(session->out_buffer, 0) < 0) {
goto error;
}
if (buffer_add_u32(session->out_buffer, 0) < 0) {
goto error;
}
if (packet_send(session) != SSH_OK) {
leave_function(); leave_function();
return -1;
}
leave_function();
return 0;
error:
buffer_free(session->out_buffer);
buffer_free(session->out_hashbuf);
string_free(str);
leave_function();
return -1;
} }
/* returns 1 if at least one of the name algos is in the default algorithms table */ /* returns 1 if at least one of the name algos is in the default algorithms table */