diff --git a/src/vars.c b/src/vars.c index d533b180a..6fa894b9a 100644 --- a/src/vars.c +++ b/src/vars.c @@ -780,14 +780,30 @@ static enum act_parse_ret parse_store(const char **args, int *arg, struct proxy return ACT_RET_PRS_ERR; switch (rule->from) { - case ACT_F_TCP_REQ_SES: flags = SMP_VAL_FE_SES_ACC; break; - case ACT_F_TCP_REQ_CNT: flags = SMP_VAL_FE_REQ_CNT; break; - case ACT_F_TCP_RES_CNT: flags = SMP_VAL_BE_RES_CNT; break; - case ACT_F_HTTP_REQ: flags = SMP_VAL_FE_HRQ_HDR; break; - case ACT_F_HTTP_RES: flags = SMP_VAL_BE_HRS_HDR; break; - case ACT_F_TCP_CHK: flags = SMP_VAL_BE_CHK_RUL; break; - case ACT_F_CFG_PARSER: flags = SMP_VAL_CFG_PARSER; break; - case ACT_F_CLI_PARSER: flags = SMP_VAL_CLI_PARSER; break; + case ACT_F_TCP_REQ_SES: + flags = SMP_VAL_FE_SES_ACC; + break; + case ACT_F_TCP_REQ_CNT: + flags = (px->cap & PR_CAP_FE) ? SMP_VAL_FE_REQ_CNT : SMP_VAL_BE_REQ_CNT; + break; + case ACT_F_TCP_RES_CNT: + flags = (px->cap & PR_CAP_FE) ? SMP_VAL_FE_RES_CNT : SMP_VAL_BE_RES_CNT; + break; + case ACT_F_HTTP_REQ: + flags = (px->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR; + break; + case ACT_F_HTTP_RES: + flags = (px->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR; + break; + case ACT_F_TCP_CHK: + flags = SMP_VAL_BE_CHK_RUL; + break; + case ACT_F_CFG_PARSER: + flags = SMP_VAL_CFG_PARSER; + break; + case ACT_F_CLI_PARSER: + flags = SMP_VAL_CLI_PARSER; + break; default: memprintf(err, "internal error, unexpected rule->from=%d, please report this bug!",