]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix "update" logic
authorAlan T. DeKok <aland@freeradius.org>
Tue, 21 Aug 2012 13:19:11 +0000 (15:19 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 21 Aug 2012 13:20:51 +0000 (15:20 +0200)
update reply {
Foo = Bar
}

update outer.reply {
Reply-Message := "%{reply:Foo}"
}

The *expansion* should be done in the context of the current request.
The *insertion* should be done in the context of the "update X" name.

src/main/evaluate.c

index 9b48ba90ce72b8ea1632045d6511d9ef76fcfe7b..99fa7a0f9916c5db3f73be4ac7802b71f60766c0 100644 (file)
@@ -1122,18 +1122,18 @@ struct conf_pair {
 int radius_update_attrlist(REQUEST *request, CONF_SECTION *cs,
                           VALUE_PAIR *input_vps, const char *name)
 {
+       int list;
        CONF_ITEM *ci;
        VALUE_PAIR *newlist, *vp;
        VALUE_PAIR **output_vps;
-       
-       int list;
+       REQUEST *update_request = request;
 
        if (!request || !cs) return RLM_MODULE_INVALID;
 
        /* 
         *      Qualifiers not valid for this request
         */
-       if(!radius_ref_request(&request, &name)){
+       if(!radius_ref_request(&update_request, &name)){
                RDEBUG("WARNING: List name refers to outer request"
                       " but not in a tunnel.");
                return RLM_MODULE_NOOP; 
@@ -1145,11 +1145,11 @@ int radius_update_attrlist(REQUEST *request, CONF_SECTION *cs,
         *      Bad list name name
         */
        if (list == PAIR_LIST_UNKNOWN) {
-               RDEBUG("ERROR: Invalid list name");
+               RDEBUG("ERROR: Invalid list name '%s'", name);
                return RLM_MODULE_INVALID;
        }
        
-       output_vps = radius_list(request, list);
+       output_vps = radius_list(update_request, list);
        
        rad_assert(output_vps);
 
@@ -1208,7 +1208,7 @@ int radius_update_attrlist(REQUEST *request, CONF_SECTION *cs,
                vp = vp->next;
        }
 
-       radius_pairmove(request, output_vps, newlist);
+       radius_pairmove(update_request, output_vps, newlist);
 
        return RLM_MODULE_UPDATED;
 }