X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/d3a1a808f65812c591ef0de3e61a94b13aa73160..739c28d05a5e17c231e56db2f18145281f885158:/puttygen.c diff --git a/puttygen.c b/puttygen.c index 4e2098e2..42af3976 100644 --- a/puttygen.c +++ b/puttygen.c @@ -22,6 +22,23 @@ static int requested_help; static char *cmdline_keyfile = NULL; +/* + * Print a modal (Really Bad) message box and perform a fatal exit. + */ +void modalfatalbox(char *fmt, ...) +{ + va_list ap; + char *stuff; + + va_start(ap, fmt); + stuff = dupvprintf(fmt, ap); + va_end(ap); + MessageBox(NULL, stuff, "PuTTYgen Fatal Error", + MB_SYSTEMMODAL | MB_ICONERROR | MB_OK); + sfree(stuff); + exit(1); +} + /* ---------------------------------------------------------------------- * Progress report code. This is really horrible :-) */ @@ -185,10 +202,11 @@ static int prompt_keyfile(HWND hwnd, char *dlgtitle, #endif of.hwndOwner = hwnd; if (ppk) { - of.lpstrFilter = "PuTTY Private Key Files\0*.PPK\0All Files\0*\0\0\0"; + of.lpstrFilter = "PuTTY Private Key Files (*.ppk)\0*.ppk\0" + "All Files (*.*)\0*\0\0\0"; of.lpstrDefExt = ".ppk"; } else { - of.lpstrFilter = "All Files\0*\0\0\0"; + of.lpstrFilter = "All Files (*.*)\0*\0\0\0"; } of.lpstrCustomFilter = NULL; of.nFilterIndex = 1; @@ -206,14 +224,6 @@ static int prompt_keyfile(HWND hwnd, char *dlgtitle, } /* - * This function is needed to link with the DES code. We need not - * have it do anything at all. - */ -void logevent(char *msg) -{ -} - -/* * Dialog-box function for the Licence box. */ static int CALLBACK LicenceProc(HWND hwnd, UINT msg, @@ -356,10 +366,8 @@ static void setupbigedit1(HWND hwnd, int id, int idstatic, struct RSAKey *key) dec1 = bignum_decimal(key->exponent); dec2 = bignum_decimal(key->modulus); - buffer = smalloc(strlen(dec1) + strlen(dec2) + - strlen(key->comment) + 30); - sprintf(buffer, "%d %s %s %s", - bignum_bitcount(key->modulus), dec1, dec2, key->comment); + buffer = dupprintf("%d %s %s %s", bignum_bitcount(key->modulus), + dec1, dec2, key->comment); SetDlgItemText(hwnd, id, buffer); SetDlgItemText(hwnd, idstatic, "&Public key for pasting into authorized_keys file:"); @@ -613,7 +621,7 @@ void ui_set_state(HWND hwnd, struct MainDlgState *state, int status) } void load_key_file(HWND hwnd, struct MainDlgState *state, - char *filename, int was_import_cmd) + Filename filename, int was_import_cmd) { char passphrase[PASSPHRASE_MAXLEN]; int needs_pass; @@ -624,7 +632,7 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, struct RSAKey newkey1; struct ssh2_userkey *newkey2 = NULL; - type = realtype = key_type(filename); + type = realtype = key_type(&filename); if (type != SSH_KEYTYPE_SSH1 && type != SSH_KEYTYPE_SSH2 && !import_possible(type)) { @@ -644,12 +652,12 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, comment = NULL; if (realtype == SSH_KEYTYPE_SSH1) - needs_pass = rsakey_encrypted(filename, &comment); + needs_pass = rsakey_encrypted(&filename, &comment); else if (realtype == SSH_KEYTYPE_SSH2) needs_pass = - ssh2_userkey_encrypted(filename, &comment); + ssh2_userkey_encrypted(&filename, &comment); else - needs_pass = import_encrypted(filename, realtype, + needs_pass = import_encrypted(&filename, realtype, &comment); pps.passphrase = passphrase; pps.comment = comment; @@ -668,17 +676,17 @@ void load_key_file(HWND hwnd, struct MainDlgState *state, *passphrase = '\0'; if (type == SSH_KEYTYPE_SSH1) { if (realtype == type) - ret = loadrsakey(filename, &newkey1, + ret = loadrsakey(&filename, &newkey1, passphrase); else - ret = import_ssh1(filename, realtype, + ret = import_ssh1(&filename, realtype, &newkey1, passphrase); } else { if (realtype == type) - newkey2 = ssh2_load_userkey(filename, + newkey2 = ssh2_load_userkey(&filename, passphrase); else - newkey2 = import_ssh2(filename, realtype, + newkey2 = import_ssh2(&filename, realtype, passphrase); if (newkey2 == SSH2_WRONG_PASSPHRASE) ret = -1; @@ -932,7 +940,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, * Load a key file if one was provided on the command line. */ if (cmdline_keyfile) - load_key_file(hwnd, state, cmdline_keyfile, 0); + load_key_file(hwnd, state, filename_from_str(cmdline_keyfile), 0); return 1; case WM_MOUSEMOVE: @@ -1146,30 +1154,33 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, int ret; FILE *fp = fopen(filename, "r"); if (fp) { - char buffer[FILENAME_MAX + 80]; + char *buffer; fclose(fp); - sprintf(buffer, "Overwrite existing file\n%.*s?", - FILENAME_MAX, filename); + buffer = dupprintf("Overwrite existing file\n%s?", + filename); ret = MessageBox(hwnd, buffer, "PuTTYgen Warning", MB_YESNO | MB_ICONWARNING); + sfree(buffer); if (ret != IDYES) break; } if (state->ssh2) { + Filename fn = filename_from_str(filename); if (type != realtype) - ret = export_ssh2(filename, type, &state->ssh2key, + ret = export_ssh2(&fn, type, &state->ssh2key, *passphrase ? passphrase : NULL); else - ret = ssh2_save_userkey(filename, &state->ssh2key, + ret = ssh2_save_userkey(&fn, &state->ssh2key, *passphrase ? passphrase : NULL); } else { + Filename fn = filename_from_str(filename); if (type != realtype) - ret = export_ssh1(filename, type, &state->key, + ret = export_ssh1(&fn, type, &state->key, *passphrase ? passphrase : NULL); else - ret = saversakey(filename, &state->key, + ret = saversakey(&fn, &state->key, *passphrase ? passphrase : NULL); } if (ret <= 0) { @@ -1189,12 +1200,13 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, int ret; FILE *fp = fopen(filename, "r"); if (fp) { - char buffer[FILENAME_MAX + 80]; + char *buffer; fclose(fp); - sprintf(buffer, "Overwrite existing file\n%.*s?", - FILENAME_MAX, filename); + buffer = dupprintf("Overwrite existing file\n%s?", + filename); ret = MessageBox(hwnd, buffer, "PuTTYgen Warning", MB_YESNO | MB_ICONWARNING); + sfree(buffer); if (ret != IDYES) break; } @@ -1218,7 +1230,7 @@ static int CALLBACK MainDlgProc(HWND hwnd, UINT msg, char filename[FILENAME_MAX]; if (prompt_keyfile(hwnd, "Load private key:", filename, 0, LOWORD(wParam)==IDC_LOAD)) - load_key_file(hwnd, state, filename, + load_key_file(hwnd, state, filename_from_str(filename), LOWORD(wParam) != IDC_LOAD); } break;