1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-03-28 17:27:08 -05:00

Centralise host key message formatting.

The format _strings_ were previously centralised into the platform-
independent console.c, as const char arrays. Now the actual formatting
operation is centralised as well, by means of console.c providing a
function that takes all the necessary parameters and returns a
formatted piece of text for the console.

Mostly this is so that I can add extra parameters to the message with
some confidence: changing a format string in one file and two fprintf
statements in other files to match seems like the kind of situation
you wish you hadn't got into in the first place :-)
This commit is contained in:
Simon Tatham 2021-09-15 06:00:38 +01:00
parent e5b6aba63a
commit f317f8e67e
4 changed files with 43 additions and 28 deletions

View File

@ -9,11 +9,15 @@
#include "misc.h"
#include "console.h"
const char hk_absentmsg_common_fmt[] =
"The server's host key is not cached. You have no guarantee\n"
"that the server is the computer you think it is.\n"
"The server's %s key fingerprint is:\n"
"%s\n";
char *hk_absentmsg_common(const char *keytype, const char *fingerprint)
{
return dupprintf(
"The server's host key is not cached. You have no guarantee\n"
"that the server is the computer you think it is.\n"
"The server's %s key fingerprint is:\n"
"%s\n", keytype, fingerprint);
}
const char hk_absentmsg_interactive_intro[] =
"If you trust this host, enter \"y\" to add the key to\n"
"PuTTY's cache and carry on connecting.\n"
@ -25,14 +29,18 @@ const char hk_absentmsg_interactive_prompt[] =
"Store key in cache? (y/n, Return cancels connection, "
"i for more info) ";
const char hk_wrongmsg_common_fmt[] =
"WARNING - POTENTIAL SECURITY BREACH!\n"
"The server's host key does not match the one PuTTY has\n"
"cached. This means that either the server administrator\n"
"has changed the host key, or you have actually connected\n"
"to another computer pretending to be the server.\n"
"The new %s key fingerprint is:\n"
"%s\n";
char *hk_wrongmsg_common(const char *keytype, const char *fingerprint)
{
return dupprintf(
"WARNING - POTENTIAL SECURITY BREACH!\n"
"The server's host key does not match the one PuTTY has\n"
"cached. This means that either the server administrator\n"
"has changed the host key, or you have actually connected\n"
"to another computer pretending to be the server.\n"
"The new %s key fingerprint is:\n"
"%s\n", keytype, fingerprint);
}
const char hk_wrongmsg_interactive_intro[] =
"If you were expecting this change and trust the new key,\n"
"enter \"y\" to update PuTTY's cache and continue connecting.\n"

View File

@ -2,10 +2,11 @@
* Common pieces between the platform console frontend modules.
*/
extern const char hk_absentmsg_common_fmt[];
char *hk_absentmsg_common(const char *keytype, const char *fingerprint);
extern const char hk_absentmsg_interactive_intro[];
extern const char hk_absentmsg_interactive_prompt[];
extern const char hk_wrongmsg_common_fmt[];
char *hk_wrongmsg_common(const char *keytype, const char *fingerprint);
extern const char hk_wrongmsg_interactive_intro[];
extern const char hk_wrongmsg_interactive_prompt[];

View File

@ -111,7 +111,8 @@ int console_verify_ssh_host_key(
char line[32];
struct termios cf;
const char *common_fmt, *intro, *prompt;
char *common;
const char *intro, *prompt;
/*
* Verify the key.
@ -121,21 +122,23 @@ int console_verify_ssh_host_key(
if (ret == 0) /* success - key matched OK */
return 1;
premsg(&cf);
FingerprintType fptype_default =
ssh2_pick_default_fingerprint(fingerprints);
if (ret == 2) { /* key was different */
common_fmt = hk_wrongmsg_common_fmt;
common = hk_wrongmsg_common(keytype, fingerprints[fptype_default]);
intro = hk_wrongmsg_interactive_intro;
prompt = hk_wrongmsg_interactive_prompt;
} else { /* key was absent */
common_fmt = hk_absentmsg_common_fmt;
common = hk_absentmsg_common(keytype, fingerprints[fptype_default]);
intro = hk_absentmsg_interactive_intro;
prompt = hk_absentmsg_interactive_prompt;
}
FingerprintType fptype_default =
ssh2_pick_default_fingerprint(fingerprints);
premsg(&cf);
fputs(common, stderr);
sfree(common);
fprintf(stderr, common_fmt, keytype, fingerprints[fptype_default]);
if (console_batch_mode) {
fputs(console_abandoned_msg, stderr);
postmsg(&cf);

View File

@ -40,7 +40,8 @@ int console_verify_ssh_host_key(
int ret;
HANDLE hin;
DWORD savemode, i;
const char *common_fmt, *intro, *prompt;
char *common;
const char *intro, *prompt;
char line[32];
@ -52,20 +53,22 @@ int console_verify_ssh_host_key(
if (ret == 0) /* success - key matched OK */
return 1;
FingerprintType fptype_default =
ssh2_pick_default_fingerprint(fingerprints);
if (ret == 2) { /* key was different */
common_fmt = hk_wrongmsg_common_fmt;
common = hk_wrongmsg_common(keytype, fingerprints[fptype_default]);
intro = hk_wrongmsg_interactive_intro;
prompt = hk_wrongmsg_interactive_prompt;
} else { /* key was absent */
common_fmt = hk_absentmsg_common_fmt;
common = hk_absentmsg_common(keytype, fingerprints[fptype_default]);
intro = hk_absentmsg_interactive_intro;
prompt = hk_absentmsg_interactive_prompt;
}
FingerprintType fptype_default =
ssh2_pick_default_fingerprint(fingerprints);
fputs(common, stderr);
sfree(common);
fprintf(stderr, common_fmt, keytype, fingerprints[fptype_default]);
if (console_batch_mode) {
fputs(console_abandoned_msg, stderr);
return 0;