aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/dns.lua13
-rw-r--r--plugins/mod_admin_adhoc.lua4
2 files changed, 11 insertions, 6 deletions
diff --git a/net/dns.lua b/net/dns.lua
index 42bbdb01..2b03caf6 100644
--- a/net/dns.lua
+++ b/net/dns.lua
@@ -135,17 +135,19 @@ end
local function prune(rrs, time, soft) -- - - - - - - - - - - - - - - prune
time = time or socket.gettime();
- for i,rr in pairs(rrs) do
+ for i,rr in ipairs(rrs) do
if rr.tod then
-- rr.tod = rr.tod - 50 -- accelerated decripitude
rr.ttl = math.floor(rr.tod - time);
if rr.ttl <= 0 then
+ rrs[rr[rr.type:lower()]] = nil;
table.remove(rrs, i);
return prune(rrs, time, soft); -- Re-iterate
end
elseif soft == 'soft' then -- What is this? I forget!
assert(rr.ttl == 0);
- rrs[i] = nil;
+ rrs[rr[rr.type:lower()]] = nil;
+ table.remove(rrs, i);
end
end
end
@@ -188,7 +190,7 @@ end
local rrs_metatable = {}; -- - - - - - - - - - - - - - - - - - rrs_metatable
function rrs_metatable.__tostring(rrs)
local t = {};
- for i,rr in pairs(rrs) do
+ for i,rr in ipairs(rrs) do
append(t, tostring(rr)..'\n');
end
return table.concat(t);
@@ -681,7 +683,10 @@ function resolver:remember(rr, type) -- - - - - - - - - - - - - - remember
self.cache = self.cache or setmetatable({}, cache_metatable);
local rrs = get(self.cache, qclass, type, qname) or
set(self.cache, qclass, type, qname, setmetatable({}, rrs_metatable));
- append(rrs, rr);
+ if not rrs[rr[qtype:lower()]] then
+ rrs[rr[qtype:lower()]] = true;
+ append(rrs, rr);
+ end
if type == 'MX' then self.unsorted[rrs] = true; end
end
diff --git a/plugins/mod_admin_adhoc.lua b/plugins/mod_admin_adhoc.lua
index 1910f9fa..405980c2 100644
--- a/plugins/mod_admin_adhoc.lua
+++ b/plugins/mod_admin_adhoc.lua
@@ -119,7 +119,7 @@ local delete_user_layout = dataforms_new{
instructions = "Fill out this form to delete a user.";
{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
- { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) to delete" };
+ { name = "accountjids", type = "jid-multi", required = true, label = "The Jabber ID(s) to delete" };
};
local delete_user_command_handler = adhoc_simple(delete_user_layout, function(fields, err)
@@ -163,7 +163,7 @@ local end_user_session_layout = dataforms_new{
instructions = "Fill out this form to end a user's session.";
{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
- { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) for which to end sessions" };
+ { name = "accountjids", type = "jid-multi", label = "The Jabber ID(s) for which to end sessions", required = true };
};
local end_user_session_handler = adhoc_simple(end_user_session_layout, function(fields, err)