From: Alan T. DeKok Date: Tue, 24 May 2022 14:18:52 +0000 (-0400) Subject: allow for pruning of xlat walk X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1903ae1fe59be464fc41182b1e1d733a29eec4f4;p=thirdparty%2Ffreeradius-server.git allow for pruning of xlat walk --- diff --git a/src/lib/unlang/xlat_eval.c b/src/lib/unlang/xlat_eval.c index d4abaa9920b..d8410a3a419 100644 --- a/src/lib/unlang/xlat_eval.c +++ b/src/lib/unlang/xlat_eval.c @@ -1719,6 +1719,7 @@ int xlat_eval_walk(xlat_exp_head_t *head, xlat_walker_t walker, xlat_type_t type if (!type || (type & XLAT_FUNC)) { ret = walker(node, uctx); if (ret < 0) return ret; + if (ret > 0) return 0; } break; @@ -1726,6 +1727,7 @@ int xlat_eval_walk(xlat_exp_head_t *head, xlat_walker_t walker, xlat_type_t type if (!type || (type & XLAT_FUNC_UNRESOLVED)) { ret = walker(node, uctx); if (ret < 0) return ret; + if (ret > 0) return 0; } /* @@ -1741,6 +1743,7 @@ int xlat_eval_walk(xlat_exp_head_t *head, xlat_walker_t walker, xlat_type_t type if (!type || (type & XLAT_ALTERNATE)) { ret = walker(node, uctx); if (ret < 0) return ret; + if (ret > 0) return 0; } /* @@ -1760,6 +1763,7 @@ int xlat_eval_walk(xlat_exp_head_t *head, xlat_walker_t walker, xlat_type_t type if (!type || (type & XLAT_GROUP)) { ret = walker(node, uctx); if (ret < 0) return ret; + if (ret > 0) return 0; } /* @@ -1773,6 +1777,7 @@ int xlat_eval_walk(xlat_exp_head_t *head, xlat_walker_t walker, xlat_type_t type if (!type || (type & node->type)) { ret = walker(node, uctx); if (ret < 0) return ret; + if (ret > 0) return 0; } } } diff --git a/src/lib/unlang/xlat_priv.h b/src/lib/unlang/xlat_priv.h index 356e9c371de..06020c690db 100644 --- a/src/lib/unlang/xlat_priv.h +++ b/src/lib/unlang/xlat_priv.h @@ -286,6 +286,7 @@ static inline void xlat_resolve_set(xlat_t *xlat, xlat_resolve_t func) * @param[in] exp being evaluated. * @param[in] uctx passed to xlat_walk. * @return + * - 1 for "prune walk here". * - 0 on success. * - <0 if node evaluation failed. Causes xlat_walk to return the negative integer. */