aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mod_c2s.lua3
-rw-r--r--plugins/mod_storage_sql.lua36
-rw-r--r--util/random.lua10
3 files changed, 33 insertions, 16 deletions
diff --git a/plugins/mod_c2s.lua b/plugins/mod_c2s.lua
index 7c6d95f7..bfec1055 100644
--- a/plugins/mod_c2s.lua
+++ b/plugins/mod_c2s.lua
@@ -245,7 +245,6 @@ end
--- Port listener
function listener.onconnect(conn)
local session = sm_new_session(conn);
- sessions[conn] = session;
session.log("info", "Client connected");
@@ -306,6 +305,8 @@ function listener.onconnect(conn)
end
session.dispatch_stanza = stream_callbacks.handlestanza;
+
+ sessions[conn] = session;
end
function listener.onincoming(conn, data)
diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua
index 596687ae..f0a8fee0 100644
--- a/plugins/mod_storage_sql.lua
+++ b/plugins/mod_storage_sql.lua
@@ -472,13 +472,23 @@ function archive_store:delete(username, query)
else
args[#args+1] = query.truncate;
local unlimited = "ALL";
- if engine.params.driver == "SQLite3" then
- sql_query = [[
- DELETE FROM "prosodyarchive"
+ sql_query = [[
+ DELETE FROM "prosodyarchive"
+ WHERE "sort_id" IN (
+ SELECT "sort_id" FROM "prosodyarchive"
WHERE %s
ORDER BY "sort_id" %s
- LIMIT %s OFFSET ?;
- ]];
+ LIMIT %s OFFSET ?
+ );]];
+ if engine.params.driver == "SQLite3" then
+ if engine._have_delete_limit then
+ sql_query = [[
+ DELETE FROM "prosodyarchive"
+ WHERE %s
+ ORDER BY "sort_id" %s
+ LIMIT %s OFFSET ?;
+ ]];
+ end
unlimited = "-1";
elseif engine.params.driver == "MySQL" then
sql_query = [[
@@ -489,15 +499,6 @@ function archive_store:delete(username, query)
LIMIT %s OFFSET ?
) AS limiter on result.sort_id = limiter.sort_id;]];
unlimited = "18446744073709551615";
- else
- sql_query = [[
- DELETE FROM "prosodyarchive"
- WHERE "sort_id" IN (
- SELECT "sort_id" FROM "prosodyarchive"
- WHERE %s
- ORDER BY "sort_id" %s
- LIMIT %s OFFSET ?
- );]];
end
sql_query = string.format(sql_query, t_concat(where, " AND "),
query.reverse and "ASC" or "DESC", unlimited);
@@ -718,6 +719,13 @@ function module.load()
module:log("error", "Old database format detected. Please run: prosodyctl mod_%s upgrade", module.name);
return false, "database upgrade needed";
end
+ if engine.params.driver == "SQLite3" then
+ for row in engine:select("PRAGMA compile_options") do
+ if row[1] == "ENABLE_UPDATE_DELETE_LIMIT" then
+ engine._have_delete_limit = true;
+ end
+ end
+ end
end
end);
engines[sql.db2uri(params)] = engine;
diff --git a/util/random.lua b/util/random.lua
index d8a84514..6782d7fa 100644
--- a/util/random.lua
+++ b/util/random.lua
@@ -12,7 +12,15 @@ if ok then return crand; end
local urandom, urandom_err = io.open("/dev/urandom", "r");
local function bytes(n)
- return urandom:read(n);
+ local data, err = urandom:read(n);
+ if not data then
+ if err then
+ error("Unable to retrieve data from secure random number generator (/dev/urandom): "..tostring(err));
+ else
+ error("Secure random number generator (/dev/urandom) returned an end-of-file condition");
+ end
+ end
+ return data;
end
if not urandom then