]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Move non instance-specific rlm_json xlats to mod_load
authorNick Porter <nick@portercomputing.co.uk>
Fri, 19 May 2023 15:31:51 +0000 (16:31 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 19 May 2023 18:35:45 +0000 (14:35 -0400)
src/modules/rlm_json/rlm_json.c

index 93772b681f4fbebbd33f97376d3e1d0a03dbd070..eac3de93d905196aca8439ff05792515767afa78 100644 (file)
@@ -531,11 +531,6 @@ static int mod_bootstrap(module_inst_ctx_t const *mctx)
        char                    *name;
        fr_json_format_t        *format = inst->format;
 
-       xlat = xlat_func_register_module(inst, mctx, "jsonquote", json_quote_xlat, FR_TYPE_STRING);
-       if (xlat) xlat_func_mono_set(xlat, json_quote_xlat_arg);
-       xlat = xlat_func_register_module(inst, mctx, "jpathvalidate", jpath_validate_xlat, FR_TYPE_STRING);
-       if (xlat) xlat_func_mono_set(xlat, jpath_validate_xlat_arg);
-
        name = talloc_asprintf(inst, "%s_encode", mctx->inst->name);
        xlat = xlat_func_register_module(inst, mctx, name, json_encode_xlat, FR_TYPE_STRING);
        xlat_func_mono_set(xlat, json_encode_xlat_arg);
@@ -559,11 +554,24 @@ static int mod_bootstrap(module_inst_ctx_t const *mctx)
 
 static int mod_load(void)
 {
+       xlat_t  *xlat;
+
        fr_json_version_print();
 
+       if (unlikely(!(xlat = xlat_func_register(NULL, "jsonquote", json_quote_xlat, FR_TYPE_STRING)))) return -1;
+       xlat_func_mono_set(xlat, json_quote_xlat_arg);
+       if (unlikely(!(xlat = xlat_func_register(NULL, "jpathvalidate", jpath_validate_xlat, FR_TYPE_STRING)))) return -1;
+       xlat_func_mono_set(xlat, jpath_validate_xlat_arg);
+
        return 0;
 }
 
+static void mod_unload(void)
+{
+       xlat_func_unregister("jsonquote");
+       xlat_func_unregister("jpathvalidate");
+}
+
 /*
  *     The module name should be the only globally exported symbol.
  *     That is, everything else should be 'static'.
@@ -580,6 +588,7 @@ module_rlm_t rlm_json = {
                .name           = "json",
                .type           = MODULE_TYPE_THREAD_SAFE,
                .onload         = mod_load,
+               .unload         = mod_unload,
                .config         = module_config,
                .inst_size      = sizeof(rlm_json_t),
                .bootstrap      = mod_bootstrap