summaryrefslogtreecommitdiff
path: root/src/rabbit_channel.erl
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
commitc637f0167691ef596c92ef75b1b884419f11af12 (patch)
treee5f9bdbd7097e9fb4fc37a6e6ebbbcf94ab0592c /src/rabbit_channel.erl
parent5a26cf6b3f9125d7bb53ba207d9adbd0ac64b791 (diff)
downloadrabbitmq-server-c637f0167691ef596c92ef75b1b884419f11af12.tar.gz
Don't allow deletion of "amq.rabbitmq.*".
Diffstat (limited to 'src/rabbit_channel.erl')
-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 a3a0c754..c837f5e8 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} ->