X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/2dadaea5bcd47f319fef38fc0854af9e82664933..0ac2edb34df938e43d233e4d47a05231355747ee:/ssh.c diff --git a/ssh.c b/ssh.c index 4537f38f..f01f0bb8 100644 --- a/ssh.c +++ b/ssh.c @@ -734,7 +734,7 @@ static int alloc_channel_id(Ssh ssh) return low + 1 + CHANNEL_NUMBER_OFFSET; } -static void c_write(Ssh ssh, char *buf, int len) +static void c_write(Ssh ssh, const char *buf, int len) { if ((flags & FLAG_STDERR)) { int i; @@ -746,7 +746,7 @@ static void c_write(Ssh ssh, char *buf, int len) from_backend(ssh->frontend, 1, buf, len); } -static void c_write_untrusted(Ssh ssh, char *buf, int len) +static void c_write_untrusted(Ssh ssh, const char *buf, int len) { int i; for (i = 0; i < len; i++) { @@ -757,7 +757,7 @@ static void c_write_untrusted(Ssh ssh, char *buf, int len) } } -static void c_write_str(Ssh ssh, char *buf) +static void c_write_str(Ssh ssh, const char *buf) { c_write(ssh, buf, strlen(buf)); } @@ -1719,8 +1719,8 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) ssh->remote_bugs = 0; - if (ssh->cfg.sshbug_ignore1 == BUG_ON || - (ssh->cfg.sshbug_ignore1 == BUG_AUTO && + if (ssh->cfg.sshbug_ignore1 == FORCE_ON || + (ssh->cfg.sshbug_ignore1 == AUTO && (!strcmp(imp, "1.2.18") || !strcmp(imp, "1.2.19") || !strcmp(imp, "1.2.20") || !strcmp(imp, "1.2.21") || !strcmp(imp, "1.2.22") || !strcmp(imp, "Cisco-1.25")))) { @@ -1733,8 +1733,8 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) logevent("We believe remote version has SSH1 ignore bug"); } - if (ssh->cfg.sshbug_plainpw1 == BUG_ON || - (ssh->cfg.sshbug_plainpw1 == BUG_AUTO && + if (ssh->cfg.sshbug_plainpw1 == FORCE_ON || + (ssh->cfg.sshbug_plainpw1 == AUTO && (!strcmp(imp, "Cisco-1.25")))) { /* * These versions need a plain password sent; they can't @@ -1745,8 +1745,8 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) logevent("We believe remote version needs a plain SSH1 password"); } - if (ssh->cfg.sshbug_rsa1 == BUG_ON || - (ssh->cfg.sshbug_rsa1 == BUG_AUTO && + if (ssh->cfg.sshbug_rsa1 == FORCE_ON || + (ssh->cfg.sshbug_rsa1 == AUTO && (!strcmp(imp, "Cisco-1.25")))) { /* * These versions apparently have no clue whatever about @@ -1757,8 +1757,8 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) logevent("We believe remote version can't handle RSA authentication"); } - if (ssh->cfg.sshbug_hmac2 == BUG_ON || - (ssh->cfg.sshbug_hmac2 == BUG_AUTO && + if (ssh->cfg.sshbug_hmac2 == FORCE_ON || + (ssh->cfg.sshbug_hmac2 == AUTO && (wc_match("2.1.0*", imp) || wc_match("2.0.*", imp) || wc_match("2.2.0*", imp) || wc_match("2.3.0*", imp) || wc_match("2.1 *", imp)))) { @@ -1769,8 +1769,8 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) logevent("We believe remote version has SSH2 HMAC bug"); } - if (ssh->cfg.sshbug_derivekey2 == BUG_ON || - (ssh->cfg.sshbug_derivekey2 == BUG_AUTO && + if (ssh->cfg.sshbug_derivekey2 == FORCE_ON || + (ssh->cfg.sshbug_derivekey2 == AUTO && (wc_match("2.0.0*", imp) || wc_match("2.0.1[01]*", imp) ))) { /* * These versions have the key-derivation bug (failing to @@ -1781,8 +1781,8 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) logevent("We believe remote version has SSH2 key-derivation bug"); } - if (ssh->cfg.sshbug_rsapad2 == BUG_ON || - (ssh->cfg.sshbug_rsapad2 == BUG_AUTO && + if (ssh->cfg.sshbug_rsapad2 == FORCE_ON || + (ssh->cfg.sshbug_rsapad2 == AUTO && (wc_match("OpenSSH_2.[5-9]*", imp) || wc_match("OpenSSH_3.[0-2]*", imp)))) { /* @@ -1792,7 +1792,7 @@ static void ssh_detect_bugs(Ssh ssh, char *vstring) logevent("We believe remote version has SSH2 RSA padding bug"); } - if (ssh->cfg.sshbug_dhgex2 == BUG_ON) { + if (ssh->cfg.sshbug_dhgex2 == FORCE_ON) { /* * User specified the SSH2 DH GEX bug. */ @@ -2457,8 +2457,8 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt) } s->tis_auth_refused = s->ccard_auth_refused = 0; /* Load the public half of ssh->cfg.keyfile so we notice if it's in Pageant */ - if (*ssh->cfg.keyfile) { - if (!rsakey_pubblob(ssh->cfg.keyfile, + if (!filename_is_null(ssh->cfg.keyfile)) { + if (!rsakey_pubblob(&ssh->cfg.keyfile, &s->publickey_blob, &s->publickey_bloblen)) s->publickey_blob = NULL; } else @@ -2586,7 +2586,7 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt) if (s->authed) break; } - if (*ssh->cfg.keyfile && !s->tried_publickey) + if (!filename_is_null(ssh->cfg.keyfile) && !s->tried_publickey) s->pwpkt_type = SSH1_CMSG_AUTH_RSA; if (ssh->cfg.try_tis_auth && @@ -2652,7 +2652,7 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt) if (flags & FLAG_VERBOSE) c_write_str(ssh, "Trying public key authentication.\r\n"); logeventf(ssh, "Trying public key \"%s\"", ssh->cfg.keyfile); - type = key_type(ssh->cfg.keyfile); + type = key_type(&ssh->cfg.keyfile); if (type != SSH_KEYTYPE_SSH1) { sprintf(msgbuf, "Key is of wrong type (%s)", key_type_to_str(type)); @@ -2662,7 +2662,7 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt) s->tried_publickey = 1; continue; } - if (!rsakey_encrypted(ssh->cfg.keyfile, &comment)) { + if (!rsakey_encrypted(&ssh->cfg.keyfile, &comment)) { if (flags & FLAG_VERBOSE) c_write_str(ssh, "No passphrase required.\r\n"); goto tryauth; @@ -2718,10 +2718,10 @@ static int do_ssh1_login(Ssh ssh, unsigned char *in, int inlen, int ispkt) s->tried_publickey = 1; { - int ret = loadrsakey(ssh->cfg.keyfile, &s->key, s->password); + int ret = loadrsakey(&ssh->cfg.keyfile, &s->key, s->password); if (ret == 0) { c_write_str(ssh, "Couldn't load private key from "); - c_write_str(ssh, ssh->cfg.keyfile); + c_write_str(ssh, filename_to_str(&ssh->cfg.keyfile)); c_write_str(ssh, ".\r\n"); continue; /* go and try password */ } @@ -4388,13 +4388,13 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) s->tried_keyb_inter = FALSE; s->kbd_inter_running = FALSE; /* Load the pub half of ssh->cfg.keyfile so we notice if it's in Pageant */ - if (*ssh->cfg.keyfile) { + if (!filename_is_null(ssh->cfg.keyfile)) { int keytype; logeventf(ssh, "Reading private key file \"%.150s\"", ssh->cfg.keyfile); - keytype = key_type(ssh->cfg.keyfile); + keytype = key_type(&ssh->cfg.keyfile); if (keytype == SSH_KEYTYPE_SSH2) { s->publickey_blob = - ssh2_userkey_loadpub(ssh->cfg.keyfile, NULL, + ssh2_userkey_loadpub(&ssh->cfg.keyfile, NULL, &s->publickey_bloblen); } else { char *msgbuf; @@ -4692,7 +4692,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) * willing to accept it. */ pub_blob = - (unsigned char *)ssh2_userkey_loadpub(ssh->cfg.keyfile, + (unsigned char *)ssh2_userkey_loadpub(&ssh->cfg.keyfile, &algorithm, &pub_blob_len); if (pub_blob) { @@ -4720,7 +4720,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) * Actually attempt a serious authentication using * the key. */ - if (ssh2_userkey_encrypted(ssh->cfg.keyfile, &comment)) { + if (ssh2_userkey_encrypted(&ssh->cfg.keyfile, &comment)) { sprintf(s->pwprompt, "Passphrase for key \"%.100s\": ", comment); @@ -4872,7 +4872,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) */ struct ssh2_userkey *key; - key = ssh2_load_userkey(ssh->cfg.keyfile, s->password); + key = ssh2_load_userkey(&ssh->cfg.keyfile, s->password); if (key == SSH2_WRONG_PASSPHRASE || key == NULL) { if (key == SSH2_WRONG_PASSPHRASE) { c_write_str(ssh, "Wrong passphrase\r\n");