summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <klishinm@vmware.com>2023-05-10 22:01:37 +0400
committerGitHub <noreply@github.com>2023-05-10 22:01:37 +0400
commitf0a9130461f6caa23ecfff4f45523089010fcfe2 (patch)
tree636830c48f308b630cf57612bd6f3c30feb943b6
parent2058f7b8314adc97a2998ec7b590908b58ce8af7 (diff)
parent5eda3d20addfa0562218241d2c6bf6b1f7944e78 (diff)
downloadrabbitmq-server-git-f0a9130461f6caa23ecfff4f45523089010fcfe2.tar.gz
Merge pull request #8132 from rabbitmq/mergify/bp/v3.11.x/pr-8131
Correctly use AMQP URI query parameter `password` (backport #8130) (backport #8131)
-rw-r--r--deps/amqp_client/src/amqp_uri.erl20
-rw-r--r--deps/amqp_client/test/unit_SUITE.erl10
2 files changed, 19 insertions, 11 deletions
diff --git a/deps/amqp_client/src/amqp_uri.erl b/deps/amqp_client/src/amqp_uri.erl
index 5ebb11257e..bf650bfb2d 100644
--- a/deps/amqp_client/src/amqp_uri.erl
+++ b/deps/amqp_client/src/amqp_uri.erl
@@ -204,12 +204,15 @@ broker_add_query(Params, ParsedUri, Fields) ->
return({ParamsN, Pos1});
Value ->
try
- ValueParsed = parse_amqp_param(Field, Value),
- return(
- {setelement(Pos, ParamsN, ValueParsed), Pos1})
+ case parse_amqp_param(Field, Value) of
+ ignore ->
+ return({ParamsN, Pos1});
+ ValueParsed ->
+ return({setelement(Pos, ParamsN, ValueParsed), Pos1})
+ end
catch throw:Reason ->
- fail({invalid_amqp_params_parameter,
- Field, Value, Query, Reason})
+ fail({invalid_amqp_params_parameter,
+ Field, Value, Query, Reason})
end
end
end || Field <- Fields], {Params, 2}),
@@ -221,8 +224,11 @@ parse_amqp_param(Field, String) when Field =:= channel_max orelse
Field =:= connection_timeout orelse
Field =:= depth ->
find_integer_parameter(String);
-parse_amqp_param(Field, String) when Field =:= password ->
- find_identity_parameter(String);
+parse_amqp_param(Field, _String) when Field =:= password ->
+ %% https://github.com/rabbitmq/rabbitmq-server/issues/8129
+ %% Ignore `password` here since the parameter is used for setting a
+ %% certificate password, NOT an AMQP login password
+ return(ignore);
parse_amqp_param(Field, String) ->
fail({parameter_unconfigurable_in_query, Field, String}).
diff --git a/deps/amqp_client/test/unit_SUITE.erl b/deps/amqp_client/test/unit_SUITE.erl
index af4bc688e6..aeee31ec9a 100644
--- a/deps/amqp_client/test/unit_SUITE.erl
+++ b/deps/amqp_client/test/unit_SUITE.erl
@@ -147,8 +147,9 @@ amqp_uri_parsing(_Config) ->
{server_name_indication,"host3"}],
?assertEqual(lists:usort(Exp3), lists:usort(TLSOpts3)),
- {ok, #amqp_params_network{host = "host4", ssl_options = TLSOpts4}} =
- amqp_uri:parse("amqps://host4/%2f?cacertfile=/path/to/cacertfile.pem"
+ {ok, #amqp_params_network{username = <<"user">>, password = <<"pass">>,
+ host = "host4", ssl_options = TLSOpts4}} =
+ amqp_uri:parse("amqps://user:pass@host4/%2f?cacertfile=/path/to/cacertfile.pem"
"&certfile=/path/to/certfile.pem"
"&password=topsecret"
"&depth=5"),
@@ -171,8 +172,9 @@ amqp_uri_parsing(_Config) ->
{verify, verify_none}]),
lists:usort(TLSOpts8)),
- {ok, #amqp_params_network{host = "127.0.0.1", ssl_options = TLSOpts9}} =
- amqp_uri:parse("amqps://127.0.0.1/%2f?cacertfile=/path/to/cacertfile.pem"
+ {ok, #amqp_params_network{username = <<"user">>, password = <<"pass">>,
+ host = "127.0.0.1", ssl_options = TLSOpts9}} =
+ amqp_uri:parse("amqps://user:pass@127.0.0.1/%2f?cacertfile=/path/to/cacertfile.pem"
"&certfile=/path/to/certfile.pem"
"&password=topsecret"
"&depth=5"),