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:
parent
140688e77f
commit
651cedc7fb
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user