mod_admin_telnet: Create a DNS resolver per console session (fixes #1492) 0.11
authorKim Alvefur <zash@zash.se>
Fri, 24 Jan 2020 23:27:49 +0100
branch0.11
changeset 10622 232841373711
parent 10620 37936c72846d
child 10623 ef620906ab82
child 10650 85585910d468
mod_admin_telnet: Create a DNS resolver per console session (fixes #1492) This is now the common pattern, eg see mod_s2s.
plugins/mod_admin_telnet.lua
--- a/plugins/mod_admin_telnet.lua	Fri Jan 24 16:21:30 2020 +0000
+++ b/plugins/mod_admin_telnet.lua	Fri Jan 24 23:27:49 2020 +0100
@@ -1074,36 +1074,49 @@
 
 def_env.dns = {};
 local adns = require"net.adns";
-local dns = require"net.dns";
+
+local function get_resolver(session)
+	local resolver = session.dns_resolver;
+	if not resolver then
+		resolver = adns.resolver();
+		session.dns_resolver = resolver;
+	end
+	return resolver;
+end
 
 function def_env.dns:lookup(name, typ, class)
+	local resolver = get_resolver(self.session);
 	local ret = "Query sent";
 	local print = self.session.print;
 	local function handler(...)
 		ret = "Got response";
 		print(...);
 	end
-	adns.lookup(handler, name, typ, class);
+	resolver:lookup(handler, name, typ, class);
 	return true, ret;
 end
 
 function def_env.dns:addnameserver(...)
-	dns._resolver:addnameserver(...)
+	local resolver = get_resolver(self.session);
+	resolver._resolver:addnameserver(...)
 	return true
 end
 
 function def_env.dns:setnameserver(...)
-	dns._resolver:setnameserver(...)
+	local resolver = get_resolver(self.session);
+	resolver._resolver:setnameserver(...)
 	return true
 end
 
 function def_env.dns:purge()
-	dns.purge()
+	local resolver = get_resolver(self.session);
+	resolver._resolver:purge()
 	return true
 end
 
 function def_env.dns:cache()
-	return true, "Cache:\n"..tostring(dns.cache())
+	local resolver = get_resolver(self.session);
+	return true, "Cache:\n"..tostring(resolver._resolver.cache)
 end
 
 def_env.http = {};