]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
be a bit more forgiving around registering xlats
authorAlan T. DeKok <aland@freeradius.org>
Tue, 9 Nov 2021 20:35:55 +0000 (15:35 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 9 Nov 2021 20:35:55 +0000 (15:35 -0500)
for module instances like "foo { ... }" versus "foo bar { ... }".
if the xlat is already registered, don't do anything.  If it isn't
registered, then register it

src/modules/rlm_client/rlm_client.c
src/modules/rlm_dict/rlm_dict.c
src/modules/rlm_json/rlm_json.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_unpack/rlm_unpack.c
src/modules/rlm_yubikey/rlm_yubikey.c

index 1fd00e54a3c4f2ef2bfe208da4d757a1afd9bc95..b18443cd395215d67eb9d952fa08acff62fd21b9 100644 (file)
@@ -358,9 +358,12 @@ static unlang_action_t CC_HINT(nonnull) mod_authorize(rlm_rcode_t *p_result, UNU
  *     that must be referenced in later calls, store a handle to it
  *     in *instance otherwise put a null pointer there.
  */
-static int mod_bootstrap(void *instance, UNUSED CONF_SECTION *conf)
+static int mod_bootstrap(void *instance, CONF_SECTION *conf)
 {
        xlat_t  *xlat;
+
+       if (cf_section_name2(conf)) return 0;
+
        xlat = xlat_register(instance, "client", xlat_client, false);
        xlat_func_args(xlat, xlat_client_args);
        map_proc_register(instance, "client", map_proc_client, NULL, 0);
index 80688553974f8fda84773e3668186cbf6962fb16..abe7e0cb9eeec0ebe4acc8d6c0df6934e44913e7 100644 (file)
@@ -225,9 +225,15 @@ static xlat_action_t xlat_attr_num(TALLOC_CTX *ctx, fr_dcursor_t *out, request_t
  *     that must be referenced in later calls, store a handle to it
  *     in *instance otherwise put a null pointer there.
  */
-static int mod_bootstrap(void *instance, UNUSED CONF_SECTION *conf)
+static int mod_bootstrap(void *instance, CONF_SECTION *conf)
 {
        xlat_t  *xlat;
+
+       /*
+        *      Only register these xlats for the first instance of the dictionary module.
+        */
+       if (cf_section_name2(conf) != NULL) return 0;
+
        xlat = xlat_register(instance, "attr_by_num", xlat_dict_attr_by_num, false);
        xlat_func_args(xlat, xlat_dict_attr_by_num_args);
        xlat = xlat_register(instance, "attr_by_oid", xlat_dict_attr_by_oid, false);
index 6254e6fbbe0ed7e76e6336452bf746472e413ed3..9562153ab4a44a097f8c087f71827c36763873dc 100644 (file)
@@ -561,9 +561,9 @@ static int mod_bootstrap(void *instance, CONF_SECTION *conf)
        if (!inst->name) inst->name = cf_section_name1(conf);
 
        xlat = xlat_register(instance, "jsonquote", json_quote_xlat, false);
-       xlat_func_mono(xlat, &json_quote_xlat_arg);
+       if (xlat) xlat_func_mono(xlat, &json_quote_xlat_arg);
        xlat = xlat_register(instance, "jpathvalidate", jpath_validate_xlat, false);
-       xlat_func_mono(xlat, &jpath_validate_xlat_arg);
+       if (xlat) xlat_func_mono(xlat, &jpath_validate_xlat_arg);
 
        name = talloc_asprintf(inst, "%s_encode", inst->name);
        xlat = xlat_register(instance, name, json_encode_xlat, false);
index 42cbd667b7c5f31aa5ddafd698bfc1dfc1aefab7..0a9c5096a4c36ba5156fbb0d8140cc115a1b6e9f 100644 (file)
@@ -1881,10 +1881,12 @@ static int mod_bootstrap(void *instance, CONF_SECTION *conf)
        xlat = xlat_register(NULL, inst->name, ldap_xlat, false);
        xlat_func_mono(xlat, &ldap_xlat_arg);
        xlat_async_thread_instantiate_set(xlat, mod_xlat_thread_instantiate, ldap_xlat_thread_inst_t, NULL, inst);
+
        xlat = xlat_register(NULL, "ldap_escape", ldap_escape_xlat, false);
-       xlat_func_mono(xlat, &ldap_escape_xlat_arg);
+       if (xlat) xlat_func_mono(xlat, &ldap_escape_xlat_arg);
        xlat = xlat_register(NULL, "ldap_unescape", ldap_unescape_xlat, false);
-       xlat_func_mono(xlat, &ldap_escape_xlat_arg);
+       if (xlat) xlat_func_mono(xlat, &ldap_escape_xlat_arg);
+
        map_proc_register(inst, inst->name, mod_map_proc, ldap_map_verify, 0);
 
        return 0;
index 89a554eb4d6c0fb5328c779bfd5587dcbe5f7de4..992a8cfda7ac8b1353606bab0bf54fdea5b6344f 100644 (file)
@@ -149,10 +149,8 @@ static int mod_bootstrap(UNUSED void *instance, CONF_SECTION *conf)
 {
        xlat_t  *xlat;
 
-       if (cf_section_name2(conf)) return 0;
-
        xlat = xlat_register(NULL, "unpack", unpack_xlat, false);
-       xlat_func_args(xlat, unpack_xlat_args);
+       if (xlat) xlat_func_args(xlat, unpack_xlat_args);
 
        return 0;
 }
index 1fd12eb44395db2b90bbafb11c65fcdef1057972..39e51e795a38e88b89fd6c5af1d2312ce7e49c2d 100644 (file)
@@ -198,10 +198,8 @@ static int mod_bootstrap(void *instance, CONF_SECTION *conf)
        }
 #endif
 
-       if (cf_section_name2(conf)) return 0;
-
        xlat = xlat_register(inst, "modhextohex", modhex_to_hex_xlat, false);
-       xlat_func_mono(xlat, &modhex_to_hex_xlat_arg);
+       if (xlat) xlat_func_mono(xlat, &modhex_to_hex_xlat_arg);
 
        return 0;
 }