summaryrefslogtreecommitdiffstats
path: root/libssh/messages.c
diff options
context:
space:
mode:
authorAndreas Schneider <mail@cynapses.org>2009-04-09 14:33:12 +0000
committerAndreas Schneider <mail@cynapses.org>2009-04-09 14:33:12 +0000
commit926375e8aa87902459a342c9fefcc81595f360cf (patch)
treee14b7970c50d1dcbefd29c3f3c8d0f1791905b3a /libssh/messages.c
parenta8bb3024e809c37be8c9598387564672b954e1da (diff)
downloadlibssh-926375e8aa87902459a342c9fefcc81595f360cf.tar.gz
libssh-926375e8aa87902459a342c9fefcc81595f360cf.tar.xz
libssh-926375e8aa87902459a342c9fefcc81595f360cf.zip
Add error checking to ssh_message_channel_request_open_reply_accept().
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@446 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/messages.c')
-rw-r--r--libssh/messages.c83
1 files changed, 54 insertions, 29 deletions
diff --git a/libssh/messages.c b/libssh/messages.c
index 7721cbd..0af88cc 100644
--- a/libssh/messages.c
+++ b/libssh/messages.c
@@ -324,6 +324,7 @@ static SSH_MESSAGE *handle_channel_request_open(SSH_SESSION *session) {
msg = message_new(session);
if (msg == NULL) {
+ leave_function();
return NULL;
}
@@ -371,37 +372,61 @@ error:
return NULL;
}
-CHANNEL *ssh_message_channel_request_open_reply_accept(SSH_MESSAGE *msg){
- SSH_SESSION *session=msg->session;
- CHANNEL *chan;
+CHANNEL *ssh_message_channel_request_open_reply_accept(SSH_MESSAGE *msg) {
+ SSH_SESSION *session = msg->session;
+ CHANNEL *chan = NULL;
- enter_function();
- chan=channel_new(session);
- if (chan == NULL) {
- leave_function();
- return NULL;
- }
- chan->local_channel=ssh_channel_new_id(session);
- chan->local_maxpacket=35000;
- chan->local_window=32000;
- chan->remote_channel=msg->channel_request_open.sender;
- chan->remote_maxpacket=msg->channel_request_open.packet_size;
- chan->remote_window=msg->channel_request_open.window;
- chan->open=1;
- buffer_add_u8(session->out_buffer,SSH2_MSG_CHANNEL_OPEN_CONFIRMATION);
- buffer_add_u32(session->out_buffer,htonl(chan->remote_channel));
- buffer_add_u32(session->out_buffer,htonl(chan->local_channel));
- buffer_add_u32(session->out_buffer,htonl(chan->local_window));
- buffer_add_u32(session->out_buffer,htonl(chan->local_maxpacket));
- ssh_log(session, SSH_LOG_PACKET,
- "Accepting a channel request_open for chan %d", chan->remote_channel);
- if(packet_send(session)){
- channel_free(chan);
- leave_function();
- return NULL;
- }
+ enter_function();
+
+ if (msg == NULL) {
leave_function();
- return chan;
+ return NULL;
+ }
+
+ chan = channel_new(session);
+ if (chan == NULL) {
+ leave_function();
+ return NULL;
+ }
+
+ chan->local_channel = ssh_channel_new_id(session);
+ chan->local_maxpacket = 35000;
+ chan->local_window = 32000;
+ chan->remote_channel = msg->channel_request_open.sender;
+ chan->remote_maxpacket = msg->channel_request_open.packet_size;
+ chan->remote_window = msg->channel_request_open.window;
+ chan->open = 1;
+
+ if (buffer_add_u8(session->out_buffer, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION) < 0) {
+ goto error;
+ }
+ if (buffer_add_u32(session->out_buffer, htonl(chan->remote_channel)) < 0) {
+ goto error;
+ }
+ if (buffer_add_u32(session->out_buffer, htonl(chan->local_channel)) < 0) {
+ goto error;
+ }
+ if (buffer_add_u32(session->out_buffer, htonl(chan->local_window)) < 0) {
+ goto error;
+ }
+ if (buffer_add_u32(session->out_buffer, htonl(chan->local_maxpacket)) < 0) {
+ goto error;
+ }
+
+ ssh_log(session, SSH_LOG_PACKET,
+ "Accepting a channel request_open for chan %d", chan->remote_channel);
+
+ if (packet_send(session) != SSH_OK) {
+ goto error;
+ }
+
+ leave_function();
+ return chan;
+error:
+ channel_free(chan);
+
+ leave_function();
+ return NULL;
}
static int ssh_message_channel_request_open_reply_default(SSH_MESSAGE *msg){