mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-16 12:03:03 -05:00
Fix the SSH protocol version exchange, which had a weird stack trash
in it which for some reason didn't show up when built with VC++6 but blew up the nightlies. Should be OK now. [originally from svn r1023]
This commit is contained in:
parent
3a78d9dd09
commit
6a4294fbac
22
ssh.c
22
ssh.c
@ -1207,14 +1207,12 @@ static int do_ssh_init(unsigned char c) {
|
|||||||
rdpkt2_state.incoming_sequence = 0;
|
rdpkt2_state.incoming_sequence = 0;
|
||||||
|
|
||||||
vstring[vslen] = 0;
|
vstring[vslen] = 0;
|
||||||
if (vslen > 80)
|
vlog = smalloc(20 + vslen);
|
||||||
vlog = smalloc(20 + vslen);
|
|
||||||
else
|
|
||||||
vlog = smalloc(100);
|
|
||||||
sprintf(vlog, "Server version: %s", vstring);
|
sprintf(vlog, "Server version: %s", vstring);
|
||||||
ssh_detect_bugs(vstring);
|
ssh_detect_bugs(vstring);
|
||||||
vlog[strcspn(vlog, "\r\n")] = '\0';
|
vlog[strcspn(vlog, "\r\n")] = '\0';
|
||||||
logevent(vlog);
|
logevent(vlog);
|
||||||
|
sfree(vlog);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Server version "1.99" means we can choose whether we use v1
|
* Server version "1.99" means we can choose whether we use v1
|
||||||
@ -1224,7 +1222,7 @@ static int do_ssh_init(unsigned char c) {
|
|||||||
/*
|
/*
|
||||||
* This is a v2 server. Begin v2 protocol.
|
* This is a v2 server. Begin v2 protocol.
|
||||||
*/
|
*/
|
||||||
char verstring[80];
|
char verstring[80], vlog[100];
|
||||||
sprintf(verstring, "SSH-2.0-%s", sshver);
|
sprintf(verstring, "SSH-2.0-%s", sshver);
|
||||||
SHA_Init(&exhashbase);
|
SHA_Init(&exhashbase);
|
||||||
/*
|
/*
|
||||||
@ -1232,11 +1230,11 @@ static int do_ssh_init(unsigned char c) {
|
|||||||
*/
|
*/
|
||||||
sha_string(&exhashbase, verstring, strlen(verstring));
|
sha_string(&exhashbase, verstring, strlen(verstring));
|
||||||
sha_string(&exhashbase, vstring, strcspn(vstring, "\r\n"));
|
sha_string(&exhashbase, vstring, strcspn(vstring, "\r\n"));
|
||||||
sprintf(vstring, "%s\n", verstring);
|
|
||||||
sprintf(vlog, "We claim version: %s", verstring);
|
sprintf(vlog, "We claim version: %s", verstring);
|
||||||
logevent(vlog);
|
logevent(vlog);
|
||||||
|
strcat(verstring, "\n");
|
||||||
logevent("Using SSH protocol version 2");
|
logevent("Using SSH protocol version 2");
|
||||||
sk_write(s, vstring, strlen(vstring));
|
sk_write(s, verstring, strlen(verstring));
|
||||||
ssh_protocol = ssh2_protocol;
|
ssh_protocol = ssh2_protocol;
|
||||||
ssh_version = 2;
|
ssh_version = 2;
|
||||||
s_rdpkt = ssh2_rdpkt;
|
s_rdpkt = ssh2_rdpkt;
|
||||||
@ -1244,14 +1242,15 @@ static int do_ssh_init(unsigned char c) {
|
|||||||
/*
|
/*
|
||||||
* This is a v1 server. Begin v1 protocol.
|
* This is a v1 server. Begin v1 protocol.
|
||||||
*/
|
*/
|
||||||
sprintf(vstring, "SSH-%s-%s\n",
|
char verstring[80], vlog[100];
|
||||||
|
sprintf(verstring, "SSH-%s-%s",
|
||||||
(ssh_versioncmp(version, "1.5") <= 0 ? version : "1.5"),
|
(ssh_versioncmp(version, "1.5") <= 0 ? version : "1.5"),
|
||||||
sshver);
|
sshver);
|
||||||
sprintf(vlog, "We claim version: %s", vstring);
|
sprintf(vlog, "We claim version: %s", verstring);
|
||||||
vlog[strcspn(vlog, "\r\n")] = '\0';
|
|
||||||
logevent(vlog);
|
logevent(vlog);
|
||||||
|
strcat(verstring, "\n");
|
||||||
logevent("Using SSH protocol version 1");
|
logevent("Using SSH protocol version 1");
|
||||||
sk_write(s, vstring, strlen(vstring));
|
sk_write(s, verstring, strlen(verstring));
|
||||||
ssh_protocol = ssh1_protocol;
|
ssh_protocol = ssh1_protocol;
|
||||||
ssh_version = 1;
|
ssh_version = 1;
|
||||||
s_rdpkt = ssh1_rdpkt;
|
s_rdpkt = ssh1_rdpkt;
|
||||||
@ -1259,7 +1258,6 @@ static int do_ssh_init(unsigned char c) {
|
|||||||
ssh_state = SSH_STATE_BEFORE_SIZE;
|
ssh_state = SSH_STATE_BEFORE_SIZE;
|
||||||
|
|
||||||
sfree(vstring);
|
sfree(vstring);
|
||||||
sfree(vlog);
|
|
||||||
|
|
||||||
crFinish(0);
|
crFinish(0);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user