From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 6DB2A1FF173 for <inbox@lore.proxmox.com>; Mon, 27 Jan 2025 12:30:56 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 181EC289C6; Mon, 27 Jan 2025 12:30:03 +0100 (CET) From: Fiona Ebner <f.ebner@proxmox.com> To: pve-devel@lists.proxmox.com Date: Mon, 27 Jan 2025 12:29:18 +0100 Message-Id: <20250127112923.31703-12-f.ebner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250127112923.31703-1-f.ebner@proxmox.com> References: <20250127112923.31703-1-f.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.044 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH qemu-server v5 11/16] parse config: warn about duplicate sections X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> Currently, a duplicate section will quietly override the previous instance of the section with the same identifier. Keep the current behavior of preferring later entries, but issue a warning or die when parsing strictly. The entry for 'pending' in the result needs to start out as undefined for the check to also work in presence of empty sections. Avoid changing the returned value itself, by making sure to initialize the entry before returning. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> --- PVE/QemuServer.pm | 10 +++++++++- .../duplicate-sections.conf.strict.error | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/parse-config-expected/duplicate-sections.conf.strict.error diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 5a55e70e..8c26fbc3 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2202,7 +2202,7 @@ sub parse_vm_config { my $res = { digest => Digest::SHA::sha1_hex($raw), snapshots => {}, - pending => {}, + pending => undef, 'special-sections' => {}, }; @@ -2242,17 +2242,23 @@ sub parse_vm_config { if ($line =~ m/^\[PENDING\]\s*$/i) { $section = { name => 'pending', type => 'pending' }; $finish_description->(); + $handle_error->("vm $vmid - duplicate section: $section->{name}\n") + if defined($res->{$section->{name}}); $conf = $res->{$section->{name}} = {}; next; } elsif ($line =~ m/^\[special:$special_sections_re_1\]\s*$/i) { $section = { name => $1, type => 'special' }; $finish_description->(); + $handle_error->("vm $vmid - duplicate special section: $section->{name}\n") + if defined($res->{'special-sections'}->{$section->{name}}); $conf = $res->{'special-sections'}->{$section->{name}} = {}; next; } elsif ($line =~ m/^\[([a-z][a-z0-9_\-]+)\]\s*$/i) { $section = { name => $1, type => 'snapshot' }; $finish_description->(); + $handle_error->("vm $vmid - duplicate snapshot section: $section->{name}\n") + if defined($res->{snapshots}->{$section->{name}}); $conf = $res->{snapshots}->{$section->{name}} = {}; next; } elsif ($line =~ m/^\[([^\]]*)\]\s*$/i) { @@ -2322,6 +2328,8 @@ sub parse_vm_config { $finish_description->(); delete $res->{snapstate}; # just to be sure + $res->{pending} = {} if !defined($res->{pending}); + return $res; } diff --git a/test/parse-config-expected/duplicate-sections.conf.strict.error b/test/parse-config-expected/duplicate-sections.conf.strict.error new file mode 100644 index 00000000..f7aabfd7 --- /dev/null +++ b/test/parse-config-expected/duplicate-sections.conf.strict.error @@ -0,0 +1 @@ +vm 8006 - duplicate section: pending -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel