diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2011-01-24 11:34:29 +0000 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-01-24 11:34:29 +0000 |
| commit | f26e73a0c25b48c697d8f1c8d3a7904e20d32cae (patch) | |
| tree | 19763949aac9ae689d5eb47d639c4f24d4dc83ca | |
| parent | 1909c933792e91855f7434ae01115b66b285471c (diff) | |
| parent | b2b3c39fc89e3a00ba26e2d22542d9d76c4f4234 (diff) | |
| download | rabbitmq-server-git-f26e73a0c25b48c697d8f1c8d3a7904e20d32cae.tar.gz | |
Merging default into bug23602
| -rw-r--r-- | src/rabbit_auth_mechanism_plain.erl | 22 |
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]). |
