summaryrefslogtreecommitdiffstats
path: root/libssh/messages.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-09 10:20:54 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-09 10:20:54 +0000
commit1715736f0f062f846f1d17c77f0c878f8c1c0ed7 (patch)
tree119b5d79883893efc6af7b4b53469a89af28e839 /libssh/messages.c
parent38176a753e789416a77ccda9bf6fb5c4d2961e64 (diff)
downloadlibssh-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.c57
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){