BUG/MEDIUM: connection/mux: take care of serverless proxies
Commit 7ce0c89 ("MEDIUM: mux: Use the mux protocol specified on
bind/server lines") assumed a bit too strongly that we could only have
servers on the connect side :-) It segfaults under this config :
defaults
contimeout 5s
clitimeout 5s
srvtimeout 5s
mode http
listen test1
bind :8001
dispatch 127.0.0.1:8002
frontend test2
mode http
bind :8002
redirect location /
No backport needed.
diff --git a/include/proto/connection.h b/include/proto/connection.h
index 3b25fc5..8261d57 100644
--- a/include/proto/connection.h
+++ b/include/proto/connection.h
@@ -1068,14 +1068,21 @@
static inline int conn_install_mux_be(struct connection *conn, void *ctx)
{
struct server *srv = objt_server(conn->target);
+ struct proxy *prx = objt_proxy(conn->target);
const struct mux_ops *mux_ops;
- if (srv->mux_proto)
+ if (srv)
+ prx = srv->proxy;
+
+ if (!prx) // target must be either proxy or server
+ return -1;
+
+ if (srv && srv->mux_proto)
mux_ops = srv->mux_proto->mux;
else {
int mode;
- mode = (1 << (srv->proxy->mode == PR_MODE_HTTP));
+ mode = (1 << (prx->mode == PR_MODE_HTTP));
mux_ops = conn_get_best_mux(conn, ist(NULL), PROTO_SIDE_BE, mode);
if (!mux_ops)
return -1;