BUG/MEDIUM: connections: Always add the xprt handshake if needed.

In connect_server(), we used to only call xprt_add_hs() if CO_FL_SEND_PROXY
was set during the function call, we would not do it if the flag was set
before connect_server() was called. The rational at the time was if the flag
was already set, then the XPRT was already present. But now the xprt_handshake
always removes itself, so we have to re-add it each time, or it wouldn't be
done if the first connection attempt failed.
While I'm there, check any non-ssl handshake flag, instead of just
CO_FL_SEND_PROXY, or we'd miss the SOCKS4 flags.

This should be backported to 2.0.
This commit is contained in:
Olivier Houchard 2019-06-24 18:19:40 +02:00 committed by Olivier Houchard
parent c31e2cbd28
commit 6c6dc58da0

View File

@ -1213,7 +1213,6 @@ int connect_server(struct stream *s)
int reuse_orphan = 0;
int init_mux = 0;
int alloced_cs = 0;
int flags_hs = 0;
int err;
@ -1484,7 +1483,6 @@ int connect_server(struct stream *s)
return SF_ERR_INTERNAL;
}
flags_hs = srv_conn->flags & CO_FL_HANDSHAKE_NOSSL;
if (!conn_xprt_ready(srv_conn) && !srv_conn->mux) {
/* set the correct protocol on the output stream interface */
if (srv)
@ -1595,7 +1593,7 @@ int connect_server(struct stream *s)
/* The CO_FL_SEND_PROXY flag may have been set by the connect method,
* if so, add our handshake pseudo-XPRT now.
*/
if (!flags_hs && (srv_conn->flags & CO_FL_SEND_PROXY)) {
if ((srv_conn->flags & CO_FL_HANDSHAKE_NOSSL)) {
if (xprt_add_hs(srv_conn) < 0) {
conn_full_close(srv_conn);
return SF_ERR_INTERNAL;