mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-08 08:58:00 +00:00
f317f8e67e
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 :-)
122 lines
3.7 KiB
C
122 lines
3.7 KiB
C
/*
|
|
* Common pieces between the platform console frontend modules.
|
|
*/
|
|
|
|
#include <stdbool.h>
|
|
#include <stdarg.h>
|
|
|
|
#include "putty.h"
|
|
#include "misc.h"
|
|
#include "console.h"
|
|
|
|
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"
|
|
"If you want to carry on connecting just once, without\n"
|
|
"adding the key to the cache, enter \"n\".\n"
|
|
"If you do not trust this host, press Return to abandon the\n"
|
|
"connection.\n";
|
|
const char hk_absentmsg_interactive_prompt[] =
|
|
"Store key in cache? (y/n, Return cancels connection, "
|
|
"i for more info) ";
|
|
|
|
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"
|
|
"If you want to carry on connecting but without updating\n"
|
|
"the cache, enter \"n\".\n"
|
|
"If you want to abandon the connection completely, press\n"
|
|
"Return to cancel. Pressing Return is the ONLY guaranteed\n"
|
|
"safe choice.\n";
|
|
const char hk_wrongmsg_interactive_prompt[] =
|
|
"Update cached key? (y/n, Return cancels connection, "
|
|
"i for more info) ";
|
|
|
|
const char weakcrypto_msg_common_fmt[] =
|
|
"The first %s supported by the server is\n"
|
|
"%s, which is below the configured warning threshold.\n";
|
|
|
|
const char weakhk_msg_common_fmt[] =
|
|
"The first host key type we have stored for this server\n"
|
|
"is %s, which is below the configured warning threshold.\n"
|
|
"The server also provides the following types of host key\n"
|
|
"above the threshold, which we do not have stored:\n"
|
|
"%s\n";
|
|
|
|
const char console_continue_prompt[] = "Continue with connection? (y/n) ";
|
|
const char console_abandoned_msg[] = "Connection abandoned.\n";
|
|
|
|
bool console_batch_mode = false;
|
|
|
|
/*
|
|
* Error message and/or fatal exit functions, all based on
|
|
* console_print_error_msg which the platform front end provides.
|
|
*/
|
|
void console_print_error_msg_fmt_v(
|
|
const char *prefix, const char *fmt, va_list ap)
|
|
{
|
|
char *msg = dupvprintf(fmt, ap);
|
|
console_print_error_msg(prefix, msg);
|
|
sfree(msg);
|
|
}
|
|
|
|
void console_print_error_msg_fmt(const char *prefix, const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, fmt);
|
|
console_print_error_msg_fmt_v(prefix, fmt, ap);
|
|
va_end(ap);
|
|
}
|
|
|
|
void modalfatalbox(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, fmt);
|
|
console_print_error_msg_fmt_v("FATAL ERROR", fmt, ap);
|
|
va_end(ap);
|
|
cleanup_exit(1);
|
|
}
|
|
|
|
void nonfatal(const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
va_start(ap, fmt);
|
|
console_print_error_msg_fmt_v("ERROR", fmt, ap);
|
|
va_end(ap);
|
|
}
|
|
|
|
void console_connection_fatal(Seat *seat, const char *msg)
|
|
{
|
|
console_print_error_msg("FATAL ERROR", msg);
|
|
cleanup_exit(1);
|
|
}
|
|
|
|
/*
|
|
* Console front ends redo their select() or equivalent every time, so
|
|
* they don't need separate timer handling.
|
|
*/
|
|
void timer_change_notify(unsigned long next)
|
|
{
|
|
}
|