Merge 0.9->0.10
authorMatthew Wild <mwild1@gmail.com>
Thu, 28 Aug 2014 09:23:24 +0100
changeset 6367 769a3577dd85
parent 6355 c2d144d3f8dd (current diff)
parent 6366 8dee696c33cc (diff)
child 6368 bd0c8b361589
child 6370 3cfbd3f2c658
Merge 0.9->0.10
core/modulemanager.lua
net/http/server.lua
plugins/mod_c2s.lua
plugins/mod_compression.lua
plugins/mod_posix.lua
plugins/mod_privacy.lua
plugins/mod_s2s/mod_s2s.lua
prosodyctl
util/filters.lua
util/prosodyctl.lua
util/xmppstream.lua
--- a/core/modulemanager.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/core/modulemanager.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -123,7 +123,7 @@
 	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];
--- a/net/http/server.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/net/http/server.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -98,7 +98,7 @@
 	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);
--- a/plugins/mod_c2s.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/plugins/mod_c2s.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -91,7 +91,7 @@
 
 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));
--- a/plugins/mod_compression.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/plugins/mod_compression.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -147,6 +147,12 @@
 	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;
 
--- a/plugins/mod_posix.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/plugins/mod_posix.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -80,7 +80,7 @@
 	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+";
--- a/plugins/mod_s2s/mod_s2s.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/plugins/mod_s2s/mod_s2s.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -347,7 +347,9 @@
 			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 @@
 			end
 		end
 	end
-	session.notopen = nil;
 end
 
 function stream_callbacks.streamclosed(session)
@@ -391,6 +392,7 @@
 
 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 @@
 
 	function session.reset_stream()
 		session.notopen = true;
+		session.streamid = nil;
 		session.stream:reset();
 	end
 
--- a/prosodyctl	Wed Aug 27 13:00:04 2014 +0200
+++ b/prosodyctl	Thu Aug 28 09:23:24 2014 +0100
@@ -220,6 +220,7 @@
 		["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";
--- a/util/filters.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/util/filters.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -45,6 +45,8 @@
 	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;
--- a/util/prosodyctl.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/util/prosodyctl.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -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 @@
 	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 @@
 	if not(provider) or provider.name == "null" then
 		usermanager.initialize_host(host);
 	end
-
+	
 	return usermanager.user_exists(user, host);
 end
 
@@ -170,7 +170,7 @@
 	if not _M.user_exists(params) then
 		return false, "no-such-user";
 	end
-
+	
 	return _M.adduser(params);
 end
 
@@ -179,7 +179,7 @@
 		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 @@
 		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 @@
 	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 @@
 	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
--- a/util/xmppstream.lua	Wed Aug 27 13:00:04 2014 +0200
+++ b/util/xmppstream.lua	Thu Aug 28 09:23:24 2014 +0100
@@ -109,7 +109,7 @@
 					end
 				else
 					-- Garbage before stream?
-					cb_error(session, "no-stream");
+					cb_error(session, "no-stream", tagname);
 				end
 				return;
 			end