Remove all Cache control attributes after each rlm_cache call
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 1 Jun 2014 11:20:56 +0000 (12:20 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 1 Jun 2014 18:11:24 +0000 (19:11 +0100)
src/modules/rlm_cache/rlm_cache.c

index bd23546..7a7425c 100644 (file)
@@ -709,6 +709,7 @@ static rlm_rcode_t CC_HINT(nonnull) mod_cache_it(void *instance, REQUEST *reques
 {
        rlm_cache_entry_t *c;
        rlm_cache_t *inst = instance;
+       vp_cursor_t cursor;
        VALUE_PAIR *vp;
        char buffer[1024];
        rlm_rcode_t rcode;
@@ -753,6 +754,22 @@ static rlm_rcode_t CC_HINT(nonnull) mod_cache_it(void *instance, REQUEST *reques
 
 done:
        PTHREAD_MUTEX_UNLOCK(&inst->cache_mutex);
+
+       /*
+        *      Reset control attributes
+        */
+       for (vp = fr_cursor_init(&cursor, &request->config_items);
+            vp;
+            vp = fr_cursor_next(&cursor)) {
+               if (vp->da->vendor == 0) switch (vp->da->attr) {
+               case PW_CACHE_TTL:
+               case PW_CACHE_READ_ONLY:
+               case PW_CACHE_MERGE:
+                       fr_cursor_remove(&cursor);
+                       break;
+               }
+       }
+
        return rcode;
 }