[Ttssh2-commit] [6147] key_init() 関数を追加

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2015年 11月 17日 (火) 18:31:03 JST


Revision: 6147
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6147
Author:   maya
Date:     2015-11-17 18:31:03 +0900 (Tue, 17 Nov 2015)
Log Message:
-----------
key_init() 関数を追加
  key_free() はポインタでないと使えないため

Modified Paths:
--------------
    trunk/ttssh2/ttxssh/hosts.c
    trunk/ttssh2/ttxssh/key.c
    trunk/ttssh2/ttxssh/key.h

-------------- next part --------------
Modified: trunk/ttssh2/ttxssh/hosts.c
===================================================================
--- trunk/ttssh2/ttxssh/hosts.c	2015-11-17 04:38:16 UTC (rev 6146)
+++ trunk/ttssh2/ttxssh/hosts.c	2015-11-17 09:31:03 UTC (rev 6147)
@@ -59,38 +59,6 @@
 static char base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
 
-// \x83z\x83X\x83g\x83L\x81[\x82̏\x89\x8A\xFA\x89\xBB (2006.3.21 yutaka)
-static void init_hostkey(Key *key)
-{
-	key->type = KEY_UNSPEC;
-
-	// SSH1
-	key->bits = 0;
-	if (key->exp != NULL) {
-		free(key->exp);
-		key->exp = NULL;
-	}
-	if (key->mod != NULL) {
-		free(key->mod);
-		key->mod = NULL;
-	}
-
-	// SSH2
-	if (key->dsa != NULL) {
-		DSA_free(key->dsa);
-		key->dsa = NULL;
-	}
-	if (key->rsa != NULL) {
-		RSA_free(key->rsa);
-		key->rsa = NULL;
-	}
-	if (key->ecdsa != NULL) {
-		EC_KEY_free(key->ecdsa);
-		key->ecdsa = NULL;
-	}
-}
-
-
 static char FAR *FAR * parse_multi_path(char FAR * buf)
 {
 	int i;
@@ -130,7 +98,7 @@
 void HOSTS_init(PTInstVar pvar)
 {
 	pvar->hosts_state.prefetched_hostname = NULL;
-	init_hostkey(&pvar->hosts_state.hostkey);
+	key_init(&pvar->hosts_state.hostkey);
 	pvar->hosts_state.hosts_dialog = NULL;
 	pvar->hosts_state.file_names = NULL;
 }
@@ -692,7 +660,7 @@
 	}
 
 	// hostkey type is KEY_UNSPEC.
-	init_hostkey(&pvar->hosts_state.hostkey);
+	key_init(&pvar->hosts_state.hostkey);
 
 	do {
 		if (pvar->hosts_state.file_data == NULL
@@ -1473,7 +1441,6 @@
 	}
 	else {
 		Key key; // \x90ڑ\xB1\x92\x86\x82̃z\x83X\x83g\x82̃L\x81[
-		Key *key_freed;
 		int length;
 		char filename[MAX_PATH];
 		char tmp[L_tmpnam];
@@ -1507,7 +1474,8 @@
 		}
 
 		// \x90ڑ\xB1\x92\x86\x82̃T\x81[\x83o\x82̃L\x81[\x82\xF0\x93ǂݍ\x9E\x82\xDE
-		key_copy(&key, &(pvar->hosts_state.hostkey));
+		memset(&key, 0, sizeof(key));
+		key_copy(&key, &pvar->hosts_state.hostkey);
 
 		// \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82\xDE
 		begin_read_host_files(pvar, 0);
@@ -1643,9 +1611,7 @@
 		finish_read_host_files(pvar, 0);
 
 		// \x8DŌ\xE3\x82Ƀ\x81\x83\x82\x83\x8A\x82\xF0\x89\xF0\x95\xFA\x82\xB5\x82Ă\xA8\x82\xAD\x81B
-		key_freed = key_new(KEY_UNSPEC);
-		memcpy(key_freed, &key, sizeof(Key));
-		key_free(key_freed);
+		key_init(&key);
 	}
 }
 
@@ -1667,7 +1633,6 @@
 	}
 	else {
 		Key key; // \x90ڑ\xB1\x92\x86\x82̃z\x83X\x83g\x82̃L\x81[
-		Key *key_freed;
 		int length;
 		char filename[MAX_PATH];
 		char tmp[L_tmpnam];
@@ -1702,7 +1667,8 @@
 		}
 
 		// \x90ڑ\xB1\x92\x86\x82̃T\x81[\x83o\x82̃L\x81[\x82\xF0\x93ǂݍ\x9E\x82\xDE
-		key_copy(&key, &(pvar->hosts_state.hostkey));
+		memset(&key, 0, sizeof(key));
+		key_copy(&key, &pvar->hosts_state.hostkey);
 
 		// \x83t\x83@\x83C\x83\x8B\x82\xA9\x82\xE7\x93ǂݍ\x9E\x82\xDE
 		begin_read_host_files(pvar, 0);
@@ -1835,9 +1801,7 @@
 		finish_read_host_files(pvar, 0);
 
 		// \x8DŌ\xE3\x82Ƀ\x81\x83\x82\x83\x8A\x82\xF0\x89\xF0\x95\xFA\x82\xB5\x82Ă\xA8\x82\xAD\x81B
-		key_freed = key_new(KEY_UNSPEC);
-		memcpy(key_freed, &key, sizeof(Key));
-		key_free(key_freed);
+		key_init(&key);
 	}
 }
 
@@ -2433,7 +2397,7 @@
 	}
 
 	// known_hosts \x82ɑ\xB6\x8D݂\xB5\x82Ȃ\xA2\x83L\x81[\x82͂\xA0\x82ƂŃt\x83@\x83C\x83\x8B\x82֏\x91\x82\xAB\x8D\x9E\x82ނ\xBD\x82߂ɁA\x82\xB1\x82\xB1\x82ŕۑ\xB6\x82\xB5\x82Ă\xA8\x82\xAD\x81B
-	key_copy(&(pvar->hosts_state.hostkey), key);
+	key_copy(&pvar->hosts_state.hostkey, key);
 
 	free(pvar->hosts_state.prefetched_hostname);
 	pvar->hosts_state.prefetched_hostname = _strdup(hostname);
@@ -2478,7 +2442,7 @@
 	int i;
 
 	free(pvar->hosts_state.prefetched_hostname);
-	init_hostkey(&pvar->hosts_state.hostkey);
+	key_init(&pvar->hosts_state.hostkey);
 
 	if (pvar->hosts_state.file_names != NULL) {
 		for (i = 0; pvar->hosts_state.file_names[i] != NULL; i++) {

Modified: trunk/ttssh2/ttxssh/key.c
===================================================================
--- trunk/ttssh2/ttxssh/key.c	2015-11-17 04:38:16 UTC (rev 6146)
+++ trunk/ttssh2/ttxssh/key.c	2015-11-17 09:31:03 UTC (rev 6147)
@@ -561,6 +561,7 @@
 
 BOOL key_copy(Key *dest, Key *src)
 {
+	key_init(dest);
 	switch (src->type) {
 	case KEY_RSA1: // SSH1
 		dest->type = KEY_RSA1;
@@ -1077,42 +1078,49 @@
 		return;
 	}
 
-	switch (key->type) {
-		case KEY_RSA1:
-		case KEY_RSA:
-			if (key->rsa != NULL)
-				RSA_free(key->rsa);
-			key->rsa = NULL;
-			break;
+	key_init(key);
 
-		case KEY_DSA:
-			if (key->dsa != NULL)
-				DSA_free(key->dsa);
-			key->dsa = NULL;
-			break;
+	free(key);
+}
 
-		case KEY_ECDSA256:
-		case KEY_ECDSA384:
-		case KEY_ECDSA521:
-			if (key->ecdsa != NULL)
-				EC_KEY_free(key->ecdsa);
-			key->ecdsa = NULL;
-			break;
+void key_init(Key *key)
+{
+	key->type = KEY_UNSPEC;
 
-		case KEY_ED25519:
-			if (key->ed25519_pk) {
-				memset(key->ed25519_pk, 0, ED25519_PK_SZ);
-				free(key->ed25519_pk);
-				key->ed25519_pk = NULL;
-			}
-			if (key->ed25519_sk) {
-				memset(key->ed25519_sk, 0, ED25519_SK_SZ);
-				free(key->ed25519_sk);
-				key->ed25519_sk = NULL;
-			}
-			break;
+	// SSH1
+	key->bits = 0;
+	if (key->exp != NULL) {
+		free(key->exp);
+		key->exp = NULL;
 	}
-	free(key);
+	if (key->mod != NULL) {
+		free(key->mod);
+		key->mod = NULL;
+	}
+
+	// SSH2
+	if (key->dsa != NULL) {
+		DSA_free(key->dsa);
+		key->dsa = NULL;
+	}
+	if (key->rsa != NULL) {
+		RSA_free(key->rsa);
+		key->rsa = NULL;
+	}
+	if (key->ecdsa != NULL) {
+		EC_KEY_free(key->ecdsa);
+		key->ecdsa = NULL;
+	}
+	if (key->ed25519_pk != NULL) {
+		memset(key->ed25519_pk, 0, ED25519_PK_SZ);
+		free(key->ed25519_pk);
+		key->ed25519_pk = NULL;
+	}
+	if (key->ed25519_sk) {
+		memset(key->ed25519_sk, 0, ED25519_SK_SZ);
+		free(key->ed25519_sk);
+		key->ed25519_sk = NULL;
+	}
 }
 
 //

Modified: trunk/ttssh2/ttxssh/key.h
===================================================================
--- trunk/ttssh2/ttxssh/key.h	2015-11-17 04:38:16 UTC (rev 6146)
+++ trunk/ttssh2/ttxssh/key.h	2015-11-17 09:31:03 UTC (rev 6147)
@@ -54,6 +54,7 @@
 Key *key_new_private(int type);
 Key *key_new(int type);
 void key_free(Key *key);
+void key_init(Key *key);
 int key_to_blob(Key *key, char **blobp, int *lenp);
 Key *key_from_blob(char *data, int blen);
 BOOL get_SSH2_publickey_blob(PTInstVar pvar, buffer_t **blobptr, int *bloblen);



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