mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-10 10:26:47 +09:00
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
This commit is contained in:
@@ -324,6 +324,7 @@ static SSH_MESSAGE *handle_channel_request_open(SSH_SESSION *session) {
|
|||||||
|
|
||||||
msg = message_new(session);
|
msg = message_new(session);
|
||||||
if (msg == NULL) {
|
if (msg == NULL) {
|
||||||
|
leave_function();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,37 +372,61 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHANNEL *ssh_message_channel_request_open_reply_accept(SSH_MESSAGE *msg){
|
CHANNEL *ssh_message_channel_request_open_reply_accept(SSH_MESSAGE *msg) {
|
||||||
SSH_SESSION *session=msg->session;
|
SSH_SESSION *session = msg->session;
|
||||||
CHANNEL *chan;
|
CHANNEL *chan = NULL;
|
||||||
|
|
||||||
enter_function();
|
enter_function();
|
||||||
chan=channel_new(session);
|
|
||||||
|
if (msg == NULL) {
|
||||||
|
leave_function();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
chan = channel_new(session);
|
||||||
if (chan == NULL) {
|
if (chan == NULL) {
|
||||||
leave_function();
|
leave_function();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
chan->local_channel=ssh_channel_new_id(session);
|
|
||||||
chan->local_maxpacket=35000;
|
chan->local_channel = ssh_channel_new_id(session);
|
||||||
chan->local_window=32000;
|
chan->local_maxpacket = 35000;
|
||||||
chan->remote_channel=msg->channel_request_open.sender;
|
chan->local_window = 32000;
|
||||||
chan->remote_maxpacket=msg->channel_request_open.packet_size;
|
chan->remote_channel = msg->channel_request_open.sender;
|
||||||
chan->remote_window=msg->channel_request_open.window;
|
chan->remote_maxpacket = msg->channel_request_open.packet_size;
|
||||||
chan->open=1;
|
chan->remote_window = msg->channel_request_open.window;
|
||||||
buffer_add_u8(session->out_buffer,SSH2_MSG_CHANNEL_OPEN_CONFIRMATION);
|
chan->open = 1;
|
||||||
buffer_add_u32(session->out_buffer,htonl(chan->remote_channel));
|
|
||||||
buffer_add_u32(session->out_buffer,htonl(chan->local_channel));
|
if (buffer_add_u8(session->out_buffer, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION) < 0) {
|
||||||
buffer_add_u32(session->out_buffer,htonl(chan->local_window));
|
goto error;
|
||||||
buffer_add_u32(session->out_buffer,htonl(chan->local_maxpacket));
|
}
|
||||||
|
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,
|
ssh_log(session, SSH_LOG_PACKET,
|
||||||
"Accepting a channel request_open for chan %d", chan->remote_channel);
|
"Accepting a channel request_open for chan %d", chan->remote_channel);
|
||||||
if(packet_send(session)){
|
|
||||||
channel_free(chan);
|
if (packet_send(session) != SSH_OK) {
|
||||||
leave_function();
|
goto error;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
leave_function();
|
leave_function();
|
||||||
return chan;
|
return chan;
|
||||||
|
error:
|
||||||
|
channel_free(chan);
|
||||||
|
|
||||||
|
leave_function();
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ssh_message_channel_request_open_reply_default(SSH_MESSAGE *msg){
|
static int ssh_message_channel_request_open_reply_default(SSH_MESSAGE *msg){
|
||||||
|
|||||||
Reference in New Issue
Block a user