]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
set key_da before encoding
authorAlan T. DeKok <aland@freeradius.org>
Thu, 26 Nov 2020 20:39:14 +0000 (15:39 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 26 Nov 2020 20:53:03 +0000 (15:53 -0500)
in preparation for auto-filling in the key field

src/lib/util/struct.c

index 34b9ff96998cfe7ee2feebdadb15faa7413a0975..ca957c21be9f0f185e382e6fce3722a69c451b5e 100644 (file)
@@ -573,6 +573,13 @@ ssize_t fr_struct_to_network_dbuff(fr_dbuff_t *dbuff,
                        return -1;
                }
 
+               /*
+                *      Remember key_da before we do any encoding.
+                */
+               if (da_is_key_field(child)) {
+                       key_da = child;
+               }
+
                if (encode_value) {
                        ssize_t len;
                        /*
@@ -592,6 +599,8 @@ ssize_t fr_struct_to_network_dbuff(fr_dbuff_t *dbuff,
                        if ((vp->da->type == FR_TYPE_OCTETS) && vp->da->flags.length) {
                                size_t mylen = vp->da->flags.length;
 
+                               fr_assert(vp->data.enumv == vp->da);
+
                                if (vp->vp_length < mylen) {
                                        FR_DBUFF_IN_MEMCPY_RETURN(&work_dbuff, (uint8_t const *)(vp->vp_ptr),
                                                                  vp->vp_length);
@@ -613,10 +622,6 @@ ssize_t fr_struct_to_network_dbuff(fr_dbuff_t *dbuff,
                        } while (vp != NULL);
                }
 
-               if (da_is_key_field(child)) {
-                       key_da = child;
-               }
-
        next:
                child_num++;
        }