From d39ad449b950bf9c1fdc9c71f7e6dc14d4105510 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 25 Nov 2016 15:16:12 +0100 Subject: [PATCH] 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. --- src/cfgparse.c | 113 +++++++++++++++++++------------------------------ 1 file changed, 43 insertions(+), 70 deletions(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 4fc63bde3..35ae7b65b 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -477,71 +477,10 @@ int warnif_rule_after_use_server(struct proxy *proxy, const char *file, int line 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) +/* 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_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) -{ - 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) || - 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) -{ - 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); -} - -/* 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_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); -} - -/* 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); -} - -/* 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_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); } @@ -549,15 +488,49 @@ int warnif_misplaced_reqxxx(struct proxy *proxy, const char *file, int line, con int warnif_misplaced_reqadd(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); + warnif_misplaced_redirect(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 reqxxx rule is dangerously placed */ +int warnif_misplaced_reqxxx(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_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_misplaced_reqxxx(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) +{ + return warnif_rule_after_http_req(proxy, file, line, arg) || + warnif_misplaced_http_req(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) +{ + return warnif_rule_after_block(proxy, file, line, arg) || + warnif_misplaced_block(proxy, file, line, 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_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