Merge 0.10->trunk
authorMatthew Wild <mwild1@gmail.com>
Fri, 18 Mar 2016 14:03:35 +0000 (14:03 +0000)
committerMatthew Wild <mwild1@gmail.com>
Fri, 18 Mar 2016 14:03:35 +0000 (14:03 +0000)
plugins/mod_component.lua
plugins/mod_saslauth.lua
prosody
prosodyctl
tests/test_util_jid.lua
util/jid.lua

index a5136f6ca528f3628e32b065b81dcb09f871ebc7..eebaaf3eed542f6317d134528c440e06fd24b683 100644 (file)
@@ -40,7 +40,7 @@ function module.add_host(module)
 
        local send;
 
-       local function on_destroy(session, err)
+       local function on_destroy(session, err) --luacheck: ignore 212/err
                env.connected = false;
                env.session = false;
                send = nil;
@@ -149,7 +149,7 @@ local stream_callbacks = { default_ns = xmlns_component };
 
 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams";
 
-function stream_callbacks.error(session, error, data, data2)
+function stream_callbacks.error(session, error, data)
        if session.destroyed then return; end
        module:log("warn", "Error processing component stream: %s", tostring(error));
        if error == "no-stream" then
@@ -295,7 +295,7 @@ function listener.onconnect(conn)
                session.stream:reset();
        end
 
-       function session.data(conn, data)
+       function session.data(_, data)
                local ok, err = stream:feed(data);
                if ok then return; end
                module:log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_"));
@@ -314,6 +314,7 @@ function 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));
+               module:fire_event("component-disconnected", { session = session, reason = err });
                if session.on_destroy then session:on_destroy(err); end
                sessions[conn] = nil;
                for k in pairs(session) do
@@ -322,7 +323,6 @@ function listener.ondisconnect(conn, err)
                        end
                end
                session.destroyed = true;
-               session = nil;
        end
 end
 
index 7e9b0720a9e7daa5c3c43bb3ba44d4e51620c476..bb36600b2e066641e59fc975c4a01281b90f23dd 100644 (file)
@@ -19,7 +19,7 @@ local tostring = tostring;
 local secure_auth_only = module:get_option_boolean("c2s_require_encryption", module:get_option_boolean("require_encryption", false));
 local allow_unencrypted_plain_auth = module:get_option_boolean("allow_unencrypted_plain_auth", false)
 local insecure_mechanisms = module:get_option_set("insecure_sasl_mechanisms", allow_unencrypted_plain_auth and {} or {"PLAIN", "LOGIN"});
-local disabled_mechanisms = module:get_option_set("disable_sasl_mechanisms", {});
+local disabled_mechanisms = module:get_option_set("disable_sasl_mechanisms", { "DIGEST-MD5" });
 
 local log = module._log;
 
diff --git a/prosody b/prosody
index 6a3b50db1c72e66548f637165911b568534e6918..9cc32cee4a740a85bbf76aad88d78b7a08cd98f7 100755 (executable)
--- a/prosody
+++ b/prosody
 
 -- Will be modified by configure script if run --
 
-CFG_SOURCEDIR=os.getenv("PROSODY_SRCDIR");
-CFG_CONFIGDIR=os.getenv("PROSODY_CFGDIR");
-CFG_PLUGINDIR=os.getenv("PROSODY_PLUGINDIR");
-CFG_DATADIR=os.getenv("PROSODY_DATADIR");
+CFG_SOURCEDIR=CFG_SOURCEDIR or os.getenv("PROSODY_SRCDIR");
+CFG_CONFIGDIR=CFG_CONFIGDIR or os.getenv("PROSODY_CFGDIR");
+CFG_PLUGINDIR=CFG_PLUGINDIR or os.getenv("PROSODY_PLUGINDIR");
+CFG_DATADIR=CFG_DATADIR or os.getenv("PROSODY_DATADIR");
 
 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
index a83ec6123a844338b93efdeea96c109d329526fd..92606dd2537c82f353b032e954e63cea2f0b0869 100755 (executable)
 
 -- Will be modified by configure script if run --
 
-CFG_SOURCEDIR=os.getenv("PROSODY_SRCDIR");
-CFG_CONFIGDIR=os.getenv("PROSODY_CFGDIR");
-CFG_PLUGINDIR=os.getenv("PROSODY_PLUGINDIR");
-CFG_DATADIR=os.getenv("PROSODY_DATADIR");
+CFG_SOURCEDIR=CFG_SOURCEDIR or os.getenv("PROSODY_SRCDIR");
+CFG_CONFIGDIR=CFG_CONFIGDIR or os.getenv("PROSODY_CFGDIR");
+CFG_PLUGINDIR=CFG_PLUGINDIR or os.getenv("PROSODY_PLUGINDIR");
+CFG_DATADIR=CFG_DATADIR or os.getenv("PROSODY_DATADIR");
 
 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
 
index 02a90c3ba983d612fe1d55a90774af1f4904876f..c697e63f5c33c85f66374092f52ad8a78a555fbe 100644 (file)
@@ -71,3 +71,73 @@ function compare(compare)
        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
+
+function node(node)
+       local function test(jid, expected_node)
+               assert_equal(node(jid), expected_node, "Unexpected node for "..tostring(jid));
+       end
+
+       test("example.com", nil);
+       test("foo.example.com", nil);
+       test("foo.example.com/resource", nil);
+       test("foo.example.com/some resource", nil);
+       test("foo.example.com/some@resource", nil);
+
+       test("foo@foo.example.com/some@resource", "foo");
+       test("foo@example/some@resource", "foo");
+
+       test("foo@example/@resource", "foo");
+       test("foo@example@resource", nil);
+       test("foo@example", "foo");
+       test("foo", nil);
+
+       test(nil, nil);
+end
+
+function host(host)
+       local function test(jid, expected_host)
+               assert_equal(host(jid), expected_host, "Unexpected host for "..tostring(jid));
+       end
+
+       test("example.com", "example.com");
+       test("foo.example.com", "foo.example.com");
+       test("foo.example.com/resource", "foo.example.com");
+       test("foo.example.com/some resource", "foo.example.com");
+       test("foo.example.com/some@resource", "foo.example.com");
+
+       test("foo@foo.example.com/some@resource", "foo.example.com");
+       test("foo@example/some@resource", "example");
+
+       test("foo@example/@resource", "example");
+       test("foo@example@resource", nil);
+       test("foo@example", "example");
+       test("foo", "foo");
+
+       test(nil, nil);
+end
+
+function resource(resource)
+       local function test(jid, expected_resource)
+               assert_equal(resource(jid), expected_resource, "Unexpected resource for "..tostring(jid));
+       end
+
+       test("example.com", nil);
+       test("foo.example.com", nil);
+       test("foo.example.com/resource", "resource");
+       test("foo.example.com/some resource", "some resource");
+       test("foo.example.com/some@resource", "some@resource");
+
+       test("foo@foo.example.com/some@resource", "some@resource");
+       test("foo@example/some@resource", "some@resource");
+
+       test("foo@example/@resource", "@resource");
+       test("foo@example@resource", nil);
+       test("foo@example", nil);
+       test("foo", nil);
+       test("/foo", nil);
+       test("@x/foo", nil);
+       test("@/foo", nil);
+
+       test(nil, nil);
+end
+
index 76155ac70f81d7118693ab6f8bfe8d7116196b20..60bb0829557090e24f4f9b1c6dddf639d25c326e 100644 (file)
@@ -93,6 +93,18 @@ local function compare(jid, acl)
        return false
 end
 
+local function node(jid)
+       return (select(1, split(jid)));
+end
+
+local function host(jid)
+       return (select(2, split(jid)));
+end
+
+local function resource(jid)
+       return (select(3, split(jid)));
+end
+
 local function escape(s) return s and (s:gsub(".", escapes)); end
 local function unescape(s) return s and (s:gsub("\\%x%x", unescapes)); end
 
@@ -103,6 +115,9 @@ return {
        join = join;
        prep = prep;
        compare = compare;
+       node = node;
+       host = host;
+       resource = resource;
        escape = escape;
        unescape = unescape;
 };