From b54b2fd0bd56836ba3d2baa3293b0cddaf95bd08 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 11 May 2014 18:22:17 +0200 Subject: mod_admin_telnet: Send NUL byte as keepalive on read timeouts --- plugins/mod_admin_telnet.lua | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index 71dfa300..6e912ea0 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -154,6 +154,14 @@ function console_listener.onincoming(conn, data) session.partial_data = data:match("[^\n]+$"); end +function console_listener.onreadtimeout(conn) + local session = sessions[conn]; + if session then + session.send("\0"); + return true; + end +end + function console_listener.ondisconnect(conn, err) local session = sessions[conn]; if session then -- cgit v1.2.3 From 7e94c08bb2b03b4946cebcb1625d3b4be6de5514 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 11 May 2014 18:28:00 +0200 Subject: mod_admin_telnet: Split (secure) into (authenticated) + (secure) --- plugins/mod_admin_telnet.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index 6e912ea0..bdd2caab 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -493,8 +493,9 @@ end local function session_flags(session, line) line = line or {}; if session.cert_identity_status == "valid" then - line[#line+1] = "(secure)"; - elseif session.secure then + line[#line+1] = "(authenticated)"; + end + if session.secure then line[#line+1] = "(encrypted)"; end if session.compressed then -- cgit v1.2.3 From 3224f0cee2dccb23550debe2c59333bef25921c2 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 11 May 2014 19:03:23 +0200 Subject: mod_admin_telnet: Move extraction of c2s presence info into session_flags() --- plugins/mod_admin_telnet.lua | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index bdd2caab..db7c3425 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -492,6 +492,13 @@ end local function session_flags(session, line) line = line or {}; + if session.type == "c2s" then + local status, priority = "unavailable", tostring(session.priority or "-"); + if session.presence then + status = session.presence:get_child_text("show") or "available"; + end + line[#line+1] = status.."("..priority..")"; + end if session.cert_identity_status == "valid" then line[#line+1] = "(authenticated)"; end @@ -543,11 +550,7 @@ function def_env.c2s:show(match_jid) end if (not match_jid) or jid:match(match_jid) then count = count + 1; - local status, priority = "unavailable", tostring(session.priority or "-"); - if session.presence then - status = session.presence:get_child_text("show") or "available"; - end - print(session_flags(session, { " "..jid.." - "..status.."("..priority..")" })); + print(session_flags(session, { " ", jid })); end end); return true, "Total: "..count.." clients"; -- cgit v1.2.3 From c9891dd868041285f928b0f6661eee88e7c2a119 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 11 May 2014 18:51:08 +0200 Subject: mod_admin_telnet: Add s2s:show_tls() for showing ciphers used on s2s connections --- plugins/mod_admin_telnet.lua | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index db7c3425..4bf939e9 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -223,6 +223,7 @@ function commands.help(session, data) print [[c2s:close(jid) - Close all sessions for the specified JID]] elseif section == "s2s" then print [[s2s:show(domain) - Show all s2s connections for the given domain (or all if no domain given)]] + print [[s2s:show_tls(domain) - Show TLS cipher info for encrypted sessions]] print [[s2s:close(from, to) - Close a connection from one domain to another]] print [[s2s:closeall(host) - Close all the incoming/outgoing s2s sessions to specified host]] elseif section == "module" then @@ -517,6 +518,22 @@ local function session_flags(session, line) return table.concat(line, " "); end +local function tls_info(session, line) + line = line or {}; + if session.secure then + local sock = session.conn and session.conn.socket and session.conn:socket(); + if sock and sock.info then + local info = sock:info(); + line[#line+1] = ("(%s with %s)"):format(info.protocol, info.cipher); + else + line[#line+1] = "(cipher info unavailable)"; + end + else + line[#line+1] = "(insecure)"; + end + return table.concat(line, " "); +end + def_env.c2s = {}; local function show_c2s(callback) @@ -591,8 +608,9 @@ end def_env.s2s = {}; -function def_env.s2s:show(match_jid) +function def_env.s2s:show(match_jid, annotate) local print = self.session.print; + annotate = annotate or session_flags; local count_in, count_out = 0,0; local s2s_list = { }; @@ -610,7 +628,7 @@ function def_env.s2s:show(match_jid) remotehost, localhost = session.from_host or "?", session.to_host or "?"; end local sess_lines = { l = localhost, r = remotehost, - session_flags(session, { "", direction, remotehost or "?", + annotate(session, { "", direction, remotehost or "?", "["..session.type..tostring(session):match("[a-f0-9]*$").."]" })}; if (not match_jid) or remotehost:match(match_jid) or localhost:match(match_jid) then @@ -666,6 +684,10 @@ function def_env.s2s:show(match_jid) return true, "Total: "..count_out.." outgoing, "..count_in.." incoming connections"; end +function def_env.s2s:show_tls(match_jid) + return self:show(match_jid, tls_info); +end + local function print_subject(print, subject) for _, entry in ipairs(subject) do print( -- cgit v1.2.3 From f5da7bd8e02105fbaf717231c221c1bf82025211 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 11 May 2014 19:12:03 +0200 Subject: mod_admin_telnet: Move generation of log tag for s2s:show() (adds it to c2s:show() too) --- plugins/mod_admin_telnet.lua | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index 4bf939e9..4a9f74b6 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -491,8 +491,17 @@ end function def_env.hosts:add(name) end +local function common_info(session, line) + if session.id then + line[#line+1] = "["..session.id.."]" + else + line[#line+1] = "["..session.type..(tostring(session):match("%x*$")).."]" + end +end + local function session_flags(session, line) line = line or {}; + common_info(session, line); if session.type == "c2s" then local status, priority = "unavailable", tostring(session.priority or "-"); if session.presence then @@ -520,6 +529,7 @@ end local function tls_info(session, line) line = line or {}; + common_info(session, line); if session.secure then local sock = session.conn and session.conn.socket and session.conn:socket(); if sock and sock.info then @@ -628,8 +638,7 @@ function def_env.s2s:show(match_jid, annotate) remotehost, localhost = session.from_host or "?", session.to_host or "?"; end local sess_lines = { l = localhost, r = remotehost, - annotate(session, { "", direction, remotehost or "?", - "["..session.type..tostring(session):match("[a-f0-9]*$").."]" })}; + annotate(session, { "", direction, remotehost or "?" })}; if (not match_jid) or remotehost:match(match_jid) or localhost:match(match_jid) then table.insert(s2s_list, sess_lines); -- cgit v1.2.3 From bacdff9a1532d2d2e4e0e9f811d4d584ea3a197c Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 11 May 2014 19:13:36 +0200 Subject: mod_admin_telnet: Add c2s:show_tls(), behaves like s2s:show_tls() --- plugins/mod_admin_telnet.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index 4a9f74b6..a3352b10 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -220,6 +220,7 @@ function commands.help(session, data) print [[c2s:show(jid) - Show all client sessions with the specified JID (or all if no JID given)]] print [[c2s:show_insecure() - Show all unencrypted client connections]] print [[c2s:show_secure() - Show all encrypted client connections]] + print [[c2s:show_tls() - Show TLS cipher info for encrypted sessions]] print [[c2s:close(jid) - Close all sessions for the specified JID]] elseif section == "s2s" then print [[s2s:show(domain) - Show all s2s connections for the given domain (or all if no domain given)]] @@ -567,8 +568,9 @@ function def_env.c2s:count(match_jid) return true, "Total: "..count.." clients"; end -function def_env.c2s:show(match_jid) +function def_env.c2s:show(match_jid, annotate) local print, count = self.session.print, 0; + annotate = annotate or session_flags; local curr_host; show_c2s(function (jid, session) if curr_host ~= session.host then @@ -577,7 +579,7 @@ function def_env.c2s:show(match_jid) end if (not match_jid) or jid:match(match_jid) then count = count + 1; - print(session_flags(session, { " ", jid })); + print(annotate(session, { " ", jid })); end end); return true, "Total: "..count.." clients"; @@ -605,6 +607,10 @@ function def_env.c2s:show_secure(match_jid) return true, "Total: "..count.." secure client connections"; end +function def_env.c2s:show_tls(match_jid) + return self:show(match_jid, tls_info); +end + function def_env.c2s:close(match_jid) local count = 0; show_c2s(function (jid, session) -- cgit v1.2.3 From 7053cca07b468113e2e69ffa00a38efed60f425d Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 12 May 2014 01:07:40 +0200 Subject: mod_admin_telnet: Show which hosts are components and what type of component in host:list() --- plugins/mod_admin_telnet.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index a3352b10..6a8783e2 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -872,9 +872,19 @@ end function def_env.host:list() local print = self.session.print; local i = 0; + local type; for host in values(array.collect(keys(prosody.hosts)):sort()) do i = i + 1; - print(host); + type = hosts[host].type; + if type == "local" then + print(host); + else + type = module:context(host):get_option_string("component_module", type); + if type ~= "component" then + type = type .. " component"; + end + print(("%s (%s)"):format(host, type)); + end end return true, i.." hosts"; end -- cgit v1.2.3 From 45d1171aad2ce4116c04ed75feec535c1dd9bbf8 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Mon, 12 May 2014 01:16:17 +0200 Subject: mod_admin_telnet: Remove dead code --- plugins/mod_admin_telnet.lua | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_admin_telnet.lua b/plugins/mod_admin_telnet.lua index 6a8783e2..9761d2f3 100644 --- a/plugins/mod_admin_telnet.lua +++ b/plugins/mod_admin_telnet.lua @@ -481,17 +481,6 @@ function def_env.config:reload() return ok, (ok and "Config reloaded (you may need to reload modules to take effect)") or tostring(err); end -def_env.hosts = {}; -function def_env.hosts:list() - for host, host_session in pairs(hosts) do - self.session.print(host); - end - return true, "Done"; -end - -function def_env.hosts:add(name) -end - local function common_info(session, line) if session.id then line[#line+1] = "["..session.id.."]" -- cgit v1.2.3