[Ttssh2-commit] [5841] チケット #35047 SSH サーバホスト公開鍵の自動更新

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2015年 5月 1日 (金) 01:27:32 JST


Revision: 5841
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5841
Author:   yutakapon
Date:     2015-05-01 01:27:29 +0900 (Fri, 01 May 2015)
Log Message:
-----------
チケット #35047 SSH サーバホスト公開鍵の自動更新

許可された(ユーザが設定した)ホスト鍵アルゴリズムのみを受け付けるようにした。

Ticket Links:
------------
    http://sourceforge.jp/projects/ttssh2/tracker/detail/35047

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/key.c
    trunk/ttssh2/ttxssh/ssh.c

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/key.c
===================================================================
--- trunk/ttssh2/ttxssh/key.c	2015-04-29 16:42:54 UTC (rev 5840)
+++ trunk/ttssh2/ttxssh/key.c	2015-04-30 16:27:29 UTC (rev 5841)
@@ -1849,7 +1849,30 @@
 	free(ctx);
 }
 
+
+// \x8B\x96\x89‚\xB3\x82ꂽ\x83z\x83X\x83g\x8C\xAE\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82\xA9\x82\xF0\x83`\x83F\x83b\x83N\x82\xB7\x82\xE9\x81B
 //
+// return 1: matched
+//        0: not matched
+//
+static int check_hostkey_algorithm(PTInstVar pvar, Key *key)
+{
+	int ret = 0;
+	int i, index;
+
+	for (i = 0; pvar->settings.HostKeyOrder[i] != 0; i++) {
+		index = pvar->settings.HostKeyOrder[i] - '0';
+		if (index == KEY_NONE) // disabled line
+			break;
+
+		if (strcmp(get_sshname_from_key(key), get_ssh_keytype_name(index)) == 0)
+			return 1;
+	}
+
+	return (ret);
+}
+
+//
 // SSH\x83T\x81[\x83o\x83z\x83X\x83g\x8C\xAE(known_hosts)\x82̎\xA9\x93\xAE\x8DX\x90V(OpenSSH 6.8 or later: host key rotation support)
 //
 // return 1: success
@@ -1892,7 +1915,7 @@
 		blob = buffer_get_string_msg(b, &len);
 		key = key_from_blob(blob, len);
 		if (key == NULL) {
-			_snprintf_s(msg, sizeof(msg), _TRUNCATE, "Not found key into blob %p (%d)", blob, len);
+			_snprintf_s(msg, sizeof(msg), _TRUNCATE, "Not found host key into blob %p (%d)", blob, len);
 			notify_verbose_message(pvar, msg, LOG_LEVEL_VERBOSE);
 			goto error;
 		}
@@ -1900,10 +1923,20 @@
 		blob = NULL;
 
 		fp = key_fingerprint(key, SSH_FP_HEX);
-		_snprintf_s(msg, sizeof(msg), _TRUNCATE, "SSH2_MSG_GLOBAL_REQUEST: received %s key %s", 
+		_snprintf_s(msg, sizeof(msg), _TRUNCATE, "Received %s host key %s", 
 			get_sshname_from_key(key), fp);
 		notify_verbose_message(pvar, msg, LOG_LEVEL_VERBOSE);
 		free(fp);
+
+		// \x8B\x96\x89‚\xB3\x82ꂽ\x83z\x83X\x83g\x83L\x81[\x83A\x83\x8B\x83S\x83\x8A\x83Y\x83\x80\x82\xA9\x82\xF0\x83`\x83F\x83b\x83N\x82\xB7\x82\xE9\x81B
+		if (check_hostkey_algorithm(pvar, key) == 0) {
+			_snprintf_s(msg, sizeof(msg), _TRUNCATE, "%s host key is not permitted by ts.HostKeyOrder",
+				get_sshname_from_key(key));
+			notify_verbose_message(pvar, msg, LOG_LEVEL_VERBOSE);
+			continue;
+		}
+
+
 	}
 
 	success = 1;

Modified: trunk/ttssh2/ttxssh/ssh.c
===================================================================
--- trunk/ttssh2/ttxssh/ssh.c	2015-04-29 16:42:54 UTC (rev 5840)
+++ trunk/ttssh2/ttxssh/ssh.c	2015-04-30 16:27:29 UTC (rev 5841)
@@ -4211,16 +4211,17 @@
 char* get_ssh_keytype_name(ssh_keytype type)
 {
 	ssh2_host_key_t *ptr = ssh2_host_key;
-	static char buf[32];
+	char *p = "ssh-unknown";
 
 	while (ptr->name != NULL) {
 		if (type == ptr->type) {
-			strncpy_s(buf, sizeof(buf), ptr->name, _TRUNCATE);
+			// ssh2_host_key[]\x82̓O\x83\x8D\x81[\x83o\x83\x8B\x95ϐ\x94\x82Ȃ̂ŁA\x82\xBB\x82̂܂ܕԂ\xE8\x92l\x82ɂł\xAB\x82\xE9\x81B
+			p = ptr->name;
 			break;
 		}
 		ptr++;
 	}
-	return buf;
+	return p;
 }
 
 



Ttssh2-commit メーリングリストの案内
Back to archive index