mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-11 18:50:28 +09:00
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:
@@ -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);
|
||||||
|
|||||||
73
libssh/kex.c
73
libssh/kex.c
@@ -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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user