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. ~jm