diff options
author | Kim Alvefur <zash@zash.se> | 2015-09-17 22:15:26 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2015-09-17 22:15:26 +0200 |
commit | 195c1407b6d3eb2b4f47051eb81a9ddee889c690 (patch) | |
tree | aae43eb039122cfd152c9a26e2f40154cad08440 | |
parent | a38d2115a2d8d4a2b6e6e0772f345cb7e1201aaf (diff) | |
parent | 32bb9cbee2e75029b69367ef3f0d3d76e5dd9f34 (diff) | |
download | prosody-195c1407b6d3eb2b4f47051eb81a9ddee889c690.tar.gz prosody-195c1407b6d3eb2b4f47051eb81a9ddee889c690.zip |
Merge 0.10->trunk
-rw-r--r-- | plugins/mod_blocklist.lua | 18 | ||||
-rw-r--r-- | plugins/mod_offline.lua | 4 | ||||
-rw-r--r-- | plugins/mod_tls.lua | 22 | ||||
-rw-r--r-- | util/dataforms.lua | 48 |
4 files changed, 48 insertions, 44 deletions
diff --git a/plugins/mod_blocklist.lua b/plugins/mod_blocklist.lua index baed6709..8589c1e9 100644 --- a/plugins/mod_blocklist.lua +++ b/plugins/mod_blocklist.lua @@ -95,7 +95,8 @@ module:hook("iq-get/self/urn:xmpp:blocking:blocklist", function (event) end end origin.interested_blocklist = true; -- Gets notified about changes - return origin.send(reply); + origin.send(reply); + return true; end); -- Add or remove some jid(s) from the blocklist @@ -109,7 +110,8 @@ local function edit_blocklist(event) for item in action:childtags("item") do local jid = jid_prep(item.attr.jid); if not jid then - return origin.send(st_error_reply(stanza, "modify", "jid-malformed")); + origin.send(st_error_reply(stanza, "modify", "jid-malformed")); + return true; end item.attr.jid = jid; -- echo back prepped new[jid] = is_contact_subscribed(username, module.host, jid) or false; @@ -119,7 +121,8 @@ local function edit_blocklist(event) if mode and not next(new) then -- <block/> element does not contain at least one <item/> child element - return origin.send(st_error_reply(stanza, "modify", "bad-request")); + origin.send(st_error_reply(stanza, "modify", "bad-request")); + return true; end local blocklist = get_blocklist(username); @@ -141,7 +144,8 @@ local function edit_blocklist(event) if ok then origin.send(st.reply(stanza)); else - return origin.send(st_error_reply(stanza, "wait", "internal-server-error", err)); + origin.send(st_error_reply(stanza, "wait", "internal-server-error", err)); + return true; end if mode then @@ -208,7 +212,8 @@ end local function bounce_stanza(event) local origin, stanza = event.origin, event.stanza; if drop_stanza(event) then - return origin.send(st_error_reply(stanza, "cancel", "service-unavailable")); + origin.send(st_error_reply(stanza, "cancel", "service-unavailable")); + return true; end end @@ -244,8 +249,9 @@ local function bounce_outgoing(event) return drop_outgoing(event); end if drop_outgoing(event) then - return origin.send(st_error_reply(stanza, "cancel", "not-acceptable", "You have blocked this JID") + origin.send(st_error_reply(stanza, "cancel", "not-acceptable", "You have blocked this JID") :tag("blocked", { xmlns = "urn:xmpp:blocking:errors" })); + return true; end end diff --git a/plugins/mod_offline.lua b/plugins/mod_offline.lua index c168711b..08ab8490 100644 --- a/plugins/mod_offline.lua +++ b/plugins/mod_offline.lua @@ -30,7 +30,7 @@ module:hook("message/offline/handle", function(event) stanza.attr.stamp, stanza.attr.stamp_legacy = nil, nil; return result; -end); +end, -1); module:hook("message/offline/broadcast", function(event) local origin = event.origin; @@ -48,4 +48,4 @@ module:hook("message/offline/broadcast", function(event) end datamanager.list_store(node, host, "offline", nil); return true; -end); +end, -1); diff --git a/plugins/mod_tls.lua b/plugins/mod_tls.lua index d1138e1c..39c4649e 100644 --- a/plugins/mod_tls.lua +++ b/plugins/mod_tls.lua @@ -7,6 +7,7 @@ -- local create_context = require "core.certmanager".create_context; +local rawgetopt = require"core.configmanager".rawget; local st = require "util.stanza"; local c2s_require_encryption = module:get_option("c2s_require_encryption", module:get_option("require_encryption")); @@ -36,19 +37,20 @@ local ssl_ctx_c2s, ssl_ctx_s2sout, ssl_ctx_s2sin; local ssl_cfg_c2s, ssl_cfg_s2sout, ssl_cfg_s2sin; do local NULL, err = {}; - local global = module:context("*"); - local parent = module:context(module.host:match("%.(.*)$")); + local modhost = module.host; + local parent = modhost:match("%.(.*)$"); - local parent_ssl = parent:get_option("ssl"); - local host_ssl = module:get_option("ssl", parent_ssl); + local global_ssl = rawgetopt("*", "ssl") or NULL; + local parent_ssl = rawgetopt(parent, "ssl") or NULL; + local host_ssl = rawgetopt(modhost, "ssl") or parent_ssl; - local global_c2s = global:get_option("c2s_ssl", NULL); - local parent_c2s = parent:get_option("c2s_ssl", NULL); - local host_c2s = module:get_option("c2s_ssl", parent_c2s); + local global_c2s = rawgetopt("*", "c2s_ssl") or NULL; + local parent_c2s = rawgetopt(parent, "c2s_ssl") or NULL; + local host_c2s = rawgetopt(modhost, "c2s_ssl") or parent_ssl; - local global_s2s = global:get_option("s2s_ssl", NULL); - local parent_s2s = parent:get_option("s2s_ssl", NULL); - local host_s2s = module:get_option("s2s_ssl", parent_s2s); + local global_s2s = rawgetopt("*", "s2s_ssl") or NULL; + local parent_s2s = rawgetopt(parent, "s2s_ssl") or NULL; + local host_s2s = rawgetopt(modhost, "s2s_ssl") or parent_ssl; ssl_ctx_c2s, err, ssl_cfg_c2s = create_context(host.host, "server", host_c2s, host_ssl, global_c2s); -- for incoming client connections if not ssl_ctx_c2s then module:log("error", "Error creating context for c2s: %s", err); end diff --git a/util/dataforms.lua b/util/dataforms.lua index 244fb3f3..05846ab3 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -145,30 +145,29 @@ function form_t.data(layout, stanza) return data; end -field_readers["text-single"] = - function (field_tag, required) - local data = field_tag:get_child_text("value"); - if data and #data > 0 then - return data - elseif required then - return nil, "Required value missing"; - end +local function simple_text(field_tag, required) + local data = field_tag:get_child_text("value"); + -- XEP-0004 does not say if an empty string is acceptable for a required value + -- so we will follow HTML5 which says that empty string means missing + if required and (data == nil or data == "") then + return nil, "Required value missing"; end + return data; -- Return whatever get_child_text returned, even if empty string +end -field_readers["text-private"] = - field_readers["text-single"]; +field_readers["text-single"] = simple_text; + +field_readers["text-private"] = simple_text; field_readers["jid-single"] = function (field_tag, required) - local raw_data = field_tag:get_child_text("value") + local raw_data, err = simple_text(field_tag, required); + if not raw_data then return raw_data, err; end local data = jid_prep(raw_data); - if data and #data > 0 then - return data - elseif raw_data then + if not data then return nil, "Invalid JID: " .. raw_data; - elseif required then - return nil, "Required value missing"; end + return data; end field_readers["jid-multi"] = @@ -212,8 +211,7 @@ field_readers["text-multi"] = return data, err; end -field_readers["list-single"] = - field_readers["text-single"]; +field_readers["list-single"] = simple_text; local boolean_values = { ["1"] = true, ["true"] = true, @@ -222,15 +220,13 @@ local boolean_values = { field_readers["boolean"] = function (field_tag, required) - local raw_value = field_tag:get_child_text("value"); - local value = boolean_values[raw_value ~= nil and raw_value]; - if value ~= nil then - return value; - elseif raw_value then - return nil, "Invalid boolean representation"; - elseif required then - return nil, "Required value missing"; + local raw_value, err = simple_text(field_tag, required); + if not raw_value then return raw_value, err; end + local value = boolean_values[raw_value]; + if value == nil then + return nil, "Invalid boolean representation:" .. raw_value; end + return value; end field_readers["hidden"] = |