diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-09 10:20:54 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-09 10:20:54 +0000 |
commit | 1715736f0f062f846f1d17c77f0c878f8c1c0ed7 (patch) | |
tree | 119b5d79883893efc6af7b4b53469a89af28e839 /libssh/messages.c | |
parent | 38176a753e789416a77ccda9bf6fb5c4d2961e64 (diff) | |
download | libssh-1715736f0f062f846f1d17c77f0c878f8c1c0ed7.tar.gz libssh-1715736f0f062f846f1d17c77f0c878f8c1c0ed7.tar.xz libssh-1715736f0f062f846f1d17c77f0c878f8c1c0ed7.zip |
Add more error checks to handle_service_request().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@438 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/messages.c')
-rw-r--r-- | libssh/messages.c | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/libssh/messages.c b/libssh/messages.c index 3ecf4dd6..dd952af1 100644 --- a/libssh/messages.c +++ b/libssh/messages.c @@ -58,26 +58,45 @@ static SSH_MESSAGE *message_new(SSH_SESSION *session){ return msg; } -static int handle_service_request(SSH_SESSION *session){ - STRING *service; - char *service_c; - enter_function(); - service=buffer_get_ssh_string(session->in_buffer); - if(!service){ - ssh_set_error(session,SSH_FATAL,"Invalid SSH_MSG_SERVICE_REQUEST packet"); - leave_function(); - return -1; - } - service_c=string_to_char(service); - ssh_log(session, SSH_LOG_PACKET, - "Sending a SERVICE_ACCEPT for service %s", service_c); - free(service_c); - buffer_add_u8(session->out_buffer,SSH2_MSG_SERVICE_ACCEPT); - buffer_add_ssh_string(session->out_buffer,service); - packet_send(session); - free(service); +static int handle_service_request(SSH_SESSION *session) { + STRING *service = NULL; + char *service_c = NULL; + int rc = -1; + + enter_function(); + + service = buffer_get_ssh_string(session->in_buffer); + if (service == NULL) { + ssh_set_error(session, SSH_FATAL, "Invalid SSH_MSG_SERVICE_REQUEST packet"); leave_function(); - return 0; + return -1; + } + + service_c = string_to_char(service); + if (service_c == NULL) { + goto error; + } + + ssh_log(session, SSH_LOG_PACKET, + "Sending a SERVICE_ACCEPT for service %s", service_c); + SAFE_FREE(service_c); + + if (buffer_add_u8(session->out_buffer, SSH2_MSG_SERVICE_ACCEPT) < 0) { + goto error; + } + if (buffer_add_ssh_string(session->out_buffer, service) < 0) { + goto error; + } + if (packet_send(session) != SSH_OK) { + goto error; + } + + rc = 0; +error: + string_free(service); + leave_function(); + + return rc; } static void handle_unimplemented(SSH_SESSION *session){ |