diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cyrsasl.erl | 2 | ||||
-rw-r--r-- | src/cyrsasl_digest.erl | 4 | ||||
-rw-r--r-- | src/cyrsasl_plain.erl | 2 | ||||
-rw-r--r-- | src/ejabberd_c2s.erl | 21 |
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", |