File

net/resolvers/chain.lua @ 12557:ee5b061588ea 0.12

net.unbound: Merge luaunbound and prosody defaults in absence of user config (fixes #1763) (thanks rgd) add_defaults() is supposed to merge 3 tables, the defaults in luaunbound, the defaults from prosody and any config from the prosody config file. In the case where no `unbound={}` has been in the config, it skips over the merge and returns only the prosody built-in defaults. This results in libunbound skipping reading resolv.conf and uses its default behavior of full recursive resolution. Prior to #1737 there were only two tables, the luaunbound defaults and the prosody config, where bypassing the merge and returning the former did the right thing.
author Kim Alvefur <zash@zash.se>
date Sun, 19 Jun 2022 19:49:32 +0200
parent 12204:7c397a49d163
line wrap: on
line source


local methods = {};
local resolver_mt = { __index = methods };

-- Find the next target to connect to, and
-- pass it to cb()
function methods:next(cb)
	if self.resolvers then
		if not self.resolver then
			if #self.resolvers == 0 then
				cb(nil);
				return;
			end
			local next_resolver = table.remove(self.resolvers, 1);
			self.resolver = next_resolver;
		end
		self.resolver:next(function (...)
			if self.resolver then
				self.last_error = self.resolver.last_error;
			end
			if ... == nil then
				self.resolver = nil;
				self:next(cb);
			else
				cb(...);
			end
		end);
		return;
	end
end

local function new(resolvers)
	return setmetatable({ resolvers = resolvers }, resolver_mt);
end

return {
	new = new;
};