From 430114cd5ab344a6a39fd9e6d3857ade78e2f8e3 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Fri, 17 Apr 2009 16:11:11 +0100 Subject: net.server: Fix potential nil handler usage --- net/server.lua | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/net/server.lua b/net/server.lua index 0097be3c..77bc2f5c 100644 --- a/net/server.lua +++ b/net/server.lua @@ -325,7 +325,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport if not ( forced or fatalerror ) then handler.sendbuffer( ) if bufferqueuelen ~= 0 then -- try again... - handler.write = nil -- ... but no further writing allowed + if handler then + handler.write = nil -- ... but no further writing allowed + end toclose = true return false end @@ -337,9 +339,11 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport socket:close( ) _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) _socketlist[ socket ] = nil - _writetimes[ handler ] = nil - _closelist[ handler ] = nil - handler = nil + if handler then + _writetimes[ handler ] = nil + _closelist[ handler ] = nil + handler = nil + end socket = nil mem_free( ) if server then -- cgit v1.2.3 From 3aeff3a7d2de7c6c7012e478ae8cf3c526a37b3e Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Fri, 17 Apr 2009 16:14:20 +0100 Subject: core.configmanager: Fire event when (re)loading config file --- core/configmanager.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/configmanager.lua b/core/configmanager.lua index 299374ec..37646017 100644 --- a/core/configmanager.lua +++ b/core/configmanager.lua @@ -12,6 +12,8 @@ local _G = _G; local setmetatable, loadfile, pcall, rawget, rawset, io, error, dofile, type = setmetatable, loadfile, pcall, rawget, rawset, io, error, dofile, type; +local eventmanager = require "core.eventmanager"; + module "configmanager" local parsers = {}; @@ -68,6 +70,9 @@ function load(filename, format) if f then local ok, err = parsers[format].load(f:read("*a")); f:close(); + if ok then + eventmanager.fire_event("config-reloaded", { filename = filename, format = format }); + end return ok, "parser", err; end return f, "file", err; -- cgit v1.2.3 From 78a87e700a63d3901f3ee6db85556edcd5f86d01 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Fri, 17 Apr 2009 16:15:16 +0100 Subject: prosody: Simple whitespace fix in error output --- prosody | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prosody b/prosody index b270881c..78171ef7 100755 --- a/prosody +++ b/prosody @@ -38,7 +38,7 @@ do -- Use lfs? Make a new conf/ dir? local ok, level, err = config.load((CFG_CONFIGDIR or ".").."/prosody.cfg.lua"); if not ok then - print(""); + print("\n"); print("**************************"); if level == "parser" then print("A problem occured while reading the config file "..(CFG_CONFIGDIR or ".").."/prosody.cfg.lua"); -- cgit v1.2.3 From 05fbcb767cf2131b62d0dd9a7f0e536e72427d0d Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 18 Apr 2009 04:06:41 +0100 Subject: core.xmlhandlers: expat is the XML parser, not us. Don't reject valid XML. --- core/xmlhandlers.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/xmlhandlers.lua b/core/xmlhandlers.lua index 1409a1ec..67a0829d 100644 --- a/core/xmlhandlers.lua +++ b/core/xmlhandlers.lua @@ -57,7 +57,7 @@ function init_xmlhandlers(session, stream_callbacks) stanza:text(t_concat(chardata)); chardata = {}; end - local curr_ns,name = tagname:match("^(.+)|([%w%-]+)$"); + local curr_ns,name = tagname:match("^(.+)|([^%|]+)$"); if curr_ns ~= stream_default_ns then attr.xmlns = curr_ns; end @@ -109,7 +109,7 @@ function init_xmlhandlers(session, stream_callbacks) end end function xml_handlers:EndElement(tagname) - curr_ns,name = tagname:match("^(.+)|([%w%-]+)$"); + curr_ns,name = tagname:match("^(.+)|([^%|]+)$"); if (not stanza) or (#stanza.last_add > 0 and name ~= stanza.last_add[#stanza.last_add].name) then if tagname == stream_tag then if cb_streamclosed then -- cgit v1.2.3 From b6bc449cd394bb14b5674e920eaddd3d37255bdb Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 18 Apr 2009 14:18:50 +0100 Subject: componentmanager: Set host.connected = nil when deregistering a component so that we fully restore it when we reload --- core/componentmanager.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/core/componentmanager.lua b/core/componentmanager.lua index 308dea57..96b78bf2 100644 --- a/core/componentmanager.lua +++ b/core/componentmanager.lua @@ -104,6 +104,7 @@ end function deregister_component(host) if components[host] then modulemanager.unload(host, "dialback"); + host.connected = nil; local host_config = configmanager.getconfig()[host]; if host_config and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then -- Set default handler -- cgit v1.2.3 From cface37b4928e922a43ef37d1bc49ab3a4009479 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 18 Apr 2009 17:48:30 +0100 Subject: net.adns: Call handler for records already cached --- net/adns.lua | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/net/adns.lua b/net/adns.lua index 4c0e5c38..07d4fe54 100644 --- a/net/adns.lua +++ b/net/adns.lua @@ -8,17 +8,21 @@ local coroutine, tostring, pcall = coroutine, tostring, pcall; module "adns" function lookup(handler, qname, qtype, qclass) - return dns.peek(qname, qtype, qclass) or - coroutine.wrap(function () - log("debug", "Records for "..qname.." not in cache, sending query (%s)...", tostring(coroutine.running())); + return coroutine.wrap(function (peek) + if peek then + log("debug", "Records for %s already cached, using those...", qname); + handler(peek); + return; + end + log("debug", "Records for %s not in cache, sending query (%s)...", qname, tostring(coroutine.running())); dns.query(qname, qtype, qclass); coroutine.yield(nil); -- Wait for reply - log("debug", "Reply for "..qname.." (%s)", tostring(coroutine.running())); + log("debug", "Reply for %s (%s)", qname, tostring(coroutine.running())); local ok, err = pcall(handler, dns.peek(qname, qtype, qclass)); if not ok then log("debug", "Error in DNS response handler: %s", tostring(err)); end - end)(); + end)(dns.peek(qname, qtype, qclass)); end function new_async_socket(sock) -- cgit v1.2.3