version 1.128, 2017/02/03 23:01:19 |
version 1.129, 2017/03/10 03:45:40 |
|
|
char * |
char * |
kex_names_cat(const char *a, const char *b) |
kex_names_cat(const char *a, const char *b) |
{ |
{ |
char *ret = NULL, *tmp = NULL, *cp, *p; |
char *ret = NULL, *tmp = NULL, *cp, *p, *m; |
size_t len; |
size_t len; |
|
|
if (a == NULL || *a == '\0') |
if (a == NULL || *a == '\0') |
|
|
} |
} |
strlcpy(ret, a, len); |
strlcpy(ret, a, len); |
for ((p = strsep(&cp, ",")); p && *p != '\0'; (p = strsep(&cp, ","))) { |
for ((p = strsep(&cp, ",")); p && *p != '\0'; (p = strsep(&cp, ","))) { |
if (match_list(ret, p, NULL) != NULL) |
if ((m = match_list(ret, p, NULL)) != NULL) { |
|
free(m); |
continue; /* Algorithm already present */ |
continue; /* Algorithm already present */ |
|
} |
if (strlcat(ret, ",", len) >= len || |
if (strlcat(ret, ",", len) >= len || |
strlcat(ret, p, len) >= len) { |
strlcat(ret, p, len) >= len) { |
free(tmp); |
free(tmp); |
|
|
|
|
if (name == NULL) |
if (name == NULL) |
return SSH_ERR_NO_CIPHER_ALG_MATCH; |
return SSH_ERR_NO_CIPHER_ALG_MATCH; |
if ((enc->cipher = cipher_by_name(name)) == NULL) |
if ((enc->cipher = cipher_by_name(name)) == NULL) { |
|
free(name); |
return SSH_ERR_INTERNAL_ERROR; |
return SSH_ERR_INTERNAL_ERROR; |
|
} |
enc->name = name; |
enc->name = name; |
enc->enabled = 0; |
enc->enabled = 0; |
enc->iv = NULL; |
enc->iv = NULL; |
|
|
|
|
if (name == NULL) |
if (name == NULL) |
return SSH_ERR_NO_MAC_ALG_MATCH; |
return SSH_ERR_NO_MAC_ALG_MATCH; |
if (mac_setup(mac, name) < 0) |
if (mac_setup(mac, name) < 0) { |
|
free(name); |
return SSH_ERR_INTERNAL_ERROR; |
return SSH_ERR_INTERNAL_ERROR; |
|
} |
/* truncate the key */ |
/* truncate the key */ |
if (ssh->compat & SSH_BUG_HMAC) |
if (ssh->compat & SSH_BUG_HMAC) |
mac->key_len = 16; |
mac->key_len = 16; |
|
|
} else if (strcmp(name, "none") == 0) { |
} else if (strcmp(name, "none") == 0) { |
comp->type = COMP_NONE; |
comp->type = COMP_NONE; |
} else { |
} else { |
|
free(name); |
return SSH_ERR_INTERNAL_ERROR; |
return SSH_ERR_INTERNAL_ERROR; |
} |
} |
comp->name = name; |
comp->name = name; |