*
* @see _tmpl_to_atype
*/
-#define tmpl_aexpand_type(_ctx, _out, _type, _request, _vpt, _escape, _escape_ctx) \
- _tmpl_to_atype(_ctx, (void *)(_out), _request, _vpt, _escape, _escape_ctx, _type)
+#define tmpl_aexpand_type(_ctx, _out, _type, _request, _vpt) \
+ _tmpl_to_atype(_ctx, (void *)(_out), _request, _vpt, NULL, NULL, _type)
void tmpl_debug(tmpl_t const *vpt) CC_HINT(nonnull);
* Expand the key to whatever it is. For attributes,
* this usually just means copying the value box.
*/
- slen = tmpl_aexpand_type(request, &key, FR_TYPE_VALUE_BOX, request, inst->key, NULL, NULL);
+ slen = tmpl_aexpand_type(request, &key, FR_TYPE_VALUE_BOX, request, inst->key);
if (slen < 0) {
DEBUG("Failed expanding key '%s'", inst->key->name);
RETURN_MODULE_FAIL;
if (inst->delay) {
if (tmpl_aexpand_type(request, &delay, FR_TYPE_TIME_DELTA,
- request, inst->delay, NULL, NULL) < 0) {
+ request, inst->delay) < 0) {
RPEDEBUG("Failed parsing %s as delay time", inst->delay->name);
RETURN_MODULE_FAIL;
}
+
+ /*
+ * Cap delays. So that no matter what crazy
+ * thing the admin does, it doesn't cause an
+ * issue.
+ */
+ if (fr_time_delta_cmp(delay, fr_time_delta_from_sec(0)) < 0) {
+ RWDEBUG("Delay is too small. Limiting to 0s");
+ delay = fr_time_delta_wrap(0);
+
+ } else if (fr_time_delta_cmp(delay, fr_time_delta_from_sec(30)) > 0) {
+ RWDEBUG("Delay is too large. Limiting to 30s");
+ delay = fr_time_delta_from_sec(30);
+ }
+
} else {
delay = fr_time_delta_wrap(0);
}