[Ttssh2-commit] [8397] 必要に応じて SSH 認証バナーのエンコードを変換するようにした。

scmno****@osdn***** scmno****@osdn*****
2019年 11月 23日 (土) 00:14:57 JST


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);


Ttssh2-commit メーリングリストの案内