MEDIUM: config: Remove parsing of req* and rsp* directives
It was announced for the 2.1. Following keywords are now unsupported:
* reqadd, reqallow, reqiallow, reqdel, reqidel, reqdeny, reqideny, reqpass,
reqipass, reqrep, reqirep reqtarpit, reqitarpit
* rspadd, rspdel, rspidel, rspdeny, rspideny, rsprep, rspirep
a fatal error is emitted if one of these keyword is found during the
configuraion parsing.
diff --git a/include/types/global.h b/include/types/global.h
index ec1700b..9ce1a16 100644
--- a/include/types/global.h
+++ b/include/types/global.h
@@ -260,17 +260,6 @@
/* unassigned : 0x00000020 (previously: WARN_CONTO_DEPRECATED) */
#define WARN_FORCECLOSE_DEPRECATED 0x00000040
-#define WARN_REQREP_DEPRECATED 0x00000080
-#define WARN_REQDEL_DEPRECATED 0x00000100
-#define WARN_REQDENY_DEPRECATED 0x00000200
-#define WARN_REQPASS_DEPRECATED 0x00000400
-#define WARN_REQALLOW_DEPRECATED 0x00000800
-#define WARN_REQTARPIT_DEPRECATED 0x00001000
-#define WARN_REQADD_DEPRECATED 0x00002000
-#define WARN_RSPREP_DEPRECATED 0x00004000
-#define WARN_RSPDEL_DEPRECATED 0x00008000
-#define WARN_RSPDENY_DEPRECATED 0x00010000
-#define WARN_RSPADD_DEPRECATED 0x00020000
/* to be used with warned and WARN_* */
static inline int already_warned(unsigned int warning)
diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c
index c2741a4..bb0764d 100644
--- a/src/cfgparse-listen.c
+++ b/src/cfgparse-listen.c
@@ -220,92 +220,6 @@
warnif_misplaced_tcp_sess(proxy, file, line, arg);
}
-/* This function createss a new req* or rsp* rule to the proxy. It compiles the
- * regex and may return the ERR_WARN bit, and error bits such as ERR_ALERT and
- * ERR_FATAL in case of error.
- */
-static int create_cond_regex_rule(const char *file, int line,
- struct proxy *px, int dir, int action, int flags,
- const char *cmd, const char *reg, const char *repl,
- const char **cond_start)
-{
- struct my_regex *preg = NULL;
- char *errmsg = NULL;
- const char *err;
- char *error;
- int ret_code = 0;
- struct acl_cond *cond = NULL;
- int cs;
- int cap;
-
- if (px == &defproxy) {
- ha_alert("parsing [%s:%d] : '%s' not allowed in 'defaults' section.\n", file, line, cmd);
- ret_code |= ERR_ALERT | ERR_FATAL;
- goto err;
- }
-
- if (*reg == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <regex> as an argument.\n", file, line, cmd);
- ret_code |= ERR_ALERT | ERR_FATAL;
- goto err;
- }
-
- if (warnifnotcap(px, PR_CAP_FE | PR_CAP_BE, file, line, cmd, NULL))
- ret_code |= ERR_WARN;
-
- if (cond_start &&
- (strcmp(*cond_start, "if") == 0 || strcmp(*cond_start, "unless") == 0)) {
- if ((cond = build_acl_cond(file, line, &px->acl, px, cond_start, &errmsg)) == NULL) {
- ha_alert("parsing [%s:%d] : error detected while parsing a '%s' condition : %s.\n",
- file, line, cmd, errmsg);
- ret_code |= ERR_ALERT | ERR_FATAL;
- goto err;
- }
- }
- else if (cond_start && **cond_start) {
- ha_alert("parsing [%s:%d] : '%s' : Expecting nothing, 'if', or 'unless', got '%s'.\n",
- file, line, cmd, *cond_start);
- ret_code |= ERR_ALERT | ERR_FATAL;
- goto err;
- }
-
- ret_code |= warnif_cond_conflicts(cond,
- (dir == SMP_OPT_DIR_REQ) ?
- ((px->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR) :
- ((px->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR),
- file, line);
-
- cs = !(flags & REG_ICASE);
- cap = !(flags & REG_NOSUB);
- error = NULL;
- if (!(preg = regex_comp(reg, cs, cap, &error))) {
- ha_alert("parsing [%s:%d] : '%s' : regular expression '%s' : %s\n", file, line, cmd, reg, error);
- free(error);
- ret_code = ERR_ALERT | ERR_FATAL;
- goto err;
- }
-
- err = chain_regex((dir == SMP_OPT_DIR_REQ) ? &px->req_exp : &px->rsp_exp,
- preg, action, repl ? strdup(repl) : NULL, cond);
- if (repl && err) {
- ha_alert("parsing [%s:%d] : '%s' : invalid character or unterminated sequence in replacement string near '%c'.\n",
- file, line, cmd, *err);
- ret_code |= ERR_ALERT | ERR_FATAL;
- goto err_free;
- }
-
- if (dir == SMP_OPT_DIR_REQ && warnif_misplaced_reqxxx(px, file, line, cmd))
- ret_code |= ERR_WARN;
-
- return ret_code;
-
- err_free:
- regex_free(preg);
- err:
- free(errmsg);
- return ret_code;
-}
-
int cfg_parse_listen(const char *file, int linenum, char **args, int kwm)
{
static struct proxy *curproxy = NULL;
@@ -3832,299 +3746,123 @@
goto out;
}
else if (!strcmp(args[0], "cliexp") || !strcmp(args[0], "reqrep")) { /* replace request header from a regex */
- if (!already_warned(WARN_REQREP_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request replace-uri' and 'http-request replace-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- if (*(args[2]) == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <search> and <replace> as arguments.\n",
- file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_REPLACE, 0,
- args[0], args[1], args[2], (const char **)args+3);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request replace-uri' and 'http-request replace-header' instead.\n",
+ file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqdel")) { /* delete request header from a regex */
- if (!already_warned(WARN_REQDEL_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request del-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_REMOVE, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request del-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqdeny")) { /* deny a request if a header matches this regex */
- if (!already_warned(WARN_REQDENY_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request deny' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_DENY, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' not supported anymore since HAProxy 2.1. "
+ "Use 'http-request deny' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqpass")) { /* pass this header without allowing or denying the request */
- if (!already_warned(WARN_REQPASS_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_PASS, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' not supported anymore since HAProxy 2.1.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqallow")) { /* allow a request if a header matches this regex */
- if (!already_warned(WARN_REQALLOW_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request allow' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_ALLOW, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request allow' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqtarpit")) { /* tarpit a request if a header matches this regex */
- if (!already_warned(WARN_REQTARPIT_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request tarpit' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_TARPIT, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request tarpit' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqirep")) { /* replace request header from a regex, ignoring case */
- if (!already_warned(WARN_REQREP_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request replace-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- if (*(args[2]) == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <search> and <replace> as arguments.\n",
- file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_REPLACE, REG_ICASE,
- args[0], args[1], args[2], (const char **)args+3);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request replace-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqidel")) { /* delete request header from a regex ignoring case */
- if (!already_warned(WARN_REQDEL_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request del-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_REMOVE, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request del-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqideny")) { /* deny a request if a header matches this regex ignoring case */
- if (!already_warned(WARN_REQDENY_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request deny' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_DENY, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request deny' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqipass")) { /* pass this header without allowing or denying the request */
- if (!already_warned(WARN_REQPASS_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_PASS, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqiallow")) { /* allow a request if a header matches this regex ignoring case */
- if (!already_warned(WARN_REQALLOW_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request allow' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_ALLOW, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request allow' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqitarpit")) { /* tarpit a request if a header matches this regex ignoring case */
- if (!already_warned(WARN_REQTARPIT_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request tarpit' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_REQ, ACT_TARPIT, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request tarpit' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "reqadd")) { /* add request header */
- struct cond_wordlist *wl;
-
- if (!already_warned(WARN_REQADD_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-request add-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- if (curproxy == &defproxy) {
- ha_alert("parsing [%s:%d] : '%s' not allowed in 'defaults' section.\n", file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
- else if (warnifnotcap(curproxy, PR_CAP_FE | PR_CAP_BE, file, linenum, args[0], NULL))
- err_code |= ERR_WARN;
-
- if (*(args[1]) == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <header> as an argument.\n", file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- if ((strcmp(args[2], "if") == 0 || strcmp(args[2], "unless") == 0)) {
- if ((cond = build_acl_cond(file, linenum, &curproxy->acl, curproxy, (const char **)args+2, &errmsg)) == NULL) {
- ha_alert("parsing [%s:%d] : error detected while parsing a '%s' condition : %s.\n",
- file, linenum, args[0], errmsg);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
- err_code |= warnif_cond_conflicts(cond,
- (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
- file, linenum);
- }
- else if (*args[2]) {
- ha_alert("parsing [%s:%d] : '%s' : Expecting nothing, 'if', or 'unless', got '%s'.\n",
- file, linenum, args[0], args[2]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- wl = calloc(1, sizeof(*wl));
- wl->cond = cond;
- wl->s = strdup(args[1]);
- LIST_ADDQ(&curproxy->req_add, &wl->list);
- warnif_misplaced_reqadd(curproxy, file, linenum, args[0]);
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-request add-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "srvexp") || !strcmp(args[0], "rsprep")) { /* replace response header from a regex */
- if (!already_warned(WARN_RSPREP_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response replace-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- if (*(args[2]) == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <search> and <replace> as arguments.\n",
- file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_RES, ACT_REPLACE, 0,
- args[0], args[1], args[2], (const char **)args+3);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-response replace-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "rspdel")) { /* delete response header from a regex */
- if (!already_warned(WARN_RSPDEL_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response del-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_RES, ACT_REMOVE, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-response del-header' .\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "rspdeny")) { /* block response header from a regex */
- if (!already_warned(WARN_RSPDENY_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response deny' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_RES, ACT_DENY, 0,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-response deny' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "rspirep")) { /* replace response header from a regex ignoring case */
- if (!already_warned(WARN_RSPREP_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response replace-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- if (*(args[2]) == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <search> and <replace> as arguments.\n",
- file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_RES, ACT_REPLACE, REG_ICASE,
- args[0], args[1], args[2], (const char **)args+3);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore sionce HAProxy 2.1. "
+ "Use 'http-response replace-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "rspidel")) { /* delete response header from a regex ignoring case */
- if (!already_warned(WARN_RSPDEL_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response del-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_RES, ACT_REMOVE, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-response del-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "rspideny")) { /* block response header from a regex ignoring case */
- if (!already_warned(WARN_RSPDENY_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response deny' and will be removed in next version.\n", file, linenum, args[0]);
-
- err_code |= create_cond_regex_rule(file, linenum, curproxy,
- SMP_OPT_DIR_RES, ACT_DENY, REG_ICASE,
- args[0], args[1], NULL, (const char **)args+2);
- if (err_code & ERR_FATAL)
- goto out;
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-response deny' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "rspadd")) { /* add response header */
- struct cond_wordlist *wl;
-
- if (!already_warned(WARN_RSPADD_DEPRECATED))
- ha_warning("parsing [%s:%d] : The '%s' directive is deprecated in favor of 'http-response add-header' and will be removed in next version.\n", file, linenum, args[0]);
-
- if (curproxy == &defproxy) {
- ha_alert("parsing [%s:%d] : '%s' not allowed in 'defaults' section.\n", file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
- else if (warnifnotcap(curproxy, PR_CAP_FE | PR_CAP_BE, file, linenum, args[0], NULL))
- err_code |= ERR_WARN;
-
- if (*(args[1]) == 0) {
- ha_alert("parsing [%s:%d] : '%s' expects <header> as an argument.\n", file, linenum, args[0]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- if ((strcmp(args[2], "if") == 0 || strcmp(args[2], "unless") == 0)) {
- if ((cond = build_acl_cond(file, linenum, &curproxy->acl, curproxy, (const char **)args+2, &errmsg)) == NULL) {
- ha_alert("parsing [%s:%d] : error detected while parsing a '%s' condition : %s.\n",
- file, linenum, args[0], errmsg);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
- err_code |= warnif_cond_conflicts(cond,
- (curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR,
- file, linenum);
- }
- else if (*args[2]) {
- ha_alert("parsing [%s:%d] : '%s' : Expecting nothing, 'if', or 'unless', got '%s'.\n",
- file, linenum, args[0], args[2]);
- err_code |= ERR_ALERT | ERR_FATAL;
- goto out;
- }
-
- wl = calloc(1, sizeof(*wl));
- wl->cond = cond;
- wl->s = strdup(args[1]);
- LIST_ADDQ(&curproxy->rsp_add, &wl->list);
+ ha_alert("parsing [%s:%d] : The '%s' directive is not supported anymore since HAProxy 2.1. "
+ "Use 'http-response add-header' instead.\n", file, linenum, args[0]);
+ err_code |= ERR_ALERT | ERR_FATAL;
+ goto out;
}
else if (!strcmp(args[0], "errorloc") ||
!strcmp(args[0], "errorloc302") ||