From 26f221bd557ebaac8906e7acad257b7b299ea759 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 26 Apr 2022 14:40:30 +0200 Subject: [PATCH] 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. --- src/cfgparse.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cfgparse.c b/src/cfgparse.c index 13fda2d96..32b4cb366 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;