| 59 |
static char base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
static char base64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
| 60 |
|
|
| 61 |
|
|
|
// ホストキーの初期化 (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; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
| 62 |
static char FAR *FAR * parse_multi_path(char FAR * buf) |
static char FAR *FAR * parse_multi_path(char FAR * buf) |
| 63 |
{ |
{ |
| 64 |
int i; |
int i; |
| 98 |
void HOSTS_init(PTInstVar pvar) |
void HOSTS_init(PTInstVar pvar) |
| 99 |
{ |
{ |
| 100 |
pvar->hosts_state.prefetched_hostname = NULL; |
pvar->hosts_state.prefetched_hostname = NULL; |
| 101 |
init_hostkey(&pvar->hosts_state.hostkey); |
key_init(&pvar->hosts_state.hostkey); |
| 102 |
pvar->hosts_state.hosts_dialog = NULL; |
pvar->hosts_state.hosts_dialog = NULL; |
| 103 |
pvar->hosts_state.file_names = NULL; |
pvar->hosts_state.file_names = NULL; |
| 104 |
} |
} |
| 660 |
} |
} |
| 661 |
|
|
| 662 |
// hostkey type is KEY_UNSPEC. |
// hostkey type is KEY_UNSPEC. |
| 663 |
init_hostkey(&pvar->hosts_state.hostkey); |
key_init(&pvar->hosts_state.hostkey); |
| 664 |
|
|
| 665 |
do { |
do { |
| 666 |
if (pvar->hosts_state.file_data == NULL |
if (pvar->hosts_state.file_data == NULL |
| 1441 |
} |
} |
| 1442 |
else { |
else { |
| 1443 |
Key key; // 接続中のホストのキー |
Key key; // 接続中のホストのキー |
|
Key *key_freed; |
|
| 1444 |
int length; |
int length; |
| 1445 |
char filename[MAX_PATH]; |
char filename[MAX_PATH]; |
| 1446 |
char tmp[L_tmpnam]; |
char tmp[L_tmpnam]; |
| 1474 |
} |
} |
| 1475 |
|
|
| 1476 |
// 接続中のサーバのキーを読み込む |
// 接続中のサーバのキーを読み込む |
| 1477 |
key_copy(&key, &(pvar->hosts_state.hostkey)); |
memset(&key, 0, sizeof(key)); |
| 1478 |
|
key_copy(&key, &pvar->hosts_state.hostkey); |
| 1479 |
|
|
| 1480 |
// ファイルから読み込む |
// ファイルから読み込む |
| 1481 |
begin_read_host_files(pvar, 0); |
begin_read_host_files(pvar, 0); |
| 1611 |
finish_read_host_files(pvar, 0); |
finish_read_host_files(pvar, 0); |
| 1612 |
|
|
| 1613 |
// 最後にメモリを解放しておく。 |
// 最後にメモリを解放しておく。 |
| 1614 |
key_freed = key_new(KEY_UNSPEC); |
key_init(&key); |
|
memcpy(key_freed, &key, sizeof(Key)); |
|
|
key_free(key_freed); |
|
| 1615 |
} |
} |
| 1616 |
} |
} |
| 1617 |
|
|
| 1633 |
} |
} |
| 1634 |
else { |
else { |
| 1635 |
Key key; // 接続中のホストのキー |
Key key; // 接続中のホストのキー |
|
Key *key_freed; |
|
| 1636 |
int length; |
int length; |
| 1637 |
char filename[MAX_PATH]; |
char filename[MAX_PATH]; |
| 1638 |
char tmp[L_tmpnam]; |
char tmp[L_tmpnam]; |
| 1667 |
} |
} |
| 1668 |
|
|
| 1669 |
// 接続中のサーバのキーを読み込む |
// 接続中のサーバのキーを読み込む |
| 1670 |
key_copy(&key, &(pvar->hosts_state.hostkey)); |
memset(&key, 0, sizeof(key)); |
| 1671 |
|
key_copy(&key, &pvar->hosts_state.hostkey); |
| 1672 |
|
|
| 1673 |
// ファイルから読み込む |
// ファイルから読み込む |
| 1674 |
begin_read_host_files(pvar, 0); |
begin_read_host_files(pvar, 0); |
| 1801 |
finish_read_host_files(pvar, 0); |
finish_read_host_files(pvar, 0); |
| 1802 |
|
|
| 1803 |
// 最後にメモリを解放しておく。 |
// 最後にメモリを解放しておく。 |
| 1804 |
key_freed = key_new(KEY_UNSPEC); |
key_init(&key); |
|
memcpy(key_freed, &key, sizeof(Key)); |
|
|
key_free(key_freed); |
|
| 1805 |
} |
} |
| 1806 |
} |
} |
| 1807 |
|
|
| 2397 |
} |
} |
| 2398 |
|
|
| 2399 |
// known_hosts に存在しないキーはあとでファイルへ書き込むために、ここで保存しておく。 |
// known_hosts に存在しないキーはあとでファイルへ書き込むために、ここで保存しておく。 |
| 2400 |
key_copy(&(pvar->hosts_state.hostkey), key); |
key_copy(&pvar->hosts_state.hostkey, key); |
| 2401 |
|
|
| 2402 |
free(pvar->hosts_state.prefetched_hostname); |
free(pvar->hosts_state.prefetched_hostname); |
| 2403 |
pvar->hosts_state.prefetched_hostname = _strdup(hostname); |
pvar->hosts_state.prefetched_hostname = _strdup(hostname); |
| 2442 |
int i; |
int i; |
| 2443 |
|
|
| 2444 |
free(pvar->hosts_state.prefetched_hostname); |
free(pvar->hosts_state.prefetched_hostname); |
| 2445 |
init_hostkey(&pvar->hosts_state.hostkey); |
key_init(&pvar->hosts_state.hostkey); |
| 2446 |
|
|
| 2447 |
if (pvar->hosts_state.file_names != NULL) { |
if (pvar->hosts_state.file_names != NULL) { |
| 2448 |
for (i = 0; pvar->hosts_state.file_names[i] != NULL; i++) { |
for (i = 0; pvar->hosts_state.file_names[i] != NULL; i++) { |