From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <matthieu@matthieu-dev.xyz>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by lists.proxmox.com (Postfix) with ESMTPS id C6D7AB84F9
 for <pve-devel@lists.proxmox.com>; Mon,  4 Dec 2023 18:20:13 +0100 (CET)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
 by firstgate.proxmox.com (Proxmox) with ESMTP id AD80F11BA3
 for <pve-devel@lists.proxmox.com>; Mon,  4 Dec 2023 18:19:43 +0100 (CET)
Received: from cyan.elm.relay.mailchannels.net
 (cyan.elm.relay.mailchannels.net [23.83.212.47])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (No client certificate requested)
 by firstgate.proxmox.com (Proxmox) with ESMTPS
 for <pve-devel@lists.proxmox.com>; Mon,  4 Dec 2023 18:19:41 +0100 (CET)
X-Sender-Id: dreamhost|x-authsender|matthieu@matthieu-dev.xyz
Received: from relay.mailchannels.net (localhost [127.0.0.1])
 by relay.mailchannels.net (Postfix) with ESMTP id D99904C1DB1;
 Mon,  4 Dec 2023 16:41:05 +0000 (UTC)
Received: from pdx1-sub0-mail-a247.dreamhost.com (unknown [127.0.0.6])
 (Authenticated sender: dreamhost)
 by relay.mailchannels.net (Postfix) with ESMTPA id 9049E4C20DA;
 Mon,  4 Dec 2023 16:41:05 +0000 (UTC)
ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1701708065; a=rsa-sha256;
 cv=none;
 b=tQ+IeO8/zCaMVSucg7CoMp7jucgwtaqlONf28JFbrprzjcapqyeIOdf++OzbcpkzIwHu1P
 lhCjoQU80usUukIA2IYBdMbb0RLu3QRlicsNzJ36oD2G1+5DD8zXwvf9QXN3mdL7aTFs8s
 5f/29no8ETtykz1LPRLrpVVJ+Us+kH6iB18AsaJo7BJwe4LcF2j3Ymq12MbqR37nrwcwY3
 mPGb/qhlvGyHDEtzpIloYXid78ZmKMGKZm3bleCdrNhVOGTmZG/8OifeQV0g4l/7j5Oeai
 A1GjGBJpbgNE4EVjMAacJIrb0KvQtmoCjh6pkQebw5AFqnRaes6JiCkAWutaLQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;
 d=mailchannels.net; s=arc-2022; t=1701708065;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:dkim-signature;
 bh=MxKI65AcM/Vm555bNd7Ds8k12ImnEwoBbRZJzL6UrPc=;
 b=knn3MW9hcZP4RFM8NHrEo/PDQ2e9VPI2Mt0X1NuVkWwUsa90eeRYTT7kYlvdi2gGJOheni
 PcJyyo1BjOVwsb+MvmEGdSeuwd3WNJsyKsK9PvNJQsVLX4hhvrRgm0Amb+vJKDHWV0W73A
 aqumRWVmyQalmoKWKC3S9uPV9U9AyKrJnK16Aw8/7UYfSphe0qNkoXsO0Q4QNIFuUIzmdn
 8Qp1klooFMVaexgRFl5Ghx66LFsMf0RtNElosZTqpepwhU/kJt31HtPDcuF/3dMFK82e9b
 7UbtaQNr11m8q2FGpZqDPgFR3iVPVuB4Jot9FufTseIiLVl3aTy5H5Uxs1h3HQ==
ARC-Authentication-Results: i=1; rspamd-d88d8bd54-wtvvh;
 auth=pass smtp.auth=dreamhost smtp.mailfrom=matthieu@matthieu-dev.xyz
X-Sender-Id: dreamhost|x-authsender|matthieu@matthieu-dev.xyz
X-MC-Relay: Neutral
X-MailChannels-SenderId: dreamhost|x-authsender|matthieu@matthieu-dev.xyz
X-MailChannels-Auth-Id: dreamhost
X-Slimy-Illustrious: 0998f2956e472381_1701708065732_2572323330
X-MC-Loop-Signature: 1701708065732:2239365790
X-MC-Ingress-Time: 1701708065732
Received: from pdx1-sub0-mail-a247.dreamhost.com (pop.dreamhost.com
 [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384)
 by 100.104.11.72 (trex/6.9.2); Mon, 04 Dec 2023 16:41:05 +0000
Received: from pve.matthieunet (unknown [41.213.187.32])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 (Authenticated sender: matthieu@matthieu-dev.xyz)
 by pdx1-sub0-mail-a247.dreamhost.com (Postfix) with ESMTPSA id 4SkTv36hwRz5y; 
 Mon,  4 Dec 2023 08:41:03 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=matthieu-dev.xyz;
 s=dreamhost; t=1701708065;
 bh=MxKI65AcM/Vm555bNd7Ds8k12ImnEwoBbRZJzL6UrPc=;
 h=From:To:Cc:Subject:Date:Content-Transfer-Encoding;
 b=AUJpSOpscfJdykNQvZnydul5EczosYqB/mTC2RCXT8lGsAi2kX9BRFPE6OFMznZZI
 6lnD37YlUHFd57I8edMl3PijqVh/lCXr18ucivEObo7GlFQB/1JcAAf4nLQS9GVtMF
 elHlDY/ohux2I0CghsEhEa7bvCaS4lYu706ayfVuxYiEYMC+nxbMvZGN10CNfAnWUb
 +KAsQdqQwwYLuElpKqlwEl4Gg/0bX46PB99g2LCbjNpu/Wsd/dWPf+13i/ZntmDt5i
 kUI/lyVDlMmnNzg1uvS7B5gJUBWUjNShdnX2W1iBRj97KJ1SW4jcgxRRRbgu0v4oS6
 eS9RzUJQdsi4g==
From: Matthieu Pignolet <matthieu@matthieu-dev.xyz>
To: pve-devel@lists.proxmox.com
Cc: Matthieu Pignolet <matthieu@matthieu-dev.xyz>
Date: Mon,  4 Dec 2023 20:40:54 +0400
Message-Id: <20231204164054.861599-1-matthieu@matthieu-dev.xyz>
X-Mailer: git-send-email 2.39.2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
X-SPAM-LEVEL: Spam detection results:  0
 ARC_SIGNED              0.001 Message has a ARC signature
 ARC_VALID                -0.1 Message has a valid ARC signature
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain DMARC_MISSING             0.1 Missing DMARC policy
 KAM_INFOUSMEBIZ 0.75 Prevalent use of
 .info|.us|.me|.me.uk|.biz|xyz|id|rocks|life domains in spam/malware
 RCVD_IN_DNSWL_NONE     -0.0001 Sender listed at https://www.dnswl.org/,
 no trust RCVD_IN_MSPIKE_H4       -0.01 Very Good reputation (+4)
 RCVD_IN_MSPIKE_WL       -0.01 Mailspike good senders
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_NONE                0.001 SPF: sender does not publish an SPF Record
 T_SCC_BODY_TEXT_LINE    -0.01 -
X-Mailman-Approved-At: Tue, 05 Dec 2023 10:42:27 +0100
Subject: [pve-devel] [PATCH pve-network] dns: only update rrsets which
 matches the rrset type
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>
X-List-Received-Date: Mon, 04 Dec 2023 17:20:13 -0000

PowerDNS does not allow multiple dns types in the same rrset, this patch
enables the use of multiple rrset for each types of records.

This fixes an issue when using dual stack ips (Both IPv4 and IPv6) with the
same dns suffix.
---
 src/PVE/Network/SDN/Dns/PowerdnsPlugin.pm | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/PVE/Network/SDN/Dns/PowerdnsPlugin.pm b/src/PVE/Network/SDN/Dns/PowerdnsPlugin.pm
index 096d131..c7f79c1 100644
--- a/src/PVE/Network/SDN/Dns/PowerdnsPlugin.pm
+++ b/src/PVE/Network/SDN/Dns/PowerdnsPlugin.pm
@@ -53,7 +53,7 @@ sub add_a_record {
     my $fqdn = $hostname.".".$zone.".";
 
     my $zonecontent = get_zone_content($plugin_config, $zone);
-    my $existing_rrset = get_zone_rrset($zonecontent, $fqdn);
+    my $existing_rrset = get_zone_rrset($zonecontent, $fqdn, $type);
 
     my $final_records = [];
     my $foundrecord = undef;
@@ -62,13 +62,14 @@ sub add_a_record {
 	    $foundrecord = 1;
 	    next;
 	}
+
 	push @$final_records, $record;
     }
     return if $foundrecord;
 
     my $record = { content => $ip, 
                    disabled => JSON::false, 
-		   name => $fqdn, 
+                   name => $fqdn,
                    type => $type, 
                    priority => 0 };
 
@@ -139,7 +140,7 @@ sub del_a_record {
     my $type = Net::IP::ip_is_ipv6($ip) ? "AAAA" : "A";
 
     my $zonecontent = get_zone_content($plugin_config, $zone);
-    my $existing_rrset = get_zone_rrset($zonecontent, $fqdn);
+    my $existing_rrset = get_zone_rrset($zonecontent, $fqdn, $type);
 
     my $final_records = [];
     my $foundrecord = undef;
@@ -313,13 +314,13 @@ sub get_zone_content {
 }
 
 sub get_zone_rrset {
-    my ($zonecontent, $name) = @_;
+    my ($zonecontent, $name, $type) = @_;
 
     my $rrsetresult = undef;
     foreach my $rrset (@{$zonecontent->{rrsets}}) {
-	next if $rrset->{name} ne $name;
+	next if ($rrset->{name} ne $name) or ($rrset->{type} ne $type);
         $rrsetresult = $rrset;
-	last; 
+	last;
     }
     return $rrsetresult;
 }
-- 
2.39.2