/** Verify that a map in the cache section makes sense * */ static int cache_verify(vp_map_t *map, void *ctx) { if (modcall_fixup_update(map, ctx) < 0) return -1; if ((map->lhs->type != TMPL_TYPE_ATTR) && (map->lhs->type != TMPL_TYPE_LIST)) { cf_log_err(map->ci, "Destination must be an attribute ref or a list"); return -1; } return 0; }
/** Verify that a map in the cache section makes sense * */ static int cache_verify(value_pair_map_t *map, UNUSED void *ctx) { if (modcall_fixup_update(map, ctx) < 0) return -1; if ((map->lhs->type != TMPL_TYPE_ATTR) && (map->lhs->type != TMPL_TYPE_LIST)) { cf_log_err(map->ci, "Left operand must be an attribute ref or a list"); return -1; } switch (map->rhs->type) { case TMPL_TYPE_EXEC: cf_log_err(map->ci, "Exec values are not allowed"); return -1; /* * Only =, :=, += and -= operators are supported for * cache entries. */ case TMPL_TYPE_LITERAL: case TMPL_TYPE_XLAT: case TMPL_TYPE_ATTR: switch (map->op) { case T_OP_SET: case T_OP_EQ: case T_OP_SUB: case T_OP_ADD: break; default: cf_log_err(map->ci, "Operator \"%s\" not allowed for %s values", fr_int2str(fr_tokens, map->op, "<INVALID>"), fr_int2str(tmpl_types, map->rhs->type, "<INVALID>")); return -1; } default: break; } return 0; }