From a3733a0c356cc13dfe2067b60a2fa3e6c6a01aa8 Mon Sep 17 00:00:00 2001 From: Ermal Date: Thu, 26 Aug 2010 16:47:10 +0000 Subject: [PATCH] Do not allow proxy arp to be edited if it references a carp. --- usr/local/www/firewall_virtual_ip_edit.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/usr/local/www/firewall_virtual_ip_edit.php b/usr/local/www/firewall_virtual_ip_edit.php index bdad11a928..895143522a 100755 --- a/usr/local/www/firewall_virtual_ip_edit.php +++ b/usr/local/www/firewall_virtual_ip_edit.php @@ -154,8 +154,22 @@ if ($_POST) { } if (isset($id) && ($a_vip[$id])) { - if ($a_vip[$id]['mode'] != $_POST['mode']) - interface_vip_bring_down($a_vip[$id]); + if ($a_vip[$id]['mode'] != $_POST['mode']) { + $bringdown = false; + if ($a_vip[$id]['mode'] == "proxyarp") { + $vipiface = $a_vip[$id]['interface']; + foreach ($a_vip as $vip) { + if ($vip['interface'] == $vipiface && $vip['mode'] == "carp") { + if (ip_in_subnet($vip['subnet'], gen_subnet($a_vip[$id]['subnet'], $a_vip[$id]['subnet_bits']) . "/" . $a_vip[$id]['subnet_bits'])) { + $input_errors[] = gettext("This entry cannot be modified because it is still referenced by CARP") . " {$vip['descr']}."; + $bringdown = false; + } + } + } + } + if (bringdown == false) + interface_vip_bring_down($a_vip[$id]); + } if ($a_vip[$id]['interface'] != $_POST['interface']) interface_vip_bring_down($a_vip[$id]); }