From 2064173f3b789cf78d19e7489bdabe84cb9a94aa Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 3 Apr 2015 12:10:30 +0200 Subject: util.datamanager: Fix traceback due to %s in log message --- util/datamanager.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/datamanager.lua b/util/datamanager.lua index b82349f1..b4138638 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -293,7 +293,7 @@ function users(host, store, typ) local mode, err = lfs.attributes(store_dir, "mode"); if not mode then - return function() log("debug", err or (store_dir .. " does not exist")) end + return function() log("debug", "%s", err or (store_dir .. " does not exist")) end end local next, state = lfs.dir(store_dir); return function(state) -- cgit v1.2.3 From 38a580bfebacc3c2725f4224c0ca6e7b5c1f8a51 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 26 Apr 2015 19:50:24 +0200 Subject: net.dns: Make sure argument to math.randomseed does not overflow a 32 bit *signed* int (blame Lua). Closes #439 --- net/dns.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/dns.lua b/net/dns.lua index 28cb4419..763ee9ec 100644 --- a/net/dns.lua +++ b/net/dns.lua @@ -225,7 +225,7 @@ end function dns.random(...) -- - - - - - - - - - - - - - - - - - - dns.random - math.randomseed(math.floor(10000*socket.gettime()) % 0x100000000); + math.randomseed(math.floor(10000*socket.gettime()) % 0x80000000); dns.random = math.random; return dns.random(...); end -- cgit v1.2.3 From f39b6c4482d7faab8fc5b3af51dc40395f976f4e Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 27 Apr 2015 21:52:16 +0200 Subject: prosodyctl: check certs: Correctly check that certificates are valid for s2s --- prosodyctl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prosodyctl b/prosodyctl index e8fca0ce..ef436106 100755 --- a/prosodyctl +++ b/prosodyctl @@ -1146,7 +1146,7 @@ function commands.check(arg) end if (not (config.get(host, "anonymous_login") or config.get(host, "authentication") == "anonymous")) - and not x509_verify_identity(host, "_xmpp-client", cert) then + and not x509_verify_identity(host, "_xmpp-server", cert) then print(" Not vaild for server-to-server connections to "..host..".") cert_ok = false end -- cgit v1.2.3 From 2ab41577547234d7147c7e007da9f77d46a914dc Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 28 Apr 2015 13:42:59 +0100 Subject: util.events: Add support for event wrappers, functions which can wrap the calling of event handlers to run code before/after an event (for debugging, statistics, logging purposes, etc.) --- util/events.lua | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/util/events.lua b/util/events.lua index 40ca3913..d5a7359c 100644 --- a/util/events.lua +++ b/util/events.lua @@ -17,6 +17,8 @@ module "events" function new() local handlers = {}; + local global_wrappers; + local wrappers = {}; local event_map = {}; local function _rebuild_index(handlers, event) local _handlers = event_map[event]; @@ -60,7 +62,7 @@ function new() remove_handler(event, handler); end end; - local function fire_event(event_name, event_data) + local function _fire_event(event_name, event_data) local h = handlers[event_name]; if h then for i=1,#h do @@ -69,11 +71,75 @@ function new() end end end; + local function fire_event(event_name, event_data) + local w = wrappers[event_name] or global_wrappers; + if w then + local curr_wrapper = #w; + local function c(event_name, event_data) + curr_wrapper = curr_wrapper - 1; + if curr_wrapper == 0 then + if global_wrappers == nil or w == global_wrappers then + return _fire_event(event_name, event_data); + end + w, curr_wrapper = global_wrappers, #global_wrappers; + return w[curr_wrapper](c, event_name, event_data); + else + return w[curr_wrapper](c, event_name, event_data); + end + end + return w[curr_wrapper](c, event_name, event_data); + end + return _fire_event(event_name, event_data); + end + local function add_wrapper(event_name, wrapper) + local w; + if event_name == nil then + w = global_wrappers; + if not w then + w = {}; + global_wrappers = w; + end + else + w = wrappers[event_name]; + if not w then + w = {}; + wrappers[event_name] = w; + end + end + w[#w+1] = wrapper; + end + local function remove_wrapper(event_name, wrapper) + local w; + if event_name == nil then + w = global_wrappers; + else + w = wrappers[event_name]; + end + if not w then return; end + for i = #w, 1 do + if w[i] == wrapper then + table.remove(w, i); + end + end + if #w == 0 then + if event_name == nil then + global_wrappers = nil; + else + wrappers[event_name] = nil; + end + end + end return { add_handler = add_handler; remove_handler = remove_handler; add_handlers = add_handlers; remove_handlers = remove_handlers; + wrappers = { + add_handler = add_wrapper; + remove_handler = remove_wrapper; + }; + add_wrapper = add_wrapper; + remove_wrapper = remove_wrapper; fire_event = fire_event; _handlers = handlers; _event_map = event_map; -- cgit v1.2.3 From be7107c0ab7c74824c1f52d668efa87f4ff1fbee Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 28 Apr 2015 13:52:07 +0100 Subject: moduleapi: Experimental API for modules to measure the rate+duration of events --- core/moduleapi.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/moduleapi.lua b/core/moduleapi.lua index e32c116a..71e19e01 100644 --- a/core/moduleapi.lua +++ b/core/moduleapi.lua @@ -375,6 +375,25 @@ function api:measure(name, type) return measure(type, "/"..self.host.."/mod_"..self.name.."/"..name); end +function api:measure_object_event(events_object, event_name, stat_name) + local m = self:measure(stat_name or event_name, "duration"); + local function handler(handlers, event_name, event_data) + local finished = m(); + local ret = handlers(event_name, event_data); + finished(); + return ret; + end + return self:hook_object_event(events_object, event_name, handler); +end + +function api:measure_event(event_name, stat_name) + return self:hook_object_event((hosts[self.host] or prosody).events.wrappers, event_name, handler); +end + +function api:measure_global_event(event_name, stat_name) + return self:hook_object_event(prosody.events.wrappers, event_name, handler); +end + function api.init(mm) modulemanager = mm; return api; -- cgit v1.2.3 From b3965a9069b88e0e39cb7b5a5a62850807511f58 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 28 Apr 2015 14:18:43 +0100 Subject: moduleapi: New methods for modules to conveniently wrap events --- core/moduleapi.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/core/moduleapi.lua b/core/moduleapi.lua index 71e19e01..f3326295 100644 --- a/core/moduleapi.lua +++ b/core/moduleapi.lua @@ -120,6 +120,18 @@ function api:unhook(event, handler) return self:unhook_object_event((hosts[self.host] or prosody).events, event, handler); end +function api:wrap_object_event(events_object, event, handler) + return self:hook_object_event(assert(events_object.wrappers, "no wrappers"), event, handler); +end + +function api:wrap_event(event, handler) + return self:wrap_object_event((hosts[self.host] or prosody).events, event, handler); +end + +function api:wrap_global(event, handler) + return self:hook_object_event(prosody.events, event, handler, priority); +end + function api:require(lib) local f, n = pluginloader.load_code(self.name, lib..".lib.lua", self.environment); if not f then -- cgit v1.2.3 From c98f87b4a77b152e7abb8a95402f1292ac937ebc Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 28 Apr 2015 14:19:28 +0100 Subject: util.events: Change from nil to false to indicate adding a global wrapper --- util/events.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/events.lua b/util/events.lua index d5a7359c..79de1151 100644 --- a/util/events.lua +++ b/util/events.lua @@ -93,7 +93,7 @@ function new() end local function add_wrapper(event_name, wrapper) local w; - if event_name == nil then + if event_name == false then w = global_wrappers; if not w then w = {}; @@ -110,7 +110,7 @@ function new() end local function remove_wrapper(event_name, wrapper) local w; - if event_name == nil then + if event_name == false then w = global_wrappers; else w = wrappers[event_name]; -- cgit v1.2.3 From d1a264a39af9e9d29090a8d294cb34d632eff110 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sat, 2 May 2015 14:41:56 +0200 Subject: util.pposix: Return error from ftruncate if that fails too (but what would we do here?) --- util-src/pposix.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/util-src/pposix.c b/util-src/pposix.c index d797f032..5288b08c 100644 --- a/util-src/pposix.c +++ b/util-src/pposix.c @@ -750,7 +750,10 @@ int lc_fallocate(lua_State* L) { lua_pushstring(L, strerror(ret)); /* posix_fallocate() can leave a bunch of NULs at the end, so we cut that * this assumes that offset == length of the file */ - ftruncate(fileno(f), offset); + if(ftruncate(fileno(f), offset) != 0) { + lua_pushstring(L, strerror(errno)); + return 3; + } return 2; } } -- cgit v1.2.3 From 8f40f1f4e63216c60f2f61610a4386376c46c476 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sat, 2 May 2015 14:52:51 +0200 Subject: util.encodings: Move declarations to top of function [pedantic] --- util-src/encodings.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util-src/encodings.c b/util-src/encodings.c index 2eaad2c8..c00b2267 100644 --- a/util-src/encodings.c +++ b/util-src/encodings.c @@ -476,14 +476,15 @@ static int Lidna_to_unicode(lua_State* L) { /** idna.to_unicode(s) */ static int Lidna_to_ascii(lua_State* L) { /** idna.to_ascii(s) */ size_t len; const char* s = check_utf8(L, 1, &len); + char* output = NULL; + int ret; if(s == NULL || len != strlen(s)) { lua_pushnil(L); return 1; /* TODO return error message */ } - char* output = NULL; - int ret = idna_to_ascii_8z(s, &output, IDNA_USE_STD3_ASCII_RULES); + ret = idna_to_ascii_8z(s, &output, IDNA_USE_STD3_ASCII_RULES); if(ret == IDNA_SUCCESS) { lua_pushstring(L, output); -- cgit v1.2.3