Revision: 8397 https://osdn.net/projects/ttssh2/scm/svn/commits/8397 Author: doda Date: 2019-11-23 00:14:57 +0900 (Sat, 23 Nov 2019) Log Message: ----------- 必要に応じて SSH 認証バナーのエンコードを変換するようにした。 Ticket: #39724 問題: SSH認証バナーにUS-ASCII範囲外の文字が入っていると文字化けする。 対処: バナーのエンコードを変換するようにした。 備考: 変換後の文字列を free() すると落ちるので free() していない。 メモリリークするが、接続時の一回だけなので大きな影響は出ないはず。 後で調査して対処する。 Ticket Links: ------------ https://osdn.net/projects/ttssh2/tracker/detail/39724 Modified Paths: -------------- trunk/teraterm/ttpcmn/ttpcmn.def trunk/ttssh2/ttxssh/ssh.c -------------- next part -------------- Modified: trunk/teraterm/ttpcmn/ttpcmn.def =================================================================== --- trunk/teraterm/ttpcmn/ttpcmn.def 2019-11-22 15:14:50 UTC (rev 8396) +++ trunk/teraterm/ttpcmn/ttpcmn.def 2019-11-22 15:14:57 UTC (rev 8397) @@ -41,6 +41,8 @@ NotifyMessage @79 SetCustomNotifyIcon @85 GetCustomNotifyIcon @86 + + ToCharU8 @94 SJIS2JIS @30 SJIS2EUC @31 Modified: trunk/ttssh2/ttxssh/ssh.c =================================================================== --- trunk/ttssh2/ttxssh/ssh.c 2019-11-22 15:14:50 UTC (rev 8396) +++ trunk/ttssh2/ttxssh/ssh.c 2019-11-22 15:14:57 UTC (rev 8397) @@ -33,6 +33,7 @@ #include "libputty.h" #include "key.h" #include "ttcommon.h" +#include "codeconv.h" #include <openssl/bn.h> #include <openssl/evp.h> @@ -7564,7 +7565,8 @@ } if (msglen > 0) { - unsigned char *msg; + char *msg, *msgA; + wchar_t *msgW; if (pvar->authbanner_buffer == NULL) { pvar->authbanner_buffer = buffer_init(); @@ -7589,6 +7591,27 @@ break; case 1: if (pvar->authbanner_buffer != NULL) { + if (pvar->ts->Language == IdJapanese) { // \x82Ƃ肠\x82\xA6\x82\xB8\x93\xFA\x96{\x8Cꃂ\x81[\x83h\x82̂ݑΉ\x9E + switch (pvar->ts->KanjiCode) { + case IdSJIS: + msgA = ToCharU8(msg); + if (msgA) { + msg = msgA; + msglen = strlen(msg); + } + break; + case IdEUC: + // CP51932 \x82ւ̕ϊ\xB7\x82Ŏ蔲\x82\xAB\x82\xB5\x82悤\x82Ƃ\xB5\x82\xBD\x82\xAA + // \x8Eg\x82\xA6\x82Ȃ\xA9\x82\xC1\x82\xBD\x82̂łƂ肠\x82\xA6\x82\xB8\x94\xF1\x91Ή\x9E + break; + case IdJIS: + // \x8Eg\x82\xED\x82\xEA\x82鎖\x82\xAA\x8F\xAD\x82Ȃ\xA2\x82̂Ɩʓ|\x82Ȃ̂łƂ肠\x82\xA6\x82\xB8\x94\xF1\x91Ή\x9E + break; + default: + // nothing to do + break; + } + } new_payload_buffer = msg; pvar->ssh_state.payload_datastart = 0; pvar->ssh_state.payload_datalen = msglen; @@ -7599,10 +7622,18 @@ } break; case 2: - MessageBox(pvar->cv->HWin, msg, "Authentication Banner", MB_OK | MB_ICONINFORMATION); + msgA = ToCharU8(msg); + if (msgA) { + MessageBox(pvar->cv->HWin, msgA, "Authentication Banner", MB_OK | MB_ICONINFORMATION); +// free(msgA); + } break; case 3: - NotifyInfoMessage(pvar->cv, msg, "Authentication Banner"); + msgA = ToCharU8(msg); + if (msgA) { + NotifyInfoMessage(pvar->cv, msgA, "Authentication Banner"); +// free(msgA); + } break; } logprintf(LOG_LEVEL_NOTICE, "Banner len: %d, Banner message: %s.", msglen, msg);