summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-10-30 13:35:22 +0000
committerSimon MacMullen <simon@rabbitmq.com>2013-10-30 13:35:22 +0000
commit02f9801704955c89e88a885a0fad09cbea366c7d (patch)
treee5f9bdbd7097e9fb4fc37a6e6ebbbcf94ab0592c /src
parentd43728a8042884ba689ac795e368ab5e79f31073 (diff)
downloadrabbitmq-server-git-02f9801704955c89e88a885a0fad09cbea366c7d.tar.gz
Don't allow deletion of "amq.rabbitmq.*".
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_channel.erl8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index a3a0c7543b..c837f5e843 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -550,6 +550,13 @@ check_not_default_exchange(#resource{kind = exchange, name = <<"">>}) ->
check_not_default_exchange(_) ->
ok.
+check_exchange_deletion(#resource{kind = exchange,
+ name = <<"amq.rabbitmq.", _/binary>>}) ->
+ rabbit_misc:protocol_error(
+ access_refused, "deletion of system exchanges not allowed", []);
+check_exchange_deletion(_) ->
+ ok.
+
%% check that an exchange/queue name does not contain the reserved
%% "amq." prefix.
%%
@@ -933,6 +940,7 @@ handle_method(#'exchange.delete'{exchange = ExchangeNameBin,
_, State = #ch{virtual_host = VHostPath}) ->
ExchangeName = rabbit_misc:r(VHostPath, exchange, ExchangeNameBin),
check_not_default_exchange(ExchangeName),
+ check_exchange_deletion(ExchangeName),
check_configure_permitted(ExchangeName, State),
case rabbit_exchange:delete(ExchangeName, IfUnused) of
{error, not_found} ->