From b3f3c0515b68a328e1b572296aa9a95485e04dc5 Mon Sep 17 00:00:00 2001 From: jacob Date: Sun, 20 Feb 2005 23:00:17 +0000 Subject: [PATCH] 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.) git-svn-id: svn://svn.tartarus.org/sgt/putty@5370 cda61777-01e9-0310-a592-d414129be87e --- windows/windlg.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/windows/windlg.c b/windows/windlg.c index c88e72d7..71125ec8 100644 --- a/windows/windlg.c +++ b/windows/windlg.c @@ -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; } } -- 2.11.0