]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: config: Finish configuration for referenced default proxies
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 13 Oct 2021 09:04:10 +0000 (11:04 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 15 Oct 2021 12:12:19 +0000 (14:12 +0200)
If a not-ready default proxy is referenced by a proxy during the
configuration validity check, its configuration is also finished and
PR_FL_READY flag is set on it.

For now, the arguments resolution is the only step performed.

This patch is mandatory to support TCP/HTTP rules in defaults sections.

src/cfgparse.c

index 1db94c652203ddfbd4b46b290e3ad8675326c503..02ddd959d746d919d24915186809a5086d8ed1bc 100644 (file)
@@ -2514,6 +2514,28 @@ int check_config_validity()
                        continue;
                }
 
+               /* The current proxy is referencing a default proxy. We must
+                * finalize its config, but only once. If the default proxy is
+                * ready (PR_FL_READY) it means it was already fully configured.
+                */
+               if (curproxy->defpx) {
+                       if (!(curproxy->defpx->flags & PR_FL_READY)) {
+                               err = NULL;
+                               i = smp_resolve_args(curproxy->defpx, &err);
+                               cfgerr += i;
+                               if (i) {
+                                       indent_msg(&err, 8);
+                                       ha_alert("%s%s\n", i > 1 ? "multiple argument resolution errors:" : "", err);
+                                       ha_free(&err);
+                               }
+                               else
+                                       cfgerr += acl_find_targets(curproxy->defpx);
+
+                               /* default proxy is now ready. Set the right FE/BE capabilities */
+                               curproxy->defpx->flags |= PR_FL_READY;
+                       }
+               }
+
                /* check and reduce the bind-proc of each listener */
                list_for_each_entry(bind_conf, &curproxy->conf.bind, by_fe) {
                        unsigned long mask;