Re: options forwardfor if-none not playing when an alternative header name is specified

2011-10-08 Thread Sagi Bashari
Hi Willy,

On Thu, Oct 6, 2011 at 9:54 PM, Willy Tarreau w...@1wt.eu wrote:

 Hi Sagi,

 On Thu, Oct 06, 2011 at 04:40:41PM +0200, Sagi Bashari wrote:
  Hi,
 
  I believe I have found a bug in HAProxy v1.4.18.
 
  The if-none directive of the forwardfor option always looks for the
  X-Forwarded-For header, even if an alternative header name was set.
 
  This means that if I use something like:
  options forwardfor header X-Client-IP if-none
 
  Then if the client sends its own X-Client-IP header, the client IP will
 be
  appended, and if an X-Forwarded-For header is sent then no X-Client-IP
  header will be added.
 
  The expected behavior is to only add the X-Client-IP header if the client
  did not send such header himself.
 
  I did not test it, but I think the following will fix this:
  Replace src/proto_http.c line 3479:
  http_find_header2(X-Forwarded-For, 15, txn-req.sol, txn-hdr_idx,
 ctx))
  {
 
  with:
  http_find_header2(s-be-fwdfor_hdr_name, s-fe-fwdfor_hdr_len,
  txn-req.sol, txn-hdr_idx, ctx)) {

 You're prefectly right, I overlooked this when I did the patch.

 Could you please send me a patch against 1.5-dev ? I'll apply it to
 both 1.5 and 1.4.


Patch against 1.5-dev is attached. I ran a quick test against both 1.5-dev
and 1.4.18 and it seems to work fine.

Regards,
Sagi


forwardfor-if-none.patch
Description: Binary data


options forwardfor if-none not playing when an alternative header name is specified

2011-10-06 Thread Sagi Bashari
Hi,

I believe I have found a bug in HAProxy v1.4.18.

The if-none directive of the forwardfor option always looks for the
X-Forwarded-For header, even if an alternative header name was set.

This means that if I use something like:
options forwardfor header X-Client-IP if-none

Then if the client sends its own X-Client-IP header, the client IP will be
appended, and if an X-Forwarded-For header is sent then no X-Client-IP
header will be added.

The expected behavior is to only add the X-Client-IP header if the client
did not send such header himself.

I did not test it, but I think the following will fix this:
Replace src/proto_http.c line 3479:
http_find_header2(X-Forwarded-For, 15, txn-req.sol, txn-hdr_idx, ctx))
{

with:
http_find_header2(s-be-fwdfor_hdr_name, s-fe-fwdfor_hdr_len,
txn-req.sol, txn-hdr_idx, ctx)) {

Regards,
Sagi