From d040cb869d63d78a34e9efe9f517fa8829fbf6d9 Mon Sep 17 00:00:00 2001 From: Peter van Dijk Date: Fri, 1 Jul 2022 12:24:13 +0200 Subject: [PATCH] auth 2136: match autosplit TXT correctly --- modules/tinydnsbackend/data | 1 + modules/tinydnsbackend/data.cdb | Bin 1355665 -> 1356068 bytes pdns/rfc2136handler.cc | 13 ++++++++++++- .../1dyndns-update-add-delete-txt/command | 18 +++++++++++++++++- .../expected_result | 12 ++++++++++++ regression-tests/zones/test.dyndns.orig | 3 +++ 6 files changed, 45 insertions(+), 2 deletions(-) diff --git a/modules/tinydnsbackend/data b/modules/tinydnsbackend/data index f8adb95c3d..b5120a79c7 100644 --- a/modules/tinydnsbackend/data +++ b/modules/tinydnsbackend/data @@ -20219,6 +20219,7 @@ Ztest.com:ns1.test.com.:ahu.example.com.:2005092501:28800:7200:604800:86400:3600 +ttl.test.dyndns:127.0.0.1:3600 :delete-add.test.dyndns:16:\034Should\040be\040gone\040after\040a\040while:3600 :txt.test.dyndns:16:\021This\040is\040some\040text:3600 +:xautosplit.test.dyndns:16:\377They\040fixed\040up\040the\040corner\040store\040like\040it\040was\040a\040nightclub\040-\040It\047s\040permanently\040disco\040-\040Everyone\040is\040dressed\040so\040oddly\040I\040can\047t\040recognize\040them\040-\040I\040can\047t\040tell\040the\040staff\040from\040the\040customers\040-\040Baby\040check\040this\040out\054\040I\047ve\040got\040something\040to\040say\040-\040Man\054\040it\047s\040so\040loud\040in\040here\040S-\040When\040they\040stop\040the\040drum\040machine\040and\040I\040can\040think\040again\040-\040I\047ll\040remember\040what\040it\040was:3600 @test.dyndns::host-1.test.dyndns.:10:3600 @test.dyndns::host-2.test.dyndns.:20:3600 Ccname1.test.dyndns:host-1.test.dyndns.:3600 diff --git a/modules/tinydnsbackend/data.cdb b/modules/tinydnsbackend/data.cdb index 5460277209efc0e6299c0e6564158ef252e271ba..bdaff5fd8d0e22a0a8c16c569963b2673f53991d 100644 GIT binary patch delta 4433 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 delta 4098 zc-l=>4OkS_8a^{13#%}5W(E{Ua#c{Vw3QLVYvq<`n5b)NK|I*%lRsqYQfQjBu3;(_ zxuy<@A`6Cqh;9M{1n7$5PjqYRs+B*8rQI9;t@ap^(LHm%E!gKd&%58xIp=%d@0>Gx zug-F`&9d3+IJ6!i}|`o=}Ke zBY3oxAoDQz+lN4&b2yKVYBPvOxit>9$v8)j>0BTQ0x z%GjRHqg-v`d>*YK=w8TErtS=|9m{yCgf$av(@L0UTmywOHl8YB%7y|Bn*o_zo-$@W z=BW~fJfD9z@!PaNMLgP}RaOEFP5XKDfyU$@Ftk(w8tOm^cO&GPkHN-;?8TJgsTJMb}x@?T7vgCALBoOk?Su&ryr(%s}7@;+D3gb%F%2N z)3`;1xUoM*1zP+e49pB*d!xbj!~(iTV@kv-W2%TX0o!Q6{3NE#yia4QgmVf;TeJnI zVcHVMOz@lLzyeGvHzRHWIpP+)rlroCp4`IKnE zs6s2K6>O6S6foJ&`Tkr0#_l#?YW)ckE&l_Co|_Oi--S5y8_Z)K_>@2bYSNSn5GX@u zKY{ihivnfp9UxGJyio#G0!KsKW*-R&7NbBJ*~bc$ku^b}3fP|jbeII%`}RbED&b6m zJV!Fbon`@*Xob!NWYPq<4Hf|iE)>uqjo_=`XROq3L(EEnN{8PPsMJmypfOv3cVLr1 zm1zG^pv)ax1*!yA1j^i%4;#1&1=Onf_kj}30fF9k(_sO9r`h%3_Z|U-m==M&6E>|U zAcgxI0q*-bVC4A$7`iX}?5lw7*9Ejm>vabxV!aJ{mU{v`V4a|Vbkut__i|B?{ zShh${zj>2Ll`?+-d8RGkH*AB#ym?TtYqtokDFR}SeNd>W0&Igzv;m_UaCqxQ+Ed37 zSipQ-q`mf>0yKXK3oze^RAS?Ku-h*{+;Rn&TdxCC#|==xd>0URiu6pFyG7KZDerHS zXuzbG;K}4ARHaoMD#2GTT!OFMK#4MT86+yXHyYxe5n$s{5_(TtXN*Mey=9yPXJLXw z6)>74N)S($=;=2WJy#h#~O*A z83Q4t^%ifCC_~fx5^b%+0R%0I1PbkjJiVn@qKCs>_HLJMW0#I0gC)a{41Y5EkP$$J z77HXJhzva$eaYxYMlcy6YL||iyF&>ssyKu{-g`c)8qlK>JU1qOb|#DPuTQ?&BKuRnxmJno z$9J>qK2>9b`6h<(S8%Ejsrqxg#Ib3r8WF|E1hA`0)u)H@VNXUJsO6C1>?e!cZ-pR3 z=SNw$G@IbVb!z5(K0bhLDOAfB^OYmmv(;+qR{s4VQAcNPDC^^o{{G23>#Ce%`XKqj z>tiC%vr3%G8+7usw~E^f0+r8e`0!*|8WuR>Ws(_vIh=O}Bl*@x<4%6c^sIoIzB}V4 z{?p6vudeCkzi0X)VV$nW4z*8mDEI{|J|W*3a&~@bUnE;{PB=n)74zf1lkVZYrkv<{ zE};(f*ljabY*Z{S;7DcA=Um`0dD6J|mbCgIIXN$*?NqOI=B3894&@g-ckIuE139euO>A% z6K&kjjQV{dv5QWPND2=mTIJ13Ng#P|=+CW)*DLvTe1x$Q|j#n8-&S~0q@^78od&6~*Lr2*fDrm#qMEmBjm zNbOx!TM}0F;$AiKkRxh9I6d|4oIX8v?y5j%DOoD! zVC+-fIt72ug)0>*A2hV%jnk{|1@t5aAum6(1xsEUciAp_M%hEHtQH9 zFMsKbJEK?L-N|!2iZx0Ub^Ikh<}ussy&OusI4$p+&>)o9==u0=XD~|Coh>NS z`~*A6l~25@yL-I4FSV2RgTKg!vnmMgTw^Y}rbmfoZI4&p4?&69M}C{YLHsWg|NECX za`o)>O+9qUPi+gvNrTz88a4JYJStPTeUL*7ZXKOD^blamAtj>-zo*YEB=&{1e%lL` zt|A;0d&mj4R7CLiE1z6?1ngNwfVnfo! zae?;<`e1_4Z=n8Nvi|08jZ>bg>=l}jDx?MKehN;`mmq@qzw_1GZd``YMFls}F$xq7P40s;pNi(Xq!1 z)bdW@@(?zpM$LIhydTO8>Q(iwF{13JFC^cG>H|?7k!sKW>aSzP<9fE^GqrxAm^*>F zuUHlcR6t%``nI^2i3l&|Q1hSHil+JStPdX)tFbn58LK}}K0nPZgC~4K10c)dw*slu3V*C@a-Q=vF|6)UK%WHw?{Mxe}w{9}%{NljU zr^she!=Fn47nZ4+SHzY`Vb2~8U95a%h1ap>p#uctVD_#c-#CQh0g!LA}=B}?gj+45rbmlvfFKc+%)+Qmp!N|Vx9cD+;0 aOqVA2VaqGj`UTQ5mObZGV;4$YQ~wWJta9`K diff --git a/pdns/rfc2136handler.cc b/pdns/rfc2136handler.cc index ea985b35c0..24763517b4 100644 --- a/pdns/rfc2136handler.cc +++ b/pdns/rfc2136handler.cc @@ -1,3 +1,4 @@ +#include "dnswriter.hh" #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -398,7 +399,17 @@ uint PacketHandler::performUpdate(const string &msgPrefix, const DNSRecord *rr, recordsToDelete.push_back(rec); } if (rr->d_class == QClass::NONE) { // 3.4.2.4 - if (rrType == rec.qtype && rec.getZoneRepresentation() == rr->d_content->getZoneRepresentation()) + auto repr = rec.getZoneRepresentation(); + if (rec.qtype == QType::TXT) { + DLOG(g_log<serialize(rec.qname, true, true); + auto rc = DNSRecordContent::deserialize(rec.qname, rec.qtype.getCode(), ser); + repr = rc->getZoneRepresentation(true); + DLOG(g_log<d_content->getZoneRepresentation()=["<d_content->getZoneRepresentation()<<"]"<d_content->getZoneRepresentation()) recordsToDelete.push_back(rec); else rrset.push_back(rec); diff --git a/regression-tests/tests/1dyndns-update-add-delete-txt/command b/regression-tests/tests/1dyndns-update-add-delete-txt/command index 05d1f88f29..02b50e052d 100755 --- a/regression-tests/tests/1dyndns-update-add-delete-txt/command +++ b/regression-tests/tests/1dyndns-update-add-delete-txt/command @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/sh -x ## add + delete with explicit data @@ -130,3 +130,19 @@ answer # check if the record was deleted. cleandig test.dyndns TXT +## now remove the overly long entry that was autosplit + +# check that it exists now +cleandig xautosplit.test.dyndns TXT + +# delete it +cleannsupdate <>HEADER<<- opcode: UPDATE, status: NOERROR, id: [id] +;; flags: qr aa; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 +;; ZONE SECTION: +;test.dyndns. IN SOA + +1 test.dyndns. IN SOA 3600 ns1.test.dyndns. ahu.example.dyndns. 2022070137 28800 7200 604800 86400 +Rcode: 3 (Non-Existent domain), RD: 0, QR: 1, TC: 0, AA: 1, opcode: 0 +Reply to question for qname='xautosplit.test.dyndns.', qtype=TXT diff --git a/regression-tests/zones/test.dyndns.orig b/regression-tests/zones/test.dyndns.orig index 3f843c5916..823bb03500 100644 --- a/regression-tests/zones/test.dyndns.orig +++ b/regression-tests/zones/test.dyndns.orig @@ -32,3 +32,6 @@ e.host IN A 1.1.1.1 sub IN NS ns1.test.dyndns. sub IN NS ns2.test.dyndns. + +; unlike other records in this zone, the record below will actually disappear during the 1dyndns-update-add-delete-txt test +xautosplit IN TXT "They fixed up the corner store like it was a nightclub - It's permanently disco - Everyone is dressed so oddly I can't recognize them - I can't tell the staff from the customers - Baby check this out, I've got something to say - Man, it's so loud in here - When they stop the drum machine and I can think again - I'll remember what it was" -- 2.47.2