# HG changeset patch # User Matthew Wild # Date 1279295634 -3600 # Node ID 28cb5ad728707d932d703d03689f2f876ab99d85 # Parent bb49ada7cf45b6c48e3c25a37135a4bf1792c234# Parent e74e80b454a1e2a3c3bc7efa8eb636fe9f651fc0 Merge Florob->trunk diff -r e74e80b454a1 -r 28cb5ad72870 plugins/mod_proxy65.lua --- 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") diff -r e74e80b454a1 -r 28cb5ad72870 tests/test_util_jid.lua --- 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 diff -r e74e80b454a1 -r 28cb5ad72870 util/jid.lua --- 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;