]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix copying FR_TYPE_ATTR
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 31 Jul 2025 04:22:36 +0000 (21:22 -0700)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 31 Jul 2025 04:45:25 +0000 (21:45 -0700)
src/lib/util/value.c

index aec7d5d24142565bba5b73842a321c0c71b416d5..ce936f3ecfcdfe80d2abd9deabb5beac7a181015 100644 (file)
@@ -179,6 +179,8 @@ size_t const fr_value_box_field_sizes[] = {
        [FR_TYPE_TIME_DELTA]                    = SIZEOF_MEMBER(fr_value_box_t, datum.time_delta),
        [FR_TYPE_SIZE]                          = SIZEOF_MEMBER(fr_value_box_t, datum.size),
 
+       [FR_TYPE_ATTR]                          = SIZEOF_MEMBER(fr_value_box_t, vb_attr),
+
        [FR_TYPE_VALUE_BOX]                     = sizeof(fr_value_box_t),
 
        [FR_TYPE_MAX]                           = 0     //!< Ensure array covers all types.
@@ -218,6 +220,7 @@ size_t const fr_value_box_offsets[] = {
 
        [FR_TYPE_TIME_DELTA]                    = offsetof(fr_value_box_t, vb_time_delta),
        [FR_TYPE_SIZE]                          = offsetof(fr_value_box_t, vb_size),
+       [FR_TYPE_ATTR]                          = offsetof(fr_value_box_t, vb_attr),
 
        [FR_TYPE_VALUE_BOX]                     = 0,
 
@@ -4160,6 +4163,18 @@ int fr_value_box_copy(TALLOC_CTX *ctx, fr_value_box_t *dst, const fr_value_box_t
        }
                break;
 
+       case FR_TYPE_ATTR:
+               fr_value_box_copy_meta(dst, src);
+
+               /* raw also sets is_unknown */
+               if (src->vb_attr->flags.is_unknown) {
+                       dst->vb_attr = fr_dict_attr_unknown_copy(ctx, src->vb_attr);
+                       if (!dst->vb_attr) return -1;
+                       break;
+               }
+               dst->vb_attr = src->vb_attr;
+               break;
+
        case FR_TYPE_TLV:
        case FR_TYPE_STRUCT:
        case FR_TYPE_VSA: