* released 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.
diff --git a/NOTES b/NOTES
index ce994f7..13b19ba 100644
--- a/NOTES
+++ b/NOTES
@@ -16,12 +16,6 @@
- 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
diff --git a/doc/haproxy.txt b/doc/haproxy.txt
index a86c921..36c3c99 100644
--- a/doc/haproxy.txt
+++ b/doc/haproxy.txt
@@ -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 @@
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 @@
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 @@
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 @@
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 |
diff --git a/examples/cfg b/examples/cfg
index 96d5ba5..b3bff69 100644
--- a/examples/cfg
+++ b/examples/cfg
@@ -62,7 +62,7 @@
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 ^
diff --git a/haproxy.c b/haproxy.c
index 67df4b1..9ab37b1 100644
--- a/haproxy.c
+++ b/haproxy.c
@@ -17,6 +17,10 @@
*
* 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 @@
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;