Changeset

3381:28cb5ad72870

Merge Florob->trunk
author Matthew Wild <mwild1@gmail.com>
date Fri, 16 Jul 2010 16:53:54 +0100
parents 3378:bb49ada7cf45 (diff) 3380:e74e80b454a1 (current diff)
children 3382:fea0f8e19e4c
files
diffstat 3 files changed, 29 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_proxy65.lua	Thu Jul 15 22:58:10 2010 +0200
+++ b/plugins/mod_proxy65.lua	Fri Jul 16 16:53:54 2010 +0100
@@ -14,7 +14,7 @@
 	error("proxy65 should be loaded as a component, please see http://prosody.im/doc/components", 0);
 end
 
-local jid_split, jid_join = require "util.jid".split, require "util.jid".join;
+local jid_split, jid_join, jid_compare = require "util.jid".split, require "util.jid".join, require "util.jid".compare;
 local st = require "util.stanza";
 local componentmanager = require "core.componentmanager";
 local config_get = require "core.configmanager".get;
@@ -151,24 +151,11 @@
 	local err_reply = replies_cache.stream_host_err;
 	local sid = stanza.tags[1].attr.sid;
 	local allow = false;
-	local jid_node, jid_host, jid_resource = jid_split(stanza.attr.from);
-	
-	if stanza.attr.from == nil then
-		jid_node = origin.username;
-		jid_host = origin.host;
-		jid_resource = origin.resource;
-	end
+	local jid = stanza.attr.from;
 	
 	if proxy_acl and #proxy_acl > 0 then
-		if host ~= nil then -- at least a domain is needed.
-			for _, acl in ipairs(proxy_acl) do
-				local acl_node, acl_host, acl_resource = jid_split(acl);
-				if ((acl_node ~= nil and acl_node == jid_node) or acl_node == nil) and
-				   ((acl_host ~= nil and acl_host == jid_host) or acl_host == nil) and
-				   ((acl_resource ~= nil and acl_resource == jid_resource) or acl_resource == nil) then
-					allow = true;
-				end
-			end
+		for _, acl in ipairs(proxy_acl) do
+			if jid_compare(jid, acl) then allow = true; end
 		end
 	else
 		allow = true;
@@ -181,7 +168,7 @@
 			replies_cache.stream_host = reply;
 		end
 	else
-		module:log("warn", "Denying use of proxy for %s", tostring(jid_join(jid_node, jid_host, jid_resource)));
+		module:log("warn", "Denying use of proxy for %s", tostring(jid));
 		if err_reply == nil then
 			err_reply = st.iq({type="error", from=host})
 				:query("http://jabber.org/protocol/bytestreams")
--- a/tests/test_util_jid.lua	Thu Jul 15 22:58:10 2010 +0200
+++ b/tests/test_util_jid.lua	Fri Jul 16 16:53:54 2010 +0100
@@ -54,3 +54,14 @@
 	assert_equal(bare("user@host/"), nil, "invalid JID is nil");
 end
 
+function compare(compare)
+	assert_equal(compare("host", "host"), true, "host should match");
+	assert_equal(compare("host", "other-host"), false, "host should not match");
+	assert_equal(compare("other-user@host/resource", "host"), true, "host should match");
+	assert_equal(compare("other-user@host", "user@host"), false, "user should not match");
+	assert_equal(compare("user@host", "host"), true, "host should match");
+	assert_equal(compare("user@host/resource", "host"), true, "host should match");
+	assert_equal(compare("user@host/resource", "user@host"), true, "user and host should match");
+	assert_equal(compare("user@other-host", "host"), false, "host should not match");
+	assert_equal(compare("user@other-host", "user@host"), false, "host should not match");
+end
--- a/util/jid.lua	Thu Jul 15 22:58:10 2010 +0200
+++ b/util/jid.lua	Fri Jul 16 16:53:54 2010 +0100
@@ -78,4 +78,17 @@
 	return nil; -- Invalid JID
 end
 
+function compare(jid, acl)
+	-- compare jid to single acl rule
+	-- TODO compare to table of rules?
+	local jid_node, jid_host, jid_resource = _split(jid);
+	local acl_node, acl_host, acl_resource = _split(acl);
+	if ((acl_node ~= nil and acl_node == jid_node) or acl_node == nil) and
+		((acl_host ~= nil and acl_host == jid_host) or acl_host == nil) and
+		((acl_resource ~= nil and acl_resource == jid_resource) or acl_resource == nil) then
+		return true
+	end
+	return false
+end
+
 return _M;