|
Lines 101-109
verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh)
Link Here
|
| 101 |
} |
101 |
} |
| 102 |
|
102 |
|
| 103 |
static char * |
103 |
static char * |
| 104 |
order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port) |
104 |
order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port, char *avail) |
| 105 |
{ |
105 |
{ |
| 106 |
char *oavail, *avail, *first, *last, *alg, *hostname, *ret; |
106 |
char *oavail, *first, *last, *alg, *hostname, *ret; |
| 107 |
size_t maxlen; |
107 |
size_t maxlen; |
| 108 |
struct hostkeys *hostkeys; |
108 |
struct hostkeys *hostkeys; |
| 109 |
int ktype; |
109 |
int ktype; |
|
Lines 117-123
order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port)
Link Here
|
| 117 |
for (i = 0; i < options.num_system_hostfiles; i++) |
117 |
for (i = 0; i < options.num_system_hostfiles; i++) |
| 118 |
load_hostkeys(hostkeys, hostname, options.system_hostfiles[i]); |
118 |
load_hostkeys(hostkeys, hostname, options.system_hostfiles[i]); |
| 119 |
|
119 |
|
| 120 |
oavail = avail = xstrdup(KEX_DEFAULT_PK_ALG); |
120 |
oavail = avail = xstrdup(avail); |
| 121 |
maxlen = strlen(avail) + 1; |
121 |
maxlen = strlen(avail) + 1; |
| 122 |
first = xmalloc(maxlen); |
122 |
first = xmalloc(maxlen); |
| 123 |
last = xmalloc(maxlen); |
123 |
last = xmalloc(maxlen); |
|
Lines 182-187
ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port)
Link Here
|
| 182 |
KEX_DEFAULT_PK_ALG, all_key) != 0) |
182 |
KEX_DEFAULT_PK_ALG, all_key) != 0) |
| 183 |
fatal("%s: kex_assemble_namelist", __func__); |
183 |
fatal("%s: kex_assemble_namelist", __func__); |
| 184 |
free(all_key); |
184 |
free(all_key); |
|
|
185 |
if (*options.hostkeyalgorithms == ':') { |
| 186 |
char *tmp = options.hostkeyalgorithms; |
| 187 |
options.hostkeyalgorithms = order_hostkeyalgs(host, |
| 188 |
hostaddr, port, options.hostkeyalgorithms + 1); |
| 189 |
free(tmp); |
| 190 |
} |
| 185 |
myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = |
191 |
myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = |
| 186 |
compat_pkalg_proposal(options.hostkeyalgorithms); |
192 |
compat_pkalg_proposal(options.hostkeyalgorithms); |
| 187 |
} else { |
193 |
} else { |
|
Lines 190-196
ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port)
Link Here
|
| 190 |
/* Prefer algorithms that we already have keys for */ |
196 |
/* Prefer algorithms that we already have keys for */ |
| 191 |
myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = |
197 |
myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = |
| 192 |
compat_pkalg_proposal( |
198 |
compat_pkalg_proposal( |
| 193 |
order_hostkeyalgs(host, hostaddr, port)); |
199 |
order_hostkeyalgs(host, hostaddr, port, KEX_DEFAULT_PK_ALG)); |
| 194 |
} |
200 |
} |
| 195 |
|
201 |
|
| 196 |
if (options.rekey_limit || options.rekey_interval) |
202 |
if (options.rekey_limit || options.rekey_interval) |
| 197 |
- |
|
|