Reputation: 191
Consider following records in a dns server:
;; ANSWER SECTION:
test.example.com 3600 IN TXT "line1"
test.example.com 3600 IN TXT "line2"
Is it possible to delete 1 of the records and leave the other one?
When performing the delete with:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
update.present(name, rdata)
update.delete(name, rdata)
I get a NXRRSET (8) response.
When deleting with:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
update.present(name, datatype)
update.delete(name, datatype)
then both TXT records are deleted (as expected).
My example is for TXT records but I have the same issue for other datatypes like A and PTR. Removing 1 of multiple records for the same name and type doesn't seem to work.
Any suggestions? Or is this not possible?
update
When using the nsupdate cli tool it seems possible. When I send following commands, only 1 of the 2 entries are removed:
$ nsupdate -v -k example.com.key
server ns.example.com
nupdate delete test.example.com. TXT line1
send
Since it's working for dns update, I'll see to make an issue on the dnspython github page
Upvotes: 2
Views: 1649
Reputation: 191
After testing more with nsupdate the solution became clear. When using the present prereq, I just had to add them all so the preq was satisfied. The following code uses present and only deletesthe "line1" txt record:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
rdata2 = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line2")
update.present(name, rdata)
update.present(name, rdata2)
update.delete(name, rdata)
Upvotes: 1
Reputation: 191
The problem seems to be the present clause. Since 2 records are present and the update.present only conatins 1, it fails with the NXRRSET. When omitting the prsent clause, the delete works:
name = 'test.example.com.'
datatype = dns.rdatatype.from_text("TXT")
rdata = dns.rdata.from_text(dns.rdataclass.IN, dns_datatype, "line1")
update.delete(name, rdata)
Upvotes: 0