Software / code / prosody
Comparison
plugins/mod_admin_telnet.lua @ 9741:d46c376dfe2c
mod_admin_telnet: Validate hostnames in xmpp:ping command
Attempt to ping some invalid hostnames cause weird behavior
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 29 Dec 2018 03:21:13 +0100 |
| parent | 9736:a5ae3f4e1a40 |
| child | 9748:99199b53019f |
comparison
equal
deleted
inserted
replaced
| 9740:4b34687ede3f | 9741:d46c376dfe2c |
|---|---|
| 1086 def_env.xmpp = {}; | 1086 def_env.xmpp = {}; |
| 1087 | 1087 |
| 1088 local st = require "util.stanza"; | 1088 local st = require "util.stanza"; |
| 1089 local new_id = require "util.id".medium; | 1089 local new_id = require "util.id".medium; |
| 1090 function def_env.xmpp:ping(localhost, remotehost, timeout) | 1090 function def_env.xmpp:ping(localhost, remotehost, timeout) |
| 1091 if not prosody.hosts[localhost] then | 1091 localhost = select(2, jid_split(localhost)); |
| 1092 return nil, "No such host"; | 1092 remotehost = select(2, jid_split(remotehost)); |
| 1093 if not localhost then | |
| 1094 return nil, "Invalid sender hostname"; | |
| 1095 elseif not prosody.hosts[localhost] then | |
| 1096 return nil, "No such local host"; | |
| 1097 end | |
| 1098 if not remotehost then | |
| 1099 return nil, "Invalid destination hostname"; | |
| 1100 elseif prosody.hosts[remotehost] then | |
| 1101 return nil, "Both hosts are local"; | |
| 1093 end | 1102 end |
| 1094 local iq = st.iq{ from=localhost, to=remotehost, type="get", id=new_id()} | 1103 local iq = st.iq{ from=localhost, to=remotehost, type="get", id=new_id()} |
| 1095 :tag("ping", {xmlns="urn:xmpp:ping"}); | 1104 :tag("ping", {xmlns="urn:xmpp:ping"}); |
| 1096 local ret, err; | 1105 local ret, err; |
| 1097 local wait, done = async.waiter(); | 1106 local wait, done = async.waiter(); |