]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
* released 1.1.10 v1.1.10
authorwilly tarreau <willy@wtap.(none)>
Sat, 17 Dec 2005 12:11:56 +0000 (13:11 +0100)
committerwilly tarreau <willy@wtap.(none)>
Sat, 17 Dec 2005 12:11:56 +0000 (13:11 +0100)
* if a cookie is used in insert+indirect mode, it's desirable that the
  the servers don't see it. It was not possible to remove it correctly
  with regexps, so now it's removed automatically.

NOTES
doc/haproxy.txt
examples/cfg
haproxy.c

diff --git a/NOTES b/NOTES
index ce994f7ff1257f6751333e3a488a89d0e55317bb..13b19bab0666b1f7577e8123fc0451438d19d6a0 100644 (file)
--- a/NOTES
+++ b/NOTES
   - differentiate http headers and http uris
   - support environment variables in config file
   - support keep-alive
-
---- Notes about cookie usage ---
-
-Cookie insertion is done at the end of server response.
-Cookie matching is done after header replacement, but before
-header deletion. This means that it's perfectly possible to
-delete an inserted cookie once it has been matched, so that
-the server never knows about it.
+1.1.9 -> 1.1.10
+  - automatically remove client cookie in insert+indirect mode
 
index a86c92109269ce4d36bf76331d90417598b79e70..36c3c9945b894dc548cf07377f20f615c5a02152 100644 (file)
@@ -1,9 +1,9 @@
 
                             H A - P r o x y
                             ---------------
-                             version 1.1.9
+                             version 1.1.10
                              willy tarreau
-                              2002/05/02
+                              2002/05/10
 
 ================
 | Introduction |
@@ -455,12 +455,14 @@ serveurs aient un cookie renseign
 
        cookie SERVERID insert
 
-Remarque :
-----------
-Il est possible de combiner 'insert' avec 'indirect' ou 'rewrite' pour s'adapter
-à des applications générant déjà le cookie, avec un contenu invalide. Il suffit
-pour cela de les spécifier sur la même ligne.
-
+Remarques :
+-----------
+- Il est possible de combiner 'insert' avec 'indirect' ou 'rewrite' pour s'adapter
+  à des applications générant déjà le cookie, avec un contenu invalide. Il suffit
+  pour cela de les spécifier sur la même ligne.
+- dans le cas où 'insert' et 'indirect' sont spécifiés, le cookie n'est jamais
+  transmis au serveur vu qu'il n'en a pas connaissance et ne pourrait pas le
+  comprendre.
 
 2.9) Assignation d'un serveur à une valeur de cookie
 ----------------------------------------------------
@@ -533,7 +535,8 @@ Exemples :
        server web1 192.168.1.1:80 cookie server01 check
        server web2 192.168.1.2:80 cookie server02 check inter 500 rise 1 fall 2
 
-# insertion automatique de cookie dans la réponse du serveur
+# Insertion automatique de cookie dans la réponse du serveur, et suppression
+# automatique dans la requête.
     listen web_appl 0.0.0.0:80
        mode http
        cookie SERVERID insert indirect
@@ -728,9 +731,9 @@ Exemples :
 La combinaison de l'insertion de cookie avec la répartition de charge interne
 permet d'assurer une persistence dans les sessions HTTP d'une manière
 pratiquement transparente pour les applications. Le principe est simple :
-  - assigner un cookie à chaque serveur
+  - attribuer une valeur d'un cookie à chaque serveur
   - effectuer une répartition interne
-  - insérer un cookie dans les réponses issues d'une répartition
+  - insérer un cookie dans les réponses issues d'une répartition uniquement
   - cacher ce cookie à l'application
 
 Exemple :
@@ -741,7 +744,6 @@ Exemple :
        balance roundrobin
        server 192.168.1.1:80 cookie server01 check
        server 192.168.1.2:80 cookie server02 check
-       reqidel ^Cookie:\ SERVERID=
 
 =======================
 | Paramétrage système |
index 96d5ba5520c534c4967042ca80bbd721ff26ddec..b3bff69de9d98efb8a3fdf9548700e4a0cf23936 100644 (file)
@@ -62,7 +62,7 @@ listen proxy1 0.0.0.0:8000
        option httplog
        option dontlognull
 #      reqirep ^(Test:\ ) \0_toto_\1_toto
-#      reqidel ^Cookie:\ SERVERID=
+#      reqidel ^X-Forwarded-for:
 #      reqirep ^(GET|POST)\ .* \0
 #      reqirep ^(Host:|Connection:|User-agent:|Cookie:)\ .* \0
 #      reqideny ^
index 67df4b1b8c063d5d79a19bab066f2cb5fc916bbb..9ab37b1c544ae3c9f4808b43c19b53d08b590ad0 100644 (file)
--- a/haproxy.c
+++ b/haproxy.c
  *
  * ChangeLog :
  *
+ * 2002/05/10 : 1.1.10
+ *   - if a cookie is used in insert+indirect mode, it's desirable that the
+ *     the servers don't see it. It was not possible to remove it correctly
+ *     with regexps, so now it's removed automatically.
  * 2002/04/19 : 1.1.9
  *   - don't use snprintf()'s return value as an end of message since it may
  *     be larger. This caused bus errors and segfaults in internal libc's
@@ -2300,6 +2304,11 @@ int process_cli(struct session *t) {
                        if (srv) { /* we found the server */
                            t->flags |= SN_DIRECT;
                            t->srv = srv;
+                           /* if this cookie was set in insert+indirect mode, then it's better that the
+                            * server never sees it.
+                            */
+                           if ((t->proxy->options & (PR_O_COOK_INS | PR_O_COOK_IND)) == (PR_O_COOK_INS | PR_O_COOK_IND))
+                               delete_header = 1;
                        }
 
                        break;