Hi,

I agree with you, but in HAProxy, the ';' is considered as parameter
delimiter. Its hardcoded, and I don't known the reason.

So the behaviour that you observe is the normal HAProxy behaviour.

Thierry



On Tue, 8 Dec 2015 09:17:38 +0000
Laurent Penot <[email protected]> wrote:

> HI,
> 
> I received URL from which i need to extract several parameters, I do that 
> using urlp in lua. Values of parameters are urlencoded.
> And I notice something strange : urlp seems to get only the first part of the 
> value when the 2 char “;+” or “+;” are in the value of the parameter.
> 
> From the php point of view, using 
> http://php.net/manual/en/function.urlencode.php , the 2 char “;+” or “+;” is 
> valid in an urlencoded string.
> 
> 
> Here are 2 tests URL and the dumped value from lua:
> /dump_headers.php?p1=value1&ua=word1+;word2&otherparam=test
> [info] 341/090330 (130491) : ua=word1+
> The dumped value should be : word1+;word2
> 
> /dump_headers.php?p1=value1&ua=word1;+word2&otherparam=test
> [info] 341/090951 (130491) : ua=word1
> The dumped value should be : word1;+word2
> 
> Here is the haproxy config file (I removed everything not related to my 
> question) :
> global
>     debug
>     # lua file
>     lua-load url.lua
> 
> defaults
>     mode            http
> 
> frontend fe
>     bind :80
>     acl testurl url_beg /dump_headers.php
>     http-request lua.logValue if testurl
>     use_backend beok
> 
> backend beok
>     server mysrv 127.0.0.1:8080 check inter 1000ms fall 3 rise 1 weight 100
> 
> 
> Here is the lua file :
> core.register_action("logValue", {"http-req"}, function(txn)
>     local var = txn.f:urlp("ua");
>     core.Info("ua=" .. var);
> end)
> 
> 
> 
> haproxy -vv
> HA-Proxy version 1.6.2 2015/11/03
> Copyright 2000-2015 Willy Tarreau <[email protected]>
> 
> Build options :
>   TARGET  = linux2628
>   CPU     = generic
>   CC      = gcc
>   CFLAGS  = -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement
>   OPTIONS = USE_ZLIB=1 USE_OPENSSL=1 USE_LUA=yes USE_DEVICEATLAS=1 USE_PCRE=1
> 
> Default settings :
>   maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents = 200
> 
> Encrypted password support via crypt(3): yes
> Built with zlib version : 1.2.3
> Compression algorithms supported : identity("identity"), deflate("deflate"), 
> raw-deflate("deflate"), gzip("gzip")
> Built with OpenSSL version : OpenSSL 1.0.2d 9 Jul 2015
> Running on OpenSSL version : OpenSSL 1.0.2d 9 Jul 2015
> OpenSSL library supports TLS extensions : yes
> OpenSSL library supports SNI : yes
> OpenSSL library supports prefer-server-ciphers : yes
> Built with PCRE version : 7.8 2008-09-05
> PCRE library supports JIT : no (USE_PCRE_JIT not set)
> Built with Lua version : Lua 5.3.1
> Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT 
> IP_FREEBIND
> 
> Available polling systems :
>       epoll : pref=300,  test result OK
>        poll : pref=200,  test result OK
>      select : pref=150,  test result OK
> Total: 3 (3 usable), will use epoll.
> 
> Running on centos 6.
> I notice the same thing with haproxy 1.6.1 and lua 5.3.1 or 5.3.0
> 
> Note : in the frontend, if I use :     http-request set-header X-debugua 
> %[urlp(ua)]
> I get the same value as I get from Lua.
> 
> 
> Can you tell me if I do something the wrong way or if it is a bug or if it is 
> intended ?
> 
> Best regards
> Laurent
> 
> 
> 

Reply via email to