Merge 0.9->0.10

This commit is contained in:
Matthew Wild 2014-08-28 09:23:24 +01:00
commit 878efeecd5
10 changed files with 36 additions and 20 deletions

View file

@ -123,7 +123,7 @@ local function do_load_module(host, module_name, state)
end
if modulemap[host][module_name] then
log("warn", "%s is already loaded for %s, so not loading again", module_name, host);
log("debug", "%s is already loaded for %s, so not loading again", module_name, host);
return nil, "module-already-loaded";
elseif modulemap["*"][module_name] then
local mod = modulemap["*"][module_name];

View file

@ -98,7 +98,7 @@ function listener.onconnect(conn)
local pending = {};
local waiting = false;
local function process_next()
if waiting then log("debug", "can't process_next, waiting"); return; end
if waiting then return; end -- log("debug", "can't process_next, waiting");
waiting = true;
while sessions[conn] and #pending > 0 do
local request = t_remove(pending);

View file

@ -91,7 +91,7 @@ end
function stream_callbacks.error(session, error, data)
if error == "no-stream" then
session.log("debug", "Invalid opening stream header");
session.log("debug", "Invalid opening stream header (%s)", (data:gsub("^([^\1]+)\1", "{%1}")));
session:close("invalid-namespace");
elseif error == "parse-error" then
(session.log or log)("debug", "Client XML parse error: %s", tostring(data));

View file

@ -147,6 +147,12 @@ module:hook("stanza/http://jabber.org/protocol/compress:compressed", function(ev
end
end);
module:hook("stanza/http://jabber.org/protocol/compress:failure", function(event)
local err = event.stanza:get_child();
(event.origin.log or module._log)("warn", "Compression setup failed (%s)", err and err.name or "unknown reason");
return true;
end);
module:hook("stanza/http://jabber.org/protocol/compress:compress", function(event)
local session, stanza = event.origin, event.stanza;

View file

@ -80,7 +80,7 @@ local function write_pidfile()
if pidfile_handle then
remove_pidfile();
end
pidfile = module:get_option("pidfile");
pidfile = module:get_option_string("pidfile");
if pidfile then
local err;
local mode = stat(pidfile) and "r+" or "w+";

View file

@ -347,7 +347,9 @@ function stream_callbacks.streamopened(session, attr)
log("debug", "Sending stream features: %s", tostring(features));
send(features);
end
session.notopen = nil;
elseif session.direction == "outgoing" then
session.notopen = nil;
-- If we are just using the connection for verifying dialback keys, we won't try and auth it
if not attr.id then error("stream response did not give us a streamid!!!"); end
session.streamid = attr.id;
@ -381,7 +383,6 @@ function stream_callbacks.streamopened(session, attr)
end
end
end
session.notopen = nil;
end
function stream_callbacks.streamclosed(session)
@ -391,6 +392,7 @@ end
function stream_callbacks.error(session, error, data)
if error == "no-stream" then
session.log("debug", "Invalid opening stream header (%s)", (data:gsub("^([^\1]+)\1", "{%1}")));
session:close("invalid-namespace");
elseif error == "parse-error" then
session.log("debug", "Server-to-server XML parse error: %s", tostring(error));
@ -501,6 +503,7 @@ local function initialize_session(session)
function session.reset_stream()
session.notopen = true;
session.streamid = nil;
session.stream:reset();
end

View file

@ -220,6 +220,7 @@ local error_messages = setmetatable({
["no-such-host"] = "The given hostname does not exist in the config";
["unable-to-save-data"] = "Unable to store, perhaps you don't have permission?";
["no-pidfile"] = "There is no 'pidfile' option in the configuration file, see http://prosody.im/doc/prosodyctl#pidfile for help";
["invalid-pidfile"] = "The 'pidfile' option in the configuration file is not a string, see http://prosody.im/doc/prosodyctl#pidfile for help";
["no-posix"] = "The mod_posix module is not enabled in the Prosody config file, see http://prosody.im/doc/prosodyctl for more info";
["no-such-method"] = "This module has no commands";
["not-running"] = "Prosody is not running";

View file

@ -45,6 +45,8 @@ function add_filter(session, type, callback, priority)
if not filter_list then
filter_list = {};
session.filters[type] = filter_list;
elseif filter_list[callback] then
return; -- Filter already added
end
priority = priority or 0;

View file

@ -1,7 +1,7 @@
-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
--
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
@ -146,7 +146,7 @@ function adduser(params)
if not(provider) or provider.name == "null" then
usermanager.initialize_host(host);
end
local ok, errmsg = usermanager.create_user(user, password, host);
if not ok then
return false, errmsg;
@ -162,7 +162,7 @@ function user_exists(params)
if not(provider) or provider.name == "null" then
usermanager.initialize_host(host);
end
return usermanager.user_exists(user, host);
end
@ -170,7 +170,7 @@ function passwd(params)
if not _M.user_exists(params) then
return false, "no-such-user";
end
return _M.adduser(params);
end
@ -179,7 +179,7 @@ function deluser(params)
return false, "no-such-user";
end
local user, host = nodeprep(params.user), nameprep(params.host);
return usermanager.delete_user(user, host);
end
@ -189,29 +189,33 @@ function getpid()
return false, "no-pidfile";
end
if type(pidfile) ~= "string" then
return false, "invalid-pidfile";
end
local modules_enabled = set.new(config.get("*", "modules_disabled"));
if prosody.platform ~= "posix" or modules_enabled:contains("posix") then
return false, "no-posix";
end
local file, err = io.open(pidfile, "r+");
if not file then
return false, "pidfile-read-failed", err;
end
local locked, err = lfs.lock(file, "w");
if locked then
file:close();
return false, "pidfile-not-locked";
end
local pid = tonumber(file:read("*a"));
file:close();
if not pid then
return false, "invalid-pid";
end
return true, pid;
end
@ -252,10 +256,10 @@ function stop()
if not ret then
return false, "not-running";
end
local ok, pid = _M.getpid()
if not ok then return false, pid; end
signal.kill(pid, signal.SIGTERM);
return true;
end
@ -268,10 +272,10 @@ function reload()
if not ret then
return false, "not-running";
end
local ok, pid = _M.getpid()
if not ok then return false, pid; end
signal.kill(pid, signal.SIGHUP);
return true;
end

View file

@ -109,7 +109,7 @@ function new_sax_handlers(session, stream_callbacks, cb_handleprogress)
end
else
-- Garbage before stream?
cb_error(session, "no-stream");
cb_error(session, "no-stream", tagname);
end
return;
end