]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[BUG] "option transparent" is for backend, not frontend !
authorWilly Tarreau <w@1wt.eu>
Tue, 23 Dec 2008 22:13:55 +0000 (23:13 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 23 Dec 2008 22:13:55 +0000 (23:13 +0100)
"option transparent" was set and checked on frontends only while it
is purely a backend thing as it replaces the "balance" mode. For this
reason, it did only work in "listen" sections. This change will then
not affect the rare users of this option.

doc/configuration.txt
src/backend.c
src/cfgparse.c

index f92176a5e7400be7c0e73c1e42188de5235ebac5..b2cb48fed676236d9ba037abebec013b95549b3d 100644 (file)
@@ -569,7 +569,7 @@ option ssl-hello-chk        X          -         X         X
 option tcpka                X          X         X         X
 option tcplog               X          X         X         X
 [no] option tcpsplice       X          X         X         X
-[no] option transparent     X          X         X         -
+[no] option transparent     X          -         X         X
 redirect                    -          X         X         X
 redisp                      X          -         X         X  (deprecated)
 redispatch                  X          -         X         X  (deprecated)
@@ -619,7 +619,7 @@ timeout queue               X          -         X         X
 timeout server              X          -         X         X
 timeout srvtimeout          X          -         X         X  (deprecated)
 timeout tarpit              X          X         X         X
-transparent                 X          X         X         -  (deprecated)
+transparent                 X          -         X         X  (deprecated)
 use_backend                 -          X         X         -
 ----------------------+----------+----------+---------+---------
 keyword                 defaults   frontend   listen    backend
@@ -2314,7 +2314,7 @@ option transparent
 no option transparent
   Enable client-side transparent proxying
   May be used in sections :   defaults | frontend | listen | backend
-                                 yes   |    yes   |   yes  |    no
+                                 yes   |    no    |   yes  |   yes
   Arguments : none
 
   This option was introduced in order to provide layer 7 persistence to layer 3
@@ -2329,9 +2329,6 @@ no option transparent
   Note that contrary to a common belief, this option does NOT make HAProxy
   present the client's IP to the server when establishing the connection.
 
-  Use of this option is really discouraged, and since no really valid use of it
-  has been reported for years, it will probably be removed in future versions.
-
   See also: the "usersrc" argument of the "source" keyword, and the
             "transparent" option of the "bind" keyword.
 
@@ -3589,7 +3586,7 @@ timeout tarpit <timeout>
 transparent (deprecated)
   Enable client-side transparent proxying
   May be used in sections :   defaults | frontend | listen | backend
-                                 yes   |    yes   |   yes  |    no
+                                 yes   |    no    |   yes  |   yes
   Arguments : none
 
   This keyword was introduced in order to provide layer 7 persistence to layer
@@ -3606,9 +3603,6 @@ transparent (deprecated)
   Note that contrary to a common belief, this option does NOT make HAProxy
   present the client's IP to the server when establishing the connection.
 
-  Use of this option is really discouraged, and since no really valid use of it
-  has been reported for years, it will probably be removed in future versions.
-
   See also: "option transparent"
 
 
index c8a84beeba376f9238ff292f36914b8a824f955b..a8ffdb6dfc36dbbe2149c119b83538b2e4421568 100644 (file)
@@ -1412,7 +1412,7 @@ int assign_server(struct session *s)
                }
        }
        else if (!*(int *)&s->be->dispatch_addr.sin_addr &&
-                !(s->fe->options & PR_O_TRANSP)) {
+                !(s->be->options & PR_O_TRANSP)) {
                err = SRV_STATUS_NOSRV;
                goto out;
        }
@@ -1467,7 +1467,7 @@ int assign_server_address(struct session *s)
                /* if this server remaps proxied ports, we'll use
                 * the port the client connected to with an offset. */
                if (s->srv->state & SRV_MAPPORTS) {
-                       if (!(s->fe->options & PR_O_TRANSP) && !(s->flags & SN_FRT_ADDR_SET))
+                       if (!(s->be->options & PR_O_TRANSP) && !(s->flags & SN_FRT_ADDR_SET))
                                get_frt_addr(s);
                        if (s->frt_addr.ss_family == AF_INET) {
                                s->srv_addr.sin_port = htons(ntohs(s->srv_addr.sin_port) +
@@ -1482,7 +1482,7 @@ int assign_server_address(struct session *s)
                /* connect to the defined dispatch addr */
                s->srv_addr = s->be->dispatch_addr;
        }
-       else if (s->fe->options & PR_O_TRANSP) {
+       else if (s->be->options & PR_O_TRANSP) {
                /* in transparent mode, use the original dest addr if no dispatch specified */
                if (!(s->flags & SN_FRT_ADDR_SET))
                        get_frt_addr(s);
index 8668dfb19a57cbf98535298aa71fc36a2cc37c0d..d41edf7d86fd5f732fd9d779f69a89afebdf211f 100644 (file)
@@ -107,7 +107,7 @@ static const struct {
        { "tcpsplice",    PR_O_TCPSPLICE,  PR_CAP_BE|PR_CAP_FE, LSTCHK_TCPSPLICE|LSTCHK_NETADM },
 #endif
 #ifdef TPROXY
-       { "transparent",  PR_O_TRANSP,     PR_CAP_FE, 0 },
+       { "transparent",  PR_O_TRANSP,     PR_CAP_BE, 0 },
 #endif
 
        { NULL, 0, 0, 0 }