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