On Mon, May 10, 2021 at 07:59:56AM -0300, Joao Morais wrote:
> Hello again! Here are the snippets running with 2.4-dev18 - docker image 
> haproxy:2.4-dev18-alpine:
> 
> $ cat h.cfg
> global
>   log stdout format raw local0
>   lua-load /tmp/h/svc1.lua
>   lua-load /tmp/h/svc2.lua
> defaults
>   timeout server 1m
>   timeout client 1m
>   timeout connect 5s
>   log global
> listen l
>   mode http
>   bind :8000
>   option httplog
>   http-request lua.auth
>   http-request use-service lua.send-failure
> 
> $ cat svc1.lua
> core.register_action("auth", { "http-req" }, function(txn)
>       txn:set_var("txn.code", 401, true)
> end, 0)
> 
> $ cat svc2.lua
> core.register_service("send-failure", "http", function(applet)
>     response = applet:get_var("txn.code")
>     if response ~= nil then
>         applet:set_status(response)
>     else
>         applet:set_status(403)
>     end
>     applet:add_header("Content-Length", 0)
>     applet:add_header("Content-Type", "text/plain")
>     applet:start_response()
> end)
> 
> Now curl'ing the config above:
> 
> $ curl -i localhost:8000
> HTTP/1.1 403 Forbidden
> content-type: text/plain
> content-length: 0
> 
> $ curl -i localhost:8000
> HTTP/1.1 401 Unauthorized
> content-type: text/plain
> content-length: 0
> 
> The first run is always a 403 which means that the reading of the txn.code
> retuned nil, all the next attempts correctly returns 401. Maybe I'm missing
> some kind of initialization here? Otherwise I'm happy to provide this as a
> GitHub issue.

I can reproduce it. I agree there's something odd, as it means that
there is some random matching or that something is not properly
initialized. I suspect that a vars field isn't properly initialized
somewhere. I'm investigating, thanks for the report!

Willy

Reply via email to