From: Willy Tarreau Date: Tue, 26 Apr 2022 12:40:30 +0000 (+0200) Subject: MINOR: config: make sure never to mix dgram and stream protocols on a bind line X-Git-Tag: v2.6-dev10~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26f221bd557ebaac8906e7acad257b7b299ea759;p=thirdparty%2Fhaproxy.git MINOR: config: make sure never to mix dgram and stream protocols on a bind line It is absolutely not possible to use the same "bind" line to listen to both quic and tcp for example, because no single transport layer would fit both modes and we'll need the type to choose one then to choose a mux. Let's make sure this does not happen. This may be relaxed in the future if we manage to instantiate transport layers on the fly, but the SSL vs quic part might be tricky to handle. --- diff --git a/src/cfgparse.c b/src/cfgparse.c index 13fda2d962..32b4cb3663 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -3776,6 +3776,23 @@ out_uri_auth_compat: list_for_each_entry(bind_conf, &curproxy->conf.bind, by_fe) { int mode = (1 << (curproxy->mode == PR_MODE_HTTP)); const struct mux_proto_list *mux_ent; + const struct listener *l; + int types = 0; + + /* check that the mux is compatible with all listeners' + * protocol types (dgram or stream). + */ + list_for_each_entry(l, &bind_conf->listeners, by_bind) + types |= 1 << l->rx.proto->proto_type; + + if (atleast2(types)) { + ha_alert("%s '%s' : cannot mix datagram and stream protocols " + "for 'bind %s' at [%s:%d].\n", + proxy_type_str(curproxy), curproxy->id, + bind_conf->arg, bind_conf->file, bind_conf->line); + cfgerr++; + continue; + } if (!bind_conf->mux_proto) continue;