aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndreas Köhler <andreas.koehler@1und1.de>2010-11-06 20:09:33 +0100
committerBadlop <badlop@process-one.net>2010-11-26 00:13:36 +0100
commit7be6e33ea42867032842e492b24b287dd23f4078 (patch)
tree6407ffb3d7f70dfe2a4c1726a775f1ed06163c56 /src
parentSend Unavailable Presence stanza when an occupant is kicked or banned (EJAB-1... (diff)
Correct domain_certfile tlsopts modifications for s2s connections (EJAB-1086)
* In ejabberd_s2s_out:wait_for_feature_request/2, the domain to use for looking up domain_certfile options is #state.myname and not #state.server * If s2s_certfile is not specified, connect should still be part of the tls options used by ejabberd_s2s_out * Add #state.server to ejabberd_s2s_in processes and store the to attribute in :wait_for_stream/2. Then use that server in :wait_for_feature_request/2 to change the tls options like in ejabberd_s2s_out. Fixes EJAB-1086.
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_s2s_in.erl18
-rw-r--r--src/ejabberd_s2s_out.erl6
2 files changed, 18 insertions, 6 deletions
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index 28b98da8b..6ad53721c 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -63,6 +63,7 @@
tls = false,
tls_enabled = false,
tls_options = [],
+ server,
authenticated = false,
auth_domain,
connections = ?DICT:new(),
@@ -193,7 +194,7 @@ wait_for_stream({xmlstreamstart, Opening}, StateData) ->
Server,
[], [Server]),
send_element(StateData, exmpp_stream:features(Features)),
- {next_state, wait_for_feature_request, StateData};
+ {next_state, wait_for_feature_request, StateData#state{server = Server}};
{?NS_JABBER_SERVER, _, Server, true} when
StateData#state.authenticated ->
Opening_Reply = exmpp_stream:opening_reply(Opening,
@@ -244,14 +245,25 @@ wait_for_feature_request({xmlstreamelement, El}, StateData) ->
Socket = StateData#state.socket,
Proceed = exmpp_xml:node_to_list(
exmpp_server_tls:proceed(), [?DEFAULT_NS], ?PREFIXED_NS),
- TLSOpts = StateData#state.tls_options,
+ TLSOpts = case ejabberd_config:get_local_option(
+ {domain_certfile,
+ StateData#state.server}) of
+ undefined ->
+ StateData#state.tls_options;
+ CertFile ->
+ [{certfile, CertFile} |
+ lists:keydelete(
+ certfile, 1,
+ StateData#state.tls_options)]
+ end,
TLSSocket = (StateData#state.sockmod):starttls(
Socket, TLSOpts,
Proceed),
{next_state, wait_for_stream,
StateData#state{socket = TLSSocket,
streamid = new_id(),
- tls_enabled = true
+ tls_enabled = true,
+ tls_options = TLSOpts
}};
#xmlel{ns = ?NS_SASL, name = 'auth'} when TLSEnabled ->
case exmpp_server_sasl:next_step(El) of
diff --git a/src/ejabberd_s2s_out.erl b/src/ejabberd_s2s_out.erl
index 09cfce54e..349c4dcbe 100644
--- a/src/ejabberd_s2s_out.erl
+++ b/src/ejabberd_s2s_out.erl
@@ -67,7 +67,7 @@
tls = false,
tls_required = false,
tls_enabled = false,
- tls_options = [],
+ tls_options = [connect],
authenticated = false,
db_enabled = true,
try_auth = true,
@@ -155,7 +155,7 @@ init([From, Server, Type]) ->
UseV10 = TLS,
TLSOpts = case ejabberd_config:get_local_option(s2s_certfile) of
undefined ->
- [];
+ [connect];
CertFile ->
[{certfile, CertFile}, connect]
end,
@@ -606,7 +606,7 @@ wait_for_starttls_proceed({xmlstreamelement, El}, StateData) ->
StateData#state.server}]),
Socket = StateData#state.socket,
TLSOpts = case ejabberd_config:get_local_option
- ({domain_certfile, StateData#state.server}) of
+ ({domain_certfile, StateData#state.myname}) of
undefined ->
StateData#state.tls_options;
CertFile ->