Merge 0.6->0.7
authorMatthew Wild <mwild1@gmail.com>
Wed, 24 Mar 2010 22:34:59 +0000 (22:34 +0000)
committerMatthew Wild <mwild1@gmail.com>
Wed, 24 Mar 2010 22:34:59 +0000 (22:34 +0000)
plugins/mod_tls.lua
plugins/muc/muc.lib.lua
prosody

index b30ad3f324c6a6a60d8f807c16d50b815892c050..8b96aa157922c7bf1f63613a0e000e3baf72851f 100644 (file)
@@ -10,6 +10,7 @@ local st = require "util.stanza";
 
 local secure_auth_only = module:get_option("c2s_require_encryption") or module:get_option("require_encryption");
 local secure_s2s_only = module:get_option("s2s_require_encryption");
+local allow_s2s_tls = module:get_option("s2s_allow_encryption") ~= false;
 
 local xmlns_starttls = 'urn:ietf:params:xml:ns:xmpp-tls';
 local starttls_attr = { xmlns = xmlns_starttls };
@@ -27,9 +28,9 @@ local host = hosts[module.host];
 local function can_do_tls(session)
        if session.type == "c2s_unauthed" then
                return session.conn.starttls and host.ssl_ctx_in;
-       elseif session.type == "s2sin_unauthed" then
+       elseif session.type == "s2sin_unauthed" and allow_s2s_tls then
                return session.conn.starttls and host.ssl_ctx_in;
-       elseif session.direction == "outgoing" then
+       elseif session.direction == "outgoing" and allow_s2s_tls then
                return session.conn.starttls and host.ssl_ctx;
        end
        return false;
index 273e21ce94214b585d54580b60eb658b6d59f5af..1cc001bb0fc8ead4aca56c7e9420f0a0edadbf33 100644 (file)
@@ -122,13 +122,9 @@ function room_mt:broadcast_message(stanza, historic)
                local history = self._data['history'];
                if not history then history = {}; self._data['history'] = history; end
                stanza = st.clone(stanza);
-               stanza.attr.to = "";
-               local stamp = datetime.datetime();
-               local chars = #tostring(stanza);
-               stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = muc_domain, stamp = stamp}):up(); -- XEP-0203
+               stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = muc_domain, stamp = datetime.datetime()}):up(); -- XEP-0203
                stanza:tag("x", {xmlns = "jabber:x:delay", from = muc_domain, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
-               local entry = { stanza = stanza, stamp = stamp };
-               t_insert(history, entry);
+               t_insert(history, st.preserialize(stanza));
                while #history > history_length do t_remove(history, 1) end
        end
 end
@@ -155,46 +151,12 @@ function room_mt:send_occupant_list(to)
                end
        end
 end
-function room_mt:send_history(to, stanza)
+function room_mt:send_history(to)
        local history = self._data['history']; -- send discussion history
        if history then
-               local x_tag = stanza and stanza:get_child("x", "http://jabber.org/protocol/muc");
-               local history_tag = x_tag and x_tag:get_child("history", "http://jabber.org/protocol/muc");
-               
-               local maxchars = history_tag and tonumber(history_tag.attr.maxchars);
-               if maxchars then maxchars = math.floor(maxchars); end
-               
-               local maxstanzas = math.floor(history_tag and tonumber(history_tag.attr.maxstanzas) or #history);
-               if not history_tag then maxstanzas = 20; end
-
-               local seconds = history_tag and tonumber(history_tag.attr.seconds);
-               if seconds then seconds = datetime.datetime(os.time() - math.floor(seconds)); end
-
-               local since = history_tag and history_tag.attr.since;
-               if since and not since:match("^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%dZ$") then since = nil; end -- FIXME timezone support
-               if seconds and (not since or since < seconds) then since = seconds; end
-
-               local n = 0;
-               local charcount = 0;
-               local stanzacount = 0;
-               
-               for i=#history,1,-1 do
-                       local entry = history[i];
-                       if maxchars then
-                               if not entry.chars then
-                                       entry.stanza.attr.to = "";
-                                       entry.chars = #tostring(entry.stanza);
-                               end
-                               charcount = charcount + entry.chars + #to;
-                               if charcount > maxchars then break; end
-                       end
-                       if since and since > entry.stamp then break; end
-                       if n + 1 > maxstanzas then break; end
-                       n = n + 1;
-               end
-               for i=#history-n+1,#history do
-                       local msg = history[i].stanza;
-                       msg.attr.to = to;
+               for _, msg in ipairs(history) do
+                       msg = st.deserialize(msg);
+                       msg.attr.to=to;
                        self:_route_stanza(msg);
                end
        end
@@ -357,7 +319,7 @@ function room_mt:handle_to_occupant(origin, stanza) -- PM, vCards, etc
                                                                :tag("item", {affiliation=affiliation or "none", role=role or "none"}):up()
                                                                :tag("status", {code='110'}));
                                                end
-                                               self:send_history(from, stanza);
+                                               self:send_history(from);
                                        else -- banned
                                                local reply = st.error_reply(stanza, "auth", "forbidden"):up();
                                                reply.tags[1].attr.code = "403";
diff --git a/prosody b/prosody
index 0f705b62bc905cd4f1019b6cf049f7dede10f54c..46f3331f004bc9030f5866c5c50a6bcb3e104dc2 100755 (executable)
--- a/prosody
+++ b/prosody
@@ -22,6 +22,9 @@ if CFG_SOURCEDIR then
        package.cpath = CFG_SOURCEDIR.."/?.so;"..package.cpath;
 end
 
+package.path = package.path..";"..(CFG_SOURCEDIR or ".").."/fallbacks/?.lua";
+package.cpath = package.cpath..";"..(CFG_SOURCEDIR or ".").."/fallbacks/?.so";
+
 -- Substitute ~ with path to home directory in data path
 if CFG_DATADIR then
        if os.getenv("HOME") then