aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mod_admin_telnet.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mod_admin_telnet.lua')
-rw-r--r--plugins/mod_admin_telnet.lua22
1 files changed, 13 insertions, 9 deletions
diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua
index ca37ca7a..ebd817b5 100644
--- a/plugins/mod_admin_telnet.lua
+++ b/plugins/mod_admin_telnet.lua
@@ -15,12 +15,17 @@ local hosts = prosody.hosts;
local console_listener = { default_port = 5582; default_mode = "*a"; interface = "127.0.0.1" };
+local hostmanager = require "core.hostmanager";
+local modulemanager = require "core.modulemanager";
+
local iterators = require "util.iterators";
local keys, values = iterators.keys, iterators.values;
local jid = require "util.jid";
local jid_bare, jid_split = jid.bare, jid.split;
local set, array = require "util.set", require "util.array";
local cert_verify_identity = require "util.x509".verify_identity;
+local envload = require "util.envload".envload;
+local envloadfile = require "util.envload".envloadfile;
local commands = module:shared("commands")
local def_env = module:shared("env");
@@ -30,9 +35,9 @@ local core_post_stanza = prosody.core_post_stanza;
local function redirect_output(_G, session)
local env = setmetatable({ print = session.print }, { __index = function (t, k) return rawget(_G, k); end });
env.dofile = function(name)
- local f, err = loadfile(name);
+ local f, err = envloadfile(name, env);
if not f then return f, err; end
- return setfenv(f, env)();
+ return f();
end;
return env;
end
@@ -104,9 +109,10 @@ function console_listener.onincoming(conn, data)
session.env._ = line;
local chunkname = "=console";
- local chunk, err = loadstring("return "..line, chunkname);
+ local env = (useglobalenv and redirect_output(_G, session)) or session.env or nil
+ local chunk, err = envload("return "..line, chunkname, env);
if not chunk then
- chunk, err = loadstring(line, chunkname);
+ chunk, err = envload(line, chunkname, env);
if not chunk then
err = err:gsub("^%[string .-%]:%d+: ", "");
err = err:gsub("^:%d+: ", "");
@@ -115,9 +121,7 @@ function console_listener.onincoming(conn, data)
break;
end
end
-
- setfenv(chunk, (useglobalenv and redirect_output(_G, session)) or session.env or nil);
-
+
local ranok, taskok, message = pcall(chunk);
if not (ranok or message or useglobalenv) and commands[line:lower()] then
@@ -642,6 +646,7 @@ local function print_errors(print, errors)
end
function def_env.s2s:showcert(domain)
+ local ser = require "util.serialization".serialize;
local print = self.session.print;
local domain_sessions = set.new(array.collect(keys(incoming_s2s)))
/function(session) return session.from_host == domain and session or nil; end;
@@ -973,8 +978,7 @@ if option and option ~= "short" and option ~= "full" and option ~= "graphic" the
if type(option) == "string" then
session.print(option)
elseif type(option) == "function" then
- setfenv(option, redirect_output(_G, session));
- pcall(option, session);
+ module:log("warn", "Using functions as value for the console_banner option is no longer supported");
end
end
end