]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
decode extended VSAs as nested
authorAlan T. DeKok <aland@freeradius.org>
Thu, 14 Sep 2023 19:06:08 +0000 (15:06 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 14 Sep 2023 19:08:03 +0000 (15:08 -0400)
src/protocols/radius/decode.c
src/tests/unit/protocols/radius/eapol_key_msg.txt
src/tests/unit/protocols/radius/extended.txt
src/tests/unit/protocols/radius/rfc8045.txt
src/tests/unit/protocols/radius/struct.txt
src/tests/unit/protocols/radius/unit.txt

index 561a2e5475e3ce4d845af8315bab008bbc9fd06f..5769ab032277c18aa82af43ba4e832b09c2ced1e 100644 (file)
@@ -958,6 +958,7 @@ static ssize_t decode_extended(TALLOC_CTX *ctx, fr_pair_list_t *out,
 {
        ssize_t slen;
        fr_dict_attr_t const *child;
+       fr_pair_t       *vp;
 
        /*
         *      They MUST have one byte of Extended-Type.  The
@@ -986,7 +987,9 @@ static ssize_t decode_extended(TALLOC_CTX *ctx, fr_pair_list_t *out,
         *      One byte of type, and N bytes of data.
         */
        if (!flag_long_extended(&da->flags)) {
-               slen = fr_radius_decode_pair_value(ctx, out, child, data + 3, data[1] - 3, packet_ctx);
+               if (fr_pair_find_or_append_by_da(ctx, &vp, out, da) < 0) return PAIR_DECODE_OOM;
+
+               slen = fr_radius_decode_pair_value(vp, &vp->vp_group, child, data + 3, data[1] - 3, packet_ctx);
                fr_dict_unknown_free(&child);
                if (slen < 0 ) return slen;
                return 3 + slen;
@@ -1005,8 +1008,10 @@ static ssize_t decode_extended(TALLOC_CTX *ctx, fr_pair_list_t *out,
                return 4;
        }
 
+       if (fr_pair_find_or_append_by_da(ctx, &vp, out, da) < 0) return PAIR_DECODE_OOM;
+
        if ((data[3] & 0x80) == 0) {
-               slen = fr_radius_decode_pair_value(ctx, out, child, data + 4, data[1] - 4, packet_ctx);
+               slen = fr_radius_decode_pair_value(vp, &vp->vp_group, child, data + 4, data[1] - 4, packet_ctx);
                fr_dict_unknown_free(&child);
                if (slen < 0 ) return slen;
                return 4 + slen;
@@ -1015,7 +1020,7 @@ static ssize_t decode_extended(TALLOC_CTX *ctx, fr_pair_list_t *out,
        /*
         *      Concatenate all of the fragments together, and decode the resulting thing.
         */
-       slen = decode_extended_fragments(ctx, out, child, data + 2, data[1] - 2, packet_ctx);
+       slen = decode_extended_fragments(vp, &vp->vp_group, child, data + 2, data[1] - 2, packet_ctx);
        fr_dict_unknown_free(&child);
        if (slen < 0) return slen;
        return 2 + slen;
@@ -1364,9 +1369,9 @@ static ssize_t  CC_HINT(nonnull) decode_vsa(TALLOC_CTX *ctx, fr_pair_list_t *out
         *      Vendor-Specific.  If so, loop over them all.
         */
 create_attrs:
-       if (fr_pair_find_or_append_by_da(ctx, &vsa, out, parent) < 0) return -1;
+       if (fr_pair_find_or_append_by_da(ctx, &vsa, out, parent) < 0) return  PAIR_DECODE_OOM;
 
-       if (fr_pair_find_or_append_by_da(vsa, &vendor, &vsa->vp_group, vendor_da) < 0) return -1;
+       if (fr_pair_find_or_append_by_da(vsa, &vendor, &vsa->vp_group, vendor_da) < 0) return  PAIR_DECODE_OOM;
 
        data += 4;
        attr_len -= 4;
@@ -1453,7 +1458,6 @@ ssize_t fr_radius_decode_pair_value(TALLOC_CTX *ctx, fr_pair_list_t *out,
        int8_t                  tag = 0;
        size_t                  data_len;
        ssize_t                 ret;
-       uint32_t                vendor;
        fr_dict_attr_t const    *child;
        fr_pair_t               *vp = NULL;
        uint8_t const           *p = data;
@@ -1688,36 +1692,38 @@ ssize_t fr_radius_decode_pair_value(TALLOC_CTX *ctx, fr_pair_list_t *out,
                        return ret;
 
                } else {
-                       fr_dict_attr_t const    *vendor_child;
+                       fr_dict_attr_t const    *vendor_da;
+                       fr_pair_t               *vsa, *vendor;
+                       uint32_t                vendor_pen;
 
                        if (data_len < 6) goto raw; /* vid, vtype, value */
 
-                       memcpy(&vendor, p, 4);
-                       vendor = ntohl(vendor);
+                       memcpy(&vendor_pen, p, 4);
+                       vendor_pen = ntohl(vendor_pen);
 
                        /*
                         *      For simplicity in our attribute tree, vendors are
                         *      represented as a subtlv(ish) of an EVS or VSA
                         *      attribute.
                         */
-                       vendor_child = fr_dict_attr_child_by_num(parent, vendor);
-                       if (!vendor_child) {
+                       vendor_da = fr_dict_attr_child_by_num(parent, vendor_pen);
+                       if (!vendor_da) {
                                /*
                                 *      If there's no child, it means the vendor is unknown.  Create a
                                 *      temporary vendor in the packet_ctx.  This will be cleaned up when the
                                 *      decoder exists, which is fine.  Because any unknown attributes which
                                 *      depend on it will copy the entire hierarchy.
                                 */
-                               vendor_child = fr_dict_unknown_vendor_afrom_num(packet_ctx->tmp_ctx, parent, vendor);
-                               if (!vendor_child) return PAIR_DECODE_OOM;
+                               vendor_da = fr_dict_unknown_vendor_afrom_num(packet_ctx->tmp_ctx, parent, vendor_pen);
+                               if (!vendor_da) return PAIR_DECODE_OOM;
                        }
 
-                       child = fr_dict_attr_child_by_num(vendor_child, p[4]);
+                       child = fr_dict_attr_child_by_num(vendor_da, p[4]);
                        if (!child) {
                                /*
                                 *      Vendor exists but child didn't, create an unknown child.
                                 */
-                               child = fr_dict_unknown_attr_afrom_num(packet_ctx->tmp_ctx, vendor_child, p[4]);
+                               child = fr_dict_unknown_attr_afrom_num(packet_ctx->tmp_ctx, vendor_da, p[4]);
                                if (!child) {
                                        fr_strerror_printf_push("decoder failed creating unknown attribute in %s",
                                                                parent->name);
@@ -1729,11 +1735,15 @@ ssize_t fr_radius_decode_pair_value(TALLOC_CTX *ctx, fr_pair_list_t *out,
                                break;
                        }
 
+                       if (fr_pair_find_or_append_by_da(ctx, &vsa, out, parent) < 0) return PAIR_DECODE_OOM;
+
+                       if (fr_pair_find_or_append_by_da(vsa, &vendor, &vsa->vp_group, vendor_da) < 0) return PAIR_DECODE_OOM;
+
                        /*
                         *      Everything was found in the dictionary, we can
                         *      now recurse to decode the value.
                         */
-                       ret = fr_radius_decode_pair_value(ctx, out,
+                       ret = fr_radius_decode_pair_value(vendor, &vendor->vp_group,
                                                          child, p + 5, attr_len - 5,
                                                          packet_ctx);
                        if (ret < 0) goto raw;
index d9ba3639437f1f46b02f07720f2d83b10c4ba655..75d4457c38e0a0c648b321132371f857eea220b8 100644 (file)
@@ -12,19 +12,19 @@ encode-pair Extended-Attribute-5.Extended-Vendor-Specific-5.FreeRADIUS.802_1X-An
 match f5 29 1a 00 00 00 2c 50 01 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
 
 decode-pair -
-match Extended-Attribute-5.Extended-Vendor-Specific-5.FreeRADIUS.802_1X-Anonce = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+match Extended-Attribute-5 = { Extended-Vendor-Specific-5 = { FreeRADIUS = { 802_1X-Anonce = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa } } }
 
 encode-pair Extended-Attribute-5.Extended-Vendor-Specific-5.FreeRADIUS.802_1X-EAPoL-Key-Msg = 0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 match f5 ff 1a 80 00 00 2c 50 02 bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa f5 08 1a 00 aa aa aa aa
 
 decode-pair -
-match Extended-Attribute-5.Extended-Vendor-Specific-5.FreeRADIUS.802_1X-EAPoL-Key-Msg = 0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+match Extended-Attribute-5 = { Extended-Vendor-Specific-5 = { FreeRADIUS = { 802_1X-EAPoL-Key-Msg = 0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa } } }
 
 #
 #  And bad formats.  The Anonce should be 32 octets.
 #
 decode-pair f5 20 1a 00 00 00 2c 50 01 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.FreeRADIUS.802_1X-Anonce = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+match Extended-Attribute-5 = { Extended-Vendor-Specific-5 = { FreeRADIUS = { raw.802_1X-Anonce = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa } } }
 
 count
 match 13
index b5547136df29e5a1763be4959e5fd327457b101a..bb09bef002f04eb9e0291e885f09bddbce4213ad 100644 (file)
@@ -63,7 +63,7 @@ raw 245.1 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 match f5 ff 01 80 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 f5 09 01 00 78 78 78 78 78
 
 decode-pair f5 ff 01 80 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 f5 09 01 00 78 78 78 78 79
-match raw.Extended-Attribute-5.1 = 0x78787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787879
+match Extended-Attribute-5 = { raw.1 = 0x78787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787879 }
 
 #
 #  A VSA which has lots of data
@@ -72,19 +72,18 @@ raw 245.26.1.6 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 match f5 ff 1a 80 00 00 00 01 06 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb f5 17 1a 00 bb bb bb bb bb cc cc cc cc cc cc cc cc cc cc 13 45 67 89
 
 decode-pair f5 ff 1a 80 00 00 00 01 06 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb f5 17 1a 00 bb bb bb bb bb cc cc cc cc cc cc cc cc cc cc 13 45 67 89
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc13456789
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccc13456789 }
 
 # Same as above, but the first attribute doesn't have
 # the "continuation" bit set.
 #
 #  Which means we decode-pair the second attribute as an EVS with vendor-ID of 0xbbbbbbbb
 decode-pair f5 ff 1a 00 00 00 00 01 06 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb f5 17 1a 00 bb bb bb bb bb cc cc cc cc cc cc cc cc cc cc 13 45 67 89
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, raw.Extended-Attribute-5.Extended-Vendor-Specific-5.3149642683.187 = 0xcccccccccccccccccccc13456789
-
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, raw.Extended-Vendor-Specific-5.3149642683.187 = 0xcccccccccccccccccccc13456789 }
 
 # again, but the second one attr is not an extended attr
 decode-pair f5 ff 1a 80 00 00 00 01 06 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb 01 05 62 6f 62
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb, User-Name = "bob"
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5.1.6 = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb }, User-Name = "bob"
 
 # No data means that the attribute is an "invalid attribute"
 decode-pair f5 04 01 00
@@ -95,16 +94,16 @@ decode-pair f5 03 01
 match raw.Extended-Attribute-5 = 0x01
 
 decode-pair f5 09 1a 00 00 00 00 01 06
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5 = 0x0000000106
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5 = 0x0000000106 }
 
 decode-pair f5 0a 1a 00 00 00 00 01 06 01
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.1.6 = 0x01
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5.1.6 = 0x01 }
 
 decode-pair f5 09 1a 80 00 00 00 01 06 f5 05 1a 80 01
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.1.6 = 0x01
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5.1.6 = 0x01 }
 
 decode-pair f5 0a 1a 80 00 00 00 01 06 01 f5 05 1a 80 01
-match raw.Extended-Attribute-5.Extended-Vendor-Specific-5.1.6 = 0x0101
+match Extended-Attribute-5 = { raw.Extended-Vendor-Specific-5.1.6 = 0x0101 }
 
 count
 match 61
index f1e139847fd32b535458c87e31e63d72206734d5..de62094e2bc24fa709a6739c9544a8dd812c6424 100644 (file)
@@ -18,7 +18,7 @@ encode-pair Extended-Attribute-1.IP-Port-Limit-Info.Type = 1, Extended-Attribute
 match f1 0f 05 01 06 00 00 00 01 02 06 00 00 00 02
 
 decode-pair -
-match Extended-Attribute-1.IP-Port-Limit-Info = { Type = 1, Limit = 2 }
+match Extended-Attribute-1 = { IP-Port-Limit-Info = { Type = 1, Limit = 2 } }
 
 #
 #  And for the other attributes
@@ -27,7 +27,7 @@ encode-pair Extended-Attribute-1.IP-Port-Range.Type = 1, Extended-Attribute-1.IP
 match f1 0f 06 01 06 00 00 00 01 02 06 00 00 00 02
 
 decode-pair -
-match Extended-Attribute-1.IP-Port-Range = { Type = 1, Limit = 2 }
+match Extended-Attribute-1 = { IP-Port-Range = { Type = 1, Limit = 2 } }
 
 count
 match 15
index 92c5fc977f119813a29794e5b16357c80b0a450f..24563ff05c23e11a6ec7e646dd7a420d26fbf2b2 100644 (file)
@@ -12,7 +12,7 @@ encode-pair Extended-Attribute-1.Unit-Ext-241-Struct1.Unit-Struct1-Int1 = 1, Ext
 match f1 10 f7 00 00 00 01 00 00 00 02 00 04 66 6f 6f
 
 decode-pair -
-match Extended-Attribute-1.Unit-Ext-241-Struct1.Unit-Struct1-Int1 = 1, Extended-Attribute-1.Unit-Ext-241-Struct1.Unit-Struct1-Int2 = 2, Extended-Attribute-1.Unit-Ext-241-Struct1.Unit-Struct1-Short = 4, Extended-Attribute-1.Unit-Ext-241-Struct1.Unit-Struct1-String = "foo"
+match Extended-Attribute-1 = { Unit-Ext-241-Struct1.Unit-Struct1-Int1 = 1, Unit-Ext-241-Struct1.Unit-Struct1-Int2 = 2, Unit-Ext-241-Struct1.Unit-Struct1-Short = 4, Unit-Ext-241-Struct1.Unit-Struct1-String = "foo" }
 
 pair Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-Int1 = 1, Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-Short = 4, Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-TLV.Unit-Struct2-TLV-Int1 = 6, Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-TLV.Unit-Struct2-TLV-Int2 = 7, Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-TLV.Unit-Struct2-TLV-String = "foo"
 match Extended-Attribute-1 = { Unit-Ext-241-Struct2 = { Unit-Struct2-Int1 = 1, Unit-Struct2-Short = 4, Unit-Struct2-TLV = { Unit-Struct2-TLV-Int1 = 6, Unit-Struct2-TLV-Int2 = 7, Unit-Struct2-TLV-String = "foo" } } }
@@ -32,13 +32,13 @@ encode-pair Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-Int1 = 1, Ext
 match f1 1a f8 00 00 00 01 00 04 01 06 00 00 00 06 02 06 00 00 00 07 03 05 66 6f 6f
 
 decode-pair -
-match Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-Int1 = 1, Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-Short = 4, Extended-Attribute-1.Unit-Ext-241-Struct2.Unit-Struct2-TLV = { Unit-Struct2-TLV-Int1 = 6, Unit-Struct2-TLV-Int2 = 7, Unit-Struct2-TLV-String = "foo" }
+match Extended-Attribute-1 = { Unit-Ext-241-Struct2.Unit-Struct2-Int1 = 1, Unit-Ext-241-Struct2.Unit-Struct2-Short = 4, Unit-Ext-241-Struct2.Unit-Struct2-TLV = { Unit-Struct2-TLV-Int1 = 6, Unit-Struct2-TLV-Int2 = 7, Unit-Struct2-TLV-String = "foo" } }
 
 encode-pair Extended-Attribute-1.Unit-Ext-241-Struct3.Unit-Struct3-Int = 1, Extended-Attribute-1.Unit-Ext-241-Struct3.Unit-Struct3-TLV.Unit-Struct3a.Unit-Struct3a-Ipaddr1 = 127.0.0.1, Extended-Attribute-1.Unit-Ext-241-Struct3.Unit-Struct3-TLV.Unit-Struct3a.Unit-Struct3a-Ipaddr2 = 8.8.8.8
 match f1 11 f9 00 00 00 01 01 0a 7f 00 00 01 08 08 08 08
 
 decode-pair -
-match Extended-Attribute-1.Unit-Ext-241-Struct3.Unit-Struct3-Int = 1, Extended-Attribute-1.Unit-Ext-241-Struct3.Unit-Struct3-TLV = { Unit-Struct3a.Unit-Struct3a-Ipaddr1 = 127.0.0.1, Unit-Struct3a.Unit-Struct3a-Ipaddr2 = 8.8.8.8 }
+match Extended-Attribute-1 = { Unit-Ext-241-Struct3.Unit-Struct3-Int = 1, Unit-Ext-241-Struct3.Unit-Struct3-TLV = { Unit-Struct3a.Unit-Struct3a-Ipaddr1 = 127.0.0.1, Unit-Struct3a.Unit-Struct3a-Ipaddr2 = 8.8.8.8 } }
 
 #
 #  Fixed size struct
@@ -47,25 +47,25 @@ encode-pair Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Ext
 match f1 0d fa 00 00 00 01 00 00 00 02 00 04
 
 decode-pair -
-match Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int2 = 2, Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Short = 4
+match Extended-Attribute-1 = { Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Unit-Ext-241-Struct4.Unit-Struct4-Int2 = 2, Unit-Ext-241-Struct4.Unit-Struct4-Short = 4 }
 
 #
 #  Wrong-sized struct (last field missing), it just decodes what it can.
 #
 decode-pair f1 0b fa 00 00 00 01 00 00 00 02
-match Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int2 = 2
+match Extended-Attribute-1 = { Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Unit-Ext-241-Struct4.Unit-Struct4-Int2 = 2 }
 
 #
 #  Wrong-sized struct (last two fields missing), it just decodes what it can.
 #
 decode-pair f1 07 fa 00 00 00 01
-match Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1
+match Extended-Attribute-1 = { Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1 }
 
 #
 #  Wrong-sized struct (data is too long), we ignore the extra data.
 #
 decode-pair f1 0e fa 00 00 00 01 00 00 00 02 00 04 00
-match Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Int2 = 2, Extended-Attribute-1.Unit-Ext-241-Struct4.Unit-Struct4-Short = 4
+match Extended-Attribute-1 = { Unit-Ext-241-Struct4.Unit-Struct4-Int1 = 1, Unit-Ext-241-Struct4.Unit-Struct4-Int2 = 2, Unit-Ext-241-Struct4.Unit-Struct4-Short = 4 }
 
 decode-pair ff 09 01 00 00 1a 99 05 06
 match Test-Struct.Key-Field = Sub-Struct, Test-Struct.Filler = 6809, Test-Struct.Key-Field.Sub-Struct.Nested-Sub1 = 5, Test-Struct.Key-Field.Sub-Struct.Nested-Sub2 = 6
index 7066de856afc26a172de16da176f9da15e975033..e7463ab30a31a6fe5e40c0368f9e381ee1d7ffa4 100644 (file)
@@ -16,7 +16,7 @@ encode-pair Extended-Attribute-1.Unit-Ext-241-Integer = 6809
 match f1 07 f1 00 00 1a 99
 
 decode-pair -
-match Extended-Attribute-1.Unit-Ext-241-Integer = 6809
+match Extended-Attribute-1 = { Unit-Ext-241-Integer = 6809 }
 
 #
 #  The server *reads* Alive, but *canonicalizes* it to Interim-Update
@@ -37,7 +37,7 @@ encode-pair Extended-Attribute-2.Extended-Vendor-Specific-2.FreeRADIUS.Unit-EVS-
 match f2 0c 1a 00 00 2c 50 01 00 00 1a 99
 
 decode-pair -
-match Extended-Attribute-2.Extended-Vendor-Specific-2.FreeRADIUS.Unit-EVS-Integer = 6809
+match Extended-Attribute-2 = { Extended-Vendor-Specific-2 = { FreeRADIUS = { Unit-EVS-Integer = 6809 } } }
 
 #
 #  This is ambiguous, so we do something.  Anything...
@@ -49,7 +49,7 @@ encode-pair Extended-Attribute-1.Unit-Ext-241-TLV.Unit-TLV-Integer = 1, Extended
 match f1 0f f3 01 06 00 00 00 01 01 06 00 00 00 02
 
 decode-pair -
-match Extended-Attribute-1.Unit-Ext-241-TLV = { Unit-TLV-Integer = 1, Unit-TLV-Integer = 2 }
+match Extended-Attribute-1 = { Unit-Ext-241-TLV = { Unit-TLV-Integer = 1, Unit-TLV-Integer = 2 } }
 
 #
 #  And "long extended" EVS
@@ -58,7 +58,7 @@ encode-pair Extended-Attribute-6.Extended-Vendor-Specific-6.FreeRADIUS.Unit-EVS-
 match f6 0d 1a 00 00 00 2c 50 01 00 00 00 01 f6 0d 1a 00 00 00 2c 50 01 00 00 00 02
 
 decode-pair -
-match Extended-Attribute-6.Extended-Vendor-Specific-6.FreeRADIUS.Unit-EVS-6-Integer = 1, Extended-Attribute-6.Extended-Vendor-Specific-6.FreeRADIUS.Unit-EVS-6-Integer = 2
+match Extended-Attribute-6 = { Extended-Vendor-Specific-6 = { FreeRADIUS = { Unit-EVS-6-Integer = 1, Unit-EVS-6-Integer = 2 } } }
 
 encode-pair Event-Timestamp := 864000
 match 37 06 00 0d 2f 00