]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Mark pairs as parsed
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 22 Jun 2017 14:50:46 +0000 (10:50 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 22 Jun 2017 14:53:26 +0000 (10:53 -0400)
src/main/cf_parse.c

index cdfc6efe01c4b41db11525ebac31695ed5843c33..71609fcf71b2c67fb884bb714c69f2608bda6f43 100644 (file)
@@ -605,17 +605,22 @@ static int cf_pair_parse_internal(TALLOC_CTX *ctx, void *out, CONF_SECTION *cs,
                }
 
                for (i = 0; i < count; i++, cp = cf_pair_find_next(cs, cp, rule->name)) {
+                       int ret;
                        cf_parse_t func = cf_pair_parse_value;
 
                        if (rule->func) {
+                               cf_log_debug(cs, "%.*s%s = %s", PAIR_SPACE(cs), parse_spaces,
+                                            cf_pair_attr(cp), cp->value);
                                func = rule->func;
-                               cf_log_debug(cs, "%.*s%s = %s", PAIR_SPACE(cs), parse_spaces, cf_pair_attr(cp), cp->value);
                        }
-                       if (func(ctx, &array[i], cf_pair_to_item(cp), rule) < 0) {
+
+                       ret = func(ctx, &array[i], cf_pair_to_item(cp), rule);
+                       if (ret < 0) {
                                talloc_free(array);
                                talloc_free(dflt_cp);
                                return -1;
                        }
+                       cp->parsed = true;
                }
 
                *(void **)out = array;
@@ -624,8 +629,9 @@ static int cf_pair_parse_internal(TALLOC_CTX *ctx, void *out, CONF_SECTION *cs,
         *      the data pointer directly.
         */
        } else {
-               CONF_PAIR *next;
-               cf_parse_t func = cf_pair_parse_value;
+               CONF_PAIR       *next;
+               int             ret;
+               cf_parse_t      func = cf_pair_parse_value;
 
                cp = cf_pair_find(cs, rule->name);
                if (!cp) {
@@ -648,13 +654,16 @@ static int cf_pair_parse_internal(TALLOC_CTX *ctx, void *out, CONF_SECTION *cs,
                if (deprecated) goto deprecated;
 
                if (rule->func) {
-                       func = rule->func;
                        cf_log_debug(cs, "%.*s%s = %s", PAIR_SPACE(cs), parse_spaces, cf_pair_attr(cp), cp->value);
+                       func = rule->func;
                }
-               if (func(ctx, out, cf_pair_to_item(cp), rule) < 0) {
+
+               ret = func(ctx, out, cf_pair_to_item(cp), rule);
+               if (ret < 0) {
                        talloc_free(dflt_cp);
                        return -1;
                }
+               cp->parsed = true;
        }
 
        /*