1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-07-03 20:42:48 -05:00

Move the MessageBox-with-help function out into winutils.c, although it's

still only used for the host key popups. Side-effects:
 - requested_help is a winstuff.h global
 - Pageant now defines winstuff.h globals

(Also, my previous fix to my improved host-key dialogs only got the "changed"
case, not the "unknown" case. Some days I shouldn't be let near a keyboard.)

[originally from svn r5415]
This commit is contained in:
Jacob Nevins
2005-03-01 00:00:09 +00:00
parent f246144c44
commit 182a511ec3
6 changed files with 76 additions and 64 deletions

View File

@ -40,8 +40,6 @@ static struct dlgparam dp;
static char **events = NULL;
static int nevents = 0, negsize = 0;
static int requested_help;
extern Config cfg; /* defined in window.c */
struct sesslist sesslist; /* exported to window.c */
@ -752,28 +750,6 @@ void showabout(HWND hwnd)
DialogBox(hinst, MAKEINTRESOURCE(IDD_ABOUTBOX), hwnd, AboutProc);
}
/* Helper function for verify_ssh_host_key(). */
static VOID CALLBACK verify_ssh_host_key_help(LPHELPINFO lpHelpInfo)
{
if (help_path) {
char *context = NULL;
#define CHECK_CTX(name) \
do { \
if (lpHelpInfo->dwContextId == WINHELP_CTXID_ ## name) \
context = WINHELP_CTX_ ## name; \
} while (0)
CHECK_CTX(errors_hostkey_absent);
CHECK_CTX(errors_hostkey_changed);
#undef CHECK_CTX
if (context) {
char *cmd = dupprintf("JI(`',`%s')", context);
WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd);
sfree(cmd);
requested_help = TRUE;
}
}
}
int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
char *keystr, char *fingerprint,
void (*callback)(void *ctx, int result), void *ctx)
@ -812,23 +788,6 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
static const char mbtitle[] = "%s Security Alert";
UINT help_button = 0;
MSGBOXPARAMS mbox;
/*
* We use MessageBoxIndirect() because it allows us to specify a
* callback function for the Help button.
*/
mbox.cbSize = sizeof(mbox);
mbox.hInstance = hinst;
mbox.hwndOwner = hwnd;
mbox.lpfnMsgBoxCallback = &verify_ssh_host_key_help;
mbox.dwLanguageId = LANG_NEUTRAL;
/* Do we have a help file? */
if (help_path)
help_button = MB_HELP;
/*
* Verify the key against the registry.
*/
@ -838,16 +797,15 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
return 1;
if (ret == 2) { /* key was different */
int mbret;
mbox.lpszText = dupprintf(wrongmsg, appname, keytype, fingerprint,
appname);
mbox.lpszCaption = dupprintf(mbtitle, appname);
mbox.dwContextHelpId = HELPCTXID(errors_hostkey_changed);
mbox.dwStyle = MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON3 |
help_button;
mbret = MessageBoxIndirect(&mbox);
char *text = dupprintf(wrongmsg, appname, keytype, fingerprint,
appname);
char *caption = dupprintf(mbtitle, appname);
mbret = message_box(text, caption,
MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON3,
HELPCTXID(errors_hostkey_changed));
assert(mbret==IDYES || mbret==IDNO || mbret==IDCANCEL);
sfree((void *)mbox.lpszText);
sfree((void *)mbox.lpszCaption);
sfree(text);
sfree(caption);
if (mbret == IDYES) {
store_host_key(host, port, keytype, keystr);
return 1;
@ -857,18 +815,18 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
}
if (ret == 1) { /* key was absent */
int mbret;
mbox.lpszText = dupprintf(absentmsg, keytype, fingerprint, appname);
mbox.lpszCaption = dupprintf(mbtitle, appname);
mbox.dwContextHelpId = HELPCTXID(errors_hostkey_absent);
mbox.dwStyle = MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON3 |
help_button;
mbret = MessageBoxIndirect(&mbox);
char *text = dupprintf(absentmsg, keytype, fingerprint, appname);
char *caption = dupprintf(mbtitle, appname);
mbret = message_box(text, caption,
MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON3,
HELPCTXID(errors_hostkey_absent));
assert(mbret==IDYES || mbret==IDNO || mbret==IDCANCEL);
sfree((void *)mbox.lpszText);
sfree((void *)mbox.lpszCaption);
if (mbret == IDYES)
sfree(text);
sfree(caption);
if (mbret == IDYES) {
store_host_key(host, port, keytype, keystr);
if (mbret == IDNO)
return 1;
} else if (mbret == IDNO)
return 1;
return 0;
}