summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-01-24 11:34:29 +0000
committerMatthew Sackman <matthew@rabbitmq.com>2011-01-24 11:34:29 +0000
commitf26e73a0c25b48c697d8f1c8d3a7904e20d32cae (patch)
tree19763949aac9ae689d5eb47d639c4f24d4dc83ca
parent1909c933792e91855f7434ae01115b66b285471c (diff)
parentb2b3c39fc89e3a00ba26e2d22542d9d76c4f4234 (diff)
downloadrabbitmq-server-git-f26e73a0c25b48c697d8f1c8d3a7904e20d32cae.tar.gz
Merging default into bug23602
-rw-r--r--src/rabbit_auth_mechanism_plain.erl22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/rabbit_auth_mechanism_plain.erl b/src/rabbit_auth_mechanism_plain.erl
index 7d9dcd2007..63eff191cd 100644
--- a/src/rabbit_auth_mechanism_plain.erl
+++ b/src/rabbit_auth_mechanism_plain.erl
@@ -41,11 +41,17 @@ init(_Sock) ->
[].
handle_response(Response, _State) ->
- %% The '%%"' at the end of the next line is for Emacs
- case re:run(Response, "^\\0([^\\0]*)\\0([^\\0]*)$",%%"
- [{capture, all_but_first, binary}]) of
- {match, [User, Pass]} ->
- rabbit_access_control:check_user_pass_login(User, Pass);
- _ ->
- {protocol_error, "response ~p invalid", [Response]}
- end.
+ {User, Response1} = split_on_null(drop_leading_null(Response), []),
+ {Pass, _Response2} = split_on_null(Response1, []),
+ rabbit_access_control:check_user_pass_login(
+ list_to_binary(User), list_to_binary(Pass)).
+
+drop_leading_null(<<0:8, Rest/binary>>) ->
+ Rest.
+
+split_on_null(<<0:8, Rest/binary>>, Acc) ->
+ {lists:reverse(Acc), Rest};
+split_on_null(<<>>, Acc) ->
+ {lists:reverse(Acc), <<>>};
+split_on_null(<<C:8, Rest/binary>>, Acc) ->
+ split_on_null(Rest, [C | Acc]).