mod_iq: Immediately return an error for IQs to non-existing bare JIDs

Mon, 01 Jun 2009 10:44:05 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Mon, 01 Jun 2009 10:44:05 +0500
changeset 1267
1bf897de6c24
parent 1266
605a73234230
child 1268
dc1f95b37024

mod_iq: Immediately return an error for IQs to non-existing bare JIDs

plugins/mod_iq.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_iq.lua	Mon Jun 01 10:27:47 2009 +0500
+++ b/plugins/mod_iq.lua	Mon Jun 01 10:44:05 2009 +0500
@@ -1,5 +1,7 @@
 
 local st = require "util.stanza";
+local jid_split = require "util.jid".split;
+local user_exists = require "core.usermanager".user_exists;
 
 local full_sessions = full_sessions;
 local bare_sessions = bare_sessions;
@@ -24,7 +26,15 @@
 	-- IQ to bare JID recieved
 	local origin, stanza = data.origin, data.stanza;
 
-	-- TODO if not user exists, return an error
+	if not bare_sessions[stanza.attr.to] then -- quick check for account existance
+		local node, host = jid_split(stanza.attr.to);
+		if not user_exists(node, host) then -- full check for account existance
+			if stanza.attr.type == "get" or stanza.attr.type == "set" then
+				origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
+			end
+			return true;
+		end
+	end
 	-- TODO fire post processing events
 	if #stanza.tags == 1 then
 		return module:fire_event("iq/bare/"..stanza.tags[1].attr.xmlns..":"..stanza.tags[1].name, data);

mercurial