summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2011-09-14 22:53:01 +0200
committerAris Adamantiadis <aris@0xbadc0de.be>2011-09-15 11:25:11 +0200
commitb0b2fd768c015a01f17eaa9827a8f5faafa58946 (patch)
tree3b49b1904ca2847d90593a355b6dc4ee09a7a580
parent9180bfffcd3987a1d2429bc081a08d827aa8a8e1 (diff)
downloadlibssh-b0b2fd768c015a01f17eaa9827a8f5faafa58946.tar.gz
libssh-b0b2fd768c015a01f17eaa9827a8f5faafa58946.tar.xz
libssh-b0b2fd768c015a01f17eaa9827a8f5faafa58946.zip
SSH1: handle exit-status message (channels would not close)
-rw-r--r--include/libssh/channels.h1
-rw-r--r--src/channels1.c13
-rw-r--r--src/packet1.c2
3 files changed, 15 insertions, 1 deletions
diff --git a/include/libssh/channels.h b/include/libssh/channels.h
index c054374d..aa2b14d0 100644
--- a/include/libssh/channels.h
+++ b/include/libssh/channels.h
@@ -93,6 +93,7 @@ int channel_write_common(ssh_channel channel, const void *data,
#ifdef WITH_SSH1
SSH_PACKET_CALLBACK(ssh_packet_data1);
SSH_PACKET_CALLBACK(ssh_packet_close1);
+SSH_PACKET_CALLBACK(ssh_packet_exist_status1);
/* channels1.c */
int channel_open_session1(ssh_channel channel);
diff --git a/src/channels1.c b/src/channels1.c
index 7589d227..58dea903 100644
--- a/src/channels1.c
+++ b/src/channels1.c
@@ -269,6 +269,19 @@ SSH_PACKET_CALLBACK(ssh_packet_close1){
return SSH_PACKET_USED;
}
+SSH_PACKET_CALLBACK(ssh_packet_exist_status1){
+ ssh_channel channel = ssh_get_channel1(session);
+ uint32_t status;
+ (void)type;
+ (void)user;
+ buffer_get_u32(packet, &status);
+ channel->state = SSH_CHANNEL_STATE_CLOSED;
+ channel->remote_eof = 1;
+ channel->exit_status = ntohl(status);
+
+ return SSH_PACKET_USED;
+}
+
int channel_write1(ssh_channel channel, const void *data, int len) {
ssh_session session = channel->session;
diff --git a/src/packet1.c b/src/packet1.c
index b115abab..ddc64a3b 100644
--- a/src/packet1.c
+++ b/src/packet1.c
@@ -55,7 +55,7 @@ ssh_packet_callback default_packet_handlers1[]= {
ssh_packet_data1, //SSH_SMSG_STDOUT_DATA 17
ssh_packet_data1, //SSH_SMSG_STDERR_DATA 18
NULL, //SSH_CMSG_EOF 19
- NULL, //SSH_SMSG_EXITSTATUS 20
+ ssh_packet_exist_status1, //SSH_SMSG_EXITSTATUS 20
NULL, //SSH_MSG_CHANNEL_OPEN_CONFIRMATION 21
NULL, //SSH_MSG_CHANNEL_OPEN_FAILURE 22
NULL, //SSH_MSG_CHANNEL_DATA 23