diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2013-10-30 13:35:22 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2013-10-30 13:35:22 +0000 |
commit | c637f0167691ef596c92ef75b1b884419f11af12 (patch) | |
tree | e5f9bdbd7097e9fb4fc37a6e6ebbbcf94ab0592c /src/rabbit_channel.erl | |
parent | 5a26cf6b3f9125d7bb53ba207d9adbd0ac64b791 (diff) | |
download | rabbitmq-server-c637f0167691ef596c92ef75b1b884419f11af12.tar.gz |
Don't allow deletion of "amq.rabbitmq.*".
Diffstat (limited to 'src/rabbit_channel.erl')
-rw-r--r-- | src/rabbit_channel.erl | 8 |
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} -> |