aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mod_presence.lua3
-rw-r--r--plugins/mod_storage_internal.lua3
-rw-r--r--plugins/mod_storage_none.lua7
-rw-r--r--plugins/mod_storage_sql.lua6
-rw-r--r--plugins/mod_storage_sql2.lua4
-rwxr-xr-xtools/ejabberd2prosody.lua27
6 files changed, 30 insertions, 20 deletions
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
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)
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;
diff --git a/tools/ejabberd2prosody.lua b/tools/ejabberd2prosody.lua
index 66bf4f93..590145cd 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