CLEANUP: cfgparse: cascade the warnif_misplaced_* rules
There are 8 functions each repeating what another does and adding one
extra test. We used to have some copy-paste issues in the past due to
this. Instead we now make them simply rely on the previous one and add
the final test. It's much better and much safer. The functions could
be moved to inlines but they're used at a few other locations only,
it didn't make much sense in the end.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 4fc63bd..35ae7b6 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -477,87 +477,60 @@
return 0;
}
-/* report a warning if a "tcp request connection" rule is dangerously placed */
-int warnif_misplaced_tcp_conn(struct proxy *proxy, const char *file, int line, const char *arg)
-{
- return warnif_rule_after_tcp_sess(proxy, file, line, arg) ||
- warnif_rule_after_tcp_cont(proxy, file, line, arg) ||
- warnif_rule_after_block(proxy, file, line, arg) ||
- warnif_rule_after_http_req(proxy, file, line, arg) ||
- warnif_rule_after_reqxxx(proxy, file, line, arg) ||
- warnif_rule_after_reqadd(proxy, file, line, arg) ||
- warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
-}
-
-int warnif_misplaced_tcp_sess(struct proxy *proxy, const char *file, int line, const char *arg)
+/* report a warning if a redirect rule is dangerously placed */
+int warnif_misplaced_redirect(struct proxy *proxy, const char *file, int line, const char *arg)
{
- return warnif_rule_after_tcp_cont(proxy, file, line, arg) ||
- warnif_rule_after_block(proxy, file, line, arg) ||
- warnif_rule_after_http_req(proxy, file, line, arg) ||
- warnif_rule_after_reqxxx(proxy, file, line, arg) ||
- warnif_rule_after_reqadd(proxy, file, line, arg) ||
- warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
+ return warnif_rule_after_use_backend(proxy, file, line, arg) ||
warnif_rule_after_use_server(proxy, file, line, arg);
}
-/* report a warning if a "tcp request content" rule is dangerously placed */
-int warnif_misplaced_tcp_cont(struct proxy *proxy, const char *file, int line, const char *arg)
+/* report a warning if a reqadd rule is dangerously placed */
+int warnif_misplaced_reqadd(struct proxy *proxy, const char *file, int line, const char *arg)
{
- return warnif_rule_after_block(proxy, file, line, arg) ||
- warnif_rule_after_http_req(proxy, file, line, arg) ||
- warnif_rule_after_reqxxx(proxy, file, line, arg) ||
- warnif_rule_after_reqadd(proxy, file, line, arg) ||
- warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
+ return warnif_rule_after_redirect(proxy, file, line, arg) ||
+ warnif_misplaced_redirect(proxy, file, line, arg);
}
-/* report a warning if a block rule is dangerously placed */
-int warnif_misplaced_block(struct proxy *proxy, const char *file, int line, const char *arg)
+/* report a warning if a reqxxx rule is dangerously placed */
+int warnif_misplaced_reqxxx(struct proxy *proxy, const char *file, int line, const char *arg)
{
- return warnif_rule_after_http_req(proxy, file, line, arg) ||
- warnif_rule_after_reqxxx(proxy, file, line, arg) ||
- warnif_rule_after_reqadd(proxy, file, line, arg) ||
- warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
+ return warnif_rule_after_reqadd(proxy, file, line, arg) ||
+ warnif_misplaced_reqadd(proxy, file, line, arg);
}
/* report a warning if an http-request rule is dangerously placed */
int warnif_misplaced_http_req(struct proxy *proxy, const char *file, int line, const char *arg)
{
return warnif_rule_after_reqxxx(proxy, file, line, arg) ||
- warnif_rule_after_reqadd(proxy, file, line, arg) ||
- warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
+ warnif_misplaced_reqxxx(proxy, file, line, arg);;
}
-/* report a warning if a reqxxx rule is dangerously placed */
-int warnif_misplaced_reqxxx(struct proxy *proxy, const char *file, int line, const char *arg)
+/* report a warning if a block rule is dangerously placed */
+int warnif_misplaced_block(struct proxy *proxy, const char *file, int line, const char *arg)
{
- return warnif_rule_after_reqadd(proxy, file, line, arg) ||
- warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
+ return warnif_rule_after_http_req(proxy, file, line, arg) ||
+ warnif_misplaced_http_req(proxy, file, line, arg);
}
-/* report a warning if a reqadd rule is dangerously placed */
-int warnif_misplaced_reqadd(struct proxy *proxy, const char *file, int line, const char *arg)
+/* report a warning if a "tcp request content" rule is dangerously placed */
+int warnif_misplaced_tcp_cont(struct proxy *proxy, const char *file, int line, const char *arg)
{
- return warnif_rule_after_redirect(proxy, file, line, arg) ||
- warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
+ return warnif_rule_after_block(proxy, file, line, arg) ||
+ warnif_misplaced_block(proxy, file, line, arg);
}
-/* report a warning if a redirect rule is dangerously placed */
-int warnif_misplaced_redirect(struct proxy *proxy, const char *file, int line, const char *arg)
+/* report a warning if a "tcp request session" rule is dangerously placed */
+int warnif_misplaced_tcp_sess(struct proxy *proxy, const char *file, int line, const char *arg)
{
- return warnif_rule_after_use_backend(proxy, file, line, arg) ||
- warnif_rule_after_use_server(proxy, file, line, arg);
+ return warnif_rule_after_tcp_cont(proxy, file, line, arg) ||
+ warnif_misplaced_tcp_cont(proxy, file, line, arg);
+}
+
+/* report a warning if a "tcp request connection" rule is dangerously placed */
+int warnif_misplaced_tcp_conn(struct proxy *proxy, const char *file, int line, const char *arg)
+{
+ return warnif_rule_after_tcp_sess(proxy, file, line, arg) ||
+ warnif_misplaced_tcp_sess(proxy, file, line, arg);
}
/* Report it if a request ACL condition uses some keywords that are incompatible