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.
This commit is contained in:
Willy Tarreau 2018-08-08 18:40:44 +02:00
parent 7ce0c891ab
commit 287527a176

View File

@ -1068,14 +1068,21 @@ static inline int conn_install_mux_fe(struct connection *conn, void *ctx)
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;