]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
parse OIDs numerically if we don't know the name
authorAlan T. DeKok <aland@freeradius.org>
Tue, 29 Jul 2025 17:10:32 +0000 (13:10 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 29 Jul 2025 17:10:32 +0000 (13:10 -0400)
src/lib/util/value.c

index 238f68d76f87029b9776cf284a60f440a630275d..a6410f8f4ea9bbd476ef722bfc502b22dfe2f821 100644 (file)
@@ -5519,23 +5519,22 @@ parse:
 
                fr_value_box_init(dst, dst_type, dst_enumv, false);
 
-               if (!fr_sbuff_adv_past_str_literal(&our_in, "::")) {
-                       fr_strerror_const("Missing '::' for attribute reference");
-                       return -1;
+               if (fr_sbuff_adv_past_str_literal(&our_in, "::")) {
+
+                       slen = fr_dict_attr_by_oid_substr(NULL, &dst->vb_attr, dst_enumv, &our_in, rules->terminals);
+                       if (slen > 0) {
+                               fr_assert(dst->vb_attr != NULL);
+                               FR_SBUFF_SET_RETURN(in, &our_in);
+                       }
                }
 
-               slen = fr_dict_attr_by_oid_substr(NULL, &dst->vb_attr, dst_enumv, &our_in, rules->terminals);
+               slen = fr_dict_attr_unknown_afrom_oid_substr(ctx, &dst->vb_attr, dst_enumv, &our_in, FR_TYPE_OCTETS);
                if (slen <= 0) {
-                       slen = fr_dict_attr_by_oid_substr(NULL, &dst->vb_attr, dst_enumv,
-                                                         &our_in, rules->terminals);
-                       if (slen <= 0) {
-                               fr_strerror_printf("Failed to find the named attribute in %s", dst_enumv->name);
-                               return -2;
-                       }
+                       fr_strerror_printf("Failed to find the named attribute in %s", dst_enumv->name);
+                       return -2;
                }
 
                fr_assert(dst->vb_attr != NULL);
-
                FR_SBUFF_SET_RETURN(in, &our_in);
 
        /*