File

misc/systemd/socket-activation.lua @ 5425:3b30635d215c

mod_http_oauth2: Support granting zero role-scopes It seems Very Bad that if you uncheck all roles on the consent page, you get the default scopes, which seems the opposite of what you probably intended. Currently, mod_tokenauth will do the same thing, so work is needed there too to allow issuing tokens without roles. A token without a role could be used for OIDC login, and not much else. This seems like a valuable thing to support.
author Kim Alvefur <zash@zash.se>
date Sun, 07 May 2023 19:29:15 +0200
parent 2352:3296a09b4e57
line wrap: on
line source

-- Monkeypatch to support socket activation
--
-- Requires LuaSocket after "agnostic" changes merged
--
-- To enable:
-- RunScript "socket-activation.lua"

local socket = require"socket";
local tcp_serv_mt = debug.getregistry()["tcp{server}"];
local socket_bind = socket.bind;

local SD_LISTEN_FDS_START = 3;

local fds = tonumber(os.getenv"LISTEN_FDS") or 0;

if fds < SD_LISTEN_FDS_START then return; end

local servs = {};

for i = 1, fds do
	local serv = socket.tcp();
	if serv:getfd() >= 0 then
		return; -- This won't work, we will leak the old FD
	end
	debug.setmetatable(serv, tcp_serv_mt);
	serv:setfd(SD_LISTEN_FDS_START + i - 1);
	local ip, port = serv:getsockname();
	servs [ ip .. ":" .. port ] = serv;
end

function socket.bind( ip, port, backlog )
	local sock = servs [ ip .. ":" .. port ];
	if sock then
		servs [ ip .. ":" .. port ] = nil;
		return sock;
	end
	if next(servs) == nil then
		-- my work here is done
		socket.bind = socket_bind;
	end
	return socket_bind( ip, port, backlog );
end