Software /
code /
prosody
Comparison
plugins/mod_tls.lua @ 2932:d2816fb6c7ea
mod_tls: Add s2s_allow_encryption option which, when set to false, disabled TLS for s2s
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 24 Mar 2010 20:00:22 +0000 |
parent | 2923:b7049746bd29 |
child | 2933:e68ff49fa79b |
comparison
equal
deleted
inserted
replaced
2924:8dc4e2e00129 | 2932:d2816fb6c7ea |
---|---|
14 local secure_auth_only = module:get_option("c2s_require_encryption") or module:get_option("require_encryption"); | 14 local secure_auth_only = module:get_option("c2s_require_encryption") or module:get_option("require_encryption"); |
15 local secure_s2s_only = module:get_option("s2s_require_encryption"); | 15 local secure_s2s_only = module:get_option("s2s_require_encryption"); |
16 | 16 |
17 local host = hosts[module.host]; | 17 local host = hosts[module.host]; |
18 | 18 |
19 local starttls_attr = { xmlns = xmlns_starttls }; | |
20 | |
21 --- Client-to-server TLS handling | |
19 module:add_handler("c2s_unauthed", "starttls", xmlns_starttls, | 22 module:add_handler("c2s_unauthed", "starttls", xmlns_starttls, |
20 function (session, stanza) | 23 function (session, stanza) |
21 if session.conn.starttls and host.ssl_ctx_in then | 24 if session.conn.starttls and host.ssl_ctx_in then |
22 session.send(st.stanza("proceed", { xmlns = xmlns_starttls })); | 25 session.send(st.stanza("proceed", starttls_attr)); |
23 session:reset_stream(); | 26 session:reset_stream(); |
24 if session.host and hosts[session.host].ssl_ctx_in then | 27 if session.host and hosts[session.host].ssl_ctx_in then |
25 session.conn.set_sslctx(hosts[session.host].ssl_ctx_in); | 28 session.conn.set_sslctx(hosts[session.host].ssl_ctx_in); |
26 end | 29 end |
27 session.conn.starttls(); | 30 session.conn.starttls(); |
28 session.log("info", "TLS negotiation started..."); | 31 session.log("info", "TLS negotiation started..."); |
29 session.secure = false; | 32 session.secure = false; |
30 else | 33 else |
31 session.log("warn", "Attempt to start TLS, but TLS is not available on this connection"); | 34 session.log("warn", "Attempt to start TLS, but TLS is not available on this connection"); |
32 (session.sends2s or session.send)(st.stanza("failure", { xmlns = xmlns_starttls })); | 35 (session.sends2s or session.send)(st.stanza("failure", starttls_attr)); |
33 session:close(); | |
34 end | |
35 end); | |
36 | |
37 module:add_handler("s2sin_unauthed", "starttls", xmlns_starttls, | |
38 function (session, stanza) | |
39 if session.conn.starttls and host.ssl_ctx_in then | |
40 session.sends2s(st.stanza("proceed", { xmlns = xmlns_starttls })); | |
41 session:reset_stream(); | |
42 if session.to_host and hosts[session.to_host].ssl_ctx_in then | |
43 session.conn.set_sslctx(hosts[session.to_host].ssl_ctx_in); | |
44 end | |
45 session.conn.starttls(); | |
46 session.log("info", "TLS negotiation started for incoming s2s..."); | |
47 session.secure = false; | |
48 else | |
49 session.log("warn", "Attempt to start TLS, but TLS is not available on this s2s connection"); | |
50 (session.sends2s or session.send)(st.stanza("failure", { xmlns = xmlns_starttls })); | |
51 session:close(); | 36 session:close(); |
52 end | 37 end |
53 end); | 38 end); |
54 | 39 |
55 | |
56 local starttls_attr = { xmlns = xmlns_starttls }; | |
57 module:add_event_hook("stream-features", | 40 module:add_event_hook("stream-features", |
58 function (session, features) | 41 function (session, features) |
59 if session.conn.starttls then | 42 if session.conn.starttls then |
60 features:tag("starttls", starttls_attr); | 43 features:tag("starttls", starttls_attr); |
61 if secure_auth_only then | 44 if secure_auth_only then |
63 else | 46 else |
64 features:up(); | 47 features:up(); |
65 end | 48 end |
66 end | 49 end |
67 end); | 50 end); |
51 --- | |
52 | |
53 -- Stop here if the user doesn't want to allow s2s encryption | |
54 if module:get_option("s2s_allow_encryption") == false then | |
55 return; | |
56 end | |
57 | |
58 --- Server-to-server TLS handling | |
59 module:add_handler("s2sin_unauthed", "starttls", xmlns_starttls, | |
60 function (session, stanza) | |
61 if session.conn.starttls and host.ssl_ctx_in then | |
62 session.sends2s(st.stanza("proceed", starttls_attr)); | |
63 session:reset_stream(); | |
64 if session.to_host and hosts[session.to_host].ssl_ctx_in then | |
65 session.conn.set_sslctx(hosts[session.to_host].ssl_ctx_in); | |
66 end | |
67 session.conn.starttls(); | |
68 session.log("info", "TLS negotiation started for incoming s2s..."); | |
69 session.secure = false; | |
70 else | |
71 session.log("warn", "Attempt to start TLS, but TLS is not available on this s2s connection"); | |
72 (session.sends2s or session.send)(st.stanza("failure", starttls_attr)); | |
73 session:close(); | |
74 end | |
75 end); | |
76 | |
68 | 77 |
69 module:hook("s2s-stream-features", | 78 module:hook("s2s-stream-features", |
70 function (data) | 79 function (data) |
71 local session, features = data.session, data.features; | 80 local session, features = data.session, data.features; |
72 if session.to_host and session.conn.starttls then | 81 if session.to_host and session.conn.starttls then |