X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/1cd246bbcbac9071752ff80152c39e0569030aa8..5e1a8e278f3210fd6f37af7867bbb42cf160fb92:/windlg.c diff --git a/windlg.c b/windlg.c index b3bfcbff..023ebbcb 100644 --- a/windlg.c +++ b/windlg.c @@ -5,8 +5,8 @@ #include #include -#include "putty.h" #include "ssh.h" +#include "putty.h" #include "win_res.h" #define NPANELS 7 @@ -15,8 +15,6 @@ static const char *const puttystr = PUTTY_REG_POS "\\Sessions"; -static void get_sesslist(int allocate); - static char **negots = NULL; static int nnegots = 0, negsize = 0; static HWND logbox = NULL, abtbox = NULL; @@ -42,8 +40,6 @@ static void mungestr(char *in, char *out) { } static void unmungestr(char *in, char *out) { - int candot = 0; - while (*in) { if (*in == '%' && in[1] && in[2]) { int i, j; @@ -97,9 +93,6 @@ static void gppi(HKEY key, LPCTSTR name, int def, int *i) { static HINSTANCE hinst; -static char **sessions; -static int nsessions; - static int readytogo; static void save_settings (char *section, int do_host) { @@ -123,7 +116,8 @@ static void save_settings (char *section, int do_host) { wpps (sesskey, "HostName", cfg.host); wppi (sesskey, "PortNumber", cfg.port); wpps (sesskey, "Protocol", - cfg.protocol == PROT_SSH ? "ssh" : "telnet"); + cfg.protocol == PROT_SSH ? "ssh" : + cfg.protocol == PROT_TELNET ? "telnet" : "raw" ); } wppi (sesskey, "CloseOnExit", !!cfg.close_on_exit); wpps (sesskey, "TerminalType", cfg.termtype); @@ -149,6 +143,8 @@ static void save_settings (char *section, int do_host) { } wpps (sesskey, "UserName", cfg.username); wppi (sesskey, "NoPTY", cfg.nopty); + wpps (sesskey, "Cipher", cfg.cipher == CIPHER_BLOWFISH ? "blowfish" : + cfg.cipher == CIPHER_DES ? "des" : "3des"); wppi (sesskey, "RFCEnviron", cfg.rfc_environ); wppi (sesskey, "BackspaceIsDelete", cfg.bksp_is_delete); wppi (sesskey, "RXVTHomeEnd", cfg.rxvt_homeend); @@ -210,31 +206,34 @@ static void load_settings (char *section, int do_host) { int i; HKEY subkey1, sesskey; char *p; + char prot[10]; p = malloc(3*strlen(section)+1); mungestr(section, p); - - if (RegOpenKey(HKEY_CURRENT_USER, puttystr, &subkey1) != ERROR_SUCCESS || - RegOpenKey(subkey1, p, &sesskey) != ERROR_SUCCESS) { + + if (RegOpenKey(HKEY_CURRENT_USER, puttystr, &subkey1) != ERROR_SUCCESS) { sesskey = NULL; + } else { + if (RegOpenKey(subkey1, p, &sesskey) != ERROR_SUCCESS) { + sesskey = NULL; + } + RegCloseKey(subkey1); } free(p); - RegCloseKey(subkey1); - if (do_host) { - char prot[10]; - gpps (sesskey, "HostName", "", cfg.host, sizeof(cfg.host)); - gppi (sesskey, "PortNumber", 23, &cfg.port); - gpps (sesskey, "Protocol", "telnet", prot, 10); - if (!strcmp(prot, "ssh")) - cfg.protocol = PROT_SSH; - else - cfg.protocol = PROT_TELNET; - } else { - cfg.port = 23; - *cfg.host = '\0'; - } + gpps (sesskey, "HostName", "", cfg.host, sizeof(cfg.host)); + gppi (sesskey, "PortNumber", default_port, &cfg.port); + gpps (sesskey, "Protocol", "default", prot, 10); + if (!strcmp(prot, "ssh")) + cfg.protocol = PROT_SSH; + else if (!strcmp(prot, "telnet")) + cfg.protocol = PROT_TELNET; + else if (!strcmp(prot, "raw")) + cfg.protocol = PROT_RAW; + else + cfg.protocol = default_protocol; + gppi (sesskey, "CloseOnExit", 1, &cfg.close_on_exit); gpps (sesskey, "TerminalType", "xterm", cfg.termtype, sizeof(cfg.termtype)); @@ -261,6 +260,16 @@ static void load_settings (char *section, int do_host) { } gpps (sesskey, "UserName", "", cfg.username, sizeof(cfg.username)); gppi (sesskey, "NoPTY", 0, &cfg.nopty); + { + char cipher[10]; + gpps (sesskey, "Cipher", "3des", cipher, 10); + if (!strcmp(cipher, "blowfish")) + cfg.cipher = CIPHER_BLOWFISH; + else if (!strcmp(cipher, "des")) + cfg.cipher = CIPHER_DES; + else + cfg.cipher = CIPHER_3DES; + } gppi (sesskey, "RFCEnviron", 0, &cfg.rfc_environ); gppi (sesskey, "BackspaceIsDelete", 1, &cfg.bksp_is_delete); gppi (sesskey, "RXVTHomeEnd", 0, &cfg.rxvt_homeend); @@ -357,6 +366,27 @@ static int CALLBACK LogProc (HWND hwnd, UINT msg, return 0; } +static int CALLBACK LicenceProc (HWND hwnd, UINT msg, + WPARAM wParam, LPARAM lParam) { + switch (msg) { + case WM_INITDIALOG: + return 1; + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + abtbox = NULL; + DestroyWindow (hwnd); + return 0; + } + return 0; + case WM_CLOSE: + abtbox = NULL; + DestroyWindow (hwnd); + return 0; + } + return 0; +} + static int CALLBACK AboutProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { @@ -377,7 +407,7 @@ static int CALLBACK AboutProc (HWND hwnd, UINT msg, case IDA_LICENCE: EnableWindow(hwnd, 0); DialogBox (hinst, MAKEINTRESOURCE(IDD_LICENCEBOX), - NULL, AboutProc); + NULL, LicenceProc); EnableWindow(hwnd, 1); return 0; } @@ -420,8 +450,9 @@ static int CALLBACK ConnectionProc (HWND hwnd, UINT msg, for (i = 0; i < nsessions; i++) SendDlgItemMessage (hwnd, IDC0_SESSLIST, LB_ADDSTRING, 0, (LPARAM) (sessions[i])); - CheckRadioButton (hwnd, IDC0_PROTTELNET, IDC0_PROTSSH, - cfg.protocol==PROT_SSH ? IDC0_PROTSSH : IDC0_PROTTELNET); + CheckRadioButton (hwnd, IDC0_PROTRAW, IDC0_PROTSSH, + cfg.protocol==PROT_SSH ? IDC0_PROTSSH : + cfg.protocol==PROT_TELNET ? IDC0_PROTTELNET : IDC0_PROTRAW ); CheckDlgButton (hwnd, IDC0_CLOSEEXIT, cfg.close_on_exit); break; case WM_LBUTTONUP: @@ -437,10 +468,12 @@ static int CALLBACK ConnectionProc (HWND hwnd, UINT msg, switch (LOWORD(wParam)) { case IDC0_PROTTELNET: case IDC0_PROTSSH: + case IDC0_PROTRAW: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) { int i = IsDlgButtonChecked (hwnd, IDC0_PROTSSH); - cfg.protocol = i ? PROT_SSH : PROT_TELNET; + int j = IsDlgButtonChecked (hwnd, IDC0_PROTTELNET); + cfg.protocol = i ? PROT_SSH : j ? PROT_TELNET : PROT_RAW ; if ((cfg.protocol == PROT_SSH && cfg.port == 23) || (cfg.protocol == PROT_TELNET && cfg.port == 22)) { cfg.port = i ? 22 : 23; @@ -516,9 +549,9 @@ static int CALLBACK ConnectionProc (HWND hwnd, UINT msg, !!strcmp(sessions[n], "Default Settings")); SetDlgItemText (hwnd, IDC0_HOST, cfg.host); SetDlgItemInt (hwnd, IDC0_PORT, cfg.port, FALSE); - CheckRadioButton (hwnd, IDC0_PROTTELNET, IDC0_PROTSSH, + CheckRadioButton (hwnd, IDC0_PROTRAW, IDC0_PROTSSH, (cfg.protocol==PROT_SSH ? IDC0_PROTSSH : - IDC0_PROTTELNET)); + cfg.protocol==PROT_TELNET ? IDC0_PROTTELNET : IDC0_PROTRAW)); CheckDlgButton (hwnd, IDC0_CLOSEEXIT, cfg.close_on_exit); SendDlgItemMessage (hwnd, IDC0_SESSLIST, LB_SETCURSEL, (WPARAM) -1, 0); @@ -841,6 +874,11 @@ static int CALLBACK SshProc (HWND hwnd, UINT msg, SetDlgItemText (hwnd, IDC3_TTEDIT, cfg.termtype); SetDlgItemText (hwnd, IDC3_LOGEDIT, cfg.username); CheckDlgButton (hwnd, IDC3_NOPTY, cfg.nopty); + CheckRadioButton (hwnd, IDC3_CIPHER3DES, IDC3_CIPHERDES, + cfg.cipher == CIPHER_BLOWFISH ? IDC3_CIPHERBLOWF : + cfg.cipher == CIPHER_DES ? IDC3_CIPHERDES : + + IDC3_CIPHER3DES); break; case WM_COMMAND: switch (LOWORD(wParam)) { @@ -859,6 +897,19 @@ static int CALLBACK SshProc (HWND hwnd, UINT msg, HIWORD(wParam) == BN_DOUBLECLICKED) cfg.nopty = IsDlgButtonChecked (hwnd, IDC3_NOPTY); break; + case IDC3_CIPHER3DES: + case IDC3_CIPHERBLOWF: + case IDC3_CIPHERDES: + if (HIWORD(wParam) == BN_CLICKED || + HIWORD(wParam) == BN_DOUBLECLICKED) { + if (IsDlgButtonChecked (hwnd, IDC3_CIPHER3DES)) + cfg.cipher = CIPHER_3DES; + else if (IsDlgButtonChecked (hwnd, IDC3_CIPHERBLOWF)) + cfg.cipher = CIPHER_BLOWFISH; + else if (IsDlgButtonChecked (hwnd, IDC3_CIPHERDES)) + cfg.cipher = CIPHER_DES; + } + break; } break; } @@ -1175,7 +1226,7 @@ static int CALLBACK ReconfDlgProc (HWND hwnd, UINT msg, RECONF_NPANELS, reconfp, &page); } -static void get_sesslist(int allocate) { +void get_sesslist(int allocate) { static char *buffer; int buflen, bufsize, i, ret; char otherbuf[2048];