diff --git a/NOTES b/NOTES index ce994f7ff..13b19bab0 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 a86c92109..36c3c9945 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 @@ 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 | diff --git a/examples/cfg b/examples/cfg index 96d5ba552..b3bff69de 100644 --- a/examples/cfg +++ b/examples/cfg @@ -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 ^ diff --git a/haproxy.c b/haproxy.c index 67df4b1b8..9ab37b1c5 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 @@ 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;