@@ -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
31093117cleanup :
0 commit comments