|
Lines 724-736
check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
Link Here
|
| 724 |
Key *raw_key = NULL; |
724 |
Key *raw_key = NULL; |
| 725 |
char *ip = NULL, *host = NULL; |
725 |
char *ip = NULL, *host = NULL; |
| 726 |
char hostline[1000], *hostp, *fp, *ra; |
726 |
char hostline[1000], *hostp, *fp, *ra; |
| 727 |
char msg[1024]; |
727 |
char msg[2048]; |
| 728 |
const char *type; |
728 |
const char *type; |
| 729 |
const struct hostkey_entry *host_found, *ip_found; |
729 |
const struct hostkey_entry *host_found, *ip_found; |
| 730 |
int len, cancelled_forwarding = 0; |
730 |
int len, cancelled_forwarding = 0; |
| 731 |
int local = sockaddr_is_local(hostaddr); |
731 |
int local = sockaddr_is_local(hostaddr); |
| 732 |
int r, want_cert = key_is_cert(host_key), host_ip_differ = 0; |
732 |
int r, want_cert = key_is_cert(host_key), host_ip_differ = 0; |
| 733 |
struct hostkeys *host_hostkeys, *ip_hostkeys; |
733 |
struct hostkeys *host_hostkeys, *ip_hostkeys, *key_hostkeys = NULL; |
| 734 |
u_int i; |
734 |
u_int i; |
| 735 |
|
735 |
|
| 736 |
/* |
736 |
/* |
|
Lines 764-780
check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
Link Here
|
| 764 |
|
764 |
|
| 765 |
host_hostkeys = init_hostkeys(); |
765 |
host_hostkeys = init_hostkeys(); |
| 766 |
for (i = 0; i < num_user_hostfiles; i++) |
766 |
for (i = 0; i < num_user_hostfiles; i++) |
| 767 |
load_hostkeys(host_hostkeys, host, user_hostfiles[i]); |
767 |
load_hostkeys(host_hostkeys, host, NULL, user_hostfiles[i]); |
| 768 |
for (i = 0; i < num_system_hostfiles; i++) |
768 |
for (i = 0; i < num_system_hostfiles; i++) |
| 769 |
load_hostkeys(host_hostkeys, host, system_hostfiles[i]); |
769 |
load_hostkeys(host_hostkeys, host, NULL, system_hostfiles[i]); |
| 770 |
|
770 |
|
| 771 |
ip_hostkeys = NULL; |
771 |
ip_hostkeys = NULL; |
| 772 |
if (!want_cert && options.check_host_ip) { |
772 |
if (!want_cert && options.check_host_ip) { |
| 773 |
ip_hostkeys = init_hostkeys(); |
773 |
ip_hostkeys = init_hostkeys(); |
| 774 |
for (i = 0; i < num_user_hostfiles; i++) |
774 |
for (i = 0; i < num_user_hostfiles; i++) |
| 775 |
load_hostkeys(ip_hostkeys, ip, user_hostfiles[i]); |
775 |
load_hostkeys(ip_hostkeys, ip, NULL, user_hostfiles[i]); |
| 776 |
for (i = 0; i < num_system_hostfiles; i++) |
776 |
for (i = 0; i < num_system_hostfiles; i++) |
| 777 |
load_hostkeys(ip_hostkeys, ip, system_hostfiles[i]); |
777 |
load_hostkeys(ip_hostkeys, ip, NULL, system_hostfiles[i]); |
| 778 |
} |
778 |
} |
| 779 |
|
779 |
|
| 780 |
retry: |
780 |
retry: |
|
Lines 885-890
check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
Link Here
|
| 885 |
"No matching host key fingerprint" |
885 |
"No matching host key fingerprint" |
| 886 |
" found in DNS.\n"); |
886 |
" found in DNS.\n"); |
| 887 |
} |
887 |
} |
|
|
888 |
/* Has this key been accepted for other hostnames? */ |
| 889 |
key_hostkeys = init_hostkeys(); |
| 890 |
for (i = 0; i < num_user_hostfiles; i++) |
| 891 |
load_hostkeys(key_hostkeys, NULL, host_key, |
| 892 |
user_hostfiles[i]); |
| 893 |
for (i = 0; i < num_system_hostfiles; i++) |
| 894 |
load_hostkeys(key_hostkeys, NULL, host_key, |
| 895 |
system_hostfiles[i]); |
| 896 |
if (key_hostkeys->num_entries > 0) { |
| 897 |
strlcat(msg2, "You have previously accepted " |
| 898 |
"this key for the following hostnames:", |
| 899 |
sizeof(msg2)); |
| 900 |
for (i = 0; i < key_hostkeys->num_entries; i++) { |
| 901 |
strlcat(msg2, "\n\t", sizeof(msg2)); |
| 902 |
strlcat(msg2, key_hostkeys->entries[i].host, |
| 903 |
sizeof(msg2)); |
| 904 |
} |
| 905 |
if (strlcat(msg2, "\n", sizeof(msg2)) >= |
| 906 |
sizeof(msg2)) { |
| 907 |
/* truncate at last newline. */ |
| 908 |
*(strrchr(msg2, '\n') + 1) = 0; |
| 909 |
} |
| 910 |
} |
| 888 |
snprintf(msg, sizeof(msg), |
911 |
snprintf(msg, sizeof(msg), |
| 889 |
"The authenticity of host '%.200s (%s)' can't be " |
912 |
"The authenticity of host '%.200s (%s)' can't be " |
| 890 |
"established%s\n" |
913 |
"established%s\n" |
|
Lines 1103-1108
check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
Link Here
|
| 1103 |
free_hostkeys(host_hostkeys); |
1126 |
free_hostkeys(host_hostkeys); |
| 1104 |
if (ip_hostkeys != NULL) |
1127 |
if (ip_hostkeys != NULL) |
| 1105 |
free_hostkeys(ip_hostkeys); |
1128 |
free_hostkeys(ip_hostkeys); |
|
|
1129 |
if (key_hostkeys != NULL) |
| 1130 |
free_hostkeys(key_hostkeys); |
| 1106 |
return 0; |
1131 |
return 0; |
| 1107 |
|
1132 |
|
| 1108 |
fail: |
1133 |
fail: |
|
Lines 1126-1131
fail:
Link Here
|
| 1126 |
free_hostkeys(host_hostkeys); |
1151 |
free_hostkeys(host_hostkeys); |
| 1127 |
if (ip_hostkeys != NULL) |
1152 |
if (ip_hostkeys != NULL) |
| 1128 |
free_hostkeys(ip_hostkeys); |
1153 |
free_hostkeys(ip_hostkeys); |
|
|
1154 |
if (key_hostkeys != NULL) |
| 1155 |
free_hostkeys(key_hostkeys); |
| 1129 |
return -1; |
1156 |
return -1; |
| 1130 |
} |
1157 |
} |
| 1131 |
|
1158 |
|