From 57940a83511102277a9c6573656618b1bfe552d2 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sat, 10 May 2014 02:12:51 +0200 Subject: mod_c2s: Fix traceback if c2s stream sent to component --- plugins/mod_c2s.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/mod_c2s.lua b/plugins/mod_c2s.lua index b2a81592..5feb1f2c 100644 --- a/plugins/mod_c2s.lua +++ b/plugins/mod_c2s.lua @@ -50,7 +50,7 @@ function stream_callbacks.streamopened(session, attr) session.streamid = uuid_generate(); (session.log or session)("debug", "Client sent opening to %s", session.host); - if not hosts[session.host] then + if not hosts[session.host] or not hosts[session.host].users then -- We don't serve this host... session:close{ condition = "host-unknown", text = "This server does not serve "..tostring(session.host)}; return; -- cgit v1.2.3 From 42475293d1b990ce37d872508e1da8accf961cba Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Tue, 17 Jun 2014 11:01:51 +0200 Subject: tools/ejabberd2prosody.lua: Fix JID building, node-less jids became @hostname in some cases --- tools/ejabberd2prosody.lua | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/tools/ejabberd2prosody.lua b/tools/ejabberd2prosody.lua index d0675a65..af87594e 100755 --- a/tools/ejabberd2prosody.lua +++ b/tools/ejabberd2prosody.lua @@ -56,6 +56,16 @@ function build_time(tuple) local Megaseconds,Seconds,Microseconds = unpack(tuple); return Megaseconds * 1000000 + Seconds; end +function build_jid(tuple, full) + local node, jid, resource = tuple[1], tuple[2], tuple[3] + if type(node) == "string" and node ~= "" then + jid = tuple[1] .. "@" .. jid; + end + if full and type(resource) == "string" and resource ~= "" then + jid = jid .. "/" .. resource; + end + return jid; +end function vcard(node, host, stanza) local ret, err = dm.store(node, host, "vcard", st.preserialize(stanza)); @@ -105,10 +115,7 @@ function privacy(node, host, default, lists) if _type == "jid" then if type(value) ~= "table" then print("[error] privacy: jid value is not valid: "..tostring(value)); break; end local _node, _host, _resource = value[1], value[2], value[3]; - if (type(_node) == "table") then _node = nil; end - if (type(_host) == "table") then _host = nil; end - if (type(_resource) == "table") then _resource = nil; end - value = (_node and _node.."@".._host or _host)..(_resource and "/".._resource or ""); + value = build_jid(value, true) elseif _type == "none" then _type = nil; value = nil; @@ -154,18 +161,10 @@ function privacy(node, host, default, lists) local ret, err = dm.store(node, host, "privacy", privacy); print("["..(err or "success").."] privacy: " ..node.."@"..host.." - "..count.." list(s)"); end -local function _table_to_jid(t) - if type(t[2]) == "string" then - local jid = t[2]; - if type(t[1]) == "string" then jid = t[1].."@"..jid; end - if type(t[3]) == "string" then jid = jid.."/"..t[3]; end - return jid; - end -end function muc_room(node, host, properties) local store = { jid = node.."@"..host, _data = {}, _affiliations = {} }; for _,aff in ipairs(properties.affiliations) do - store._affiliations[_table_to_jid(aff[1])] = aff[2][1] or aff[2]; + store._affiliations[build_jid(aff[1])] = aff[2][1] or aff[2]; end store._data.subject = properties.subject; if properties.subject_author then @@ -207,7 +206,7 @@ local filters = { end; roster = function(tuple) local node = tuple[3][1]; local host = tuple[3][2]; - local contact = (type(tuple[4][1]) == "table") and tuple[4][2] or tuple[4][1].."@"..tuple[4][2]; + local contact = build_jid(tuple[4]); local name = tuple[5]; local subscription = tuple[6]; local ask = tuple[7]; local groups = tuple[8]; if type(name) ~= type("") then name = nil; end -- cgit v1.2.3 From 15b3071bebceb195dbf057093dcddf1109b7d4eb Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 20 Jun 2014 16:10:04 +0200 Subject: mod_presence: Fire a presence/initial event on initial presence --- plugins/mod_presence.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua index 2899bd7e..32a25b59 100644 --- a/plugins/mod_presence.lua +++ b/plugins/mod_presence.lua @@ -137,6 +137,9 @@ function handle_normal_presence(origin, stanza) origin.directed = nil; end else + if not origin.presence then + module:fire_event("presence/initial", { origin = origin, stanza = stanza } ); + end origin.presence = stanza; stanza:tag("delay", { xmlns = "urn:xmpp:delay", from = host, stamp = datetime.datetime() }):up(); if origin.priority ~= priority then -- cgit v1.2.3 From 578ceff99eb7d50617f715f7e53f8e59387d758b Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 20 Jun 2014 16:16:33 +0200 Subject: mod_storage_sql2: Don't ignore failure in keyval_store:get() (thanks daurnimator) --- plugins/mod_storage_sql2.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/mod_storage_sql2.lua b/plugins/mod_storage_sql2.lua index 249c72a7..0531c905 100644 --- a/plugins/mod_storage_sql2.lua +++ b/plugins/mod_storage_sql2.lua @@ -198,7 +198,9 @@ local keyval_store = {}; keyval_store.__index = keyval_store; function keyval_store:get(username) user,store = username,self.store; - return select(2, engine:transaction(keyval_store_get)); + local ok, result = engine:transaction(keyval_store_get); + if not ok then return ok, result; end + return result; end function keyval_store:set(username, data) user,store = username,self.store; -- cgit v1.2.3 From 2ba9c6ce77c348bb773258c1dbd5883d7d5f5989 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 20 Jun 2014 16:22:23 +0200 Subject: mod_storage_{none,internal,sql}: Return error for unsupported (everything but keyval) store types --- plugins/mod_storage_internal.lua | 3 +++ plugins/mod_storage_none.lua | 7 +++++-- plugins/mod_storage_sql.lua | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/mod_storage_internal.lua b/plugins/mod_storage_internal.lua index 972ecbee..ade4f0a6 100644 --- a/plugins/mod_storage_internal.lua +++ b/plugins/mod_storage_internal.lua @@ -6,6 +6,9 @@ local driver = {}; local driver_mt = { __index = driver }; function driver:open(store, typ) + if typ and typ ~= "keyval" then + return nil, "unsupported-store"; + end return setmetatable({ store = store, type = typ }, driver_mt); end function driver:get(user) diff --git a/plugins/mod_storage_none.lua b/plugins/mod_storage_none.lua index 8f2d2f56..fa925b76 100644 --- a/plugins/mod_storage_none.lua +++ b/plugins/mod_storage_none.lua @@ -1,8 +1,11 @@ local driver = {}; local driver_mt = { __index = driver }; -function driver:open(store) - return setmetatable({ store = store }, driver_mt); +function driver:open(store, typ) + if typ and typ ~= "keyval" then + return nil, "unsupported-store"; + end + return setmetatable({ store = store, type = typ }, driver_mt); end function driver:get(user) return {}; diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index 7b810ab8..a5bb5bfa 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -380,10 +380,10 @@ end local driver = {}; function driver:open(store, typ) - if not typ then -- default key-value store - return setmetatable({ store = store }, keyval_store); + if typ and typ ~= "keyval" then + return nil, "unsupported-store"; end - return nil, "unsupported-store"; + return setmetatable({ store = store }, keyval_store); end function driver:stores(username) -- cgit v1.2.3