1
0
mirror of https://github.com/danog/tgseclib.git synced 2024-11-30 04:39:02 +01:00

Merge branch '1.0-channel-request-updates' into 2.0-channel-request-updates

This commit is contained in:
terrafrost 2017-12-25 19:11:13 -06:00
commit 2a09816088
3 changed files with 75 additions and 72 deletions

View File

@ -294,7 +294,7 @@ class Blowfish extends Base
function setKeyLength($length) function setKeyLength($length)
{ {
if ($length < 32) { if ($length < 32) {
$this->key_length = 7; $this->key_length = 4;
} elseif ($length > 448) { } elseif ($length > 448) {
$this->key_length = 56; $this->key_length = 56;
} else { } else {

View File

@ -296,7 +296,7 @@ class RC2 extends Base
function setKeyLength($length) function setKeyLength($length)
{ {
if ($length < 8) { if ($length < 8) {
$this->default_key_length = 8; $this->default_key_length = 1;
} elseif ($length > 1024) { } elseif ($length > 1024) {
$this->default_key_length = 128; $this->default_key_length = 128;
} else { } else {

View File

@ -3623,31 +3623,80 @@ class SSH2
$this->window_size_server_to_client[$channel]+= $this->window_size; $this->window_size_server_to_client[$channel]+= $this->window_size;
} }
if ($type == NET_SSH2_MSG_CHANNEL_EXTENDED_DATA) { switch ($type) {
/* case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
if ($client_channel == NET_SSH2_CHANNEL_EXEC) { /*
$this->_send_channel_packet($client_channel, chr(0)); if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
} $this->_send_channel_packet($client_channel, chr(0));
*/ }
// currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR */
if (strlen($response) < 8) { // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR
return false; if (strlen($response) < 8) {
} return false;
extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8))); }
$data = $this->_string_shift($response, $length); extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8)));
$this->stdErrorLog.= $data; $data = $this->_string_shift($response, $length);
if ($skip_extended || $this->quiet_mode) { $this->stdErrorLog.= $data;
continue; if ($skip_extended || $this->quiet_mode) {
} continue 2;
if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) { }
return $data; if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) {
} return $data;
if (!isset($this->channel_buffers[$channel])) { }
$this->channel_buffers[$channel] = array(); if (!isset($this->channel_buffers[$channel])) {
} $this->channel_buffers[$channel] = array();
$this->channel_buffers[$channel][] = $data; }
$this->channel_buffers[$channel][] = $data;
continue; continue 2;
case NET_SSH2_MSG_CHANNEL_REQUEST:
if ($this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_CLOSE) {
continue 2;
}
if (strlen($response) < 4) {
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
$value = $this->_string_shift($response, $length);
switch ($value) {
case 'exit-signal':
$this->_string_shift($response, 1);
if (strlen($response) < 4) {
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
$this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length);
$this->_string_shift($response, 1);
if (strlen($response) < 4) {
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
if ($length) {
$this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length);
}
$this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
$this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
$this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF;
continue 3;
case 'exit-status':
if (strlen($response) < 5) {
return false;
}
extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5)));
$this->exit_status = $exit_status;
// "The client MAY ignore these messages."
// -- http://tools.ietf.org/html/rfc4254#section-6.10
continue 3;
default:
// "Some systems may not implement signals, in which case they SHOULD ignore this message."
// -- http://tools.ietf.org/html/rfc4254#section-6.9
continue 3;
}
} }
switch ($this->channel_status[$channel]) { switch ($this->channel_status[$channel]) {
@ -3732,52 +3781,6 @@ class SSH2
} }
$this->channel_buffers[$channel][] = $data; $this->channel_buffers[$channel][] = $data;
break; break;
case NET_SSH2_MSG_CHANNEL_REQUEST:
if (strlen($response) < 4) {
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
$value = $this->_string_shift($response, $length);
switch ($value) {
case 'exit-signal':
$this->_string_shift($response, 1);
if (strlen($response) < 4) {
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
$this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length);
$this->_string_shift($response, 1);
if (strlen($response) < 4) {
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
if ($length) {
$this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length);
}
$this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
$this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
$this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF;
break;
case 'exit-status':
if (strlen($response) < 5) {
return false;
}
extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5)));
$this->exit_status = $exit_status;
// "The client MAY ignore these messages."
// -- http://tools.ietf.org/html/rfc4254#section-6.10
break;
default:
// "Some systems may not implement signals, in which case they SHOULD ignore this message."
// -- http://tools.ietf.org/html/rfc4254#section-6.9
break;
}
break;
case NET_SSH2_MSG_CHANNEL_CLOSE: case NET_SSH2_MSG_CHANNEL_CLOSE:
$this->curTimeout = 0; $this->curTimeout = 0;