]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
make unlang_interpret() take a default action
authorAlan T. DeKok <aland@freeradius.org>
Wed, 25 May 2016 16:17:33 +0000 (12:17 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 25 May 2016 16:17:33 +0000 (12:17 -0400)
which is used if there's no CONF_SECTION or compile unlang

src/include/interpreter.h
src/main/interpreter.c
src/main/modules.c

index 67ee433b3ccc9d4ef4789955d71f7e1c45b8f6e8..bdd4b79fefc43f844a5d645e64982a3156da5a15 100644 (file)
@@ -132,7 +132,7 @@ static inline modcallable *mod_xlattocallable(modxlat *p)
        return (modcallable *)p;
 }
 
-rlm_rcode_t unlang_interpret(REQUEST *request, CONF_SECTION *cs, rlm_components_t component);
+rlm_rcode_t unlang_interpret(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action);
 
 #ifdef __cplusplus
 }
index bccdbd5b9235cfa89f34991a8cf910d668fd7afc..a8b488fdd57cb21a098b5098d103bf833804fc60 100644 (file)
@@ -992,40 +992,25 @@ done:
 }
 
 
-static int default_component_results[MOD_COUNT] = {
-       RLM_MODULE_REJECT,      /* AUTH */
-       RLM_MODULE_NOTFOUND,    /* AUTZ */
-       RLM_MODULE_NOOP,        /* PREACCT */
-       RLM_MODULE_NOOP,        /* ACCT */
-       RLM_MODULE_FAIL,        /* SESS */
-       RLM_MODULE_NOOP,        /* PRE_PROXY */
-       RLM_MODULE_NOOP,        /* POST_PROXY */
-       RLM_MODULE_NOOP         /* POST_AUTH */
-#ifdef WITH_COA
-       ,
-       RLM_MODULE_NOOP,        /* RECV_COA_TYPE */
-       RLM_MODULE_NOOP         /* SEND_COA_TYPE */
-#endif
-};
-
-
 /** Call a module, iteratively, with a local stack, rather than recursively
  *
  * What did Paul Graham say about Lisp...?
  */
-rlm_rcode_t unlang_interpret(REQUEST *request, CONF_SECTION *cs, rlm_components_t component)
+rlm_rcode_t unlang_interpret(REQUEST *request, CONF_SECTION *cs, rlm_rcode_t action)
 {
        int priority;
        rlm_rcode_t result;
        modcallable *c;
        unlang_stack_t stack;
 
+       if (!cs) return action;
+
        c = cf_data_find(cs, "unlang");
-       if (!c) return default_component_results[component];
+       if (!c) return action;
 
        memset(&stack, 0, sizeof(stack));
 
-       result = default_component_results[component];
+       result = action;
        priority = 0;
 
        unlang_push(&stack, c, result, true);
index 9d046bc04f4e7bd396ae27e90421fc42aa2b4feb..fa3edf71df496d659afa82b4f5c049d59edffb99 100644 (file)
@@ -1828,6 +1828,23 @@ int modules_init(CONF_SECTION *root)
 }
 
 
+static int default_component_results[MOD_COUNT] = {
+       RLM_MODULE_REJECT,      /* AUTH */
+       RLM_MODULE_NOTFOUND,    /* AUTZ */
+       RLM_MODULE_NOOP,        /* PREACCT */
+       RLM_MODULE_NOOP,        /* ACCT */
+       RLM_MODULE_FAIL,        /* SESS */
+       RLM_MODULE_NOOP,        /* PRE_PROXY */
+       RLM_MODULE_NOOP,        /* POST_PROXY */
+       RLM_MODULE_NOOP         /* POST_AUTH */
+#ifdef WITH_COA
+       ,
+       RLM_MODULE_NOOP,        /* RECV_COA_TYPE */
+       RLM_MODULE_NOOP         /* SEND_COA_TYPE */
+#endif
+};
+
+
 static rlm_rcode_t indexed_modcall(rlm_components_t comp, int idx, REQUEST *request)
 {
        rlm_rcode_t rcode;
@@ -1848,9 +1865,10 @@ static rlm_rcode_t indexed_modcall(rlm_components_t comp, int idx, REQUEST *requ
 
        cs = cf_section_sub_find(request->server_cs, section_type_value[comp].section);
        if (!cs) {
-               RDEBUG2("Empty %s section in virtual server \"%s\".  Using default return values.",
-                       section_type_value[comp].section, request->server);
-               goto call_unlang;
+               RDEBUG2("Empty %s section in virtual server \"%s\".  Using default return value %s.",
+                       section_type_value[comp].section, request->server,
+                       fr_int2str(mod_rcode_table, default_component_results[comp], "<invalid>"));
+               return default_component_results[comp];
        }
 
        /*
@@ -1887,14 +1905,13 @@ static rlm_rcode_t indexed_modcall(rlm_components_t comp, int idx, REQUEST *requ
         *      Cache and restore these, as they're re-set when
         *      looping back from inside a module like eap-gtc.
         */
-call_unlang:
        module = request->module;
        component = request->component;
 
        request->module = NULL;
        request->component = section_type_value[comp].section;
 
-       rcode = unlang_interpret(request, cs, comp);
+       rcode = unlang_interpret(request, cs, default_component_results[comp]);
 
        request->component = component;
        request->module = module;