diff options
Diffstat (limited to 'src')
| -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} -> |
