Revision: 7319 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7319 Author: zmatsuo Date: 2018-12-11 00:01:44 +0900 (Tue, 11 Dec 2018) Log Message: ----------- ttssh unicode化 #2 Ticket Links: ------------ http://sourceforge.jp/projects/ttssh2/tracker/detail/2 Modified Paths: -------------- branches/cmake/ttssh2/ttxssh/CMakeLists.txt branches/cmake/ttssh2/ttxssh/auth.c branches/cmake/ttssh2/ttxssh/crypt.c branches/cmake/ttssh2/ttxssh/fwd.c branches/cmake/ttssh2/ttxssh/fwdui.c branches/cmake/ttssh2/ttxssh/hosts.c branches/cmake/ttssh2/ttxssh/ssh.c branches/cmake/ttssh2/ttxssh/ttxssh.c branches/cmake/ttssh2/ttxssh/ttxssh.h branches/cmake/ttssh2/ttxssh/util.c branches/cmake/ttssh2/ttxssh/util.h branches/cmake/ttssh2/ttxssh/x11util.c -------------- next part -------------- Modified: branches/cmake/ttssh2/ttxssh/CMakeLists.txt =================================================================== --- branches/cmake/ttssh2/ttxssh/CMakeLists.txt 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/CMakeLists.txt 2018-12-10 15:01:44 UTC (rev 7319) @@ -19,6 +19,8 @@ ../../teraterm/common/dlglib_cpp.cpp ../../teraterm/common/dlglib_tmpl.cpp ../../teraterm/common/servicenames.h + ../../teraterm/common/codeconv.cpp + ../../teraterm/common/codeconv.h ) source_group( Modified: branches/cmake/ttssh2/ttxssh/auth.c =================================================================== --- branches/cmake/ttssh2/ttxssh/auth.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/auth.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -32,6 +32,7 @@ #include "ssh.h" #include "key.h" #include "dlglib.h" +#include "codeconv.h" #include <io.h> #include <fcntl.h> @@ -291,9 +292,11 @@ if (pvar->auth_state.failed_method != SSH_AUTH_NONE) { /* must be retrying a failed attempt */ TCHAR uimsg[MAX_UIMSG]; - UTIL_get_lang_msgT("DLG_AUTH_BANNER2_FAILED", uimsg, _countof(uimsg), _T("Authentication failed. Please retry."), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("DLG_AUTH_BANNER2_FAILED", uimsg, _countof(uimsg), + _T("Authentication failed. Please retry."), pvar->ts->UILanguageFile); SetDlgItemTextT(dlg, IDC_SSHAUTHBANNER2, uimsg); - UTIL_get_lang_msgT("DLG_AUTH_TITLE_FAILED", uimsg, _countof(uimsg), _T("Retrying SSH Authentication"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("DLG_AUTH_TITLE_FAILED", uimsg, _countof(uimsg), + _T("Retrying SSH Authentication"), pvar->ts->UILanguageFile); SetWindowTextT(dlg, uimsg); default_method = pvar->auth_state.failed_method; } @@ -314,7 +317,7 @@ _T("Use challenge/response(&TIS) to log in"), pvar->ts->UILanguageFile); SetDlgItemTextT(dlg, IDC_SSHUSETIS, uimsg); } else { - UTIL_get_lang_msgT("DLG_AUTH_METHOD_CHALLENGE2", uimsg, _countof(uimsg), + UTIL_get_lang_msgT("DLG_AUTH_METHOD_CHALLENGE2", uimsg, _countof(uimsg), _T("Use keyboard-&interactive to log in"), pvar->ts->UILanguageFile); SetDlgItemTextT(dlg, IDC_SSHUSETIS, uimsg); } @@ -424,9 +427,10 @@ static int get_key_file_name(HWND parent, char *buf, int bufsize, PTInstVar pvar) { - OPENFILENAMEA params; - char fullname_buf[2048] = "identity"; - char filter[MAX_UIMSG]; + OPENFILENAME params; + TCHAR fullname_buf[2048] = _T("identity"); + TCHAR filter[MAX_UIMSG]; + TCHAR uimsg[MAX_UIMSG]; ZeroMemory(¶ms, sizeof(params)); params.lStructSize = sizeof(OPENFILENAME); @@ -433,9 +437,9 @@ params.hwndOwner = parent; // \x83t\x83B\x83\x8B\x83^\x82̒lj\xC1 (2004.12.19 yutaka) // 3\x83t\x83@\x83C\x83\x8B\x83t\x83B\x83\x8B\x83^\x82̒lj\xC1 (2005.4.26 yutaka) - UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_FILTER", pvar, - "identity files\\0identity;id_rsa;id_dsa;id_ecdsa;id_ed25519;*.ppk\\0identity(RSA1)\\0identity\\0id_rsa(SSH2)\\0id_rsa\\0id_dsa(SSH2)\\0id_dsa\\0id_ecdsa(SSH2)\\0id_ecdsa\\0id_ed25519(SSH2)\\0id_ed25519\\0PuTTY(*.ppk)\\0*.ppk\\0all(*.*)\\0*.*\\0\\0"); - memcpy(filter, pvar->ts->UIMsg, sizeof(filter)); + UTIL_get_lang_msgT("FILEDLG_OPEN_PRIVATEKEY_FILTER", filter, _countof(filter), + _T("identity files\\0identity;id_rsa;id_dsa;id_ecdsa;id_ed25519;*.ppk\\0identity(RSA1)\\0identity\\0id_rsa(SSH2)\\0id_rsa\\0id_dsa(SSH2)\\0id_dsa\\0id_ecdsa(SSH2)\\0id_ecdsa\\0id_ed25519(SSH2)\\0id_ed25519\\0PuTTY(*.ppk)\\0*.ppk\\0all(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); params.lpstrFilter = filter; params.lpstrCustomFilter = NULL; params.nFilterIndex = 0; @@ -444,15 +448,18 @@ params.nMaxFile = sizeof(fullname_buf); params.lpstrFileTitle = NULL; params.lpstrInitialDir = NULL; - UTIL_get_lang_msg("FILEDLG_OPEN_PRIVATEKEY_TITLE", pvar, - "Choose a file with the RSA/DSA/ECDSA/ED25519 private key"); - params.lpstrTitle = pvar->ts->UIMsg; + UTIL_get_lang_msgT("FILEDLG_OPEN_PRIVATEKEY_TITLE", uimsg, _countof(uimsg), + _T("Choose a file with the RSA/DSA/ECDSA/ED25519 private key"), + pvar->ts->UILanguageFile); + params.lpstrTitle = uimsg; params.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY; params.lpstrDefExt = NULL; - if (GetOpenFileNameA(¶ms) != 0) { - copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf); + if (GetOpenFileName(¶ms) != 0) { + const char *strA = ToCharT(fullname_buf); + copy_teraterm_dir_relative_path(buf, bufsize, strA); + free((void *)strA); return 1; } else { return 0; @@ -506,9 +513,11 @@ keyfile[0] = 0; GetDlgItemText(dlg, file_ctl_ID, keyfile, sizeof(keyfile)); if (keyfile[0] == 0) { - UTIL_get_lang_msg("MSG_KEYSPECIFY_ERROR", pvar, - "You must specify a file containing the RSA/DSA/ECDSA/ED25519 private key."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char buf[1024]; + UTIL_get_lang_msgU8("MSG_KEYSPECIFY_ERROR", buf, _countof(buf), + "You must specify a file containing the RSA/DSA/ECDSA/ED25519 private key.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, buf); SetFocus(GetDlgItem(dlg, file_ctl_ID)); destroy_malloced_string(&password); return FALSE; @@ -576,7 +585,7 @@ } default: { - char buf[1024]; + char uimsg[1024]; // \x83t\x83@\x83C\x83\x8B\x82\xAA\x8AJ\x82\xAF\x82\xBD\x8Fꍇ\x82̓t\x83@\x83C\x83\x8B\x8C`\x8E\xAE\x82\xAA\x95s\x96\xBE\x82ł\xE0\x93ǂݍ\x9E\x82\xF1\x82ł݂\xE9 if (fp != NULL) { @@ -589,10 +598,10 @@ break; } - UTIL_get_lang_msg("MSG_READKEY_ERROR", pvar, - "read error SSH2 private key file\r\n%s"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, errmsg); - notify_nonfatal_error(pvar, buf); + UTIL_get_lang_msgU8("MSG_READKEY_ERROR", uimsg, _countof(uimsg), + "read error SSH2 private key file\r\n%s", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); // \x82\xB1\x82\xB1\x82ɗ\x88\x82\xBD\x82Ƃ\xA2\x82\xA4\x82\xB1\x82Ƃ\xCD SSH2 \x94閧\x8C\xAE\x83t\x83@\x83C\x83\x8B\x82\xAA\x8AJ\x82\xAF\x82Ȃ\xA2\x82̂\xC5 // \x8C\xAE\x83t\x83@\x83C\x83\x8B\x82̑I\x91\xF0\x83{\x83^\x83\x93\x82Ƀt\x83H\x81[\x83J\x83X\x82\xF0\x88ڂ\xB7 SetFocus(GetDlgItem(dlg, IDC_CHOOSERSAFILE)); @@ -603,9 +612,9 @@ if (key_pair == NULL) { // read error char buf[1024]; - UTIL_get_lang_msg("MSG_READKEY_ERROR", pvar, - "read error SSH2 private key file\r\n%s"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, errmsg); + UTIL_get_lang_msgU8("MSG_READKEY_ERROR", buf, _countof(buf), + "read error SSH2 private key file\r\n%s", + pvar->ts->UILanguageFile); notify_nonfatal_error(pvar, buf); // \x83p\x83X\x83t\x83\x8C\x81[\x83Y\x82\xAA\x8C\xAE\x82ƈ\xEA\x92v\x82\xB5\x82Ȃ\xA9\x82\xC1\x82\xBD\x8Fꍇ\x82\xCDIDC_SSHPASSWORD\x82Ƀt\x83H\x81[\x83J\x83X\x82\xF0\x88ڂ\xB7 (2006.10.29 yasuhide) if (invalid_passphrase) { @@ -639,9 +648,10 @@ pvar->pageant_keylistlen = putty_get_ssh2_keylist(&pvar->pageant_key); } if (pvar->pageant_keylistlen == 0) { - UTIL_get_lang_msg("MSG_PAGEANT_NOTFOUND", pvar, - "Can't find Pageant."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char buf[1024]; + UTIL_get_lang_msgU8("MSG_PAGEANT_NOTFOUND", buf, _countof(buf), + "Can't find Pageant.", pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, buf); return FALSE; } @@ -650,9 +660,11 @@ // \x8C\xAE\x82̐\x94 pvar->pageant_keycount = get_uint32_MSBfirst(pvar->pageant_curkey); if (pvar->pageant_keycount == 0) { - UTIL_get_lang_msg("MSG_PAGEANT_NOKEY", pvar, - "Pageant has no valid key."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char buf[1024]; + UTIL_get_lang_msgU8("MSG_PAGEANT_NOKEY", buf, _countof(buf), + "Pageant has no valid key.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, buf); return FALSE; } @@ -687,14 +699,16 @@ } if (method == SSH_AUTH_RHOSTS || method == SSH_AUTH_RHOSTS_RSA) { if (pvar->session_settings.DefaultAuthMethod != SSH_AUTH_RHOSTS) { - UTIL_get_lang_msg("MSG_RHOSTS_NOTDEFAULT_ERROR", pvar, - "Rhosts authentication will probably fail because it was not " - "the default authentication method.\n" - "To use Rhosts authentication " - "in TTSSH, you need to set it to be the default by restarting\n" - "TTSSH and selecting \"SSH Authentication...\" from the Setup menu " - "before connecting."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_RHOSTS_NOTDEFAULT_ERROR", uimsg, _countof(uimsg), + "Rhosts authentication will probably fail because it was not " + "the default authentication method.\n" + "To use Rhosts authentication " + "in TTSSH, you need to set it to be the default by restarting\n" + "TTSSH and selecting \"SSH Authentication...\" from the Setup menu " + "before connecting.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } pvar->auth_state.cur_cred.rhosts_client_user = @@ -1001,6 +1015,7 @@ int AUTH_set_supported_auth_types(PTInstVar pvar, int types) { + char uimsg[MAX_UIMSG]; logprintf(LOG_LEVEL_VERBOSE, "Server reports supported authentication method mask = %d", types); if (SSHv1(pvar)) { @@ -1018,10 +1033,11 @@ pvar->auth_state.supported_types = types; if (types == 0) { - UTIL_get_lang_msg("MSG_NOAUTHMETHOD_ERROR", pvar, - "Server does not support any of the authentication options\n" - "provided by TTSSH. This connection will now close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_NOAUTHMETHOD_ERROR", uimsg, _countof(uimsg), + "Server does not support any of the authentication options\n" + "provided by TTSSH. This connection will now close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return 0; } else { if (pvar->auth_state.auth_dialog != NULL) { @@ -1287,10 +1303,12 @@ cur_active != NULL ? cur_active : pvar->NotificationWindow, dlg_proc, (LPARAM) pvar) == -1) { - UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTH_ERROR", pvar, - "Unable to display authentication dialog box.\n" - "Connection terminated."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_CREATEWINDOW_AUTH_ERROR", uimsg, _countof(uimsg), + "Unable to display authentication dialog box.\n" + "Connection terminated.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } } } @@ -1559,9 +1577,11 @@ cur_active != NULL ? cur_active : pvar->NotificationWindow, default_auth_dlg_proc, (LPARAM) pvar) == -1) { - UTIL_get_lang_msg("MSG_CREATEWINDOW_AUTHSETUP_ERROR", pvar, - "Unable to display authentication setup dialog box."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_CREATEWINDOW_AUTHSETUP_ERROR", uimsg, _countof(uimsg), + "Unable to display authentication setup dialog box.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } } @@ -1599,25 +1619,29 @@ { const char *method = "unknown"; char buf[256]; + char uimsg[MAX_UIMSG]; if (pvar->auth_state.user == NULL) { strncpy_s(dest, len, "None", _TRUNCATE); } else if (pvar->auth_state.cur_cred.method != SSH_AUTH_NONE) { if (SSHv1(pvar)) { - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO", uimsg, _countof(uimsg), + "User '%s', using %s", pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, pvar->auth_state.user, get_auth_method_name(pvar->auth_state.cur_cred.method)); if (pvar->auth_state.cur_cred.method == SSH_AUTH_RSA) { - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO2", pvar, " with %s key"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO2", uimsg, _countof(uimsg), + " with %s key", pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, "RSA"); strncat_s(dest, len, buf, _TRUNCATE); } else if (pvar->auth_state.cur_cred.method == SSH_AUTH_PAGEANT) { - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO3", pvar, " with %s key from Pageant"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO3", uimsg, _countof(uimsg), + " with %s key from Pageant", pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, "RSA"); strncat_s(dest, len, buf, _TRUNCATE); } @@ -1632,19 +1656,22 @@ } else { method = get_auth_method_name(pvar->auth_state.cur_cred.method); } - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO", uimsg, _countof(uimsg), + "User '%s', using %s", pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, pvar->auth_state.user, method); } else if (pvar->auth_state.cur_cred.method == SSH_AUTH_RSA) { method = get_auth_method_name(pvar->auth_state.cur_cred.method); - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO", uimsg, _countof(uimsg), + "User '%s', using %s", pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, pvar->auth_state.user, get_auth_method_name(pvar->auth_state.cur_cred.method)); - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO2", pvar, " with %s key"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO2", uimsg, _countof(uimsg), + " with %s key", pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, ssh_key_type(pvar->auth_state.cur_cred.key_pair->type)); strncat_s(dest, len, buf, _TRUNCATE); } @@ -1653,15 +1680,17 @@ char *s = (char *)malloc(key_len+1); method = get_auth_method_name(pvar->auth_state.cur_cred.method); - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO", uimsg, _countof(uimsg), + "User '%s', using %s", pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, pvar->auth_state.user, get_auth_method_name(pvar->auth_state.cur_cred.method)); memcpy(s, pvar->pageant_curkey+4+4, key_len); s[key_len] = '\0'; - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO3", pvar, " with %s key from Pageant"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO3", uimsg, _countof(uimsg), + " with %s key from Pageant", pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, ssh_key_type(get_keytype_from_name(s))); strncat_s(dest, len, buf, _TRUNCATE); @@ -1670,8 +1699,9 @@ } } else { - UTIL_get_lang_msg("DLG_ABOUT_AUTH_INFO", pvar, "User '%s', using %s"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, pvar->auth_state.user, + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH_INFO", uimsg, _countof(uimsg), + "User '%s', using %s", pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, pvar->auth_state.user, get_auth_method_name(pvar->auth_state.failed_method)); } Modified: branches/cmake/ttssh2/ttxssh/crypt.c =================================================================== --- branches/cmake/ttssh2/ttxssh/crypt.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/crypt.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -202,6 +202,7 @@ BOOL CRYPT_encrypt_aead(PTInstVar pvar, unsigned char *data, unsigned int bytes, unsigned int aadlen, unsigned int authlen) { + char uimsg[MAX_UIMSG]; unsigned char *newbuff = NULL; unsigned int block_size = pvar->ssh2_keys[MODE_OUT].enc.block_size; unsigned char lastiv[1]; @@ -212,8 +213,11 @@ return TRUE; if (bytes % block_size) { - UTIL_get_lang_msg("MSG_ENCRYPT_ERROR1", pvar, "%s encrypt error(1): bytes %d (%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_ENCRYPT_ERROR1", uimsg, _countof(uimsg), + "%s encrypt error(1): bytes %d (%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.sender_cipher), bytes, block_size); notify_fatal_error(pvar, tmp, TRUE); @@ -247,8 +251,10 @@ return TRUE; err: - UTIL_get_lang_msg("MSG_ENCRYPT_ERROR2", pvar, "%s encrypt error(2)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_ENCRYPT_ERROR2", uimsg, _countof(uimsg), + "%s encrypt error(2)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.sender_cipher)); notify_fatal_error(pvar, tmp, TRUE); return FALSE; @@ -261,13 +267,16 @@ unsigned char lastiv[1]; char tmp[80]; EVP_CIPHER_CTX *evp = &pvar->evpcip[MODE_IN]; + char uimsg[MAX_UIMSG]; if (bytes == 0) return TRUE; if (bytes % block_size) { - UTIL_get_lang_msg("MSG_DECRYPT_ERROR1", pvar, "%s decrypt error(1): bytes %d (%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_DECRYPT_ERROR1", uimsg, _countof(uimsg), + "%s decrypt error(1): bytes %d (%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.receiver_cipher), bytes, block_size); notify_fatal_error(pvar, tmp, TRUE); @@ -301,8 +310,10 @@ return TRUE; err: - UTIL_get_lang_msg("MSG_DECRYPT_ERROR2", pvar, "%s decrypt error(2)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_DECRYPT_ERROR2", uimsg, _countof(uimsg), + "%s decrypt error(2)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.receiver_cipher)); notify_fatal_error(pvar, tmp, TRUE); return FALSE; @@ -317,14 +328,16 @@ unsigned char *newbuff; int block_size = pvar->ssh2_keys[MODE_OUT].enc.block_size; char tmp[80]; + char uimsg[MAX_UIMSG]; if (bytes == 0) return; if (bytes % block_size) { - UTIL_get_lang_msg("MSG_ENCRYPT_ERROR1", pvar, - "%s encrypt error(1): bytes %d (%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_ENCRYPT_ERROR1", uimsg, _countof(uimsg), + "%s encrypt error(1): bytes %d (%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.sender_cipher), bytes, block_size); notify_fatal_error(pvar, tmp, TRUE); @@ -339,8 +352,10 @@ } if (EVP_Cipher(&pvar->evpcip[MODE_OUT], encbuff, buf, bytes) == 0) { - UTIL_get_lang_msg("MSG_ENCRYPT_ERROR2", pvar, "%s encrypt error(2)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_ENCRYPT_ERROR2", uimsg, _countof(uimsg), + "%s encrypt error(2)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.sender_cipher)); notify_fatal_error(pvar, tmp, TRUE); } else { @@ -353,14 +368,16 @@ unsigned char *newbuff; int block_size = pvar->ssh2_keys[MODE_IN].enc.block_size; char tmp[80]; + char uimsg[MAX_UIMSG]; if (bytes == 0) return; if (bytes % block_size) { - UTIL_get_lang_msg("MSG_DECRYPT_ERROR1", pvar, - "%s decrypt error(1): bytes %d (%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_DECRYPT_ERROR1", uimsg, _countof(uimsg), + "%s decrypt error(1): bytes %d (%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.receiver_cipher), bytes, block_size); notify_fatal_error(pvar, tmp, TRUE); @@ -375,8 +392,10 @@ } if (EVP_Cipher(&pvar->evpcip[MODE_IN], encbuff, buf, bytes) == 0) { - UTIL_get_lang_msg("MSG_DECRYPT_ERROR2", pvar, "%s decrypt error(2)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_DECRYPT_ERROR2", uimsg, _countof(uimsg), + "%s decrypt error(2)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, get_cipher_name(pvar->crypt_state.receiver_cipher)); notify_fatal_error(pvar, tmp, TRUE); } else { @@ -493,9 +512,11 @@ } if (key == NULL || key->e == NULL || key->n == NULL) { - UTIL_get_lang_msg("MSG_RSAKEY_SETUP_ERROR", pvar, - "Error setting up RSA keys"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_RSAKEY_SETUP_ERROR", uimsg, _countof(uimsg), + "Error setting up RSA keys", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); if (key != NULL) { if (key->e != NULL) { @@ -553,6 +574,7 @@ int receiver_ciphers) { int cipher_mask; + char uimsg[MAX_UIMSG]; if (SSHv1(pvar)) { cipher_mask = (1 << SSH_CIPHER_DES) @@ -593,18 +615,20 @@ pvar->crypt_state.supported_receiver_ciphers = receiver_ciphers; if (sender_ciphers == 0) { - UTIL_get_lang_msg("MSG_UNAVAILABLE_CIPHERS_ERROR", pvar, - "The server does not support any of the TTSSH encryption algorithms.\n" - "A secure connection cannot be made in the TTSSH-to-server direction.\n" - "The connection will be closed."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_UNAVAILABLE_CIPHERS_ERROR", uimsg, _countof(uimsg), + "The server does not support any of the TTSSH encryption algorithms.\n" + "A secure connection cannot be made in the TTSSH-to-server direction.\n" + "The connection will be closed.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return FALSE; } else if (receiver_ciphers == 0) { - UTIL_get_lang_msg("MSG_UNAVAILABLE_CIPHERS_ERROR", pvar, - "The server does not support any of the TTSSH encryption algorithms.\n" - "A secure connection cannot be made in the TTSSH-to-server direction.\n" - "The connection will be closed."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_UNAVAILABLE_CIPHERS_ERROR", uimsg, _countof(uimsg), + "The server does not support any of the TTSSH encryption algorithms.\n" + "A secure connection cannot be made in the TTSSH-to-server direction.\n" + "The connection will be closed.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return FALSE; } else { return TRUE; @@ -788,12 +812,14 @@ if (pvar->crypt_state.sender_cipher == SSH_CIPHER_NONE || pvar->crypt_state.receiver_cipher == SSH_CIPHER_NONE) { - UTIL_get_lang_msg("MSG_CIPHER_NONE_ERROR", pvar, - "All the encryption algorithms that this program and the server both understand have been disabled.\n" - "To communicate with this server, you will have to enable some more ciphers\n" - "in the TTSSH Setup dialog box when you run Tera Term again.\n" - "This connection will now close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_CIPHER_NONE_ERROR", uimsg, _countof(uimsg), + "All the encryption algorithms that this program and the server both understand have been disabled.\n" + "To communicate with this server, you will have to enable some more ciphers\n" + "in the TTSSH Setup dialog box when you run Tera Term again.\n" + "This connection will now close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return FALSE; } else { return TRUE; @@ -835,9 +861,11 @@ } if (bit_delta < 128 || server_key_bits < 512 || host_key_bits < 512) { - UTIL_get_lang_msg("MSG_RSAKEY_TOOWEAK_ERROR", pvar, - "Server RSA keys are too weak. A secure connection cannot be established."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_RSAKEY_TOOWEAK_ERROR", uimsg, _countof(uimsg), + "Server RSA keys are too weak. A secure connection cannot be established.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return 0; } else { /* following Goldberg's code, I'm using MD5(servkey->n || hostkey->n || cookie) @@ -1001,30 +1029,39 @@ int klen; char tmp[80]; unsigned char *junk = NULL, *discard = NULL; + char uimsg[MAX_UIMSG]; EVP_CIPHER_CTX_init(evp); if (EVP_CipherInit(evp, type, NULL, NULL, (encrypt == CIPHER_ENCRYPT)) == 0) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 1); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 1); notify_fatal_error(pvar, tmp, TRUE); return; } if (authlen > 0 && !EVP_CIPHER_CTX_ctrl(evp, EVP_CTRL_GCM_SET_IVLEN, ivlen, NULL)) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 2); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 2); notify_fatal_error(pvar, tmp, TRUE); return; } if (EVP_CipherInit(evp, NULL, NULL, (u_char *)iv, -1) == 0) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 3); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 3); notify_fatal_error(pvar, tmp, TRUE); return; } if (authlen > 0 && !EVP_CIPHER_CTX_ctrl(evp, EVP_CTRL_GCM_SET_IV_FIXED, -1, (u_char *)iv)) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 4); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 4); notify_fatal_error(pvar, tmp, TRUE); return; } @@ -1032,15 +1069,19 @@ klen = EVP_CIPHER_CTX_key_length(evp); if (klen > 0 && keylen != klen) { if (EVP_CIPHER_CTX_set_key_length(evp, keylen) == 0) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 5); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 5); notify_fatal_error(pvar, tmp, TRUE); return; } } if (EVP_CipherInit(evp, NULL, (u_char *)key, NULL, -1) == 0) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 6); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 6); notify_fatal_error(pvar, tmp, TRUE); return; } @@ -1050,8 +1091,10 @@ discard = malloc(discard_len); if (junk == NULL || discard == NULL || EVP_Cipher(evp, discard, junk, discard_len) == 0) { - UTIL_get_lang_msg("MSG_CIPHER_INIT_ERROR", pvar, "Cipher initialize error(%d)"); - _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, pvar->ts->UIMsg, 7); + UTIL_get_lang_msgU8("MSG_CIPHER_INIT_ERROR", uimsg, _countof(uimsg), + "Cipher initialize error(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, uimsg, 7); notify_fatal_error(pvar, tmp, TRUE); } else { @@ -1176,9 +1219,11 @@ } if (!isOK) { - UTIL_get_lang_msg("MSG_CIPHER_NOTSELECTED_ERROR", pvar, - "No cipher selected!"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_CIPHER_NOTSELECTED_ERROR", uimsg, _countof(uimsg), + "No cipher selected!", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return FALSE; } else { SecureZeroMemory(encryption_key, CRYPT_KEY_LENGTH); @@ -1268,33 +1313,40 @@ void CRYPT_get_cipher_info(PTInstVar pvar, char *dest, int len) { - UTIL_get_lang_msg("DLG_ABOUT_CIPHER_INFO", pvar, - "%s to server, %s from server"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, - get_cipher_name(pvar->crypt_state.sender_cipher), - get_cipher_name(pvar->crypt_state.receiver_cipher)); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("DLG_ABOUT_CIPHER_INFO", uimsg, _countof(uimsg), + "%s to server, %s from server", + pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, + get_cipher_name(pvar->crypt_state.sender_cipher), + get_cipher_name(pvar->crypt_state.receiver_cipher)); } void CRYPT_get_server_key_info(PTInstVar pvar, char *dest, int len) { + char uimsg[MAX_UIMSG]; if (SSHv1(pvar)) { if (pvar->crypt_state.server_key.RSA_key == NULL || pvar->crypt_state.host_key.RSA_key == NULL) { - UTIL_get_lang_msg("DLG_ABOUT_KEY_NONE", pvar, "None"); - strncpy_s(dest, len, pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_KEY_NONE", uimsg, _countof(uimsg), + "None", + pvar->ts->UILanguageFile); + strncpy_s(dest, len, uimsg, _TRUNCATE); } else { - UTIL_get_lang_msg("DLG_ABOUT_KEY_INFO", pvar, - "%d-bit server key, %d-bit host key"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_KEY_INFO", uimsg, _countof(uimsg), + "%d-bit server key, %d-bit host key", + pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, BN_num_bits(pvar->crypt_state.server_key.RSA_key->n), BN_num_bits(pvar->crypt_state.host_key.RSA_key->n)); } } else { // SSH2 - UTIL_get_lang_msg("DLG_ABOUT_KEY_INFO2", pvar, - "%d-bit client key, %d-bit server key"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, - pvar->client_key_bits, - pvar->server_key_bits); + UTIL_get_lang_msgU8("DLG_ABOUT_KEY_INFO2", uimsg, _countof(uimsg), + "%d-bit client key, %d-bit server key", + pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, + pvar->client_key_bits, + pvar->server_key_bits); } } Modified: branches/cmake/ttssh2/ttxssh/fwd.c =================================================================== --- branches/cmake/ttssh2/ttxssh/fwd.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/fwd.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -39,6 +39,7 @@ #include "ttcommon.h" #include <assert.h> +#include <tchar.h> #include "WSAAsyncGetAddrInfo.h" #define WM_SOCK_ACCEPT (WM_APP+9999) @@ -198,10 +199,13 @@ { if (local_num < 0 || local_num >= pvar->fwd_state.num_channels || pvar->fwd_state.channels[local_num].status == 0) { - UTIL_get_lang_msg("MSG_FWD_LOCAL_CHANNEL_ERROR", pvar, - "The server attempted to manipulate a forwarding channel that does not exist.\n" - "Either the server has a bug or is hostile. You should close this connection."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_FWD_LOCAL_CHANNEL_ERROR", + uimsg, _countof(uimsg), + "The server attempted to manipulate a forwarding channel that does not exist.\n" + "Either the server has a bug or is hostile. You should close this connection.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); return 0; } else { return 1; @@ -210,6 +214,7 @@ static void request_error(PTInstVar pvar, int request_num, int err) { + char uimsg[MAX_UIMSG]; SOCKET *s = pvar->fwd_state.requests[request_num].listening_sockets; int i; @@ -224,10 +229,12 @@ } } - UTIL_get_lang_msg("MSG_FWD_REQUEST_ERROR", pvar, - "Communications error while listening for a connection to forward.\n" - "The listening port will be terminated."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_FWD_REQUEST_ERROR", + uimsg, _countof(uimsg), + "Communications error while listening for a connection to forward.\n" + "The listening port will be terminated.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } static void send_local_connection_closure(PTInstVar pvar, int channel_num) @@ -343,35 +350,41 @@ } } -static char *describe_socket_error(PTInstVar pvar, int code) +static char *describe_socket_error(PTInstVar pvar, int code, char *uimsg, size_t len) { + const char *lang = pvar->ts->UILanguageFile; switch (code) { case WSAECONNREFUSED: - UTIL_get_lang_msg("MSG_FWD_REFUSED_ERROR", pvar, - "Connection refused (perhaps the service is not currently running)"); - return pvar->ts->UIMsg; + UTIL_get_lang_msgU8("MSG_FWD_REFUSED_ERROR", uimsg, len, + "Connection refused (perhaps the service is not currently running)", + lang); + return uimsg; case WSAENETDOWN: case WSAENETUNREACH: case WSAEHOSTUNREACH: - UTIL_get_lang_msg("MSG_FWD_NETDOWN_ERROR", pvar, - "The machine could not be contacted (possibly a network problem)"); - return pvar->ts->UIMsg; + UTIL_get_lang_msgU8("MSG_FWD_NETDOWN_ERROR", uimsg, len, + "The machine could not be contacted (possibly a network problem)", + lang); + return uimsg; case WSAETIMEDOUT: case WSAEHOSTDOWN: - UTIL_get_lang_msg("MSG_FWD_MACHINEDOWN_ERROR", pvar, - "The machine could not be contacted (possibly the machine is down)"); - return pvar->ts->UIMsg; + UTIL_get_lang_msgU8("MSG_FWD_MACHINEDOWN_ERROR", uimsg, len, + "The machine could not be contacted (possibly the machine is down)", + lang); + return uimsg; case WSATRY_AGAIN: case WSANO_RECOVERY: case WSANO_ADDRESS: case WSAHOST_NOT_FOUND: - UTIL_get_lang_msg("MSG_FWD_ADDRNOTFOUND_ERROR", pvar, - "No address was found for the machine"); - return pvar->ts->UIMsg; + UTIL_get_lang_msgU8("MSG_FWD_ADDRNOTFOUND_ERROR", uimsg, len, + "No address was found for the machine", + lang); + return uimsg; default: - UTIL_get_lang_msg("MSG_FWD_CONNECT_ERROR", pvar, - "The forwarding connection could not be established"); - return pvar->ts->UIMsg; + UTIL_get_lang_msgU8("MSG_FWD_CONNECT_ERROR", uimsg, len, + "The forwarding connection could not be established", + lang); + return uimsg; } } @@ -389,7 +402,7 @@ err_msg = NULL; break; default: - strncpy_s(uimsg, sizeof(uimsg), describe_socket_error(pvar, err), _TRUNCATE); + describe_socket_error(pvar, err, uimsg, _countof(uimsg)); err_msg = uimsg; } @@ -396,12 +409,13 @@ if (err_msg != NULL) { char buf[1024]; - UTIL_get_lang_msg("MSG_FWD_CHANNEL_ERROR", pvar, - "Communications error %s forwarded local %s.\n" - "%s (code %d).\n" - "The forwarded connection will be closed."); + UTIL_get_lang_msgU8("MSG_FWD_CHANNEL_ERROR", buf, _countof(buf), + "Communications error %s forwarded local %s.\n" + "%s (code %d).\n" + "The forwarded connection will be closed.", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, action, + buf, action, pvar->fwd_state.requests[pvar->fwd_state.channels[channel_num]. request_num].spec.from_port_name, err_msg, err); @@ -418,23 +432,25 @@ char uimsg[MAX_UIMSG]; SSH_fail_channel_open(pvar, channel->remote_num); - strncpy_s(uimsg, sizeof(uimsg), describe_socket_error(pvar, err), _TRUNCATE); + describe_socket_error(pvar, err, uimsg, sizeof(uimsg)); if (request->spec.type == FWD_REMOTE_X11_TO_LOCAL) { - UTIL_get_lang_msg("MSG_FWD_CHANNEL_OPEN_X_ERROR", pvar, - "The server attempted to forward a connection through this machine.\n" - "It requested a connection to the X server on %s (display %d:%d).\n" - "%s(code %d).\n" "The forwarded connection will be closed."); + UTIL_get_lang_msgU8("MSG_FWD_CHANNEL_OPEN_X_ERROR", uimsg, _countof(uimsg), + "The server attempted to forward a connection through this machine.\n" + "It requested a connection to the X server on %s (display %d:%d).\n" + "%s(code %d).\n" "The forwarded connection will be closed.", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, + uimsg, request->spec.to_host, request->spec.to_port - 6000, request->spec.x11_screen, uimsg, err); } else { - UTIL_get_lang_msg("MSG_FWD_CHANNEL_OPEN_ERROR", pvar, - "The server attempted to forward a connection through this machine.\n" - "It requested a connection to %s (port %s).\n" "%s(code %d).\n" - "The forwarded connection will be closed."); + UTIL_get_lang_msgU8("MSG_FWD_CHANNEL_OPEN_ERROR", uimsg, _countof(uimsg), + "The server attempted to forward a connection through this machine.\n" + "It requested a connection to %s (port %s).\n" "%s(code %d).\n" + "The forwarded connection will be closed.", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, + uimsg, request->spec.to_host, request->spec.to_port_name, uimsg, err); } @@ -526,9 +542,12 @@ static HWND make_accept_wnd(PTInstVar pvar) { if (pvar->fwd_state.accept_wnd == NULL) { - UTIL_get_lang_msg("DLG_FWDMON_TITLE", pvar, "TTSSH Port Forwarding Monitor"); + TCHAR uimsg[MAX_UIMSG]; + UTIL_get_lang_msgT("DLG_FWDMON_TITLE", uimsg, _countof(uimsg), + _T("TTSSH Port Forwarding Monitor"), + pvar->ts->UILanguageFile); pvar->fwd_state.accept_wnd = - CreateWindowA("STATIC", pvar->ts->UIMsg, + CreateWindow(_T("STATIC"), uimsg, WS_DISABLED | WS_POPUP, 0, 0, 1, 1, NULL, NULL, hInst, NULL); if (pvar->fwd_state.accept_wnd != NULL) { @@ -1082,11 +1101,13 @@ } if (s == INVALID_SOCKET) { if (report_error) { - UTIL_get_lang_msg("MSG_FWD_SOCKET_ERROR", pvar, - "Some socket(s) required for port forwarding could not be initialized.\n" - "Some port forwarding services may not be available.\n" - "(errno %d)"); - logprintf(LOG_LEVEL_WARNING, pvar->ts->UIMsg, WSAGetLastError()); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_FWD_SOCKET_ERROR", uimsg, _countof(uimsg), + "Some socket(s) required for port forwarding could not be initialized.\n" + "Some port forwarding services may not be available.\n" + "(errno %d)", + pvar->ts->UILanguageFile); + logprintf(LOG_LEVEL_WARNING, uimsg, WSAGetLastError()); } freeaddrinfo(res0); /* free(request->listening_sockets); /* DO NOT FREE HERE, listening_sockets'll be freed in FWD_end */ @@ -1189,10 +1210,12 @@ for (i = 0; i < num_specs - 1; i++) { if (FWD_compare_specs(new_specs + i, new_specs + i + 1) == 0) { - UTIL_get_lang_msg("MSG_FWD_DUPLICATE_ERROR", pvar, - "TTSSH INTERNAL ERROR: Could not set port forwards " - "because duplicate type/port requests were found"); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_FWD_DUPLICATE_ERROR", uimsg, _countof(uimsg), + "TTSSH INTERNAL ERROR: Could not set port forwards " + "because duplicate type/port requests were found", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); free(new_specs); return; } @@ -1490,13 +1513,15 @@ &request->to_host_addrs); if (task_handle == 0) { + char uimsg[MAX_UIMSG]; SSH_fail_channel_open(pvar, remote_channel_num); - UTIL_get_lang_msg("MSG_FWD_DENIED_HANDLE_ERROR", pvar, - "The server attempted to forward a connection through this machine.\n" - "It requested a connection to machine %s on port %s.\n" - "An error occurred while processing the request, and it has been denied."); + UTIL_get_lang_msgU8("MSG_FWD_DENIED_HANDLE_ERROR", uimsg, _countof(uimsg), + "The server attempted to forward a connection through this machine.\n" + "It requested a connection to machine %s on port %s.\n" + "An error occurred while processing the request, and it has been denied.", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, + uimsg, request->spec.to_host, request->spec.to_port_name); notify_nonfatal_error(pvar, buf); freeaddrinfo(request->to_host_addrs); @@ -1533,6 +1558,7 @@ { int i; char buf[1024]; + char uimsg[MAX_UIMSG]; for (i = 0; i < pvar->fwd_state.num_requests; i++) { FWDRequest *request = pvar->fwd_state.requests + i; @@ -1574,12 +1600,13 @@ } /* this forwarding was not prespecified */ - UTIL_get_lang_msg("MSG_FWD_DENIED_ERROR", pvar, - "The server attempted to forward a connection through this machine.\n" - "It requested a connection to machine %s on port %d.\n" - "You did not specify this forwarding to TTSSH in advance, and therefore the request was denied."); + UTIL_get_lang_msgU8("MSG_FWD_DENIED_ERROR", uimsg, _countof(uimsg), + "The server attempted to forward a connection through this machine.\n" + "It requested a connection to machine %s on port %d.\n" + "You did not specify this forwarding to TTSSH in advance, and therefore the request was denied.", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, + uimsg, local_hostname, local_port); notify_nonfatal_error(pvar, buf); } @@ -1588,6 +1615,7 @@ char *originator, int originator_len, int *chan_num) { + char uimsg[MAX_UIMSG]; int i; for (i = 0; i < pvar->fwd_state.num_requests; i++) { @@ -1619,11 +1647,12 @@ } /* this forwarding was not prespecified */ - UTIL_get_lang_msg("MSG_FWD_DENIED_X_ERROR", pvar, - "The server attempted to forward a connection through this machine.\n" - "It requested a connection to the local X server.\n" - "You did not specify this forwarding to TTSSH in advance, and therefore the request was denied."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_FWD_DENIED_X_ERROR", uimsg, _countof(uimsg), + "The server attempted to forward a connection through this machine.\n" + "It requested a connection to the local X server.\n" + "You did not specify this forwarding to TTSSH in advance, and therefore the request was denied.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } // agent forwarding \x82̗v\x8B\x81\x82ɑ\xB5\x81AFWDChannel \x82\xF0\x8D쐬\x82\xB7\x82\xE9 @@ -1680,6 +1709,7 @@ { FWDChannel *channel; int r = reason; + char uimsg[MAX_UIMSG]; if (!FWD_check_local_channel_num(pvar, local_channel_num)) return; @@ -1689,10 +1719,11 @@ // SSH2 \x82ł͌Ăяo\x82\xB5\x8C\xB3\x82Ŋ\xF9\x82Ƀ|\x83b\x83v\x83A\x83b\x83v\x82\xF0\x8Fo\x82\xB5\x82Ă\xA2\x82\xE9\x82̂ŁA // \x82\xB1\x82\xB1\x82ł\xCD SSH1 \x82̎\x9E\x82̂݃|\x83b\x83v\x83A\x83b\x83v\x82\xF0\x8Fo\x82\xB7 if (SSHv1(pvar)) { - UTIL_get_lang_msg("MSG_FWD_DENIED_BY_SERVER_ERROR", pvar, - "A program on the local machine attempted to connect to a forwarded port.\n" - "The forwarding request was denied by the server. The connection has been closed."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_FWD_DENIED_BY_SERVER_ERROR", uimsg, _countof(uimsg), + "A program on the local machine attempted to connect to a forwarded port.\n" + "The forwarding request was denied by the server. The connection has been closed.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } if (channel->filter != NULL) { @@ -1769,10 +1800,12 @@ // \x83|\x83b\x83v\x83A\x83b\x83v\x97}\x8E~\x8Ew\x92肠\x82\xEA\x82A\x8A\x94\x82\xF0\x8CĂяo\x82\xB3\x82Ȃ\xA2\x81B // (2014.6.26 yutaka) if ((pvar->settings.DisablePopupMessage & POPUP_MSG_FWD_received_data) == 0) { - UTIL_get_lang_msg("MSG_FWD_COMM_ERROR", pvar, - "A communications error occurred while sending forwarded data to a local port.\n" - "The forwarded connection will be closed."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_FWD_COMM_ERROR", uimsg, _countof(uimsg), + "A communications error occurred while sending forwarded data to a local port.\n" + "The forwarded connection will be closed.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } } } @@ -1843,21 +1876,27 @@ BOOL FWD_agent_forward_confirm(PTInstVar pvar) { - char title[MAX_UIMSG]; HWND cur_active = GetActiveWindow(); if (pvar->session_settings.ForwardAgentNotify) { - UTIL_get_lang_msg("MSG_FWD_AGENT_NOTIFY_TITLE", pvar, "Agent Forwarding"); - strncpy_s(title, sizeof(title), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_FWD_AGENT_NOTIFY", pvar, "Remote host access to agent"); - NotifyInfoMessage(pvar->cv, pvar->ts->UIMsg, title); + char title[MAX_UIMSG]; + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_FWD_AGENT_NOTIFY_TITLE", title, _countof(title), + "Agent Forwarding", + pvar->ts->UILanguageFile); + UTIL_get_lang_msgU8("MSG_FWD_AGENT_NOTIFY", uimsg, _countof(uimsg), + "Remote host access to agent", + pvar->ts->UILanguageFile); + NotifyInfoMessage(pvar->cv, uimsg, title); } if (pvar->session_settings.ForwardAgentConfirm) { - UTIL_get_lang_msg("MSG_FWD_AGENT_FORWARDING_CONFIRM", pvar, - "Are you sure you want to accept agent-forwarding request?"); - if (MessageBoxA(cur_active != NULL ? cur_active : pvar->NotificationWindow, - pvar->ts->UIMsg, "TTSSH", + TCHAR uimsg[MAX_UIMSG]; + UTIL_get_lang_msgT("MSG_FWD_AGENT_FORWARDING_CONFIRM", uimsg, _countof(uimsg), + _T("Are you sure you want to accept agent-forwarding request?"), + pvar->ts->UILanguageFile); + if (MessageBox(cur_active != NULL ? cur_active : pvar->NotificationWindow, + uimsg, _T("TTSSH"), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2) == IDYES) { return TRUE; } Modified: branches/cmake/ttssh2/ttxssh/fwdui.c =================================================================== --- branches/cmake/ttssh2/ttxssh/fwdui.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/fwdui.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -69,16 +69,21 @@ static void make_X_forwarding_spec(FWDRequestSpec *spec, PTInstVar pvar) { + char uimsg[MAX_UIMSG]; spec->type = FWD_REMOTE_X11_TO_LOCAL; spec->from_port = -1; X11_get_DISPLAY_info(pvar, spec->to_host, sizeof(spec->to_host), &spec->to_port, &spec->x11_screen); - UTIL_get_lang_msg("MSG_FWD_REMOTE_XSERVER", pvar, "remote X server"); - strncpy_s(spec->from_port_name, sizeof(spec->from_port_name), - pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_FWD_REMOTE_XSCREEN", pvar, "X server (display %d:%d)"); + UTIL_get_lang_msgU8("MSG_FWD_REMOTE_XSERVER", + spec->from_port_name, sizeof(spec->from_port_name), + "remote X server", + pvar->ts->UILanguageFile); + UTIL_get_lang_msgU8("MSG_FWD_REMOTE_XSCREEN", + uimsg, _countof(uimsg), + "X server (display %d:%d)", + pvar->ts->UILanguageFile); _snprintf_s(spec->to_port_name, sizeof(spec->to_port_name), _TRUNCATE, - pvar->ts->UIMsg, spec->to_port - 6000, spec->x11_screen); + uimsg, spec->to_port - 6000, spec->x11_screen); } static BOOL parse_request(FWDRequestSpec *request, char *str, PTInstVar pvar) @@ -685,7 +690,7 @@ const char *svc; for (i=0; (svc = service_name(i)) != NULL; i++) { - SendMessage(cbox, CB_ADDSTRING, 0, (LPARAM) svc); + SendMessageA(cbox, CB_ADDSTRING, 0, (LPARAM) svc); } } @@ -825,8 +830,25 @@ static void init_fwd_edit_dlg(PTInstVar pvar, FWDRequestSpec *spec, HWND dlg) { - char uimsg[MAX_UIMSG]; + const static DlgTextInfo text_info[] = { + { 0, "DLG_FWD_TITLE" }, + { IDD_SSHFWDBANNER, "DLG_FWD_BANNER" }, + { IDC_SSHFWDLOCALTOREMOTE, "DLG_FWD_LOCAL_PORT" }, + { IDC_SSHFWDLOCALTOREMOTE_LISTEN, "DLG_FWD_LOCAL_LISTEN" }, + { IDC_SSHFWDLOCALTOREMOTE_HOST, "DLG_FWD_LOCAL_REMOTE" }, + { IDC_SSHFWDLOCALTOREMOTE_PORT, "DLG_FWD_LOCAL_REMOTE_PORT" }, + { IDC_SSHFWDREMOTETOLOCAL, "DLG_FWD_REMOTE_PORT" }, + { IDC_SSHFWDREMOTETOLOCAL_LISTEN, "DLG_FWD_REMOTE_LISTEN" }, + { IDC_SSHFWDREMOTETOLOCAL_HOST, "DLG_FWD_REMOTE_LOCAL" }, + { IDC_SSHFWDREMOTETOLOCAL_PORT, "DLG_FWD_REMOTE_LOCAL_PORT" }, + { IDC_SSHFWDLOCALDYNAMIC, "DLG_FWD_DYNAMIC_PORT" }, + { IDC_SSHFWDLOCALDYNAMIC_LISTEN, "DLG_FWD_DYNAMIC_LISTEN" }, + { IDOK, "BTN_OK" }, + { IDCANCEL, "BTN_CANCEL" }, + }; + SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); +#if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_FWD_TITLE", pvar, uimsg); SetWindowText(dlg, pvar->ts->UIMsg); @@ -869,7 +891,8 @@ GetDlgItemText(dlg, IDCANCEL, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("BTN_CANCEL", pvar, uimsg); SetDlgItemText(dlg, IDCANCEL, pvar->ts->UIMsg); - +#endif + switch (spec->type) { case FWD_REMOTE_TO_LOCAL: setup_edit_controls(dlg, spec, IDC_SSHFWDREMOTETOLOCAL, Modified: branches/cmake/ttssh2/ttxssh/hosts.c =================================================================== --- branches/cmake/ttssh2/ttxssh/hosts.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/hosts.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -40,6 +40,7 @@ #include "hosts.h" #include "dns.h" #include "dlglib.h" +#include "codeconv.h" #include <openssl/bn.h> #include <openssl/evp.h> @@ -52,8 +53,9 @@ #include <sys/stat.h> #include <direct.h> #include <memory.h> +#include <tchar.h> -#if defined(UNICODE) +#if 0 //defined(UNICODE) #undef SetDlgItemText #define SetDlgItemText SetDlgItemTextA #undef GetDlgItemText @@ -134,6 +136,7 @@ int length; int amount_read; char buf[2048]; + char uimsg[MAX_UIMSG]; get_teraterm_dir_relative_name(buf, sizeof(buf), name); fd = _open(buf, _O_RDONLY | _O_SEQUENTIAL | _O_BINARY); @@ -140,14 +143,16 @@ if (fd == -1) { if (!suppress_errors) { if (errno == ENOENT) { - UTIL_get_lang_msg("MSG_HOSTS_READ_ENOENT_ERROR", pvar, - "An error occurred while trying to read a known_hosts file.\n" - "The specified filename does not exist."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_READ_ENOENT_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to read a known_hosts file.\n" + "The specified filename does not exist.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { - UTIL_get_lang_msg("MSG_HOSTS_READ_ERROR", pvar, - "An error occurred while trying to read a known_hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_READ_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to read a known_hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } } return 0; @@ -160,9 +165,10 @@ pvar->hosts_state.file_data = malloc(length + 1); if (pvar->hosts_state.file_data == NULL) { if (!suppress_errors) { - UTIL_get_lang_msg("MSG_HOSTS_ALLOC_ERROR", pvar, - "Memory ran out while trying to allocate space to read a known_hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_ALLOC_ERROR", uimsg, _countof(uimsg), + "Memory ran out while trying to allocate space to read a known_hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } _close(fd); return 0; @@ -169,9 +175,10 @@ } } else { if (!suppress_errors) { - UTIL_get_lang_msg("MSG_HOSTS_READ_ERROR", pvar, - "An error occurred while trying to read a known_hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_READ_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to read a known_hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } _close(fd); return 0; @@ -184,9 +191,10 @@ if (amount_read != length) { if (!suppress_errors) { - UTIL_get_lang_msg("MSG_HOSTS_READ_ERROR", pvar, - "An error occurred while trying to read a known_hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_READ_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to read a known_hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } free(pvar->hosts_state.file_data); pvar->hosts_state.file_data = NULL; @@ -525,6 +533,7 @@ { int i; int while_flg; + char uimsg[MAX_UIMSG]; for (i = 0; hostname[i] != 0; i++) { int ch = hostname[i]; @@ -531,10 +540,11 @@ if (!is_pattern_char(ch) || ch == '*' || ch == '?') { if (!suppress_errors) { - UTIL_get_lang_msg("MSG_HOSTS_HOSTNAME_INVALID_ERROR", pvar, - "The host name contains an invalid character.\n" - "This session will be terminated."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_HOSTS_HOSTNAME_INVALID_ERROR", uimsg, _countof(uimsg), + "The host name contains an invalid character.\n" + "This session will be terminated.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } return 0; } @@ -542,10 +552,11 @@ if (i == 0) { if (!suppress_errors) { - UTIL_get_lang_msg("MSG_HOSTS_HOSTNAME_EMPTY_ERROR", pvar, - "The host name should not be empty.\n" - "This session will be terminated."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_HOSTS_HOSTNAME_EMPTY_ERROR", uimsg, _countof(uimsg), + "The host name should not be empty.\n" + "This session will be terminated.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } return 0; } @@ -974,22 +985,26 @@ static void init_hosts_dlg(PTInstVar pvar, HWND dlg) { - char buf[1024]; - char buf2[2048]; + TCHAR buf[1024]; + TCHAR buf2[2048]; int i, j; int ch; // static text\x82\xCC # \x95\x94\x95\xAA\x82\xF0\x83z\x83X\x83g\x96\xBC\x82ɒu\x8A\xB7\x82\xB7\x82\xE9 - GetDlgItemText(dlg, IDC_HOSTWARNING, buf, sizeof(buf)); + GetDlgItemText(dlg, IDC_HOSTWARNING, buf, _countof(buf)); for (i = 0; (ch = buf[i]) != 0 && ch != '#'; i++) { buf2[i] = ch; } - strncpy_s(buf2 + i, sizeof(buf2) - i, - pvar->hosts_state.prefetched_hostname, _TRUNCATE); - j = i + strlen(buf2 + i); + { + const TCHAR *hostname = ToTcharU8(pvar->hosts_state.prefetched_hostname); + _tcsncpy_s(buf2 + i, sizeof(buf2) - i, + hostname, _TRUNCATE); + free((void *)hostname); + } + j = i + _tcslen(buf2 + i); for (; buf[i] == '#'; i++) { } - strncpy_s(buf2 + j, sizeof(buf2) - j, buf + i, _TRUNCATE); + _tcsncpy_s(buf2 + j, sizeof(buf2) - j, buf + i, _TRUNCATE); SetDlgItemText(dlg, IDC_HOSTWARNING, buf2); @@ -1222,15 +1237,17 @@ static void add_host_key(PTInstVar pvar) { char *name = NULL; + char uimsg[MAX_UIMSG]; if ( pvar->hosts_state.file_names != NULL) name = pvar->hosts_state.file_names[0]; if (name == NULL || name[0] == 0) { - UTIL_get_lang_msg("MSG_HOSTS_FILE_UNSPECIFY_ERROR", pvar, - "The host and its key cannot be added, because no known-hosts file has been specified.\n" - "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_FILE_UNSPECIFY_ERROR", uimsg, _countof(uimsg), + "The host and its key cannot be added, because no known-hosts file has been specified.\n" + "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { char *keydata = format_host_key(pvar); int length = strlen(keydata); @@ -1245,15 +1262,17 @@ _S_IREAD | _S_IWRITE); if (fd == -1) { if (errno == EACCES) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_EACCES_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "You do not have permission to write to the known-hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_EACCES_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "You do not have permission to write to the known-hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } return; } @@ -1263,10 +1282,11 @@ close_result = _close(fd); if (amount_written != length || close_result == -1) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } } } @@ -1277,6 +1297,7 @@ char *name = NULL; char *hostname; unsigned short tcpport; + char uimsg[MAX_UIMSG]; hostname = pvar->ssh_state.hostname; tcpport = pvar->ssh_state.tcpport; @@ -1285,10 +1306,11 @@ name = pvar->hosts_state.file_names[0]; if (name == NULL || name[0] == 0) { - UTIL_get_lang_msg("MSG_HOSTS_FILE_UNSPECIFY_ERROR", pvar, - "The host and its key cannot be added, because no known-hosts file has been specified.\n" - "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_FILE_UNSPECIFY_ERROR", uimsg, _countof(uimsg), + "The host and its key cannot be added, because no known-hosts file has been specified.\n" + "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { char *keydata = format_specified_host_key(key, hostname, tcpport); @@ -1304,16 +1326,18 @@ _S_IREAD | _S_IWRITE); if (fd == -1) { if (errno == EACCES) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_EACCES_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "You do not have permission to write to the known-hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_EACCES_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "You do not have permission to write to the known-hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } return; } @@ -1323,10 +1347,11 @@ close_result = _close(fd); if (amount_written != length || close_result == -1) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } } } @@ -1338,12 +1363,14 @@ static void delete_different_key(PTInstVar pvar) { char *name = pvar->hosts_state.file_names[0]; + char uimsg[MAX_UIMSG]; if (name == NULL || name[0] == 0) { - UTIL_get_lang_msg("MSG_HOSTS_FILE_UNSPECIFY_ERROR", pvar, - "The host and its key cannot be added, because no known-hosts file has been specified.\n" - "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_FILE_UNSPECIFY_ERROR", uimsg, _countof(uimsg), + "The host and its key cannot be added, because no known-hosts file has been specified.\n" + "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { Key key; // known_hosts\x82ɓo\x98^\x82\xB3\x82\xEA\x82Ă\xA2\x82錮 @@ -1366,15 +1393,18 @@ if (fd == -1) { if (errno == EACCES) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_EACCES_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "You do not have permission to write to the known-hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_EACCES_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "You do not have permission to write to the known-hosts file.", + pvar->ts->UILanguageFile); + + notify_nonfatal_error(pvar, uimsg); } else { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } return; } @@ -1496,10 +1526,11 @@ error1: close_result = _close(fd); if (amount_written != length || close_result == -1) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); goto error2; } @@ -1524,15 +1555,17 @@ char *name = pvar->hosts_state.file_names[0]; char *hostname; unsigned short tcpport; + char uimsg[MAX_UIMSG]; hostname = pvar->ssh_state.hostname; tcpport = pvar->ssh_state.tcpport; if (name == NULL || name[0] == 0) { - UTIL_get_lang_msg("MSG_HOSTS_FILE_UNSPECIFY_ERROR", pvar, - "The host and its key cannot be added, because no known-hosts file has been specified.\n" - "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_FILE_UNSPECIFY_ERROR", uimsg, _countof(uimsg), + "The host and its key cannot be added, because no known-hosts file has been specified.\n" + "Restart Tera Term and specify a read/write known-hosts file in the TTSSH Setup dialog box.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { Key key; // known_hosts\x82ɓo\x98^\x82\xB3\x82\xEA\x82Ă\xA2\x82錮 @@ -1555,16 +1588,18 @@ if (fd == -1) { if (errno == EACCES) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_EACCES_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "You do not have permission to write to the known-hosts file."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_EACCES_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "You do not have permission to write to the known-hosts file.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } else { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } return; } @@ -1683,10 +1718,11 @@ error1: close_result = _close(fd); if (amount_written != length || close_result == -1) { - UTIL_get_lang_msg("MSG_HOSTS_WRITE_ERROR", pvar, - "An error occurred while trying to write the host key.\n" - "The host key could not be written."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_HOSTS_WRITE_ERROR", uimsg, _countof(uimsg), + "An error occurred while trying to write the host key.\n" + "The host key could not be written.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); goto error2; } @@ -1728,6 +1764,7 @@ PTInstVar pvar; // LOGFONT logfont; // HFONT font; + TCHAR uimsg[MAX_UIMSG]; switch (msg) { case WM_INITDIALOG: @@ -1740,13 +1777,13 @@ #if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_UNKNOWNHOST_TITLE", pvar, uimsg); - SetWindowText(dlg, pvar->ts->UIMsg); + SetWindowText(dlg, uimsg); GetDlgItemText(dlg, IDC_HOSTWARNING, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_UNKNOWNHOST_WARNING", pvar, uimsg); - SetDlgItemText(dlg, IDC_HOSTWARNING, pvar->ts->UIMsg); + SetDlgItemText(dlg, IDC_HOSTWARNING, uimsg); GetDlgItemText(dlg, IDC_HOSTWARNING2, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_UNKNOWNHOST_WARNING2", pvar, uimsg); - SetDlgItemText(dlg, IDC_HOSTWARNING2, pvar->ts->UIMsg); + SetDlgItemText(dlg, IDC_HOSTWARNING2, uimsg); GetDlgItemText(dlg, IDC_HOSTFINGERPRINT, uimsg, sizeof(uimsg)); UTIL_get_lang_msg("DLG_UNKNOWNHOST_FINGERPRINT", pvar, uimsg); SetDlgItemText(dlg, IDC_HOSTFINGERPRINT, pvar->ts->UIMsg); @@ -1765,23 +1802,31 @@ #endif switch (pvar->dns_key_check) { case DNS_VERIFY_NOTFOUND: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "No host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_NOTFOUND", uimsg, _countof(uimsg), + _T("No host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_MATCH: case DNS_VERIFY_AUTH_MATCH: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MATCH", pvar, "Matching host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_MATCH", uimsg, _countof(uimsg), + _T("Matching host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_MISMATCH: case DNS_VERIFY_AUTH_MISMATCH: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MISMATCH", pvar, "Mismatching host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_MISMATCH", uimsg, _countof(uimsg), + _T("Mismatching host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_DIFFERENTTYPE: case DNS_VERIFY_AUTH_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_DIFFTYPE", pvar, "Mismatching host key type found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_DIFFTYPE", uimsg, _countof(uimsg), + _T("Mismatching host key type found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; } @@ -1789,14 +1834,18 @@ case DNS_VERIFY_MATCH: case DNS_VERIFY_MISMATCH: case DNS_VERIFY_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_NG", pvar, "Found insecure fingerprint in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_DNSSEC_NG", uimsg, _countof(uimsg), + _T("Found insecure fingerprint in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, uimsg); break; case DNS_VERIFY_AUTH_MATCH: case DNS_VERIFY_AUTH_MISMATCH: case DNS_VERIFY_AUTH_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_OK", pvar, "Found secure fingerprint in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_DNSSEC_OK", uimsg, _countof(uimsg), + _T("Found secure fingerprint in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, uimsg); break; } @@ -1905,6 +1954,7 @@ PTInstVar pvar; // LOGFONT logfont; // HFONT font; + TCHAR uimsg[MAX_UIMSG]; switch (msg) { case WM_INITDIALOG: @@ -1942,23 +1992,31 @@ #endif switch (pvar->dns_key_check) { case DNS_VERIFY_NOTFOUND: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "No host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_NOTFOUND", uimsg, _countof(uimsg), + _T("No host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_MATCH: case DNS_VERIFY_AUTH_MATCH: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MATCH", pvar, "Matching host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_MATCH", uimsg, _countof(uimsg), + _T("Matching host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_MISMATCH: case DNS_VERIFY_AUTH_MISMATCH: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MISMATCH", pvar, "Mismatching host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_MISMATCH", uimsg, _countof(uimsg), + _T("Mismatching host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_DIFFERENTTYPE: case DNS_VERIFY_AUTH_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_DIFFTYPE", pvar, "Mismatching host key type found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_DIFFTYPE", uimsg, _countof(uimsg), + _T("Mismatching host key type found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; } @@ -1966,14 +2024,18 @@ case DNS_VERIFY_MATCH: case DNS_VERIFY_MISMATCH: case DNS_VERIFY_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_NG", pvar, "Found insecure fingerprint in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_DNSSEC_NG", uimsg, _countof(uimsg), + _T( "Found insecure fingerprint in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, uimsg); break; case DNS_VERIFY_AUTH_MATCH: case DNS_VERIFY_AUTH_MISMATCH: case DNS_VERIFY_AUTH_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_OK", pvar, "Found secure fingerprint in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_DNSSEC_OK", uimsg, _countof(uimsg), + _T("Found secure fingerprint in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, uimsg); break; } @@ -2080,6 +2142,7 @@ PTInstVar pvar; // LOGFONT logfont; // HFONT font; + TCHAR uimsg[MAX_UIMSG]; switch (msg) { case WM_INITDIALOG: @@ -2117,23 +2180,31 @@ #endif switch (pvar->dns_key_check) { case DNS_VERIFY_NOTFOUND: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_NOTFOUND", pvar, "No host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_NOTFOUND", uimsg, _countof(uimsg), + _T("No host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_MATCH: case DNS_VERIFY_AUTH_MATCH: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MATCH", pvar, "Matching host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_MATCH", uimsg, _countof(uimsg), + _T("Matching host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_MISMATCH: case DNS_VERIFY_AUTH_MISMATCH: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_MISMATCH", pvar, "Mismatching host key fingerprint found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_MISMATCH", uimsg, _countof(uimsg), + _T("Mismatching host key fingerprint found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; case DNS_VERIFY_DIFFERENTTYPE: case DNS_VERIFY_AUTH_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_SSHFP_DIFFTYPE", pvar, "Mismatching host key type found in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_SSHFP_DIFFTYPE", uimsg, _countof(uimsg), + _T("Mismatching host key type found in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPCHECK, uimsg); break; } @@ -2141,14 +2212,18 @@ case DNS_VERIFY_MATCH: case DNS_VERIFY_MISMATCH: case DNS_VERIFY_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_NG", pvar, "Found insecure fingerprint in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_DNSSEC_NG", uimsg, _countof(uimsg), + _T("Found insecure fingerprint in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, uimsg); break; case DNS_VERIFY_AUTH_MATCH: case DNS_VERIFY_AUTH_MISMATCH: case DNS_VERIFY_AUTH_DIFFERENTTYPE: - UTIL_get_lang_msg("DLG_HOSTKEY_DNSSEC_OK", pvar, "Found secure fingerprint in DNS."); - SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, pvar->ts->UIMsg); + UTIL_get_lang_msgT("DLG_HOSTKEY_DNSSEC_OK", uimsg, _countof(uimsg), + _T("Found secure fingerprint in DNS."), + pvar->ts->UILanguageFile); + SetDlgItemText(dlg, IDC_HOSTSSHFPDNSSEC, uimsg); break; } Modified: branches/cmake/ttssh2/ttxssh/ssh.c =================================================================== --- branches/cmake/ttssh2/ttxssh/ssh.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/ssh.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -33,6 +33,7 @@ #include "libputty.h" #include "key.h" #include "ttcommon.h" +#include "codeconv.h" #include <openssl/bn.h> #include <openssl/evp.h> @@ -63,6 +64,7 @@ #include <direct.h> #include <io.h> +#include <tchar.h> #if defined(UNICODE) #undef GetPrivateProfileString @@ -71,8 +73,10 @@ #define GetPrivateProfileInt GetPrivateProfileIntA #undef WritePrivateProfileString #define WritePrivateProfileString WritePrivateProfileStringA +#if 0 #undef MessageBox #define MessageBox MessageBoxA +#endif #undef GetDlgItemText #define GetDlgItemText GetDlgItemTextA #undef SetDlgItemText @@ -655,6 +659,7 @@ We can return more than limit in some cases. */ static int buffer_packet_data(PTInstVar pvar, int limit) { + char uimsg[MAX_UIMSG]; if (pvar->ssh_state.payloadlen >= 0) { return pvar->ssh_state.payloadlen; } else { @@ -687,9 +692,10 @@ pvar->ssh_state.payloadlen = cur_decompressed_bytes; return cur_decompressed_bytes; default: - UTIL_get_lang_msg("MSG_SSH_INVALID_COMPDATA_ERROR", pvar, - "Invalid compressed data in received packet"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_INVALID_COMPDATA_ERROR", uimsg, _countof(uimsg), + "Invalid compressed data in received packet", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return -1; } } @@ -717,9 +723,11 @@ pvar->ssh_state.payload_grabbed += num_bytes; if (pvar->ssh_state.payload_grabbed > in_buffer) { char buf[128]; - UTIL_get_lang_msg("MSG_SSH_TRUNCATED_PKT_ERROR", pvar, - "Received truncated packet (%ld > %d) @ grab_payload()"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_TRUNCATED_PKT_ERROR", uimsg, _countof(uimsg), + "Received truncated packet (%ld > %d) @ grab_payload()", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, pvar->ssh_state.payload_grabbed, in_buffer); notify_fatal_error(pvar, buf, TRUE); return FALSE; @@ -741,9 +749,11 @@ } else { if (pvar->ssh_state.payload_grabbed > in_buffer) { char buf[128]; - UTIL_get_lang_msg("MSG_SSH_TRUNCATED_PKT_LIM_ERROR", pvar, - "Received truncated packet (%ld > %d) @ grab_payload_limited()"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_TRUNCATED_PKT_LIM_ERROR", uimsg, _countof(uimsg), + "Received truncated packet (%ld > %d) @ grab_payload_limited()", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, pvar->ssh_state.payload_grabbed, in_buffer); notify_fatal_error(pvar, buf, TRUE); return FALSE; @@ -866,19 +876,24 @@ */ static int prep_packet_ssh1(PTInstVar pvar, char *data, unsigned int len, unsigned int padding) { + char uimsg[MAX_UIMSG]; pvar->ssh_state.payload = data + 4; pvar->ssh_state.payloadlen = len; if (CRYPT_detect_attack(pvar, pvar->ssh_state.payload, len)) { - UTIL_get_lang_msg("MSG_SSH_COREINS_ERROR", pvar, "'CORE insertion attack' detected. Aborting connection."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_COREINS_ERROR", uimsg, _countof(uimsg), + "'CORE insertion attack' detected. Aborting connection.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } CRYPT_decrypt(pvar, pvar->ssh_state.payload, len); /* PKT guarantees that the data is always 4-byte aligned */ if (do_crc(pvar->ssh_state.payload, len - 4) != get_uint32_MSBfirst(pvar->ssh_state.payload + len - 4)) { - UTIL_get_lang_msg("MSG_SSH_CORRUPTDATA_ERROR", pvar, "Detected corrupted data; connection terminating."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_CORRUPTDATA_ERROR", uimsg, _countof(uimsg), + "Detected corrupted data; connection terminating.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return SSH_MSG_NONE; } @@ -889,10 +904,11 @@ if (pvar->ssh_state.decompressing) { if (pvar->ssh_state.decompress_stream.avail_in != 0) { - UTIL_get_lang_msg("MSG_SSH_DECOMPRESS_ERROR", pvar, - "Internal error: a packet was not fully decompressed.\n" - "This is a bug, please report it."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_SSH_DECOMPRESS_ERROR", uimsg, _countof(uimsg), + "Internal error: a packet was not fully decompressed.\n" + "This is a bug, please report it.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); } pvar->ssh_state.decompress_stream.next_in = pvar->ssh_state.payload; @@ -929,11 +945,15 @@ static int prep_packet_ssh2(PTInstVar pvar, char *data, unsigned int len, unsigned int aadlen, unsigned int authlen) { unsigned int padding; + char uimsg[MAX_UIMSG]; if (authlen > 0) { if (!CRYPT_decrypt_aead(pvar, data, len, aadlen, authlen)) { - UTIL_get_lang_msg("MSG_SSH_CORRUPTDATA_ERROR", pvar, "Detected corrupted data; connection terminating."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_CORRUPTDATA_ERROR", uimsg, _countof(uimsg), + "Detected corrupted data; connection terminating.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return SSH_MSG_NONE; } } @@ -940,8 +960,10 @@ else if (aadlen > 0) { // EtM \x82̏ꍇ\x82͐\xE6\x82\xC9 MAC \x82̌\x9F\x8F\xF0\x8Ds\x82\xA4 if (!CRYPT_verify_receiver_MAC(pvar, pvar->ssh_state.receiver_sequence_number, data, len + 4, data + len + 4)) { - UTIL_get_lang_msg("MSG_SSH_CORRUPTDATA_ERROR", pvar, "Detected corrupted data; connection terminating."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_CORRUPTDATA_ERROR", uimsg, _countof(uimsg), + "Detected corrupted data; connection terminating.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return SSH_MSG_NONE; } @@ -958,8 +980,10 @@ // E&M \x82ł͕\x9C\x8D\x86\x8C\xE3\x82\xC9 MAC \x82̌\x9F\x8F\xF0\x8Ds\x82\xA4\x81B if (!CRYPT_verify_receiver_MAC(pvar, pvar->ssh_state.receiver_sequence_number, data, len + 4, data + len + 4)) { - UTIL_get_lang_msg("MSG_SSH_CORRUPTDATA_ERROR", pvar, "Detected corrupted data; connection terminating."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_CORRUPTDATA_ERROR", uimsg, _countof(uimsg), + "Detected corrupted data; connection terminating.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return SSH_MSG_NONE; } } @@ -1085,6 +1109,7 @@ u_long do_block = 0; int code = 0; char *kind = NULL, buf[256]; + char uimsg[MAX_UIMSG]; if ((pvar->PWSAAsyncSelect) (pvar->socket, pvar->NotificationWindow, 0, 0) == SOCKET_ERROR) { code = WSAGetLastError(); @@ -1111,10 +1136,11 @@ return TRUE; error: - UTIL_get_lang_msg("MSG_SSH_SEND_PKT_ERROR", pvar, - "A communications error occurred while sending an SSH packet.\n" - "The connection will close. (%s:%d)"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_SSH_SEND_PKT_ERROR", uimsg, _countof(uimsg), + "A communications error occurred while sending an SSH packet.\n" + "The connection will close. (%s:%d)", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, kind, code); notify_fatal_error(pvar, buf, TRUE); return FALSE; @@ -1140,10 +1166,12 @@ pvar->ssh_state.compress_stream.avail_out = pvar->ssh_state.outbuflen - 12; if (deflate(&pvar->ssh_state.compress_stream, Z_SYNC_FLUSH) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_COMP_ERROR", pvar, - "An error occurred while compressing packet data.\n" - "The connection will close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_COMP_ERROR", uimsg, _countof(uimsg), + "An error occurred while compressing packet data.\n" + "The connection will close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } } @@ -1206,10 +1234,12 @@ // \x88\xB3\x8Fk\x91Ώۂ̓w\x83b\x83_\x82\xF0\x8F\x9C\x82\xAD\x83y\x83C\x83\x8D\x81[\x83h\x82̂݁B buffer_append(msg, "\0\0\0\0\0", 5); // 5 = packet-length(4) + padding(1) if (buffer_compress(&pvar->ssh_state.compress_stream, pvar->ssh_state.outbuf + 12, len, msg) == -1) { - UTIL_get_lang_msg("MSG_SSH_COMP_ERROR", pvar, - "An error occurred while compressing packet data.\n" - "The connection will close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_COMP_ERROR", uimsg, _countof(uimsg), + "An error occurred while compressing packet data.\n" + "The connection will close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } data = buffer_ptr(msg); @@ -1603,24 +1633,27 @@ } if (get_handler(pvar, SSH_SMSG_FAILURE) == handle_forwarding_failure) { - UTIL_get_lang_msg("MSG_SSH_UNABLE_FWD_ERROR", pvar, - "\nIt may have disconnected because it was unable to forward a port you requested to be forwarded from the server.\n" - "This often happens when someone is already forwarding that port from the server."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("MSG_SSH_UNABLE_FWD_ERROR", uimsg, _countof(uimsg), + "\nIt may have disconnected because it was unable to forward a port you requested to be forwarded from the server.\n" + "This often happens when someone is already forwarding that port from the server.", + pvar->ts->UILanguageFile); + strncpy_s(uimsg, sizeof(uimsg), uimsg, _TRUNCATE); explanation = uimsg; } if (description != NULL) { - UTIL_get_lang_msg("MSG_SSH_SERVER_DISCON_ERROR", pvar, - "Server disconnected with message '%s'%s"); + UTIL_get_lang_msgU8("MSG_SSH_SERVER_DISCON_ERROR", uimsg, _countof(uimsg), + "Server disconnected with message '%s'%s", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, description, + uimsg, description, explanation); } else { - UTIL_get_lang_msg("MSG_SSH_SERVER_DISCON_NORES_ERROR", pvar, - "Server disconnected (no reason given).%s"); + UTIL_get_lang_msgU8("MSG_SSH_SERVER_DISCON_NORES_ERROR", uimsg, _countof(uimsg), + "Server disconnected (no reason given).%s", + pvar->ts->UILanguageFile); _snprintf_s(buf, sizeof(buf), _TRUNCATE, - pvar->ts->UIMsg, explanation); + uimsg, explanation); } if (SSHv2(pvar)) { @@ -1936,21 +1969,25 @@ pvar->ssh_state.server_ID = _strdup(ID); if (!parse_protocol_ID(pvar, ID)) { - UTIL_get_lang_msg("MSG_SSH_VERSION_ERROR", pvar, - "This program does not understand the server's version of the protocol."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_VERSION_ERROR", uimsg, _countof(uimsg), + "This program does not understand the server's version of the protocol.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } else if ((negotiate = negotiate_protocol(pvar)) == 1) { - UTIL_get_lang_msg("MSG_SSH_VERSION_ERROR", pvar, - "This program does not understand the server's version of the protocol."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_VERSION_ERROR", uimsg, _countof(uimsg), + "This program does not understand the server's version of the protocol.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } else if (negotiate == -1) { - UTIL_get_lang_msg("MSG_SSH_VERSION_MISMATCH", pvar, - "Protocol version mismatch. server:%d.%d client:%d"); - _snprintf_s(uimsg, sizeof(uimsg), _TRUNCATE, pvar->ts->UIMsg, + char buf[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_VERSION_MISMATCH", uimsg, _countof(uimsg), + "Protocol version mismatch. server:%d.%d client:%d", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, pvar->protocol_major, pvar->protocol_minor, pvar->settings.ssh_protocol_version); - notify_fatal_error(pvar, uimsg, TRUE); + notify_fatal_error(pvar, buf, TRUE); } else { char TTSSH_ID[1024]; @@ -1981,10 +2018,11 @@ server_version_check(pvar); if ((pvar->Psend) (pvar->socket, TTSSH_ID, TTSSH_ID_len, 0) != TTSSH_ID_len) { - UTIL_get_lang_msg("MSG_SSH_SEND_ID_ERROR", pvar, - "An error occurred while sending the SSH ID string.\n" - "The connection will close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_SEND_ID_ERROR", uimsg, _countof(uimsg), + "An error occurred while sending the SSH ID string.\n" + "The connection will close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } else { // \x89\xFC\x8Ds\x82̏\x9C\x8B\x8E chop_newlines(pvar->client_version_string); @@ -2215,6 +2253,7 @@ { int i; + for (i = 0 ; i < handle_message_count ; i++) { if (handle_messages[i] == message) return 1; @@ -2263,9 +2302,12 @@ if (handler == NULL) { char buf[1024]; + char uimsg[MAX_UIMSG]; - UTIL_get_lang_msg("MSG_SSH_UNEXP_MSG_ERROR", pvar, "Unexpected packet type received: %d"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, message, handle_message_stage); + UTIL_get_lang_msgU8("MSG_SSH_UNEXP_MSG_ERROR", uimsg, _countof(uimsg), + "Unexpected packet type received: %d", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, message, handle_message_stage); notify_fatal_error(pvar, buf, TRUE); } else { if (!handler(pvar)) { @@ -2286,10 +2328,13 @@ // \x91z\x92\xE8\x8AO\x82̃\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x82\xAA\x93\x9E\x92\x85\x82\xB5\x82\xBD\x82\xE7\x83A\x83{\x81[\x83g\x82\xB3\x82\xB9\x82\xE9\x81B if (!SSH2_dispatch_enabled_check(message) || handler == NULL) { + char uimsg[MAX_UIMSG]; char buf[1024]; - UTIL_get_lang_msg("MSG_SSH_UNEXP_MSG2_ERROR", pvar, "Unexpected SSH2 message(%d) on current stage(%d)"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, message, handle_message_stage); + UTIL_get_lang_msgU8("MSG_SSH_UNEXP_MSG2_ERROR", uimsg, _countof(uimsg), + "Unexpected SSH2 message(%d) on current stage(%d)", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, message, handle_message_stage); notify_fatal_error(pvar, buf, TRUE); return; } @@ -2327,10 +2372,12 @@ static BOOL handle_pty_failure(PTInstVar pvar) { - UTIL_get_lang_msg("MSG_SSH_ALLOC_TERMINAL_ERROR", pvar, - "The server cannot allocate a pseudo-terminal. " - "You may encounter some problems with the terminal."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_ALLOC_TERMINAL_ERROR", uimsg, _countof(uimsg), + "The server cannot allocate a pseudo-terminal. " + "You may encounter some problems with the terminal.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); return handle_pty_success(pvar); } @@ -2412,10 +2459,12 @@ pvar->ssh_state.compress_stream.zfree = NULL; pvar->ssh_state.compress_stream.opaque = NULL; if (deflateInit(&pvar->ssh_state.compress_stream, pvar->ssh_state.compression_level) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_SETUP_COMP_ERROR", pvar, - "An error occurred while setting up compression.\n" - "The connection will close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_SETUP_COMP_ERROR", uimsg, _countof(uimsg), + "An error occurred while setting up compression.\n" + "The connection will close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } else { // SSH2\x82ł͈\xB3\x8Fk\x81E\x93W\x8AJ\x8F\x88\x97\x9D\x82\xF0SSH1\x82Ƃ͕ʂɍs\x82\xA4\x82̂ŁA\x89\xBA\x8BL\x83t\x83\x89\x83O\x82͗\x8E\x82Ƃ\xB5\x82Ă\xA8\x82\xAD\x81B(2005.7.9 yutaka) @@ -2440,11 +2489,13 @@ pvar->ssh_state.decompress_stream.zfree = NULL; pvar->ssh_state.decompress_stream.opaque = NULL; if (inflateInit(&pvar->ssh_state.decompress_stream) != Z_OK) { + char uimsg[MAX_UIMSG]; deflateEnd(&pvar->ssh_state.compress_stream); - UTIL_get_lang_msg("MSG_SSH_SETUP_COMP_ERROR", pvar, - "An error occurred while setting up compression.\n" - "The connection will close."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_SETUP_COMP_ERROR", uimsg, _countof(uimsg), + "An error occurred while setting up compression.\n" + "The connection will close.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } else { // SSH2\x82ł͈\xB3\x8Fk\x81E\x93W\x8AJ\x8F\x88\x97\x9D\x82\xF0SSH1\x82Ƃ͕ʂɍs\x82\xA4\x82̂ŁA\x89\xBA\x8BL\x83t\x83\x89\x83O\x82͗\x8E\x82Ƃ\xB5\x82Ă\xA8\x82\xAD\x81B(2005.7.9 yutaka) @@ -2542,10 +2593,12 @@ enque_simple_auth_handlers(pvar); } else { - UTIL_get_lang_msg("MSG_SSH_DECRYPT_RSA_ERROR", pvar, - "An error occurred while decrypting the RSA challenge.\n" - "Perhaps the key file is corrupted."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_DECRYPT_RSA_ERROR", uimsg, _countof(uimsg), + "An error occurred while decrypting the RSA challenge.\n" + "Perhaps the key file is corrupted.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); } } else if (pvar->auth_state.cur_cred.method == SSH_AUTH_PAGEANT) { @@ -2591,6 +2644,7 @@ static void try_send_credentials(PTInstVar pvar) { + char uimsg[MAX_UIMSG]; if ((pvar->ssh_state.status_flags & STATUS_DONT_SEND_CREDENTIALS) == 0) { AUTHCred *cred = AUTH_get_cur_cred(pvar); static const int RSA_msgs[] = @@ -2742,9 +2796,10 @@ break; } default: - UTIL_get_lang_msg("MSG_SSH_UNSUPPORT_AUTH_METHOD_ERROR", pvar, - "Internal error: unsupported authentication method"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_UNSUPPORT_AUTH_METHOD_ERROR", uimsg, _countof(uimsg), + "Internal error: unsupported authentication method", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } @@ -3122,6 +3177,8 @@ void SSH_send(PTInstVar pvar, unsigned char const *buf, unsigned int buflen) { + char uimsg[MAX_UIMSG]; + // RAW\x83p\x83P\x83b\x83g\x83_\x83\x93\x83v\x82\xF0\x92lj\xC1 (2008.8.15 yutaka) if (LogLevel(pvar, LOG_LEVEL_SSHDUMP)) { init_memdump(); @@ -3155,9 +3212,10 @@ pvar->ssh_state.outbuflen - 12; if (deflate(&pvar->ssh_state.compress_stream, Z_NO_FLUSH) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_COMP_ERROR", pvar, - "Error compressing packet data"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_COMP_ERROR", uimsg, _countof(uimsg), + "Error compressing packet data", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } @@ -3166,9 +3224,10 @@ pvar->ssh_state.compress_stream.avail_in = len; if (deflate(&pvar->ssh_state.compress_stream, Z_SYNC_FLUSH) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_COMP_ERROR", pvar, - "Error compressing packet data"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_COMP_ERROR", uimsg, _countof(uimsg), + "Error compressing packet data", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } } else { @@ -3195,6 +3254,7 @@ int SSH_extract_payload(PTInstVar pvar, unsigned char *dest, int len) { + char uimsg[MAX_UIMSG]; int num_bytes = pvar->ssh_state.payload_datalen; if (num_bytes > len) { @@ -3211,9 +3271,10 @@ pvar->ssh_state.decompress_stream.avail_out = num_bytes; if (inflate(&pvar->ssh_state.decompress_stream, Z_SYNC_FLUSH) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_INVALID_COMPDATA_ERROR", pvar, - "Invalid compressed data in received packet"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_INVALID_COMPDATA_ERROR", uimsg, _countof(uimsg), + "Invalid compressed data in received packet", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return 0; } } @@ -3227,6 +3288,7 @@ { char buf[1024]; char buf2[1024]; + char uimsg[MAX_UIMSG]; // added support of SSH2 packet compression (2005.7.10 yutaka) // support of "Compression delayed" (2006.6.23 maya) @@ -3238,20 +3300,25 @@ pvar->ssh_state.compress_stream.total_out; if (total_out > 0) { - UTIL_get_lang_msg("DLG_ABOUT_COMP_INFO", pvar, - "level %d; ratio %.1f (%ld:%ld)"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_INFO", uimsg, _countof(uimsg), + "level %d; ratio %.1f (%ld:%ld)", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, pvar->ssh_state.compression_level, ((double) total_in) / total_out, total_in, total_out); } else { - UTIL_get_lang_msg("DLG_ABOUT_COMP_INFO2", pvar, "level %d"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_INFO2", uimsg, _countof(uimsg), + "level %d", + pvar->ts->UILanguageFile); + _snprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, pvar->ssh_state.compression_level); } } else { - UTIL_get_lang_msg("DLG_ABOUT_COMP_NONE", pvar, "none"); - strncpy_s(buf, sizeof(buf), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_NONE", uimsg, _countof(uimsg), + "none", + pvar->ts->UILanguageFile); + strncpy_s(buf, sizeof(buf), uimsg, _TRUNCATE); } // support of "Compression delayed" (2006.6.23 maya) @@ -3264,25 +3331,31 @@ pvar->ssh_state.decompress_stream.total_out; if (total_in > 0) { - UTIL_get_lang_msg("DLG_ABOUT_COMP_INFO", pvar, - "level %d; ratio %.1f (%ld:%ld)"); - _snprintf_s(buf2, sizeof(buf2), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_INFO", uimsg, _countof(uimsg), + "level %d; ratio %.1f (%ld:%ld)", + pvar->ts->UILanguageFile); + _snprintf_s(buf2, sizeof(buf2), _TRUNCATE, uimsg, pvar->ssh_state.compression_level, ((double) total_out) / total_in, total_out, total_in); } else { - UTIL_get_lang_msg("DLG_ABOUT_COMP_INFO2", pvar, "level %d"); - _snprintf_s(buf2, sizeof(buf2), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_INFO2", uimsg, _countof(uimsg), + "level %d", + pvar->ts->UILanguageFile); + _snprintf_s(buf2, sizeof(buf2), _TRUNCATE, uimsg, pvar->ssh_state.compression_level); } } else { - UTIL_get_lang_msg("DLG_ABOUT_COMP_NONE", pvar, "none"); - strncpy_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_NONE", uimsg, _countof(uimsg), + "none", + pvar->ts->UILanguageFile); + strncpy_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); } - UTIL_get_lang_msg("DLG_ABOUT_COMP_UPDOWN", pvar, - "Upstream %s; Downstream %s"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, buf, buf2); + UTIL_get_lang_msgU8("DLG_ABOUT_COMP_UPDOWN", uimsg, _countof(uimsg), + "Upstream %s; Downstream %s", + pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, buf, buf2); } void SSH_get_server_ID_info(PTInstVar pvar, char *dest, int len) @@ -3306,9 +3379,11 @@ void SSH_get_mac_info(PTInstVar pvar, char *dest, int len) { - UTIL_get_lang_msg("DLG_ABOUT_MAC_INFO", pvar, - "%s to server, %s from server"); - _snprintf_s(dest, len, _TRUNCATE, pvar->ts->UIMsg, + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("DLG_ABOUT_MAC_INFO", uimsg, _countof(uimsg), + "%s to server, %s from server", + pvar->ts->UILanguageFile); + _snprintf_s(dest, len, _TRUNCATE, uimsg, get_ssh2_mac_name(pvar->macs[MODE_OUT]), get_ssh2_mac_name(pvar->macs[MODE_IN])); } @@ -3507,6 +3582,7 @@ uint32 remote_channel_num, unsigned char *buf, int len, int retry) { + char uimsg[MAX_UIMSG]; if (SSHv1(pvar)) { unsigned char *outmsg = begin_send_packet(pvar, SSH_MSG_CHANNEL_DATA, 8 + len); @@ -3526,9 +3602,10 @@ pvar->ssh_state.outbuflen - 12; if (deflate(&pvar->ssh_state.compress_stream, Z_NO_FLUSH) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_COMP_ERROR", pvar, - "Error compressing packet data"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_COMP_ERROR", uimsg, _countof(uimsg), + "Error compressing packet data", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } @@ -3538,9 +3615,10 @@ if (deflate(&pvar->ssh_state.compress_stream, Z_SYNC_FLUSH) != Z_OK) { - UTIL_get_lang_msg("MSG_SSH_COMP_ERROR", pvar, - "Error compressing packet data"); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_COMP_ERROR", uimsg, _countof(uimsg), + "Error compressing packet data", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return; } } else { @@ -3958,10 +4036,12 @@ c = ssh2_channel_new(CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, TYPE_PORTFWD, local_channel_num); if (c == NULL) { // \x93]\x91\x97\x83`\x83\x83\x83l\x83\x8B\x93\xE0\x82ɂ\xA0\x82\xE9\x83\\x83P\x83b\x83g\x82̉\xF0\x95\xFA\x98R\x82\xEA\x82\xF0\x8FC\x90\xB3 (2007.7.26 maya) + char uimsg[MAX_UIMSG]; FWD_free_channel(pvar, local_channel_num); - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); return; } @@ -4013,6 +4093,19 @@ // // (2007.12.21 yutaka) // +static int MessageBoxU8(HWND hWnd, const char *textU8, const char *captionU8, UINT uType) +{ + const TCHAR *textT = ToTcharU8(textU8); + const TCHAR *captionT = ToTcharU8(captionU8); + int r = MessageBox(hWnd, textT, captionT, uType); + free((void *)captionT); + free((void *)textT); + return r; +} + +#undef MessageBox +#define MessageBox(p1,p2,p3,p4) MessageBoxU8(p1,p2,p3,p4) + int SSH_scp_transaction(PTInstVar pvar, char *sendfile, char *dstfile, enum scp_dir direction) { buffer_t *msg; @@ -4033,9 +4126,11 @@ // \x83`\x83\x83\x83l\x83\x8B\x90ݒ\xE8 c = ssh2_channel_new(CHAN_SES_WINDOW_DEFAULT, CHAN_SES_PACKET_DEFAULT, TYPE_SCP, -1); if (c == NULL) { - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); goto error; } @@ -4173,9 +4268,11 @@ // \x83`\x83\x83\x83l\x83\x8B\x90ݒ\xE8 c = ssh2_channel_new(CHAN_SES_WINDOW_DEFAULT, CHAN_SES_PACKET_DEFAULT, TYPE_SFTP, -1); if (c == NULL) { - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); goto error; } @@ -5520,6 +5617,7 @@ buffer_t *msg = NULL; unsigned char *outmsg; char tmpbuf[256]; + char uimsg[MAX_UIMSG]; logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_KEX_DH_GEX_GROUP was received."); @@ -5542,9 +5640,10 @@ // if (grp_bits < GEX_GRP_LIMIT_MIN || grp_bits > GEX_GRP_LIMIT_MAX) { // (1), (6) \x83v\x83\x8D\x83g\x83R\x83\x8B\x82ŔF\x82߂\xE7\x82\xEA\x82Ă\xA2\x82\xE9\x94͈\xCD(1024 <= grp_bits <= 8192)\x82̊O\x81B\x8B\xAD\x90\xA7\x90ؒf\x81B - UTIL_get_lang_msg("MSG_SSH_GEX_SIZE_OUTOFRANGE", pvar, - "Received group size is out of range: %d"); - _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, pvar->ts->UIMsg, grp_bits); + UTIL_get_lang_msgU8("MSG_SSH_GEX_SIZE_OUTOFRANGE", uimsg, _countof(uimsg), + "Received group size is out of range: %d", + pvar->ts->UILanguageFile); + _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, uimsg, grp_bits); notify_fatal_error(pvar, tmpbuf, FALSE); goto error; } @@ -5552,10 +5651,11 @@ // (2) \x83v\x83\x8D\x83g\x83R\x83\x8B\x82ŔF\x82߂\xE7\x82\xEA\x82Ă\xA2\x82\xE9\x94͈͓\xE0\x82\xBE\x82\xAA\x81A\x82\xB1\x82\xBF\x82\xE7\x82̐ݒ肵\x82\xBD\x8Dŏ\xAC\x92l\x82\xE6\x82菬\x82\xB3\x82\xA2\x81B\x8Am\x94F\x83_\x83C\x83A\x83\x8D\x83O\x82\xF0\x8Fo\x82\xB7\x81B logprintf(LOG_LEVEL_WARNING, "DH-GEX: grp_bits(%d) < kexgex_min(%d)", grp_bits, pvar->kexgex_min); - UTIL_get_lang_msg("MSG_SSH_GEX_SIZE_SMALLER", pvar, - "Received group size is smaller than the requested minimal size.\nrequested: %d, received: %d\nAre you sure that you want to accecpt received group?"); + UTIL_get_lang_msgU8("MSG_SSH_GEX_SIZE_SMALLER", uimsg, _countof(uimsg), + "Received group size is smaller than the requested minimal size.\nrequested: %d, received: %d\nAre you sure that you want to accecpt received group?", + pvar->ts->UILanguageFile); _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, - pvar->ts->UIMsg, pvar->kexgex_min, grp_bits); + uimsg, pvar->kexgex_min, grp_bits); } else if (grp_bits < pvar->kexgex_bits) { // (3) \x97v\x8B\x81\x82̍ŏ\xAC\x92l\x82͖\x9E\x82\xBD\x82\xB7\x82\xAA\x81A\x97v\x8B\x81\x92l\x82\xE6\x82\xE8\x82͏\xAC\x82\xB3\x82\xA2\x81B\x8Am\x94F\x83_\x83C\x83A\x83\x8D\x83O\x82͏o\x82\xB3\x82Ȃ\xA2\x81B @@ -5572,19 +5672,22 @@ // \x82\xBD\x82\xBE\x82\xB5\x8C\xBB\x8F\xF3\x82ł\xCD kexgex_max == GEX_GRP_LIMIT_MAX(8192) \x82ł\xA0\x82\xE9\x88ׂ\xB1\x82̏ɂȂ鎖\x82͖\xB3\x82\xA2\x81B logprintf(LOG_LEVEL_WARNING, "DH-GEX: grp_bits(%d) > kexgex_max(%d)", grp_bits, pvar->kexgex_max); - UTIL_get_lang_msg("MSG_SSH_GEX_SIZE_LARGER", pvar, - "Received group size is larger than the requested maximal size.\nrequested: %d, received: %d\nAre you sure that you want to accecpt received group?"); + UTIL_get_lang_msgU8("MSG_SSH_GEX_SIZE_LARGER", uimsg, _countof(uimsg), + "Received group size is larger than the requested maximal size.\nrequested: %d, received: %d\nAre you sure that you want to accecpt received group?", + pvar->ts->UILanguageFile); _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, - pvar->ts->UIMsg, pvar->kexgex_max, grp_bits); + uimsg, pvar->kexgex_max, grp_bits); } if (tmpbuf[0] != 0) { - UTIL_get_lang_msg("MSG_SSH_GEX_SIZE_TITLE", pvar, - "TTSSH: Confirm GEX group size"); - if (MessageBox(NULL, tmpbuf, pvar->ts->UIMsg, MB_YESNO | MB_ICONERROR) == IDNO) { - UTIL_get_lang_msg("MSG_SSH_GEX_SIZE_CANCEL", pvar, - "New connection is cancelled."); - notify_fatal_error(pvar, pvar->ts->UIMsg, FALSE); + UTIL_get_lang_msgU8("MSG_SSH_GEX_SIZE_TITLE", uimsg, _countof(uimsg), + "TTSSH: Confirm GEX group size", + pvar->ts->UILanguageFile); + if (MessageBox(NULL, tmpbuf, uimsg, MB_YESNO | MB_ICONERROR) == IDNO) { + UTIL_get_lang_msgU8("MSG_SSH_GEX_SIZE_CANCEL", uimsg, _countof(uimsg), + "New connection is cancelled.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, FALSE); goto error; } } @@ -6809,9 +6912,11 @@ } if (c == NULL) { - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return FALSE; } // \x83V\x83F\x83\x8B\x82\xCCID\x82\xF0\x8E\xE6\x82\xC1\x82Ă\xA8\x82\xAD @@ -6855,6 +6960,7 @@ char *data; char *cstring; int partial; + char uimsg[MAX_UIMSG]; logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_USERAUTH_FAILURE was received."); @@ -6869,9 +6975,10 @@ // \x97L\x8C\xF8\x82ȔF\x8Fؕ\x{33AE0AA}\x82Ȃ\xA2\x8Fꍇ if (cstring == NULL) { - UTIL_get_lang_msg("MSG_SSH_SERVER_NO_AUTH_METHOD_ERROR", pvar, - "The server doesn't have valid authentication method."); - notify_fatal_error(pvar, pvar->ts->UIMsg, TRUE); + UTIL_get_lang_msgU8("MSG_SSH_SERVER_NO_AUTH_METHOD_ERROR", uimsg, _countof(uimsg), + "The server doesn't have valid authentication method.", + pvar->ts->UILanguageFile); + notify_fatal_error(pvar, uimsg, TRUE); return FALSE; } @@ -6937,18 +7044,17 @@ } if (pvar->ssh2_autologin == 1) { - char uimsg[MAX_UIMSG]; // SSH2\x8E\xA9\x93\xAE\x83\x8D\x83O\x83C\x83\x93\x82\xAA\x97L\x8C\xF8\x82̏ꍇ\x82́A\x83\x8A\x83g\x83\x89\x83C\x82͍s\x82\xED\x82Ȃ\xA2\x81B(2004.12.4 yutaka) - UTIL_get_lang_msg("MSG_SSH_AUTH_FAILURE_ERROR", pvar, - "SSH2 auto-login error: user authentication failed."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("MSG_SSH_AUTH_FAILURE_ERROR", uimsg, _countof(uimsg), + "SSH2 auto-login error: user authentication failed.", + pvar->ts->UILanguageFile); if (pvar->ssh2_authlist != NULL || strlen(pvar->ssh2_authlist) != 0) { if ((pvar->auth_state.supported_types & (1 << pvar->ssh2_authmethod)) == 0) { // \x8Eg\x97p\x82\xB5\x82\xBD\x94F\x8F\x81\x83\\x83b\x83h\x82̓T\x83|\x81[\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82Ȃ\xA9\x82\xC1\x82\xBD - UTIL_get_lang_msg("MSG_SSH_SERVER_UNSUPPORT_AUTH_METHOD_ERROR", pvar, - "\nAuthentication method is not supported by server."); - strncat_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("MSG_SSH_SERVER_UNSUPPORT_AUTH_METHOD_ERROR", uimsg, _countof(uimsg), + "\nAuthentication method is not supported by server.", + pvar->ts->UILanguageFile); } } notify_fatal_error(pvar, uimsg, TRUE); @@ -7371,7 +7477,6 @@ // LOGFONT logfont; // HFONT font; // static HFONT DlgChgPassFont; -// char uimsg[MAX_UIMSG]; static PTInstVar pvar; @@ -7394,7 +7499,7 @@ SetDlgTexts(dlg, text_info, _countof(text_info), pvar->ts->UILanguageFile); #if 0 GetWindowText(dlg, uimsg, sizeof(uimsg)); - UTIL_get_lang_msg("DLG_PASSCHG_TITLE", pvar, uimsg); + UTIL_get_lang_msg("DLG_PASSCHG_TITLE", pvar, uimsg) SetWindowText(dlg, pvar->ts->UIMsg); GetDlgItemText(dlg, IDC_PASSWD_CHANGEREQ_MSG, uimsg, sizeof(uimsg)); @@ -7425,8 +7530,11 @@ GetDlgItemTextA(dlg, IDC_CONFIRM_PASSWD, retype_passwd, sizeof(retype_passwd)); if (strcmp(new_passwd, retype_passwd) == 1) { - UTIL_get_lang_msg("MSG_PASSCHG_MISMATCH", pvar, "Mismatch; try again."); - MessageBox(NULL, pvar->ts->UIMsg, "ERROR", MB_OK | MB_ICONEXCLAMATION); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_PASSCHG_MISMATCH", uimsg, _countof(uimsg), + "Mismatch; try again.", + pvar->ts->UILanguageFile); + MessageBox(NULL, uimsg, "ERROR", MB_OK | MB_ICONEXCLAMATION); return FALSE; } @@ -7807,6 +7915,7 @@ char *cstring; char tmpbuf[256]; char *rmsg; + char uimsg[MAX_UIMSG]; logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_CHANNEL_OPEN_FAILURE was received."); @@ -7845,9 +7954,10 @@ if (cstring == NULL) { logputs(LOG_LEVEL_ERROR, __FUNCTION__ ": buffer_get_string returns NULL"); } - UTIL_get_lang_msg("MSG_SSH_CHANNEL_OPEN_ERROR", pvar, - "SSH2_MSG_CHANNEL_OPEN_FAILURE was received.\r\nchannel [%d]: reason: %s(%d) message: %s"); - _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, pvar->ts->UIMsg, + UTIL_get_lang_msgU8("MSG_SSH_CHANNEL_OPEN_ERROR", uimsg, _countof(uimsg), + "SSH2_MSG_CHANNEL_OPEN_FAILURE was received.\r\nchannel [%d]: reason: %s(%d) message: %s", + pvar->ts->UILanguageFile); + _snprintf_s(tmpbuf, sizeof(tmpbuf), _TRUNCATE, uimsg, id, rmsg, reason, NonNull(cstring)); notify_nonfatal_error(pvar, tmpbuf); @@ -8024,8 +8134,10 @@ if (c->type == TYPE_SUBSYSTEM_GEN) { // \x83T\x83u\x83V\x83X\x83e\x83\x80\x82̋N\x93\xAE\x82Ɏ\xB8\x94s\x82\xB5\x82\xBD\x82̂Ő\xE9\x81B char errmsg[MAX_UIMSG]; - UTIL_get_lang_msg("MSG_SSH_SUBSYSTEM_REQUEST_ERROR", pvar, "subsystem request failed. (%s)"); - _snprintf_s(errmsg, sizeof(errmsg), _TRUNCATE, pvar->ts->UIMsg, pvar->subsystem_name); + UTIL_get_lang_msgU8("MSG_SSH_SUBSYSTEM_REQUEST_ERROR", + errmsg, _countof(errmsg), + "subsystem request failed. (%s)", + pvar->ts->UILanguageFile); notify_fatal_error(pvar, errmsg, TRUE); return TRUE; } @@ -9025,10 +9137,12 @@ c = ssh2_channel_new(CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, TYPE_PORTFWD, chan_num); if (c == NULL) { // \x93]\x91\x97\x83`\x83\x83\x83l\x83\x8B\x93\xE0\x82ɂ\xA0\x82\xE9\x83\\x83P\x83b\x83g\x82̉\xF0\x95\xFA\x98R\x82\xEA\x82\xF0\x8FC\x90\xB3 (2007.7.26 maya) + char uimsg[MAX_UIMSG]; FWD_free_channel(pvar, chan_num); - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); return FALSE; } c->remote_id = remote_id; @@ -9067,10 +9181,12 @@ c = ssh2_channel_new(CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, TYPE_PORTFWD, chan_num); if (c == NULL) { // \x93]\x91\x97\x83`\x83\x83\x83l\x83\x8B\x93\xE0\x82ɂ\xA0\x82\xE9\x83\\x83P\x83b\x83g\x82̉\xF0\x95\xFA\x98R\x82\xEA\x82\xF0\x8FC\x90\xB3 (2007.7.26 maya) + char uimsg[MAX_UIMSG]; FWD_free_channel(pvar, chan_num); - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); return FALSE; } c->remote_id = remote_id; @@ -9081,9 +9197,11 @@ if (pvar->agentfwd_enable && FWD_agent_forward_confirm(pvar)) { c = ssh2_channel_new(CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, TYPE_AGENT, -1); if (c == NULL) { - UTIL_get_lang_msg("MSG_SSH_NO_FREE_CHANNEL", pvar, - "Could not open new channel. TTSSH is already opening too many channels."); - notify_nonfatal_error(pvar, pvar->ts->UIMsg); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_NO_FREE_CHANNEL", uimsg, _countof(uimsg), + "Could not open new channel. TTSSH is already opening too many channels.", + pvar->ts->UILanguageFile); + notify_nonfatal_error(pvar, uimsg); return FALSE; } c->remote_id = remote_id; @@ -9347,11 +9465,14 @@ "size=%u, allowd max=%u.", req_len, AGENT_MAX_MSGLEN-4); if (pvar->session_settings.ForwardAgentNotify) { char title[MAX_UIMSG]; - UTIL_get_lang_msg("MSG_SSH_AGENTERROR_TITLE", pvar, "Bad agent request"); - strncpy_s(title, sizeof(title), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_SSH_AGENTERROR_TOOLARGE", pvar, - "Agent request size is too large, ignore it."); - NotifyInfoMessage(pvar->cv, pvar->ts->UIMsg, title); + char uimsg[MAX_UIMSG]; + UTIL_get_lang_msgU8("MSG_SSH_AGENTERROR_TITLE", title, _countof(title), + "Bad agent request", + pvar->ts->UILanguageFile); + UTIL_get_lang_msgU8("MSG_SSH_AGENTERROR_TOOLARGE", uimsg, _countof(uimsg), + "Agent request size is too large, ignore it.", + pvar->ts->UILanguageFile); + NotifyInfoMessage(pvar->cv, uimsg, title); } goto error; Modified: branches/cmake/ttssh2/ttxssh/ttxssh.c =================================================================== --- branches/cmake/ttssh2/ttxssh/ttxssh.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/ttxssh.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -77,6 +77,7 @@ #include "cipher.h" #include "key.h" #include "dlglib.h" +#include "codeconv.h" #include "sftp.h" @@ -91,12 +92,12 @@ #define GetPrivateProfileInt GetPrivateProfileIntA #undef WritePrivateProfileString #define WritePrivateProfileString WritePrivateProfileStringA -#undef MessageBox -#define MessageBox MessageBoxA #undef GetDlgItemText #define GetDlgItemText GetDlgItemTextA +#if 0 #undef SetDlgItemText #define SetDlgItemText SetDlgItemTextA +#endif #undef GetWindowText #define GetWindowText GetWindowTextA #undef SetWindowText @@ -103,6 +104,12 @@ #define SetWindowText SetWindowTextA #endif +#if defined(UNICODE) +#define GetDlgItemTextT GetDlgItemTextW +#else +#define GetDlgItemTextT GetDlgItemTextA +#endif + #undef DialogBoxParam #define DialogBoxParam(p1,p2,p3,p4,p5) \ TTDialogBoxParam(p1,p2,p3,p4,p5) @@ -971,9 +978,12 @@ // 未接続の状態では通知先ウィンドウがないので、デスクトップをオーナーとして // メッセージボックスを出現させる。(2006.6.11 yutaka) if (pvar->NotificationWindow == NULL) { - UTIL_get_lang_msg("MSG_NONFATAL_ERROR", pvar, - "Tera Term: not fatal error"); - MessageBox(NULL, msg, pvar->ts->UIMsg, MB_OK|MB_ICONINFORMATION); + const TCHAR *msgT = ToTcharU8(msg); + TCHAR uimsg[MAX_UIMSG]; + UTIL_get_lang_msgT("MSG_NONFATAL_ERROR", uimsg, _countof(uimsg), + _T("Tera Term: not fatal error"), pvar->ts->UILanguageFile); + MessageBox(NULL, msgT, uimsg, MB_OK|MB_ICONINFORMATION); + free((void *)msgT); msg[0] = '\0'; } else { @@ -1590,10 +1600,11 @@ if (Ok) { GetHNRec->TCPPort = i; } else { - UTIL_get_lang_msg("MSG_TCPPORT_NAN_ERROR", pvar, - "The TCP port must be a number."); - MessageBox(dlg, pvar->ts->UIMsg, - "Tera Term", MB_OK | MB_ICONEXCLAMATION); + TCHAR uimsg[MAX_UIMSG]; + UTIL_get_lang_msgT("MSG_TCPPORT_NAN_ERROR", uimsg, _countof(uimsg), + _T("The TCP port must be a number."), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg, + _T("Tera Term"), MB_OK | MB_ICONEXCLAMATION); return TRUE; } #define getaf(str) \ @@ -1984,13 +1995,14 @@ pvar->settings.ssh_protocol_version = 2; } else { - char buf[1024]; + TCHAR buf[1024]; + TCHAR uimsg[MAX_UIMSG]; - UTIL_get_lang_msg("MSG_UNKNOWN_OPTION_ERROR", pvar, - "Unrecognized command-line option: %s"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, option); + UTIL_get_lang_msgT("MSG_UNKNOWN_OPTION_ERROR", uimsg, _countof(uimsg), + _T("Unrecognized command-line option: %s"), pvar->ts->UILanguageFile); + _sntprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, option); - MessageBox(NULL, buf, "TTSSH", MB_OK | MB_ICONEXCLAMATION); + MessageBox(NULL, buf, _T("TTSSH"), MB_OK | MB_ICONEXCLAMATION); } // ttermpro.exe の /T= 指定の流用なので、大文字も許す (2006.10.19 maya) @@ -2272,7 +2284,8 @@ pvar->FileMenu = GetFileMenu(menu); /* inserts before ID_HELP_ABOUT */ - UTIL_get_lang_msgT("MENU_ABOUT", uimsg, _countof(uimsg), _T("About &TTSSH..."), UILanguageFile); + UTIL_get_lang_msgT("MENU_ABOUT", uimsg, _countof(uimsg), + _T("About &TTSSH..."), UILanguageFile); insertMenuBeforeItem(menu, 50990, MF_ENABLED, ID_ABOUTMENU, uimsg); /* inserts before ID_SETUP_TCPIP */ @@ -2303,8 +2316,10 @@ static void about_dlg_set_abouttext(PTInstVar pvar, HWND dlg, digest_algorithm dgst_alg) { + char uimsg[MAX_UIMSG]; char buf[1024], buf2[2048]; char *fp = NULL; + const char *lang = pvar->ts->UILanguageFile; // TTSSHダイアログに表示するSSHに関する情報 (2004.10.30 yutaka) if (pvar->socket != INVALID_SOCKET) { @@ -2311,43 +2326,43 @@ buf2[0] = '\0'; if (SSHv1(pvar)) { - UTIL_get_lang_msg("DLG_ABOUT_SERVERID", pvar, "Server ID:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_SERVERID", uimsg, _countof(uimsg), "Server ID:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_server_ID_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_PROTOCOL", pvar, "Using protocol:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_PROTOCOL", uimsg, _countof(uimsg), "Using protocol:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_protocol_version_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_ENCRYPTION", pvar, "Encryption:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_ENCRYPTION", uimsg, _countof(uimsg), "Encryption:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); CRYPT_get_cipher_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_SERVERKEY", pvar, "Server keys:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_SERVERKEY", uimsg, _countof(uimsg), "Server keys:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); CRYPT_get_server_key_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_AUTH", pvar, "Authentication:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH", uimsg, _countof(uimsg), "Authentication:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); AUTH_get_auth_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_COMP", pvar, "Compression:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_COMP", uimsg, _countof(uimsg), "Compression:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_compression_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); @@ -2354,47 +2369,47 @@ strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); } else { // SSH2 - UTIL_get_lang_msg("DLG_ABOUT_SERVERID", pvar, "Server ID:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_SERVERID", uimsg, _countof(uimsg), "Server ID:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_server_ID_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_CLIENTID", pvar, "Client ID:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_CLIENTID", uimsg, _countof(uimsg), "Client ID:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); strncat_s(buf2, sizeof(buf2), pvar->client_version_string, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_PROTOCOL", pvar, "Using protocol:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_PROTOCOL", uimsg, _countof(uimsg), "Using protocol:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_protocol_version_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_KEX", pvar, "Key exchange algorithm:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_KEX", uimsg, _countof(uimsg), "Key exchange algorithm:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); strncat_s(buf2, sizeof(buf2), get_kex_algorithm_name(pvar->kex_type), _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_HOSTKEY", pvar, "Host Key:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_HOSTKEY", uimsg, _countof(uimsg), "Host Key:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); strncat_s(buf2, sizeof(buf2), get_ssh_keytype_name(pvar->hostkey_type), _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_ENCRYPTION", pvar, "Encryption:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_ENCRYPTION", uimsg, _countof(uimsg), "Encryption:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); CRYPT_get_cipher_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_MAC", pvar, "MAC algorithm:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_MAC", uimsg, _countof(uimsg), "MAC algorithm:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_mac_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); @@ -2401,26 +2416,26 @@ strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); if (pvar->ctos_compression == COMP_DELAYED) { // 遅延パケット圧縮の場合 (2006.6.23 yutaka) - UTIL_get_lang_msg("DLG_ABOUT_COMPDELAY", pvar, "Delayed Compression:"); + UTIL_get_lang_msgU8("DLG_ABOUT_COMPDELAY", uimsg, _countof(uimsg), "Delayed Compression:", lang); } else { - UTIL_get_lang_msg("DLG_ABOUT_COMP", pvar, "Compression:"); + UTIL_get_lang_msgU8("DLG_ABOUT_COMP", uimsg, _countof(uimsg), "Compression:", lang); } - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); SSH_get_compression_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_KEXKEY", pvar, "Key exchange keys:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_KEXKEY", uimsg, _countof(uimsg), "Key exchange keys:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); CRYPT_get_server_key_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); - UTIL_get_lang_msg("DLG_ABOUT_AUTH", pvar, "Authentication:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_AUTH", uimsg, _countof(uimsg), "Authentication:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), " ", _TRUNCATE); AUTH_get_auth_info(pvar, buf, sizeof(buf)); strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); @@ -2429,8 +2444,8 @@ // ホスト公開鍵のfingerprintを表示する。 // (2014.5.1 yutaka) - UTIL_get_lang_msg("DLG_ABOUT_FINGERPRINT", pvar, "Host key's fingerprint:"); - strncat_s(buf2, sizeof(buf2), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("DLG_ABOUT_FINGERPRINT", uimsg, _countof(uimsg), "Host key's fingerprint:", lang); + strncat_s(buf2, sizeof(buf2), uimsg, _TRUNCATE); strncat_s(buf2, sizeof(buf2), "\r\n", _TRUNCATE); switch (dgst_alg) { @@ -2455,7 +2470,12 @@ strncat_s(buf2, sizeof(buf2), fp, _TRUNCATE); free(fp); - SetDlgItemTextA(dlg, IDC_ABOUTTEXT, buf2); + + { + const TCHAR *strT = ToTcharU8(buf2); + SetDlgItemText(dlg, IDC_ABOUTTEXT, strT); + free((void *)strT); + } } } @@ -2553,7 +2573,7 @@ static BOOL CALLBACK TTXAboutDlg(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { - LOGFONTA logfont; +// LOGFONTA logfont; // HFONT font; switch (msg) { @@ -2580,8 +2600,10 @@ DlgAboutFont = NULL; } #endif + // Edit controlは等幅フォントで表示したいので、別設定情報からフォントをセットする。 // (2014.5.5. yutaka) +#if 0 if (UTIL_get_lang_font("DLG_ABOUT_FONT", dlg, &logfont, &DlgAboutTextFont, pvar)) { SendDlgItemMessage(dlg, IDC_ABOUTTEXT, WM_SETFONT, (WPARAM)DlgAboutTextFont, MAKELPARAM(TRUE,0)); } else { @@ -2599,6 +2621,9 @@ DlgAboutTextFont = NULL; } } +#else + DlgAboutTextFont = NULL; +#endif // アイコンを動的にセット { @@ -2663,13 +2688,14 @@ return FALSE; } -static char *get_cipher_name(int cipher) +static char *get_cipher_name(int cipher, char *name, int len) { switch (cipher) { case SSH_CIPHER_NONE: - UTIL_get_lang_msg("DLG_SSHSETUP_CIPHER_BORDER", pvar, - "<ciphers below this line are disabled>"); - return pvar->ts->UIMsg; + UTIL_get_lang_msgU8("DLG_SSHSETUP_CIPHER_BORDER", name, len, + "<ciphers below this line are disabled>", + pvar->ts->UILanguageFile); + return name; case SSH_CIPHER_3DES: return "3DES(SSH1)"; case SSH_CIPHER_DES: @@ -2754,12 +2780,12 @@ HWND hostkeyRotationControlList = GetDlgItem(dlg, IDC_HOSTKEY_ROTATION_COMBO); int i; int ch; - char *rotationItem[SSH_UPDATE_HOSTKEYS_MAX] = { - "No", - "Yes", - "Ask", + static const TCHAR *rotationItem[SSH_UPDATE_HOSTKEYS_MAX] = { + _T("No"), + _T("Yes"), + _T("Ask"), }; - char *rotationItemKey[SSH_UPDATE_HOSTKEYS_MAX] = { + static const char *rotationItemKey[SSH_UPDATE_HOSTKEYS_MAX] = { "DLG_SSHSETUP_HOSTKEY_ROTATION_NO", "DLG_SSHSETUP_HOSTKEY_ROTATION_YES", "DLG_SSHSETUP_HOSTKEY_ROTATION_ASK", @@ -2931,10 +2957,12 @@ for (i = 0; pvar->settings.CipherOrder[i] != 0; i++) { int cipher = pvar->settings.CipherOrder[i] - '0'; - char *name = get_cipher_name(cipher); - + char buf[64]; + char *name = get_cipher_name(cipher, buf, _countof(buf)); if (name != NULL) { - SendMessageA(cipherControl, LB_ADDSTRING, 0, (LPARAM) name); + const TCHAR *strT = ToTcharU8(name); + SendMessage(cipherControl, LB_ADDSTRING, 0, (LPARAM)strT); + free((void *)strT); } } @@ -2946,17 +2974,21 @@ for (i = 0; pvar->settings.KexOrder[i] != 0; i++) { int index = pvar->settings.KexOrder[i] - '0'; char *name = NULL; + char b[64]; if (index == 0) { - UTIL_get_lang_msg("DLG_SSHSETUP_KEX_BORDER", pvar, - "<KEXs below this line are disabled>"); - name = pvar->ts->UIMsg; + UTIL_get_lang_msgU8("DLG_SSHSETUP_KEX_BORDER", b, _countof(b), + "<KEXs below this line are disabled>", + pvar->ts->UILanguageFile); + name = b; } else { name = get_kex_algorithm_name(index); } if (name != NULL) { - SendMessageA(kexControl, LB_ADDSTRING, 0, (LPARAM) name); + const TCHAR *strT = ToTcharU8(name); + SendMessage(kexControl, LB_ADDSTRING, 0, (LPARAM) strT); + free((void *)strT); } } SendMessage(kexControl, LB_SETCURSEL, 0, 0); @@ -2967,17 +2999,21 @@ for (i = 0; pvar->settings.HostKeyOrder[i] != 0; i++) { int index = pvar->settings.HostKeyOrder[i] - '0'; char *name = NULL; + char b[64]; if (index == 0) { - UTIL_get_lang_msg("DLG_SSHSETUP_HOST_KEY_BORDER", pvar, - "<Host Keys below this line are disabled>"); - name = pvar->ts->UIMsg; + UTIL_get_lang_msgU8("DLG_SSHSETUP_HOST_KEY_BORDER", b, _countof(b), + "<Host Keys below this line are disabled>", + pvar->ts->UILanguageFile); + name = b; } else { name = get_ssh_keytype_name(index); } if (name != NULL) { - SendMessageA(hostkeyControl, LB_ADDSTRING, 0, (LPARAM) name); + const TCHAR *strT = ToTcharU8(name); + SendMessage(hostkeyControl, LB_ADDSTRING, 0, (LPARAM) name); + free((void *)strT); } } SendMessage(hostkeyControl, LB_SETCURSEL, 0, 0); @@ -2988,17 +3024,21 @@ for (i = 0; pvar->settings.MacOrder[i] != 0; i++) { int index = pvar->settings.MacOrder[i] - '0'; char *name = NULL; + char b[64]; if (index == 0) { - UTIL_get_lang_msg("DLG_SSHSETUP_MAC_BORDER", pvar, - "<MACs below this line are disabled>"); - name = pvar->ts->UIMsg; + UTIL_get_lang_msgU8("DLG_SSHSETUP_MAC_BORDER", b, _countof(b), + "<MACs below this line are disabled>", + pvar->ts->UILanguageFile); + name = b; } else { name = get_ssh2_mac_name_by_id(index); } if (name != NULL) { - SendMessageA(macControl, LB_ADDSTRING, 0, (LPARAM) name); + const TCHAR *strT = ToTcharU8(name); + SendMessage(macControl, LB_ADDSTRING, 0, (LPARAM) name); + free((void *)strT); } } SendMessage(macControl, LB_SETCURSEL, 0, 0); @@ -3009,17 +3049,21 @@ for (i = 0; pvar->settings.CompOrder[i] != 0; i++) { int index = pvar->settings.CompOrder[i] - '0'; char *name = NULL; + char b[64]; if (index == 0) { - UTIL_get_lang_msg("DLG_SSHSETUP_COMP_BORDER", pvar, - "<Compression methods below this line are disabled>"); - name = pvar->ts->UIMsg; + UTIL_get_lang_msgU8("DLG_SSHSETUP_COMP_BORDER", b, _countof(b), + "<Compression methods below this line are disabled>", + pvar->ts->UILanguageFile); + name = b; } else { name = get_ssh2_comp_name(index); } if (name != NULL) { + const TCHAR *strT = ToTcharU8(name); SendMessageA(compControl, LB_ADDSTRING, 0, (LPARAM) name); + free((void *)strT); } } SendMessage(compControl, LB_SETCURSEL, 0, 0); @@ -3030,13 +3074,13 @@ } if (ch != 0) { pvar->settings.KnownHostsFiles[i] = 0; - SetDlgItemText(dlg, IDC_READWRITEFILENAME, + SetDlgItemTextA(dlg, IDC_READWRITEFILENAME, pvar->settings.KnownHostsFiles); pvar->settings.KnownHostsFiles[i] = ch; - SetDlgItemText(dlg, IDC_READONLYFILENAME, + SetDlgItemTextA(dlg, IDC_READONLYFILENAME, pvar->settings.KnownHostsFiles + i + 1); } else { - SetDlgItemText(dlg, IDC_READWRITEFILENAME, + SetDlgItemTextA(dlg, IDC_READWRITEFILENAME, pvar->settings.KnownHostsFiles); } @@ -3045,7 +3089,7 @@ char buf[10]; _snprintf_s(buf, sizeof(buf), _TRUNCATE, "%d", pvar->settings.ssh_heartbeat_overtime); - SetDlgItemText(dlg, IDC_HEARTBEAT_EDIT, buf); + SetDlgItemTextA(dlg, IDC_HEARTBEAT_EDIT, buf); } if (pvar->settings.remember_password) { @@ -3075,8 +3119,9 @@ // hostkey rotation(OpenSSH 6.8) for (i = 0; i < SSH_UPDATE_HOSTKEYS_MAX; i++) { - UTIL_get_lang_msg(rotationItemKey[i], pvar, rotationItem[i]); - SendMessage(hostkeyRotationControlList, CB_INSERTSTRING, i, (LPARAM)pvar->ts->UIMsg); + TCHAR uimsg[128]; + UTIL_get_lang_msgT(rotationItemKey[i], uimsg, _countof(uimsg), rotationItem[i], pvar->ts->UILanguageFile); + SendMessage(hostkeyRotationControlList, CB_INSERTSTRING, i, (LPARAM)uimsg); } ch = pvar->settings.UpdateHostkeys; if (!(ch >= 0 && ch < SSH_UPDATE_HOSTKEYS_MAX)) @@ -3111,7 +3156,7 @@ } int copy_teraterm_dir_relative_path(char *dest, int destsize, - char *basename) + const char *basename) { char buf[1024]; int filename_start = 0; @@ -3173,7 +3218,8 @@ buf[0] = 0; SendMessage(cipherControl, LB_GETTEXT, i, (LPARAM) buf); for (j = 0; j <= SSH_CIPHER_MAX; j++) { - char *cipher_name = get_cipher_name(j); + char b[64]; + char *cipher_name = get_cipher_name(j, b, _countof(b)); if (cipher_name != NULL && strcmp(buf, cipher_name) == 0) { break; } @@ -3371,8 +3417,9 @@ static int get_keys_file_name(HWND parent, char *buf, int bufsize, int readonly) { - OPENFILENAMEA params; - char fullname_buf[2048] = "ssh_known_hosts"; + OPENFILENAME params; + TCHAR fullname_buf[2048] = _T("ssh_known_hosts"); + TCHAR title[MAX_UIMSG]; params.lStructSize = sizeof(OPENFILENAME); params.hwndOwner = parent; @@ -3385,30 +3432,35 @@ params.lpstrFileTitle = NULL; params.lpstrInitialDir = NULL; if (readonly) { - UTIL_get_lang_msg("MSG_OPEN_KNOWNHOSTS_RO_TITLE", pvar, - "Choose a read-only known-hosts file to add"); + UTIL_get_lang_msgT("MSG_OPEN_KNOWNHOSTS_RO_TITLE", title, _countof(title), + _T("Choose a read-only known-hosts file to add"), + pvar->ts->UILanguageFile); } else { - UTIL_get_lang_msg("MSG_OPEN_KNOWNHOSTS_RW_TITLE", pvar, - "Choose a read/write known-hosts file"); + UTIL_get_lang_msgT("MSG_OPEN_KNOWNHOSTS_RW_TITLE", title, _countof(title), + _T("Choose a read/write known-hosts file"), + pvar->ts->UILanguageFile); } - params.lpstrTitle = pvar->ts->UIMsg; + params.lpstrTitle = title; params.Flags = (readonly ? OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST : 0) | OFN_HIDEREADONLY | (!readonly ? OFN_NOREADONLYRETURN : 0); params.lpstrDefExt = NULL; - if (GetOpenFileNameA(¶ms) != 0) { - copy_teraterm_dir_relative_path(buf, bufsize, fullname_buf); + if (GetOpenFileName(¶ms) != 0) { + const char *astr = ToCharT(fullname_buf); + copy_teraterm_dir_relative_path(buf, bufsize, astr); + free((void *)astr); return 1; } else { int err = CommDlgExtendedError(); if (err != 0) { - char buf[1024]; - UTIL_get_lang_msg("MSG_OPEN_FILEDLG_KNOWNHOSTS_ERROR", pvar, - "Unable to display file dialog box: error %d"); - _snprintf_s(buf, sizeof(buf), _TRUNCATE, pvar->ts->UIMsg, err); - MessageBox(parent, buf, "TTSSH Error", + TCHAR buf[1024]; + TCHAR uimsg[MAX_UIMSG]; + UTIL_get_lang_msgT("MSG_OPEN_FILEDLG_KNOWNHOSTS_ERROR", uimsg, _countof(uimsg), + _T("Unable to display file dialog box: error %d"), pvar->ts->UILanguageFile); + _sntprintf_s(buf, sizeof(buf), _TRUNCATE, uimsg, err); + MessageBox(parent, buf, _T("TTSSH Error"), MB_OK | MB_ICONEXCLAMATION); } @@ -3421,7 +3473,7 @@ char buf[1024]; if (get_keys_file_name(dlg, buf, sizeof(buf), 0)) { - SetDlgItemText(dlg, IDC_READWRITEFILENAME, buf); + SetDlgItemTextA(dlg, IDC_READWRITEFILENAME, buf); } } @@ -3432,12 +3484,12 @@ if (get_keys_file_name(dlg, buf, sizeof(buf), 1)) { buf2[0] = 0; - GetDlgItemText(dlg, IDC_READONLYFILENAME, buf2, sizeof(buf2)); + GetDlgItemTextA(dlg, IDC_READONLYFILENAME, buf2, sizeof(buf2)); if (buf2[0] != 0 && buf2[strlen(buf2) - 1] != ';') { strncat_s(buf2, sizeof(buf2), ";", _TRUNCATE); } strncat_s(buf2, sizeof(buf2), buf, _TRUNCATE); - SetDlgItemText(dlg, IDC_READONLYFILENAME, buf2); + SetDlgItemTextA(dlg, IDC_READONLYFILENAME, buf2); } } @@ -3752,11 +3804,13 @@ case KEY_ECDSA384: case KEY_ECDSA521: { + TCHAR uimsg[MAX_UIMSG]; EC_KEY *priv = NULL; EC_KEY *pub = NULL; - UTIL_get_lang_msg("MSG_KEYGEN_GENERATING", pvar, "generating key"); - SetDlgItemText(((cbarg_t *)cbarg)->dlg, IDC_KEYGEN_PROGRESS_LABEL, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MSG_KEYGEN_GENERATING", uimsg, _countof(uimsg), + _T("generating key"), pvar->ts->UILanguageFile); + SetDlgItemText(((cbarg_t *)cbarg)->dlg, IDC_KEYGEN_PROGRESS_LABEL, uimsg); priv = EC_KEY_new_by_curve_name(keytype_to_cipher_nid(type)); pub = EC_KEY_new_by_curve_name(keytype_to_cipher_nid(type)); @@ -3777,8 +3831,9 @@ } public_key.ecdsa = pub; - UTIL_get_lang_msg("MSG_KEYGEN_GENERATED", pvar, "key generated"); - SetDlgItemText(((cbarg_t *)cbarg)->dlg, IDC_KEYGEN_PROGRESS_LABEL, pvar->ts->UIMsg); + UTIL_get_lang_msgT("MSG_KEYGEN_GENERATED", uimsg, _countof(uimsg), + _T("key generated"), pvar->ts->UILanguageFile); + SetDlgItemText(((cbarg_t *)cbarg)->dlg, IDC_KEYGEN_PROGRESS_LABEL, uimsg); break; } @@ -4236,8 +4291,8 @@ switch (phase) { case 0: if (count == 0) { - UTIL_get_lang_msg("MSG_KEYGEN_GENERATING", pvar, "generating key"); - strncpy_s(msg, sizeof(msg), pvar->ts->UIMsg, _TRUNCATE); + UTIL_get_lang_msgU8("MSG_KEYGEN_GENERATING", msg, _countof(msg), + "generating key", pvar->ts->UILanguageFile); } if (cbarg->type == KEY_DSA && count %10 != 0) { return; @@ -4259,8 +4314,7 @@ return; } else { - UTIL_get_lang_msg("MSG_KEYGEN_GENERATED", pvar, "key generated"); - _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%s", pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_KEYGEN_GENERATED", buff, sizeof(buff), "key generated", pvar->ts->UILanguageFile); } break; default: @@ -4267,7 +4321,11 @@ return; } - SetDlgItemText(cbarg->dlg, IDC_KEYGEN_PROGRESS_LABEL, buff); + { + const TCHAR *strT = ToTcharU8(buff); + SetDlgItemText(cbarg->dlg, IDC_KEYGEN_PROGRESS_LABEL, strT); + free((void *)strT); + } return; } @@ -4282,7 +4340,7 @@ // bcrypt KDF形式で秘密鍵を保存する // based on OpenSSH 6.5:key_save_private(), key_private_to_blob2() -static void save_bcrypt_private_key(char *passphrase, char *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds) + static void save_bcrypt_private_key(char *passphrase, const TCHAR *filename, char *comment, HWND dlg, PTInstVar pvar, int rounds) { SSH2Cipher *cipher = NULL; char *ciphername = DEFAULT_CIPHERNAME; @@ -4298,7 +4356,8 @@ unsigned char *cp = NULL; unsigned int len, check; FILE *fp; - char uimsg[MAX_UIMSG]; + TCHAR uimsg1[MAX_UIMSG]; + TCHAR uimsg2[MAX_UIMSG]; b = buffer_init(); kdf = buffer_init(); @@ -4405,22 +4464,24 @@ len = buffer_len(blob); // 秘密鍵をファイルに保存する。 - fp = fopen(filename, "wb"); + fp = _tfopen(filename, _T("wb")); if (fp == NULL) { - UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar, - "Can't open key file"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_SAVE_KEY_OPENFILE_ERROR", uimsg1, _countof(uimsg1), + _T("Can't open key file"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); goto ed25519_error; } n = fwrite(buffer_ptr(blob), buffer_len(blob), 1, fp); if (n != 1) { - UTIL_get_lang_msg("MSG_SAVE_KEY_WRITEFILE_ERROR", pvar, - "Can't open key file"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + TCHAR uimsg1[MAX_UIMSG]; + TCHAR uimsg2[MAX_UIMSG]; + UTIL_get_lang_msgT("MSG_SAVE_KEY_WRITEFILE_ERROR", uimsg1, _countof(uimsg1), + _T("Can't open key file"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); } fclose(fp); @@ -4437,9 +4498,11 @@ { static ssh_keytype key_type; static int saved_key_bits; - char uimsg[MAX_UIMSG]; +// char uimsg[MAX_UIMSG]; // LOGFONT logfont; // HFONT font; + TCHAR uimsg1[MAX_UIMSG]; + TCHAR uimsg2[MAX_UIMSG]; switch (msg) { case WM_INITDIALOG: @@ -4583,10 +4646,10 @@ case KEY_RSA: case KEY_DSA: if (bits < ((key_type==KEY_DSA)?SSH_DSA_MINIMUM_KEY_SIZE:SSH_RSA_MINIMUM_KEY_SIZE)) { - UTIL_get_lang_msg("MSG_KEYBITS_MIN_ERROR", pvar, - "The key bits is too small."); - MessageBox(dlg, pvar->ts->UIMsg, - "Tera Term", MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_KEYBITS_MIN_ERROR", uimsg1, _countof(uimsg1), + _T("The key bits is too small."), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, + _T("Tera Term"), MB_OK | MB_ICONEXCLAMATION); return TRUE; } break; @@ -4650,7 +4713,7 @@ // enable comment edit box EnableWindow(GetDlgItem(dlg, IDC_COMMENT_EDIT), TRUE); ssh_make_comment(comment, sizeof(comment)); - SetDlgItemText(dlg, IDC_COMMENT_EDIT, comment); + SetDlgItemTextA(dlg, IDC_COMMENT_EDIT, comment); // file saving dialog disabled(default) EnableWindow(GetDlgItem(dlg, IDC_SAVE_PUBLIC_KEY), TRUE); @@ -4810,10 +4873,12 @@ case IDC_SAVE_PUBLIC_KEY: { int ret; - OPENFILENAMEA ofn; - char filename[MAX_PATH]; + OPENFILENAME ofn; + TCHAR filename[MAX_PATH]; FILE *fp; - char comment[1024]; // comment string in private key + TCHAR comment[1024]; // comment string in private key + TCHAR filter[128]; + TCHAR title[128]; arc4random_stir(); @@ -4823,65 +4888,68 @@ ofn.hwndOwner = dlg; switch (public_key.type) { case KEY_RSA1: - UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA1_FILTER", pvar, - "SSH1 RSA key(identity.pub)\\0identity.pub\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "identity.pub", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PUBLICKEY_RSA1_FILTER", filter, _countof(filter), + _T("SSH1 RSA key(identity.pub)\\0identity.pub\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("identity.pub"), _TRUNCATE); break; case KEY_RSA: - UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_RSA_FILTER", pvar, - "SSH2 RSA key(id_rsa.pub)\\0id_rsa.pub\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_rsa.pub", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PUBLICKEY_RSA_FILTER", filter, _countof(filter), + _T("SSH2 RSA key(id_rsa.pub)\\0id_rsa.pub\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_rsa.pub"), _TRUNCATE); break; case KEY_DSA: - UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_DSA_FILTER", pvar, - "SSH2 DSA key(id_dsa.pub)\\0id_dsa.pub\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_dsa.pub", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PUBLICKEY_DSA_FILTER", filter, _countof(filter), + _T("SSH2 DSA key(id_dsa.pub)\\0id_dsa.pub\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_dsa.pub"), _TRUNCATE); break; case KEY_ECDSA256: case KEY_ECDSA384: case KEY_ECDSA521: - UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_ECDSA_FILTER", pvar, - "SSH2 ECDSA key(id_ecdsa.pub)\\0id_ecdsa.pub\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_ecdsa.pub", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PUBLICKEY_ECDSA_FILTER", filter, _countof(filter), + _T("SSH2 ECDSA key(id_ecdsa.pub)\\0id_ecdsa.pub\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_ecdsa.pub"), _TRUNCATE); break; case KEY_ED25519: - UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_ED25519_FILTER", pvar, - "SSH2 ED25519 key(id_ed25519.pub)\\0id_ed25519.pub\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_ed25519.pub", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PUBLICKEY_ED25519_FILTER", filter, _countof(filter), + _T("SSH2 ED25519 key(id_ed25519.pub)\\0id_ed25519.pub\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_ed25519.pub"), _TRUNCATE); break; default: break; } ofn.lpstrFile = filename; - ofn.nMaxFile = sizeof(filename); - UTIL_get_lang_msg("FILEDLG_SAVE_PUBLICKEY_TITLE", pvar, - "Save public key as:"); - ofn.lpstrTitle = pvar->ts->UIMsg; - if (GetSaveFileNameA(&ofn) == 0) { // failure + ofn.nMaxFile = _countof(filename); + UTIL_get_lang_msgT("FILEDLG_SAVE_PUBLICKEY_TITLE", title, _countof(title), + _T("Save public key as:"), + pvar->ts->UILanguageFile); + ofn.lpstrTitle = title; + if (GetSaveFileName(&ofn) == 0) { // failure ret = CommDlgExtendedError(); break; } - GetDlgItemText(dlg, IDC_COMMENT_EDIT, comment, sizeof(comment)); + GetDlgItemTextT(dlg, IDC_COMMENT_EDIT, comment, _countof(comment)); // saving public key file - fp = fopen(filename, "wb"); + fp = _tfopen(filename, _T("wb")); if (fp == NULL) { - UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar, - "Can't open key file"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + TCHAR uimsg1[MAX_UIMSG]; + TCHAR uimsg2[MAX_UIMSG]; + UTIL_get_lang_msgT("MSG_SAVE_KEY_OPENFILE_ERROR", uimsg1, _countof(uimsg1), + _T("Can't open key file"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); break; } @@ -4968,7 +5036,9 @@ // writing a comment(+LF) if (comment[0] != 0) { - fprintf(fp, " %s", comment); + const char *commentU8 = ToU8T(comment); + fprintf(fp, " %s", commentU8); + free((void *)commentU8); } fputc(0x0a, fp); @@ -4983,9 +5053,11 @@ { char buf[1024], buf_conf[1024]; // passphrase int ret, rounds; - OPENFILENAMEA ofn; - char filename[MAX_PATH]; + OPENFILENAME ofn; + TCHAR filename[MAX_PATH]; char comment[1024]; // comment string in private key + TCHAR filter[128]; + TCHAR title[128]; // パスフレーズのチェックを行う。パスフレーズは秘密鍵ファイルに付ける。 GetDlgItemTextA(dlg, IDC_KEY_EDIT, buf, sizeof(buf)); @@ -4993,21 +5065,22 @@ // check matching if (strcmp(buf, buf_conf) != 0) { - UTIL_get_lang_msg("MSG_SAVE_PRIVATE_KEY_MISMATCH_ERROR", pvar, - "Two passphrases don't match."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_SAVE_PRIVATE_KEY_MISMATCH_ERROR", uimsg1, _countof(uimsg1), + _T("Two passphrases don't match."), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); break; } // check empty-passphrase (this is warning level) if (buf[0] == '\0') { - UTIL_get_lang_msg("MSG_SAVE_PRIVATEKEY_EMPTY_WARN", pvar, - "Are you sure that you want to use a empty passphrase?"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_WARNING", pvar, "WARNING"); - ret = MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_YESNO | MB_ICONWARNING); + UTIL_get_lang_msgT("MSG_SAVE_PRIVATEKEY_EMPTY_WARN", uimsg1, _countof(uimsg1), + _T("Are you sure that you want to use a empty passphrase?"), + pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_WARNING", uimsg2, _countof(uimsg2), + _T("WARNING"), pvar->ts->UILanguageFile); + ret = MessageBox(dlg, uimsg1, uimsg2, MB_YESNO | MB_ICONWARNING); if (ret == IDNO) break; } @@ -5016,17 +5089,17 @@ if (SendMessage(GetDlgItem(dlg, IDC_BCRYPT_KDF_CHECK), BM_GETCHECK, 0, 0) == BST_CHECKED) { rounds = GetDlgItemInt(dlg, IDC_BCRYPT_KDF_ROUNDS, NULL, FALSE); if (rounds < SSH_KEYGEN_MINIMUM_ROUNDS) { - UTIL_get_lang_msg("MSG_BCRYPT_ROUNDS_MIN_ERROR", pvar, - "The number of rounds is too small."); - MessageBox(dlg, pvar->ts->UIMsg, - "Tera Term", MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_BCRYPT_ROUNDS_MIN_ERROR", uimsg1, _countof(uimsg1), + _T("The number of rounds is too small."), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, + _T("Tera Term"), MB_OK | MB_ICONEXCLAMATION); break; } if (rounds > SSH_KEYGEN_MAXIMUM_ROUNDS) { - UTIL_get_lang_msg("MSG_BCRYPT_ROUNDS_MAX_ERROR", pvar, - "The number of rounds is too large."); - MessageBox(dlg, pvar->ts->UIMsg, - "Tera Term", MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_BCRYPT_ROUNDS_MAX_ERROR", uimsg1, _countof(uimsg1), + _T("The number of rounds is too large."), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, + _T("Tera Term"), MB_OK | MB_ICONEXCLAMATION); break; } } @@ -5039,51 +5112,52 @@ ofn.hwndOwner = dlg; switch (private_key.type) { case KEY_RSA1: - UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA1_FILTER", pvar, - "SSH1 RSA key(identity)\\0identity\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "identity", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PRIVATEKEY_RSA1_FILTER", filter, _countof(filter), + _T("SSH1 RSA key(identity)\\0identity\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("identity"), _TRUNCATE); break; case KEY_RSA: - UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_RSA_FILTER", pvar, - "SSH2 RSA key(id_rsa)\\0id_rsa\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_rsa", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PRIVATEKEY_RSA_FILTER", filter, _countof(filter), + _T("SSH2 RSA key(id_rsa)\\0id_rsa\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_rsa"), _TRUNCATE); break; case KEY_DSA: - UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_DSA_FILTER", pvar, - "SSH2 DSA key(id_dsa)\\0id_dsa\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_dsa", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PRIVATEKEY_DSA_FILTER", filter, _countof(filter), + _T("SSH2 DSA key(id_dsa)\\0id_dsa\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_dsa"), _TRUNCATE); break; case KEY_ECDSA256: case KEY_ECDSA384: case KEY_ECDSA521: - UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_ECDSA_FILTER", pvar, - "SSH2 ECDSA key(id_ecdsa)\\0id_ecdsa\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_ecdsa", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PRIVATEKEY_ECDSA_FILTER", filter, _countof(filter), + _T("SSH2 ECDSA key(id_ecdsa)\\0id_ecdsa\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_ecdsa"), _TRUNCATE); break; case KEY_ED25519: - UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_ED25519_FILTER", pvar, - "SSH2 ED25519 key(id_ed25519)\\0id_ed25519\\0All Files(*.*)\\0*.*\\0\\0"); - memcpy(uimsg, pvar->ts->UIMsg, sizeof(uimsg)); - ofn.lpstrFilter = uimsg; - strncpy_s(filename, sizeof(filename), "id_ed25519", _TRUNCATE); + UTIL_get_lang_msgT("FILEDLG_SAVE_PRIVATEKEY_ED25519_FILTER", filter, _countof(filter), + _T("SSH2 ED25519 key(id_ed25519)\\0id_ed25519\\0All Files(*.*)\\0*.*\\0\\0"), + pvar->ts->UILanguageFile); + ofn.lpstrFilter = filter; + _tcsncpy_s(filename, _countof(filename), _T("id_ed25519"), _TRUNCATE); break; default: break; } ofn.lpstrFile = filename; - ofn.nMaxFile = sizeof(filename); - UTIL_get_lang_msg("FILEDLG_SAVE_PRIVATEKEY_TITLE", pvar, - "Save private key as:"); - ofn.lpstrTitle = pvar->ts->UIMsg; - if (GetSaveFileNameA(&ofn) == 0) { // failure + ofn.nMaxFile = _countof(filename); + UTIL_get_lang_msgT("FILEDLG_SAVE_PRIVATEKEY_TITLE", title, _countof(title), + _T("Save private key as:"), + pvar->ts->UILanguageFile); + ofn.lpstrTitle = title; + if (GetSaveFileName(&ofn) == 0) { // failure ret = CommDlgExtendedError(); break; } @@ -5189,13 +5263,13 @@ buffer_append(enc, wrapped, len); // saving private key file (binary mode) - fp = fopen(filename, "wb"); + fp = _tfopen(filename, _T("wb")); if (fp == NULL) { - UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar, - "Can't open key file"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_SAVE_KEY_OPENFILE_ERROR", uimsg1, _countof(uimsg1), + _T("Can't open key file"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); break; } fwrite(buffer_ptr(enc), buffer_len(enc), 1, fp); @@ -5206,7 +5280,7 @@ buffer_free(b); buffer_free(enc); - } else if (private_key.type == KEY_ED25519) { // SSH2 ED25519 + } else if (private_key.type == KEY_ED25519) { // SSH2 ED25519 save_bcrypt_private_key(buf, filename, comment, dlg, pvar, rounds); } else { // SSH2 RSA, DSA, ECDSA @@ -5227,13 +5301,13 @@ cipher = EVP_aes_128_cbc(); } - fp = fopen(filename, "w"); + fp = _tfopen(filename, _T("w")); if (fp == NULL) { - UTIL_get_lang_msg("MSG_SAVE_KEY_OPENFILE_ERROR", pvar, - "Can't open key file"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_SAVE_KEY_OPENFILE_ERROR", uimsg1, _countof(uimsg1), + _T("Can't open key file"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); break; } @@ -5251,11 +5325,11 @@ break; } if (ret == 0) { - UTIL_get_lang_msg("MSG_SAVE_KEY_WRITEFILE_ERROR", pvar, - "Can't open key file"); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_ERROR", pvar, "ERROR"); - MessageBox(dlg, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_SAVE_KEY_WRITEFILE_ERROR", uimsg1, _countof(uimsg1), + _T("Can't open key file"), pvar->ts->UILanguageFile); + UTIL_get_lang_msgT("MSG_ERROR", uimsg2, _countof(uimsg2), + _T("ERROR"), pvar->ts->UILanguageFile); + MessageBox(dlg, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); } fclose(fp); } @@ -5274,7 +5348,9 @@ static int PASCAL TTXProcessCommand(HWND hWin, WORD cmd) { - char uimsg[MAX_UIMSG]; + TCHAR uimsg1[MAX_UIMSG]; + TCHAR uimsg2[MAX_UIMSG]; + const char *UILanguageFile = pvar->ts->UILanguageFile; if (pvar->fatal_error) { return 0; @@ -5290,11 +5366,11 @@ case ID_SSHSCPMENU: if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSCP), hWin, TTXScpDialog, (LPARAM) pvar) == -1) { - UTIL_get_lang_msg("MSG_CREATEWINDOW_SCP_ERROR", pvar, - "Unable to display SCP dialog box."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error"); - MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_CREATEWINDOW_SCP_ERROR", uimsg1, _countof(uimsg1), + _T("Unable to display SCP dialog box."), UILanguageFile); + UTIL_get_lang_msgT("MSG_TTSSH_ERROR", uimsg2, _countof(uimsg2), + _T("TTSSH Error"), UILanguageFile); + MessageBox(hWin, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); } return 1; @@ -5301,11 +5377,11 @@ case ID_SSHKEYGENMENU: if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHKEYGEN), hWin, TTXKeyGenerator, (LPARAM) pvar) == -1) { - UTIL_get_lang_msg("MSG_CREATEWINDOW_KEYGEN_ERROR", pvar, - "Unable to display Key Generator dialog box."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error"); - MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_CREATEWINDOW_KEYGEN_ERROR", uimsg1, _countof(uimsg1), + _T("Unable to display Key Generator dialog box."), UILanguageFile); + UTIL_get_lang_msgT("MSG_TTSSH_ERROR", uimsg2, _countof(uimsg2), + _T("TTSSH Error"), UILanguageFile); + MessageBox(hWin, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); } return 1; @@ -5312,11 +5388,11 @@ case ID_ABOUTMENU: if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_ABOUTDIALOG), hWin, TTXAboutDlg, (LPARAM) pvar) == -1) { - UTIL_get_lang_msg("MSG_CREATEWINDOW_ABOUT_ERROR", pvar, - "Unable to display About dialog box."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error"); - MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_CREATEWINDOW_ABOUT_ERROR", uimsg1, _countof(uimsg1), + _T("Unable to display About dialog box."), UILanguageFile); + UTIL_get_lang_msgT("MSG_TTSSH_ERROR", uimsg2, _countof(uimsg2), + _T("TTSSH Error"), UILanguageFile); + MessageBox(hWin, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); } return 1; case ID_SSHAUTH: @@ -5325,11 +5401,11 @@ case ID_SSHSETUPMENU: if (DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_SSHSETUP), hWin, TTXSetupDlg, (LPARAM) pvar) == -1) { - UTIL_get_lang_msg("MSG_CREATEWINDOW_SETUP_ERROR", pvar, - "Unable to display TTSSH Setup dialog box."); - strncpy_s(uimsg, sizeof(uimsg), pvar->ts->UIMsg, _TRUNCATE); - UTIL_get_lang_msg("MSG_TTSSH_ERROR", pvar, "TTSSH Error"); - MessageBox(hWin, uimsg, pvar->ts->UIMsg, MB_OK | MB_ICONEXCLAMATION); + UTIL_get_lang_msgT("MSG_CREATEWINDOW_SETUP_ERROR", uimsg1, _countof(uimsg1), + _T("Unable to display TTSSH Setup dialog box."), UILanguageFile); + UTIL_get_lang_msgT("MSG_TTSSH_ERROR", uimsg2, _countof(uimsg2), + _T("TTSSH Error"), UILanguageFile); + MessageBox(hWin, uimsg1, uimsg2, MB_OK | MB_ICONEXCLAMATION); } return 1; case ID_SSHAUTHSETUPMENU: @@ -5356,8 +5432,12 @@ pvar->showing_err = TRUE; pvar->err_msg = NULL; - MessageBox(NULL, msg, "TTSSH", - MB_TASKMODAL | MB_ICONEXCLAMATION); + { + const TCHAR *strT = ToTcharU8(msg); + MessageBox(NULL, strT, _T("TTSSH"), + MB_TASKMODAL | MB_ICONEXCLAMATION); + free((void *)strT); + } free(msg); pvar->showing_err = FALSE; @@ -5576,8 +5656,12 @@ pvar->err_msg[2048] = 0; } - MessageBox(NULL, pvar->err_msg, "TTSSH", - MB_TASKMODAL | MB_ICONEXCLAMATION); + { + const TCHAR *strT = ToTcharU8(pvar->err_msg); + MessageBox(NULL, strT, _T("TTSSH"), + MB_TASKMODAL | MB_ICONEXCLAMATION); + free((void *)strT); + } free(pvar->err_msg); pvar->err_msg = NULL; Modified: branches/cmake/ttssh2/ttxssh/ttxssh.h =================================================================== --- branches/cmake/ttssh2/ttxssh/ttxssh.h 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/ttxssh.h 2018-12-10 15:01:44 UTC (rev 7319) @@ -356,7 +356,7 @@ void logprintf_hexdump(int level, char *data, int len, char *fmt, ...); void get_teraterm_dir_relative_name(char *buf, int bufsize, char *basename); -int copy_teraterm_dir_relative_path(char *dest, int destsize, char *basename); +int copy_teraterm_dir_relative_path(char *dest, int destsize, const char *basename); int uuencode(unsigned char *src, int srclen, unsigned char *target, int targsize); #endif Modified: branches/cmake/ttssh2/ttxssh/util.c =================================================================== --- branches/cmake/ttssh2/ttxssh/util.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/util.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -319,6 +319,11 @@ get_lang_msg(key, buf, buf_len, def, iniFile); } +void UTIL_get_lang_msgU8(const char *key, char *buf, size_t buf_len, const char *def, const char *iniFile) +{ + get_lang_msgU8(key, buf, buf_len, def, iniFile); +} + #if defined(_UNICODE) void UTIL_get_lang_msgW(const char *key, wchar_t *buf, size_t buf_len, const wchar_t *def, const char *iniFile) { Modified: branches/cmake/ttssh2/ttxssh/util.h =================================================================== --- branches/cmake/ttssh2/ttxssh/util.h 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/util.h 2018-12-10 15:01:44 UTC (rev 7319) @@ -88,6 +88,7 @@ void UTIL_get_lang_msgW(const char *key, wchar_t *buf, size_t buf_len, const wchar_t *def, const char *iniFile); #endif void UTIL_get_lang_msgA(const char *key, char *buf, size_t buf_len, const char *def, const char *iniFile); +void UTIL_get_lang_msgU8(const char *key, char *buf, size_t buf_len, const char *def, const char *iniFile); int UTIL_get_lang_font(const char *key, HWND dlg, PLOGFONTA logfont, HFONT *font, PTInstVar pvar); void UTIL_get_lang_msg(const char *key, PTInstVar pvar, const char *def); Modified: branches/cmake/ttssh2/ttxssh/x11util.c =================================================================== --- branches/cmake/ttssh2/ttxssh/x11util.c 2018-12-10 15:01:30 UTC (rev 7318) +++ branches/cmake/ttssh2/ttxssh/x11util.c 2018-12-10 15:01:44 UTC (rev 7319) @@ -32,6 +32,7 @@ #include <openssl/rand.h> #include "util.h" #include <stdlib.h> +#include <tchar.h> typedef struct { PTInstVar pvar; @@ -251,6 +252,7 @@ FwdFilterResult X11_unspoofing_filter(void *void_closure, FwdFilterEvent event, int *length, unsigned char **buf) { + char uimsg[MAX_UIMSG]; X11UnspoofingFilterClosure *closure = (X11UnspoofingFilterClosure *) void_closure; @@ -270,10 +272,11 @@ return FWD_FILTER_REMOVE; default: case MERGE_GOT_BAD_DATA: - UTIL_get_lang_msg("MSG_X_AUTH_ERROR", closure->pvar, - "Remote X application sent incorrect authentication data.\n" - "Its X session is being cancelled."); - notify_nonfatal_error(closure->pvar, closure->pvar->ts->UIMsg); + UTIL_get_lang_msgU8("MSG_X_AUTH_ERROR", uimsg, _countof(uimsg), + "Remote X application sent incorrect authentication data.\n" + "Its X session is being cancelled.", + closure->pvar->ts->UILanguageFile); + notify_nonfatal_error(closure->pvar, uimsg); *length = 0; return FWD_FILTER_CLOSECHANNEL; }