Skip to content

Commit 3392b4a

Browse files
committed
server config BUGFIX name node is not always set
Fixes #458
1 parent e1d80bd commit 3392b4a

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

src/server_config.c

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3035,29 +3035,34 @@ nc_server_config_create_cert_to_name(const struct lyd_node *node, struct nc_serv
30353035
int ret = 0;
30363036
struct lyd_node *n;
30373037
struct nc_ctn *new, *iter;
3038-
const char *map_type, *name;
3038+
const char *map_type, *name = NULL;
30393039
uint32_t id;
30403040
NC_TLS_CTN_MAPTYPE m_type;
30413041

30423042
assert(!strcmp(LYD_NAME(node), "cert-to-name"));
30433043

3044-
/* get all the data */
30453044
/* find the list's key */
30463045
lyd_find_path(node, "id", 0, &n);
30473046
assert(n);
30483047
id = ((struct lyd_node_term *)n)->value.uint32;
30493048

3050-
/* find the ctn's name */
3051-
lyd_find_path(node, "name", 0, &n);
3052-
assert(n);
3053-
name = lyd_get_value(n);
3054-
3055-
/* find the ctn's map-type */
3056-
lyd_find_path(node, "map-type", 0, &n);
3057-
assert(n);
3049+
/* get CTN map-type */
3050+
if (lyd_find_path(node, "map-type", 0, &n)) {
3051+
ERR(NULL, "Missing CTN map-type.");
3052+
ret = 1;
3053+
goto cleanup;
3054+
}
30583055
map_type = ((struct lyd_node_term *)n)->value.ident->name;
30593056
if (!strcmp(map_type, "specified")) {
30603057
m_type = NC_TLS_CTN_SPECIFIED;
3058+
3059+
/* get CTN name */
3060+
if (lyd_find_path(node, "name", 0, &n)) {
3061+
ERR(NULL, "Missing CTN \"specified\" user name.");
3062+
ret = 1;
3063+
goto cleanup;
3064+
}
3065+
name = lyd_get_value(n);
30613066
} else if (!strcmp(map_type, "san-rfc822-name")) {
30623067
m_type = NC_TLS_CTN_SAN_RFC822_NAME;
30633068
} else if (!strcmp(map_type, "san-dns-name")) {
@@ -3069,7 +3074,7 @@ nc_server_config_create_cert_to_name(const struct lyd_node *node, struct nc_serv
30693074
} else if (!strcmp(map_type, "common-name")) {
30703075
m_type = NC_TLS_CTN_COMMON_NAME;
30713076
} else {
3072-
ERR(NULL, "Map-type identity \"%s\" not supported.", map_type);
3077+
ERR(NULL, "CTN map-type \"%s\" not supported.", map_type);
30733078
ret = 1;
30743079
goto cleanup;
30753080
}
@@ -3090,9 +3095,11 @@ nc_server_config_create_cert_to_name(const struct lyd_node *node, struct nc_serv
30903095
/* have to find the right place */
30913096
for (iter = opts->ctn; iter->next && iter->next->id <= id; iter = iter->next) {}
30923097
if (iter->id == id) {
3093-
/* collision */
3098+
/* collision, replace */
30943099
free(new);
30953100
new = iter;
3101+
free(new->name);
3102+
new->name = NULL;
30963103
} else {
30973104
new->next = iter->next;
30983105
iter->next = new;
@@ -3101,9 +3108,10 @@ nc_server_config_create_cert_to_name(const struct lyd_node *node, struct nc_serv
31013108

31023109
/* insert the right data */
31033110
new->id = id;
3104-
free(new->name);
3105-
new->name = strdup(name);
3106-
NC_CHECK_ERRMEM_GOTO(!new->name, ret = 1, cleanup);
3111+
if (name) {
3112+
new->name = strdup(name);
3113+
NC_CHECK_ERRMEM_GOTO(!new->name, ret = 1, cleanup);
3114+
}
31073115
new->map_type = m_type;
31083116

31093117
cleanup:

0 commit comments

Comments
 (0)