Comparison

plugins/mod_admin_socket.lua @ 12887:68df46926c26 0.12

mod_admin_socket: Return error on unhandled input to prevent apparent freeze When mod_admin_socket is loaded without mod_admin_shell, attempt to use `prosodyctl shell` will appear to freeze after any input, since no response is returned.
author Kim Alvefur <zash@zash.se>
date Thu, 16 Feb 2023 17:20:09 +0100
parent 12418:dd47adf74e93
child 12888:b8504b71735d
comparison
equal deleted inserted replaced
12885:3a6dae39c70e 12887:68df46926c26
17 end 17 end
18 18
19 local server = require "net.server"; 19 local server = require "net.server";
20 20
21 local adminstream = require "util.adminstream"; 21 local adminstream = require "util.adminstream";
22 local st = require "util.stanza";
22 23
23 local socket_path = module:get_option_path("admin_socket", "prosody.sock", "data"); 24 local socket_path = module:get_option_path("admin_socket", "prosody.sock", "data");
24 25
25 local sessions = module:shared("sessions"); 26 local sessions = module:shared("sessions");
26 27
33 event_name = "admin/"..stanza.attr.xmlns..":"..stanza.name; 34 event_name = "admin/"..stanza.attr.xmlns..":"..stanza.name;
34 else 35 else
35 event_name = "admin/"..stanza.name; 36 event_name = "admin/"..stanza.name;
36 end 37 end
37 module:log("debug", "Firing %s", event_name); 38 module:log("debug", "Firing %s", event_name);
38 return module:fire_event(event_name, event_data); 39 local ret = module:fire_event(event_name, event_data);
40 if ret == nil then
41 session.send(st.stanza("repl-result", { type = "error" }):text("No module handled this query. Is mod_admin_shell enabled?"));
42 end
43 return ret;
39 end 44 end
40 45
41 module:hook("server-stopping", function () 46 module:hook("server-stopping", function ()
42 for _, session in pairs(sessions) do 47 for _, session in pairs(sessions) do
43 session:close("system-shutdown"); 48 session:close("system-shutdown");