]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
cleanups as per unit tests
authorAlan T. DeKok <aland@freeradius.org>
Tue, 22 Aug 2023 14:39:10 +0000 (10:39 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 22 Aug 2023 14:39:10 +0000 (10:39 -0400)
src/lib/util/pair.c

index 8c1612d79bbc39bb3d30c3f27a556f35d3407a02..6467f58dc2298d3ea725435123f247ee553d9a54 100644 (file)
@@ -3325,21 +3325,8 @@ bool fr_pair_matches_da(void const *item, void const *uctx)
  */
 static void pair_list_flatten(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t *from)
 {
-       bool skip = true;
        fr_pair_t *vp, *next;
 
-       /*
-        *      If the list is already flat, don't do anything.
-        */
-       for (vp = fr_pair_list_head(from); vp; vp = fr_pair_list_next(from, vp)) {
-               if (fr_type_is_structural(vp->vp_type)) {
-                       skip = false;
-                       break;
-               }
-       }
-
-       if (skip) return;
-
        /*
         *      Sort the source list before flattening it.  This is
         *      really necessary only for struct and tlv types.  But
@@ -3407,10 +3394,28 @@ void fr_pair_flatten(fr_pair_t *vp)
 {
        fr_pair_list_t list;
 
-       fr_pair_list_init(&list);
-
        fr_assert(fr_type_is_structural(vp->vp_type));
 
+       /*
+        *      Don't flatten children of a group if they're already flat.
+        */
+       if (vp->vp_type == FR_TYPE_GROUP) {
+               bool skip = true;
+
+               /*
+                *      If the list is already flat, don't do anything.
+                */
+               fr_pair_list_foreach(&vp->vp_group, child) {
+                       if (fr_type_is_structural(child->vp_type)) {
+                               skip = false;
+                               break;
+                       }
+               }
+               if (skip) return;
+       }
+
+       fr_pair_list_init(&list);
+
        /*
         *      Flatten to an intermediate list, so that we don't loop
         *      over things we already flattened.