1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 09:58:01 +00:00

On Windows, MessageBoxIndirect() was sometimes failing to pop up the host key

dialog and returning an unexpected value (0), causing everything to silently
behave as if the user had said "allow this connection but don't store host
key"!

Initialising (MSGBOXPARAMS).hInstance seems to have cured this (although the
MSDN docs seemed to indicate it wouldn't be used) -- if so, it's been broken
since r5309 on 2004-02-15 -- but since this was something of a Heisenbug, and
the behaviour was so catastrophic when MessageBoxIndirect() behaved oddly, I've
rearranged the code to default to cancelling, and added an assertion for
visibility.

(Windows PuTTY still seems to be broken wrt servers that send NEWKEYS while
we're waiting for the user, which happens to include the "SSH-2.0-2.4.1 SSH
Secure Shell OpenVMS V1.0" I'm testing against. I don't know why. The above bug
may also have been limited to this circumstance.)

[originally from svn r5370]
[r5309 == 99122767f5]
This commit is contained in:
Jacob Nevins 2005-02-20 23:00:17 +00:00
parent 140688e77f
commit 651cedc7fb

View File

@ -769,6 +769,7 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
* 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;
@ -793,13 +794,14 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
mbox.dwStyle = MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON3 |
help_button;
mbret = MessageBoxIndirect(&mbox);
assert(mbret==IDYES || mbret==IDNO || mbret==IDCANCEL);
sfree((void *)mbox.lpszText);
sfree((void *)mbox.lpszCaption);
if (mbret == IDYES)
store_host_key(host, port, keytype, keystr);
if (mbret == IDCANCEL)
return 0;
return 1;
if (mbret == IDNO)
return 1;
return 0;
}
if (ret == 1) { /* key was absent */
int mbret;
@ -809,13 +811,14 @@ int verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
mbox.dwStyle = MB_ICONWARNING | MB_YESNOCANCEL | MB_DEFBUTTON3 |
help_button;
mbret = MessageBoxIndirect(&mbox);
assert(mbret==IDYES || mbret==IDNO || mbret==IDCANCEL);
sfree((void *)mbox.lpszText);
sfree((void *)mbox.lpszCaption);
if (mbret == IDYES)
store_host_key(host, port, keytype, keystr);
if (mbret == IDCANCEL)
return 0;
return 1;
if (mbret == IDNO)
return 1;
return 0;
}
}