From: Arran Cudbard-Bell Date: Wed, 3 Nov 2021 21:40:52 +0000 (-0400) Subject: := should just replace the existing vp instead of building out extents X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50b30549f2219b34e6bdde2d5a085adc6092d8be;p=thirdparty%2Ffreeradius-server.git := should just replace the existing vp instead of building out extents --- diff --git a/src/lib/server/map.c b/src/lib/server/map.c index c366326f0d2..38cf15f328a 100644 --- a/src/lib/server/map.c +++ b/src/lib/server/map.c @@ -1768,6 +1768,16 @@ int map_to_request(request_t *request, map_t const *map, radius_map_getvalue_t f fr_dlist_head_t interior; fr_pair_t *src_vp; + if (dst) { + fr_pair_t *old; + + DEBUG_OVERWRITE(dst, src_vp); + old = fr_dcursor_replace(&dst_list, fr_pair_copy(talloc_parent(dst), src_vp)); + talloc_free(old); /* Remove the old pair */ + + goto op_set_done; + } + fr_dlist_talloc_init(&leaf, tmpl_attr_extent_t, entry); fr_dlist_talloc_init(&interior, tmpl_attr_extent_t, entry); @@ -1790,15 +1800,9 @@ int map_to_request(request_t *request, map_t const *map, radius_map_getvalue_t f goto op_set_error; } else { extent = fr_dlist_head(&leaf); - if (dst) { - DEBUG_OVERWRITE(dst, src_vp); - dst = fr_dcursor_replace(extent->list, fr_pair_copy(extent->list_ctx, src_vp)); - talloc_free(dst); - } else { - fr_pair_append(extent->list, fr_pair_copy(extent->list_ctx, src_vp)); - } + fr_pair_append(extent->list, fr_pair_copy(extent->list_ctx, src_vp)); } - + op_set_done: /* Free any we didn't insert */ fr_pair_list_free(&src_list); fr_assert(fr_dlist_num_elements(&interior) == 0); diff --git a/src/lib/server/tmpl_eval.c b/src/lib/server/tmpl_eval.c index 0c5a63ff7c2..7130ccddde7 100644 --- a/src/lib/server/tmpl_eval.c +++ b/src/lib/server/tmpl_eval.c @@ -1387,6 +1387,7 @@ int tmpl_find_or_add_vp(fr_pair_t **out, request_t *request, tmpl_t const *vpt) * @param[in] vpt specifying the #fr_pair_t type to retrieve or create. * Must be #TMPL_TYPE_ATTR. * @return + * - 1 on success a pair was created. * - 0 on success a pair was found. * - -1 if a new #fr_pair_t couldn't be found or created. * - -2 if list could not be found (doesn't exist in current #request_t). @@ -1451,7 +1452,7 @@ int tmpl_extents_find(TALLOC_CTX *ctx, if (vpt->type == TMPL_TYPE_LIST) { do_list: if (leaf) EXTENT_ADD(leaf, NULL, list_ctx, list_head); - goto done; + return 0; } /* @@ -1538,22 +1539,10 @@ int tmpl_extents_find(TALLOC_CTX *ctx, continue; default: - if (leaf) EXTENT_ADD(leaf, NULL, list_ctx, list_head); break; } } -done: - /* - * If we were asked to provide interior - * and leaf lists, and there's no result - * in either, then that's a logic error. - * - * We either have an attribute or will - * need to build out pairs to it. - */ - fr_assert(!leaf || !interior || (fr_dlist_num_elements(leaf) > 0) || (fr_dlist_num_elements(interior) > 0)); - return 0; }