|
Lines 178-184
kex_names_valid(const char *names)
Link Here
|
| 178 |
char * |
178 |
char * |
| 179 |
kex_names_cat(const char *a, const char *b) |
179 |
kex_names_cat(const char *a, const char *b) |
| 180 |
{ |
180 |
{ |
| 181 |
char *ret = NULL, *tmp = NULL, *cp, *p; |
181 |
char *ret = NULL, *tmp = NULL, *cp, *p, *m; |
| 182 |
size_t len; |
182 |
size_t len; |
| 183 |
|
183 |
|
| 184 |
if (a == NULL || *a == '\0') |
184 |
if (a == NULL || *a == '\0') |
|
Lines 195-202
kex_names_cat(const char *a, const char *b)
Link Here
|
| 195 |
} |
195 |
} |
| 196 |
strlcpy(ret, a, len); |
196 |
strlcpy(ret, a, len); |
| 197 |
for ((p = strsep(&cp, ",")); p && *p != '\0'; (p = strsep(&cp, ","))) { |
197 |
for ((p = strsep(&cp, ",")); p && *p != '\0'; (p = strsep(&cp, ","))) { |
| 198 |
if (match_list(ret, p, NULL) != NULL) |
198 |
if ((m = match_list(ret, p, NULL)) != NULL) { |
|
|
199 |
free(m); |
| 199 |
continue; /* Algorithm already present */ |
200 |
continue; /* Algorithm already present */ |
|
|
201 |
} |
| 200 |
if (strlcat(ret, ",", len) >= len || |
202 |
if (strlcat(ret, ",", len) >= len || |
| 201 |
strlcat(ret, p, len) >= len) { |
203 |
strlcat(ret, p, len) >= len) { |
| 202 |
free(tmp); |
204 |
free(tmp); |
|
Lines 651-658
choose_enc(struct sshenc *enc, char *client, char *server)
Link Here
|
| 651 |
|
653 |
|
| 652 |
if (name == NULL) |
654 |
if (name == NULL) |
| 653 |
return SSH_ERR_NO_CIPHER_ALG_MATCH; |
655 |
return SSH_ERR_NO_CIPHER_ALG_MATCH; |
| 654 |
if ((enc->cipher = cipher_by_name(name)) == NULL) |
656 |
if ((enc->cipher = cipher_by_name(name)) == NULL) { |
|
|
657 |
free(name); |
| 655 |
return SSH_ERR_INTERNAL_ERROR; |
658 |
return SSH_ERR_INTERNAL_ERROR; |
|
|
659 |
} |
| 656 |
enc->name = name; |
660 |
enc->name = name; |
| 657 |
enc->enabled = 0; |
661 |
enc->enabled = 0; |
| 658 |
enc->iv = NULL; |
662 |
enc->iv = NULL; |
|
Lines 670-677
choose_mac(struct ssh *ssh, struct sshmac *mac, char *client, char *server)
Link Here
|
| 670 |
|
674 |
|
| 671 |
if (name == NULL) |
675 |
if (name == NULL) |
| 672 |
return SSH_ERR_NO_MAC_ALG_MATCH; |
676 |
return SSH_ERR_NO_MAC_ALG_MATCH; |
| 673 |
if (mac_setup(mac, name) < 0) |
677 |
if (mac_setup(mac, name) < 0) { |
|
|
678 |
free(name); |
| 674 |
return SSH_ERR_INTERNAL_ERROR; |
679 |
return SSH_ERR_INTERNAL_ERROR; |
|
|
680 |
} |
| 675 |
/* truncate the key */ |
681 |
/* truncate the key */ |
| 676 |
if (ssh->compat & SSH_BUG_HMAC) |
682 |
if (ssh->compat & SSH_BUG_HMAC) |
| 677 |
mac->key_len = 16; |
683 |
mac->key_len = 16; |
|
Lines 695-700
choose_comp(struct sshcomp *comp, char *client, char *server)
Link Here
|
| 695 |
} else if (strcmp(name, "none") == 0) { |
701 |
} else if (strcmp(name, "none") == 0) { |
| 696 |
comp->type = COMP_NONE; |
702 |
comp->type = COMP_NONE; |
| 697 |
} else { |
703 |
} else { |
|
|
704 |
free(name); |
| 698 |
return SSH_ERR_INTERNAL_ERROR; |
705 |
return SSH_ERR_INTERNAL_ERROR; |
| 699 |
} |
706 |
} |
| 700 |
comp->name = name; |
707 |
comp->name = name; |