1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 01:48:00 +00:00

Fix SSH2_MSG_CHANNEL_EXTENDED_DATA in logparse.

It looks as if it's never worked at all: it had a spurious second
printf, it completely forgot to allow for the uint32 type code that
SSH2_MSG_CHANNEL_DATA doesn't have, it accessed the channel state's
sequence number fields in a way that made no sense and didn't match
the rest of the program, *and* it misinvoked the file opening API. I
must have never had an occasion to test it.

[originally from svn r10037]
This commit is contained in:
Simon Tatham 2013-09-07 16:15:11 +00:00
parent b6668d263f
commit 1472aa2a26

View File

@ -323,7 +323,10 @@ my %packets = (
#define SSH2_MSG_CHANNEL_EXTENDED_DATA 95 /* 0x5f */ #define SSH2_MSG_CHANNEL_EXTENDED_DATA 95 /* 0x5f */
'SSH2_MSG_CHANNEL_EXTENDED_DATA' => sub { 'SSH2_MSG_CHANNEL_EXTENDED_DATA' => sub {
my ($direction, $seq, $data) = @_; my ($direction, $seq, $data) = @_;
my ($rid, $bytes) = &parse("uu", $data); my ($rid, $type, $bytes) = &parse("uuu", $data);
if ($type == 1) {
$type = "SSH_EXTENDED_DATA_STDERR";
}
$rid = ($direction eq "i" ? "c" : "s") . $rid; $rid = ($direction eq "i" ? "c" : "s") . $rid;
my $index = $chan_by_id{$rid}; my $index = $chan_by_id{$rid};
if (!defined $index) { if (!defined $index) {
@ -332,11 +335,10 @@ my %packets = (
return; return;
} }
my $chan = $channels[$index]; my $chan = $channels[$index];
my $dir = $direction eq "i" ? 'sc' : 'cs'; $chan->{$direction}{'seq'} += $bytes;
$chan->{$dir}{'seq'} += $bytes; printf "ch%d (%s), type %s, %s bytes (%d--%d)\n", $index,$chan->{'id'},
printf "ch%d (%s), %s bytes (%d--%d)\n", $index, $chan->{'id'}, $bytes, $type, $bytes, $chan->{$direction}{'seq'}-$bytes,
$chan->{$dir}{$seq}-$bytes, $chan->{$dir}{$seq}; $chan->{$direction}{'seq'};
printf "ch%d (%s), %s bytes\n", $index, $chan->{'id'}, $bytes;
my @realdata = splice @$data, 0, $bytes; my @realdata = splice @$data, 0, $bytes;
if ($dumpdata) { if ($dumpdata) {
# We treat EXTENDED_DATA as equivalent to DATA, for the # We treat EXTENDED_DATA as equivalent to DATA, for the
@ -347,8 +349,8 @@ my %packets = (
my $filekey = $direction . "file"; my $filekey = $direction . "file";
if (!defined $chan->{$filekey}) { if (!defined $chan->{$filekey}) {
my $filename = sprintf "ch%d.%s", $index, $direction; my $filename = sprintf "ch%d.%s", $index, $direction;
$chan->{$filekey} = FileHandle->new; $chan->{$filekey} = FileHandle->new(">$filename");
if (!$chan->{$filekey}->open(">", $filename)) { if (!defined $chan->{$filekey}) {
die "$filename: $!\n"; die "$filename: $!\n";
} }
} }