]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Keep attr_protocol_encapsulation specific to one gctx
authorAlan T. DeKok <aland@freeradius.org>
Fri, 15 Jul 2022 00:11:26 +0000 (20:11 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 15 Jul 2022 00:11:26 +0000 (20:11 -0400)
src/lib/util/dict_priv.h
src/lib/util/dict_util.c

index 7263029eeb474328500481f84cb4db24b183f1e1..99f3cfd7ebb8d15b08d8cfaad8937da1387d6950 100644 (file)
@@ -137,6 +137,8 @@ struct fr_dict_gctx_s {
         * protocol.
         */
        fr_dict_t               *internal;
+
+       fr_dict_attr_t const    *attr_protocol_encapsulation;
 };
 
 extern fr_dict_gctx_t *dict_gctx;
index 66ee021c7bf696a2ed8af22a09096e38fe102eda..f6a8b46e3888ef10c5304e0fabb7247d8ed061ca 100644 (file)
@@ -35,8 +35,6 @@ RCSID("$Id$")
 
 fr_dict_gctx_t *dict_gctx = NULL;      //!< Top level structure containing global dictionary state.
 
-static fr_dict_attr_t const *attr_protocol_encapsulation = NULL;
-
 /** Characters allowed in dictionary names
  *
  */
@@ -882,16 +880,16 @@ int dict_protocol_add(fr_dict_t *dict)
                fr_dict_attr_t const *da;
                fr_dict_attr_flags_t flags = { 0 };
 
-               if (!attr_protocol_encapsulation) attr_protocol_encapsulation = fr_dict_attr_by_name(NULL, dict_gctx->internal->root, "Protocol-Encapsulation");
-               fr_assert(attr_protocol_encapsulation != NULL);
+               if (!dict_gctx->attr_protocol_encapsulation) dict_gctx->attr_protocol_encapsulation = fr_dict_attr_by_name(NULL, dict_gctx->internal->root, "Protocol-Encapsulation");
+               fr_assert(dict_gctx->attr_protocol_encapsulation != NULL);
 
-               da = fr_dict_attr_child_by_num(attr_protocol_encapsulation, dict->root->attr);
+               da = fr_dict_attr_child_by_num(dict_gctx->attr_protocol_encapsulation, dict->root->attr);
                if (!da) {
-                       if (fr_dict_attr_add(dict_gctx->internal, attr_protocol_encapsulation, dict->root->name, dict->root->attr, FR_TYPE_GROUP, &flags) < 0) {
+                       if (fr_dict_attr_add(dict_gctx->internal, dict_gctx->attr_protocol_encapsulation, dict->root->name, dict->root->attr, FR_TYPE_GROUP, &flags) < 0) {
                                return -1;
                        }
 
-                       da = fr_dict_attr_child_by_num(attr_protocol_encapsulation, dict->root->attr);
+                       da = fr_dict_attr_child_by_num(dict_gctx->attr_protocol_encapsulation, dict->root->attr);
                        fr_assert(da != NULL);
                }
 
@@ -3228,8 +3226,8 @@ static int _dict_free(fr_dict_t *dict)
        if (dict != dict->gctx->internal) {
                fr_dict_attr_t const *da;
 
-               if (attr_protocol_encapsulation && dict->root) {
-                       da = fr_dict_attr_child_by_num(attr_protocol_encapsulation, dict->root->attr);
+               if (dict->gctx->attr_protocol_encapsulation && dict->root) {
+                       da = fr_dict_attr_child_by_num(dict->gctx->attr_protocol_encapsulation, dict->root->attr);
                        if (da && fr_dict_attr_ref(da)) dict_attr_ref_set(da, NULL);
                }
        }
@@ -3292,7 +3290,7 @@ static int _dict_free(fr_dict_t *dict)
 
        if (dict == dict->gctx->internal) {
                dict->gctx->internal = NULL;
-               attr_protocol_encapsulation = NULL;
+               dict->gctx->attr_protocol_encapsulation = NULL;
        }
 
        return 0;