X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fxmppcomponent_listener.lua;h=58676565e7be70cf3896b970621d7565b8dd5a59;hb=2dc5c336d5225750dea5f08215095f9f6dc23103;hp=de1dca4580133671e5e8d61e408cf7d8408a19b9;hpb=3df1e77c0a232ffb269f744c20bea4e8d3c72a05;p=prosody.git diff --git a/net/xmppcomponent_listener.lua b/net/xmppcomponent_listener.lua index de1dca45..58676565 100644 --- a/net/xmppcomponent_listener.lua +++ b/net/xmppcomponent_listener.lua @@ -15,8 +15,6 @@ local lxp = require "lxp"; local logger = require "util.logger"; local config = require "core.configmanager"; local connlisteners = require "net.connlisteners"; -local cm_register_component = require "core.componentmanager".register_component; -local cm_deregister_component = require "core.componentmanager".deregister_component; local uuid_gen = require "util.uuid".generate; local jid_split = require "util.jid".split; local sha1 = require "util.hashes".sha1; @@ -67,19 +65,16 @@ end function stream_callbacks.streamopened(session, attr) if config.get(attr.to, "core", "component_module") ~= "component" then - -- Trying to act as a component domain which + -- Trying to act as a component domain which -- hasn't been configured session:close{ condition = "host-unknown", text = tostring(attr.to).." does not match any configured external components" }; return; end - -- Store the original host (this is used for config, etc.) - session.user = attr.to; - -- Set the host for future reference - session.host = config.get(attr.to, "core", "component_address") or attr.to; - -- Note that we don't create the internal component + -- Note that we don't create the internal component -- until after the external component auths successfully + session.host = attr.to; session.streamid = uuid_gen(); session.notopen = nil; @@ -89,7 +84,7 @@ function stream_callbacks.streamopened(session, attr) end function stream_callbacks.streamclosed(session) - session.log("Received "); + session.log("debug", "Received "); session:close(); end @@ -107,6 +102,7 @@ function stream_callbacks.handlestanza(session, stanza) local _, domain = jid_split(stanza.attr.from); if domain ~= session.host then -- Return error + session.log("warn", "Component sent stanza with missing or invalid 'from' address"); session:close{ condition = "invalid-from"; text = "Component tried to send from address <"..tostring(from) @@ -119,6 +115,7 @@ function stream_callbacks.handlestanza(session, stanza) stanza.attr.from = session.host; end if not stanza.attr.to then + session.log("warn", "Rejecting stanza with no 'to' address"); session.send(st.error_reply(stanza, "modify", "bad-request", "Components MUST specify a 'to' address on stanzas")); return; end @@ -204,12 +201,8 @@ function component_listener.ondisconnect(conn, err) local session = sessions[conn]; if session then (session.log or log)("info", "component disconnected: %s (%s)", tostring(session.host), tostring(err)); - if session.host then - log("debug", "Deregistering component"); - cm_deregister_component(session.host); - hosts[session.host].connected = nil; - end - sessions[conn] = nil; + if session.on_destroy then session:on_destroy(err); end + sessions[conn] = nil; for k in pairs(session) do if k ~= "log" and k ~= "close" then session[k] = nil;