From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id E11F31FF0C2 for ; Thu, 22 Oct 2026 14:47:51 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 52EB8217F6; Thu, 22 Oct 2026 14:47:23 +0200 (CEST) From: Arthur Bied-Charreton To: pve-devel@lists.proxmox.com Subject: [PATCH pve-firewall v4 09/27] firewall: aliases: add option to handle dangling references on delete Date: Thu, 22 Oct 2026 14:46:50 +0200 Message-ID: <20261022124708.429069-10-a.bied-charreton@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20261022124708.429069-1-a.bied-charreton@proxmox.com> References: <20261022124708.429069-1-a.bied-charreton@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1792673237143 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.916 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: UKYKJ7HVAYEDE4PK2IOBJAWGXA5XQ4XK X-Message-ID-Hash: UKYKJ7HVAYEDE4PK2IOBJAWGXA5XQ4XK X-MailFrom: a.bied-charreton@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Deleting an alias referenced by rules, security groups or ipset members leaves dangling references, which the firewall fails to parse and drops. Add a 'dangling-references' option to the delete endpoint, to either 'disable' the referencing rules or 'drop' them along with the alias. The default, 'keep', leaves them as they are. Ipset members have no disabled state, so they are removed in both cases. For cluster aliases, this also covers all downstream configs (host, guest and vnet). Signed-off-by: Arthur Bied-Charreton --- src/PVE/API2/Firewall/Aliases.pm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/PVE/API2/Firewall/Aliases.pm b/src/PVE/API2/Firewall/Aliases.pm index 9e03de0..cb9b448 100644 --- a/src/PVE/API2/Firewall/Aliases.pm +++ b/src/PVE/API2/Firewall/Aliases.pm @@ -337,6 +337,16 @@ sub register_delete_alias { $properties->{name} = $api_properties->{name}; $properties->{digest} = get_standard_option('pve-config-digest'); + $properties->{'dangling-references'} = { + type => 'string', + enum => ['keep', 'disable', 'drop'], + optional => 1, + description => + "Handle references that the deletion would leave dangling. Use 'disable' to disable " + . "the referencing rules, or 'drop' to remove them entirely. IPSet members have no " + . "disabled state and are removed in both cases.", + default => 'keep', + }; $class->register_method({ name => 'remove_alias', @@ -365,6 +375,18 @@ sub register_delete_alias { PVE::Tools::assert_if_modified($digest, $param->{digest}); my $name = lc($param->{name}); + + my $action = $param->{'dangling-references'} // 'keep'; + + update_refs({ + conf => $fw_conf, + kind => 'aliases', + old => $param->{name}, + env => $class->rule_env(), + action => $action eq 'keep' ? undef : $action, + subject => "alias '$param->{name}' deleted", + }); + delete $aliases->{$name}; $class->save_aliases($param, $fw_conf, $aliases); -- 2.47.3