--
local create_context = require "core.certmanager".create_context;
+local rawgetopt = require"core.configmanager".rawget;
local st = require "util.stanza";
local c2s_require_encryption = module:get_option("c2s_require_encryption", module:get_option("require_encryption"));
local xmlns_starttls = 'urn:ietf:params:xml:ns:xmpp-tls';
local starttls_attr = { xmlns = xmlns_starttls };
+local starttls_initiate= st.stanza("starttls", starttls_attr);
local starttls_proceed = st.stanza("proceed", starttls_attr);
local starttls_failure = st.stanza("failure", starttls_attr);
local c2s_feature = st.stanza("starttls", starttls_attr);
local ssl_cfg_c2s, ssl_cfg_s2sout, ssl_cfg_s2sin;
do
local NULL, err = {};
- local global = module:context("*");
- local parent = module:context(module.host:match("%.(.*)$"));
+ local modhost = module.host;
+ local parent = modhost:match("%.(.*)$");
- local parent_ssl = parent:get_option("ssl");
- local host_ssl = module:get_option("ssl", parent_ssl);
+ local parent_ssl = rawgetopt(parent, "ssl") or NULL;
+ local host_ssl = rawgetopt(modhost, "ssl") or parent_ssl;
- local global_c2s = global:get_option("c2s_ssl", NULL);
- local parent_c2s = parent:get_option("c2s_ssl", NULL);
- local host_c2s = module:get_option("c2s_ssl", parent_c2s);
+ local global_c2s = rawgetopt("*", "c2s_ssl") or NULL;
+ local parent_c2s = rawgetopt(parent, "c2s_ssl") or NULL;
+ local host_c2s = rawgetopt(modhost, "c2s_ssl") or parent_c2s;
- local global_s2s = global:get_option("s2s_ssl", NULL);
- local parent_s2s = parent:get_option("s2s_ssl", NULL);
- local host_s2s = module:get_option("s2s_ssl", parent_s2s);
+ local global_s2s = rawgetopt("*", "s2s_ssl") or NULL;
+ local parent_s2s = rawgetopt(parent, "s2s_ssl") or NULL;
+ local host_s2s = rawgetopt(modhost, "s2s_ssl") or parent_s2s;
ssl_ctx_c2s, err, ssl_cfg_c2s = create_context(host.host, "server", host_c2s, host_ssl, global_c2s); -- for incoming client connections
if not ssl_ctx_c2s then module:log("error", "Error creating context for c2s: %s", err); end
end
local function can_do_tls(session)
- if not session.conn.starttls then
+ if session.ssl_ctx == false or not session.conn.starttls then
return false;
elseif session.ssl_ctx then
return true;
module:log("debug", "Received features element");
if can_do_tls(session) and stanza:get_child("starttls", xmlns_starttls) then
module:log("debug", "%s is offering TLS, taking up the offer...", session.to_host);
- session.sends2s("<starttls xmlns='"..xmlns_starttls.."'/>");
+ session.sends2s(starttls_initiate);
return true;
end
end, 500);