Skip to content

Commit 0b4fff9

Browse files
committed
Trigger 404 referencing missing vhost
Issue #10901
1 parent dfddfe3 commit 0b4fff9

File tree

5 files changed

+46
-28
lines changed

5 files changed

+46
-28
lines changed

deps/rabbitmq_management/src/rabbit_mgmt_util.erl

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
%% TODO sort all this out; maybe there's scope for rabbit_mgmt_request?
1111

1212
-export([is_authorized/2, is_authorized_admin/2, is_authorized_admin/4,
13-
is_authorized_admin/3, vhost/1, vhost_or_bad_request/2, vhost_from_headers/1]).
13+
is_authorized_admin/3, vhost/1, vhost_from_headers/1]).
1414
-export([is_authorized_vhost/2, is_authorized_user/3,
1515
is_authorized_user/4, is_authorized_user/5,
1616
is_authorized_monitor/2, is_authorized_policies/2,
@@ -210,14 +210,6 @@ vhost_from_headers(ReqData) ->
210210
vhost(ReqData) ->
211211
rabbit_web_dispatch_access_control:vhost(ReqData).
212212

213-
vhost_or_bad_request(ReqData, Context) ->
214-
case rabbit_web_dispatch_access_control:vhost(ReqData) of
215-
not_found ->
216-
bad_request(rabbit_data_coercion:to_binary("vhost_not_found"),
217-
ReqData, Context);
218-
VHost -> VHost
219-
end.
220-
221213
user(ReqData) ->
222214
case id(user, ReqData) of
223215
none -> not_found;
@@ -831,18 +823,23 @@ direct_request(MethodName, Transformers, Extra, ErrorMsg, ReqData,
831823
end, ReqData, Context).
832824

833825
with_vhost_and_props(Fun, ReqData, Context) ->
834-
VHost = vhost_or_bad_request(ReqData, Context),
835-
{ok, Body, ReqData1} = read_complete_body(ReqData),
836-
case decode(Body) of
837-
{ok, Props} ->
838-
try
839-
Fun(VHost, Props, ReqData1)
840-
catch {error, Error} ->
841-
bad_request(Error, ReqData1, Context)
842-
end;
843-
{error, Reason} ->
844-
bad_request(rabbit_mgmt_format:escape_html_tags(Reason),
845-
ReqData1, Context)
826+
case vhost(ReqData) of
827+
not_found ->
828+
not_found(rabbit_data_coercion:to_binary("vhost_not_found"),
829+
ReqData, Context);
830+
VHost ->
831+
{ok, Body, ReqData1} = read_complete_body(ReqData),
832+
case decode(Body) of
833+
{ok, Props} ->
834+
try
835+
Fun(VHost, Props, ReqData1)
836+
catch {error, Error} ->
837+
bad_request(Error, ReqData1, Context)
838+
end;
839+
{error, Reason} ->
840+
bad_request(rabbit_mgmt_format:escape_html_tags(Reason),
841+
ReqData1, Context)
842+
end
846843
end.
847844

848845
props_to_method(MethodName, Props, Transformers, Extra) when Props =:= null orelse

deps/rabbitmq_management/src/rabbit_mgmt_wm_definitions.erl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,12 @@ allowed_methods(ReqData, Context) ->
3737
{[<<"HEAD">>, <<"GET">>, <<"POST">>, <<"OPTIONS">>], ReqData, Context}.
3838

3939
to_json(ReqData, Context) ->
40-
case rabbit_mgmt_util:vhost_or_bad_request(ReqData, Context) of
40+
case rabbit_mgmt_util:vhost(ReqData) of
4141
none ->
4242
all_definitions(ReqData, Context);
43+
not_found ->
44+
rabbit_mgmt_util:bad_request(rabbit_data_coercion:to_binary("vhost_not_found"),
45+
ReqData, Context);
4346
VHost ->
4447
vhost_definitions(ReqData, VHost, Context)
4548
end.

deps/rabbitmq_management/src/rabbit_mgmt_wm_exchange_publish.erl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
-module(rabbit_mgmt_wm_exchange_publish).
99

10-
-export([init/2, resource_exists/2, is_authorized/2,
10+
-export([init/2, resource_exists/2, allow_missing_post/2, is_authorized/2,
1111
allowed_methods/2, content_types_provided/2, accept_content/2,
1212
content_types_accepted/2]).
1313
-export([variances/2]).
@@ -35,14 +35,20 @@ resource_exists(ReqData, Context) ->
3535
_ -> true
3636
end, ReqData, Context}.
3737

38+
allow_missing_post(ReqData, Context) ->
39+
rabbit_mgmt_util:not_found(
40+
rabbit_data_coercion:to_binary("vhost_not_found"),
41+
ReqData,
42+
Context).
43+
3844
content_types_accepted(ReqData, Context) ->
3945
{[{'*', accept_content}], ReqData, Context}.
4046

4147
accept_content(ReqData, Context) ->
4248
rabbit_mgmt_util:post_respond(do_it(ReqData, Context)).
4349

4450
do_it(ReqData0, Context) ->
45-
VHost = rabbit_mgmt_util:vhost_or_bad_request(ReqData0, Context),
51+
VHost = rabbit_mgmt_util:vhost(ReqData0),
4652
X = rabbit_mgmt_util:id(exchange, ReqData0),
4753
rabbit_mgmt_util:with_decode(
4854
[routing_key, properties, payload, payload_encoding], ReqData0, Context,

deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_actions.erl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
-module(rabbit_mgmt_wm_queue_actions).
99

10-
-export([init/2, resource_exists/2, is_authorized/2,
10+
-export([init/2, resource_exists/2, is_authorized/2, allow_missing_post/2,
1111
allowed_methods/2, content_types_accepted/2, accept_content/2]).
1212
-export([variances/2]).
1313

@@ -32,14 +32,20 @@ resource_exists(ReqData, Context) ->
3232
_ -> true
3333
end, ReqData, Context}.
3434

35+
allow_missing_post(ReqData, Context) ->
36+
rabbit_mgmt_util:not_found(
37+
rabbit_data_coercion:to_binary("vhost_not_found"),
38+
ReqData,
39+
Context).
40+
3541
content_types_accepted(ReqData, Context) ->
3642
{[{'*', accept_content}], ReqData, Context}.
3743

3844
accept_content(ReqData, Context) ->
3945
rabbit_mgmt_util:post_respond(do_it(ReqData, Context)).
4046

4147
do_it(ReqData0, Context) ->
42-
VHost = rabbit_mgmt_util:vhost_or_bad_request(ReqData0, Context),
48+
VHost = rabbit_mgmt_util:vhost(ReqData0),
4349
QName = rabbit_mgmt_util:id(queue, ReqData0),
4450
rabbit_mgmt_util:with_decode(
4551
[action], ReqData0, Context,

deps/rabbitmq_management/src/rabbit_mgmt_wm_queue_get.erl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
-module(rabbit_mgmt_wm_queue_get).
99

10-
-export([init/2, resource_exists/2, is_authorized/2,
10+
-export([init/2, resource_exists/2, is_authorized/2, allow_missing_post/2,
1111
allowed_methods/2, accept_content/2, content_types_provided/2,
1212
content_types_accepted/2]).
1313
-export([variances/2]).
@@ -35,14 +35,20 @@ resource_exists(ReqData, Context) ->
3535
_ -> true
3636
end, ReqData, Context}.
3737

38+
allow_missing_post(ReqData, Context) ->
39+
rabbit_mgmt_util:not_found(
40+
rabbit_data_coercion:to_binary("vhost_not_found"),
41+
ReqData,
42+
Context).
43+
3844
content_types_accepted(ReqData, Context) ->
3945
{[{'*', accept_content}], ReqData, Context}.
4046

4147
accept_content(ReqData, Context) ->
4248
rabbit_mgmt_util:post_respond(do_it(ReqData, Context)).
4349

4450
do_it(ReqData0, Context) ->
45-
VHost = rabbit_mgmt_util:vhost_or_bad_request(ReqData0, Context),
51+
VHost = rabbit_mgmt_util:vhost(ReqData0),
4652
Q = rabbit_mgmt_util:id(queue, ReqData0),
4753
rabbit_mgmt_util:with_decode(
4854
[ackmode, count, encoding], ReqData0, Context,

0 commit comments

Comments
 (0)