]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: send-proxy-v2: sends authority TLV according to TLV received
authorEmmanuel Hocdet <manu@gandi.net>
Thu, 29 Aug 2019 09:54:51 +0000 (11:54 +0200)
committerWilly Tarreau <w@1wt.eu>
Sat, 31 Aug 2019 10:28:33 +0000 (12:28 +0200)
Since patch "7185b789", the authority TLV in a PROXYv2 header from a
client connection is stored. Authority TLV sends in PROXYv2 should be
taken into account to allow chaining PROXYv2 without droping it.

src/connection.c

index 7bdd6f0ddf4c50a608f842f5998ec22c091c1b83..33f3b2277ed53f4e3149f3f874439f73eaf81135 100644 (file)
@@ -1308,16 +1308,26 @@ int make_proxy_line_v2(char *buf, int buf_len, struct server *srv, struct connec
                ret += make_tlv(&buf[ret], (buf_len - ret), PP2_TYPE_ALPN, value_len, value);
        }
 
-#ifdef USE_OPENSSL
        if (srv->pp_opts & SRV_PP_V2_AUTHORITY) {
-               value = ssl_sock_get_sni(remote);
+               value = NULL;
+               if (remote && remote->proxy_authority) {
+                       value = remote->proxy_authority;
+                       value_len = remote->proxy_authority_len;
+               }
+#ifdef USE_OPENSSL
+               else {
+                       if (value = ssl_sock_get_sni(remote))
+                               value_len = strlen(value);
+               }
+#endif
                if (value) {
                        if ((buf_len - ret) < sizeof(struct tlv))
                                return 0;
-                       ret += make_tlv(&buf[ret], (buf_len - ret), PP2_TYPE_AUTHORITY, strlen(value), value);
+                       ret += make_tlv(&buf[ret], (buf_len - ret), PP2_TYPE_AUTHORITY, value_len, value);
                }
        }
 
+#ifdef USE_OPENSSL
        if (srv->pp_opts & SRV_PP_V2_SSL) {
                struct tlv_ssl *tlv;
                int ssl_tlv_len = 0;