aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cyrsasl.erl2
-rw-r--r--src/cyrsasl_digest.erl4
-rw-r--r--src/cyrsasl_plain.erl2
-rw-r--r--src/ejabberd_c2s.erl21
4 files changed, 26 insertions, 3 deletions
diff --git a/src/cyrsasl.erl b/src/cyrsasl.erl
index f8e548826..eb2346cda 100644
--- a/src/cyrsasl.erl
+++ b/src/cyrsasl.erl
@@ -136,6 +136,8 @@ server_step(State, ClientIn) ->
{continue, ServerOut, NewMechState} ->
{continue, ServerOut,
State#sasl_state{mech_state = NewMechState}};
+ {error, Error, Username} ->
+ {error, Error, Username};
{error, Error} ->
{error, Error}
end.
diff --git a/src/cyrsasl_digest.erl b/src/cyrsasl_digest.erl
index cc44b1a95..9966bddd1 100644
--- a/src/cyrsasl_digest.erl
+++ b/src/cyrsasl_digest.erl
@@ -44,7 +44,7 @@ mech_step(#state{step = 3, nonce = Nonce} = State, ClientIn) ->
AuthzId = xml:get_attr_s("authzid", KeyVals),
case (State#state.get_password)(UserName) of
false ->
- {error, "not-authorized"};
+ {error, "not-authorized", UserName};
Passwd ->
Response = response(KeyVals, UserName, Passwd,
Nonce, AuthzId, "AUTHENTICATE"),
@@ -59,7 +59,7 @@ mech_step(#state{step = 3, nonce = Nonce} = State, ClientIn) ->
username = UserName,
authzid = AuthzId}};
_ ->
- {error, "not-authorized"}
+ {error, "not-authorized", UserName}
end
end
end;
diff --git a/src/cyrsasl_plain.erl b/src/cyrsasl_plain.erl
index 59f88bf25..a2fee76ec 100644
--- a/src/cyrsasl_plain.erl
+++ b/src/cyrsasl_plain.erl
@@ -33,7 +33,7 @@ mech_step(State, ClientIn) ->
true ->
{ok, [{username, User}, {authzid, AuthzId}]};
_ ->
- {error, "not-authorized"}
+ {error, "not-authorized", User}
end;
_ ->
{error, "bad-protocol"}
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 0865fba5b..f1c3dddfc 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -174,6 +174,7 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
case lists:member(Server, ?MYHOSTS) of
true ->
Lang = xml:get_attr_s("xml:lang", Attrs),
+ change_shaper(StateData, jlib:make_jid("", Server, "")),
case xml:get_attr_s("version", Attrs) of
"1.0" ->
Header = io_lib:format(?STREAM_HEADER,
@@ -493,6 +494,16 @@ wait_for_feature_request({xmlstreamelement, El}, StateData) ->
jlib:encode_base64(ServerOut)}]}),
{next_state, wait_for_sasl_response,
StateData#state{sasl_state = NewSASLState}};
+ {error, Error, Username} ->
+ ?INFO_MSG(
+ "(~w) Failed authentication for ~s@~s",
+ [StateData#state.socket,
+ Username, StateData#state.server]),
+ send_element(StateData,
+ {xmlelement, "failure",
+ [{"xmlns", ?NS_SASL}],
+ [{xmlelement, Error, [], []}]}),
+ {next_state, wait_for_feature_request, StateData};
{error, Error} ->
send_element(StateData,
{xmlelement, "failure",
@@ -609,6 +620,16 @@ wait_for_sasl_response({xmlstreamelement, El}, StateData) ->
jlib:encode_base64(ServerOut)}]}),
{next_state, wait_for_sasl_response,
StateData#state{sasl_state = NewSASLState}};
+ {error, Error, Username} ->
+ ?INFO_MSG(
+ "(~w) Failed authentication for ~s@~s",
+ [StateData#state.socket,
+ Username, StateData#state.server]),
+ send_element(StateData,
+ {xmlelement, "failure",
+ [{"xmlns", ?NS_SASL}],
+ [{xmlelement, Error, [], []}]}),
+ {next_state, wait_for_feature_request, StateData};
{error, Error} ->
send_element(StateData,
{xmlelement, "failure",