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 | 02f9801704955c89e88a885a0fad09cbea366c7d (patch) | |
| tree | e5f9bdbd7097e9fb4fc37a6e6ebbbcf94ab0592c | |
| parent | d43728a8042884ba689ac795e368ab5e79f31073 (diff) | |
| download | rabbitmq-server-git-02f9801704955c89e88a885a0fad09cbea366c7d.tar.gz | |
Don't allow deletion of "amq.rabbitmq.*".
| -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 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} -> |
