process_sasl_mechanisms(Mechs, State2);
false ->
process_sasl_failure(
- #sasl_failure{reason = 'invalid-mechanism'},
- State2)
+ <<"Peer provided no SASL mechanisms">>, State2)
end
end
end
send_pkt(State1, #sasl_auth{mechanism = Mech, text = Authzid});
false ->
process_sasl_failure(
- #sasl_failure{reason = 'invalid-mechanism'}, State)
+ <<"Peer doesn't support EXTERNAL authentication">>, State)
end.
-spec process_starttls(state()) -> state().
end
end.
--spec process_sasl_failure(sasl_failure(), state()) -> state().
-process_sasl_failure(#sasl_failure{} = Failure, #{mod := Mod} = State) ->
+-spec process_sasl_failure(sasl_failure() | binary(), state()) -> state().
+process_sasl_failure(#sasl_failure{} = Failure, State) ->
Reason = format("Peer responded with error: ~s",
[format_sasl_failure(Failure)]),
+ process_sasl_failure(Reason, State);
+process_sasl_failure(Reason, #{mod := Mod} = State) ->
try Mod:handle_auth_failure(<<"EXTERNAL">>, {auth, Reason}, State)
catch _:undef -> process_stream_end({auth, Reason}, State)
end.