Changeset

2997:6ccaefea80ec

Merge with tip.
author Tobias Markmann <tm@ayena.de>
date Fri, 12 Mar 2010 18:41:05 +0100
parents 2996:b0515ed4d9d7 (current diff) 2744:887d3a0e1e4e (diff)
children 2998:36c169ed1576
files net/server_select.lua util/sasl.lua
diffstat 11 files changed, 84 insertions(+), 73 deletions(-) [+]
line wrap: on
line diff
--- a/core/certmanager.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/core/certmanager.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -3,7 +3,7 @@
 local ssl = ssl;
 local ssl_newcontext = ssl and ssl.newcontext;
 
-local setmetatable = setmetatable;
+local setmetatable, tostring = setmetatable, tostring;
 
 local prosody = prosody;
 
@@ -39,8 +39,10 @@
 					reason = "Check that the path is correct, and the file exists.";
 				elseif reason == "system lib" then
 					reason = "Previous error (see logs), or other system error.";
+				elseif reason == "(null)" or not reason then
+					reason = "Check that the file exists and the permissions are correct";
 				else
-					reason = "Reason: "..tostring(reason or "unknown"):lower();
+					reason = "Reason: "..tostring(reason):lower();
 				end
 				log("error", "SSL/TLS: Failed to load %s: %s", file, reason);
 			else
@@ -54,7 +56,7 @@
 end
 
 function reload_ssl_config()
-	default_ssl_config = config.get("*", "core", "ssl");
+	default_ssl_config = configmanager.get("*", "core", "ssl");
 end
 
 prosody.events.add_handler("config-reloaded", reload_ssl_config);
--- a/net/dns.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/net/dns.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -532,14 +532,19 @@
 		if not self.server or #self.server == 0 then
 			-- TODO log warning about no nameservers, adding opendns servers as fallback
 			self:addnameserver("208.67.222.222");
-			self:addnameserver("208.67.220.220") ; 	
+			self:addnameserver("208.67.220.220");
 		end
 	else -- posix
 		local resolv_conf = io.open("/etc/resolv.conf");
 		if resolv_conf then
 			for line in resolv_conf:lines() do
-				local address = line:gsub("#.*$", ""):match('^%s*nameserver%s+(%d+%.%d+%.%d+%.%d+)%s*$');
-				if address then self:addnameserver(address) end
+				line = line:gsub("#.*$", "")
+					:match('^%s*nameserver%s+(.*)%s*$');
+				if line then
+					line:gsub("%f[%d.](%d+%.%d+%.%d+%.%d+)%f[^%d.]", function (address)
+						self:addnameserver(address)
+					end);
+				end
 			end
 		end
 		if not self.server or #self.server == 0 then
@@ -796,7 +801,7 @@
 				set(self.wanted, q.class, q.type, q.name, nil);
 			end
 		end
-	end 
+	end
 
 	return response;
 end
--- a/net/server_event.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/net/server_event.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -543,7 +543,7 @@
 						local callback = function( )
 							interface:_close()
 							interface.eventwritetimeout = nil
-							return evreturn, evtimeout
+							return -1;
 						end
 						interface.eventwritetimeout = addevent( base, nil, EV_TIMEOUT, callback, cfg.WRITE_TIMEOUT )  -- reg a new timeout event
 						debug( "wantread during write attemp, reg it in readcallback but dont know what really happens next..." )
@@ -671,16 +671,16 @@
 					debug( "maximal connections reached, refuse client connection; accept delay:", delay )
 					return EV_TIMEOUT, delay  -- delay for next accept attemp
 				end
-				local ip, port = client:getpeername( )
+				local client_ip, client_port = client:getpeername( )
 				interface._connections = interface._connections + 1  -- increase connection count
-				local clientinterface = handleclient( client, ip, port, interface, pattern, listener, nil, sslctx )
+				local clientinterface = handleclient( client, client_ip, client_port, interface, pattern, listener, nil, sslctx )
 				--vdebug( "client id:", clientinterface, "startssl:", startssl )
 				if ssl and sslctx then
 					clientinterface:starttls(sslctx)
 				else
 					clientinterface:_start_session( clientinterface.onconnect )
 				end
-				debug( "accepted incoming client connection from:", ip, port )
+				debug( "accepted incoming client connection from:", client_ip or "<unknown IP>", client_port or "<unknown port>", "to", port or "<unknown port>");
 				
 				client, err = server:accept()    -- try to accept again
 			end
@@ -762,7 +762,7 @@
 			local server = function( )
 				return nil, "this is a dummy server interface"
 			end
-			local interface = wrapclient( client, ip, serverport, listeners, pattern, sslctx, startssl )
+			local interface = wrapclient( client, ip, serverport, listener, pattern, sslctx, startssl )
 			interface:_start_connection( startssl )
 			debug( "new connection id:", interface.id )
 			return interface, err
--- a/net/server_select.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/net/server_select.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -430,12 +430,12 @@
 	end
 	local _readbuffer = function( ) -- this function reads data
 		local buffer, err, part = receive( socket, pattern )	-- receive buffer with "pattern"
-		if not err or (err == "wantread" or err == "timeout") or string_len(part) > 0 then -- received something
+		if not err or (err == "wantread" or err == "timeout") or (part and string_len(part) > 0) then -- received something
 			local buffer = buffer or part or ""
 			local len = string_len( buffer )
 			if len > maxreadlen then
 				disconnect( handler, "receive buffer exceeded" )
-				handler.close( true )
+				handler:close( true )
 				return false
 			end
 			local count = len * STAT_UNIT
@@ -448,7 +448,7 @@
 			out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) )
 			fatalerror = true
 			disconnect( handler, err )
-		_ = handler and handler.close( )
+		_ = handler and handler:close( )
 			return false
 		end
 	end
@@ -472,7 +472,7 @@
 			_sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist
 			_ = needtls and handler:starttls(nil, true)
 			_writetimes[ handler ] = nil
-			_ = toclose and handler.close( )
+			_ = toclose and handler:close( )
 			return true
 		elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write
 			buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer
@@ -485,7 +485,7 @@
 			out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) )
 			fatalerror = true
 			disconnect( handler, err )
-			_ = handler and handler.close( )
+			_ = handler and handler:close( )
 			return false
 		end
 	end
--- a/plugins/mod_offline.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/plugins/mod_offline.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -6,51 +6,51 @@
 -- COPYING file in the source package for more information.
 --
 
-
-local datamanager = require "util.datamanager";
-local st = require "util.stanza";
-local datetime = require "util.datetime";
+
+local datamanager = require "util.datamanager";
+local st = require "util.stanza";
+local datetime = require "util.datetime";
 local ipairs = ipairs;
-local jid_split = require "util.jid".split;
-
-module:add_feature("msgoffline");
-
-module:hook("message/offline/store", function(event)
-	local origin, stanza = event.origin, event.stanza;
-	local to = stanza.attr.to;
-	local node, host;
-	if to then
-		node, host = jid_split(to)
-	else
-		node, host = origin.username, origin.host;
-	end
-	
-	stanza.attr.stamp, stanza.attr.stamp_legacy = datetime.datetime(), datetime.legacy();
-	local result = datamanager.list_append(node, host, "offline", st.preserialize(stanza));
-	stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil;
-	
-	return true;
-end);
-
-module:hook("message/offline/broadcast", function(event)
-	local origin = event.origin;
-	local node, host = origin.username, origin.host;
-	
-	local data = datamanager.list_load(node, host, "offline");
-	if not data then return true; end
-	for _, stanza in ipairs(data) do
-		stanza = st.deserialize(stanza);
-		stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = host, stamp = stanza.attr.stamp}):up(); -- XEP-0203
-		stanza:tag("x", {xmlns = "jabber:x:delay", from = host, stamp = stanza.attr.stamp_legacy}):up(); -- XEP-0091 (deprecated)
-		stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil;
-		origin.send(stanza);
-	end
-	return true;
-end);
-
-module:hook("message/offline/delete", function(event)
-	local origin = event.origin;
-	local node, host = origin.username, origin.host;
-
-	return datamanager.list_store(node, host, "offline", nil);
-end);
+local jid_split = require "util.jid".split;
+
+module:add_feature("msgoffline");
+
+module:hook("message/offline/store", function(event)
+	local origin, stanza = event.origin, event.stanza;
+	local to = stanza.attr.to;
+	local node, host;
+	if to then
+		node, host = jid_split(to)
+	else
+		node, host = origin.username, origin.host;
+	end
+	
+	stanza.attr.stamp, stanza.attr.stamp_legacy = datetime.datetime(), datetime.legacy();
+	local result = datamanager.list_append(node, host, "offline", st.preserialize(stanza));
+	stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil;
+	
+	return true;
+end);
+
+module:hook("message/offline/broadcast", function(event)
+	local origin = event.origin;
+	local node, host = origin.username, origin.host;
+	
+	local data = datamanager.list_load(node, host, "offline");
+	if not data then return true; end
+	for _, stanza in ipairs(data) do
+		stanza = st.deserialize(stanza);
+		stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = host, stamp = stanza.attr.stamp}):up(); -- XEP-0203
+		stanza:tag("x", {xmlns = "jabber:x:delay", from = host, stamp = stanza.attr.stamp_legacy}):up(); -- XEP-0091 (deprecated)
+		stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil;
+		origin.send(stanza);
+	end
+	return true;
+end);
+
+module:hook("message/offline/delete", function(event)
+	local origin = event.origin;
+	local node, host = origin.username, origin.host;
+
+	return datamanager.list_store(node, host, "offline", nil);
+end);
--- a/plugins/mod_proxy65.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/plugins/mod_proxy65.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -91,12 +91,12 @@
 			conn:lock_read(true)
 		else
 			module:log("warn", "Neither data transfer nor initial connect of a participator of a transfer.")
-			conn.close();
+			conn:close();
 		end
 	else
 		if data ~= nil then
 			module:log("warn", "unknown connection with no authentication data -> closing it");
-			conn.close();
+			conn:close();
 		end
 	end
 end
@@ -107,9 +107,9 @@
 		if session.sha and transfers[session.sha] then
 			local initiator, target = transfers[session.sha].initiator, transfers[session.sha].target;
 			if initiator == conn and target ~= nil then
-				target.close();
+				target:close();
 			elseif target == conn and initiator ~= nil then
-			 	initiator.close();
+			 	initiator:close();
 			end
 			transfers[session.sha] = nil;
 		end
--- a/plugins/mod_saslauth.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/plugins/mod_saslauth.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -36,7 +36,10 @@
 
 local new_sasl;
 if sasl_backend == "cyrus" then
+	prosody.unlock_globals(); --FIXME: Figure out why this is needed and
+	                          -- why cyrussasl isn't caught by the sandbox
 	local ok, cyrus = pcall(require, "util.sasl_cyrus");
+	prosody.lock_globals();
 	if ok then
 		local cyrus_new = cyrus.new;
 		new_sasl = function(realm)
--- a/prosody	Fri Mar 12 18:37:51 2010 +0100
+++ b/prosody	Fri Mar 12 18:41:05 2010 +0100
@@ -305,7 +305,7 @@
 end
 
 function prepare_to_start()
-	log("debug", "Prosody is using the %s backend for connection handling", server.get_backend());
+	log("info", "Prosody is using the %s backend for connection handling", server.get_backend());
 	-- Signal to modules that we are ready to start
 	eventmanager.fire_event("server-starting");
 	prosody.events.fire_event("server-starting");
--- a/util/sasl.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/util/sasl.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -122,7 +122,7 @@
 end
 
 -- load the mechanisms
-load_mechs = {"plain", "digest-md5", "anonymous", "scram"}
+local load_mechs = {"plain", "digest-md5", "anonymous", "scram"}
 for _, mech in ipairs(load_mechs) do
 	local name = "util.sasl."..mech;
 	local m = require(name);
--- a/util/sasl_cyrus.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/util/sasl_cyrus.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -87,6 +87,7 @@
 -- select a mechanism to use
 function method:select(mechanism)
 	self.mechanism = mechanism;
+	if not self.mechs then self:mechanisms(); end
 	return self.mechs[mechanism];
 end
 
--- a/util/stanza.lua	Fri Mar 12 18:37:51 2010 +0100
+++ b/util/stanza.lua	Fri Mar 12 18:41:05 2010 +0100
@@ -247,14 +247,14 @@
 		for i=1,#attr do attr[i] = nil; end
 		local attrx = {};
 		for att in pairs(attr) do
-			if s_find(att, "|", 1, true) and not s_find(k, "\1", 1, true) then
-				local ns,na = s_match(k, "^([^|]+)|(.+)$");
+			if s_find(att, "|", 1, true) and not s_find(att, "\1", 1, true) then
+				local ns,na = s_match(att, "^([^|]+)|(.+)$");
 				attrx[ns.."\1"..na] = attr[att];
 				attr[att] = nil;
 			end
 		end
 		for a,v in pairs(attrx) do
-			attr[x] = v;
+			attr[a] = v;
 		end
 		setmetatable(stanza, stanza_mt);
 		for _, child in ipairs(stanza) do