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