From: Peter van Dijk Date: Thu, 9 Mar 2023 18:55:45 +0000 (+0100) Subject: auth lmdb: support replaceComments, but only accept the empty vector X-Git-Tag: auth-4.8.0-beta1~3^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F12636%2Fhead;p=thirdparty%2Fpdns.git auth lmdb: support replaceComments, but only accept the empty vector --- diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 086200f50b..0927649ec2 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -568,6 +568,13 @@ bool LMDBBackend::replaceRRSet(uint32_t domain_id, const DNSName& qname, const Q return true; } +bool LMDBBackend::replaceComments(const uint32_t domain_id, const DNSName& qname, const QType& qt, const vector& comments) +{ + // if the vector is empty, good, that's what we do here (LMDB does not store comments) + // if it's not, report failure + return comments.empty(); +} + // tempting to templatize these two functions but the pain is not worth it std::shared_ptr LMDBBackend::getRecordsRWTransaction(uint32_t id) { diff --git a/modules/lmdbbackend/lmdbbackend.hh b/modules/lmdbbackend/lmdbbackend.hh index c1d29a864f..4b55184748 100644 --- a/modules/lmdbbackend/lmdbbackend.hh +++ b/modules/lmdbbackend/lmdbbackend.hh @@ -74,6 +74,7 @@ public: bool feedEnts(int domain_id, map& nonterm) override; bool feedEnts3(int domain_id, const DNSName& domain, map& nonterm, const NSEC3PARAMRecordContent& ns3prc, bool narrow) override; bool replaceRRSet(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector& rrset) override; + bool replaceComments(uint32_t domain_id, const DNSName& qname, const QType& qt, const vector& comments) override; void getAllDomains(vector* domains, bool doSerial, bool include_disabled) override; void lookup(const QType& type, const DNSName& qdomain, int zoneId, DNSPacket* p = nullptr) override; diff --git a/regression-tests.api/test_Zones.py b/regression-tests.api/test_Zones.py index 0c26db393b..46d92f5520 100644 --- a/regression-tests.api/test_Zones.py +++ b/regression-tests.api/test_Zones.py @@ -3,6 +3,7 @@ import json import operator import time import unittest +import requests.exceptions from copy import deepcopy from parameterized import parameterized from pprint import pprint @@ -242,7 +243,6 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): # check our record has appeared self.assertEqual(get_rrset(data, rrset['name'], 'A')['records'], rrset['records']) - @unittest.skipIf(is_auth_lmdb(), "No comments in LMDB") def test_create_zone_with_comments(self): name = unique_zone_name() rrsets = [ @@ -288,6 +288,12 @@ class AuthZones(ApiTestCase, AuthZonesHelperMixin): }], }, ] + + if is_auth_lmdb(): + with self.assertRaises(requests.exceptions.HTTPError): # No comments in LMDB + self.create_zone(name=name, rrsets=rrsets) + return + name, payload, data = self.create_zone(name=name, rrsets=rrsets) # NS records have been created self.assertEqual(len(data['rrsets']), len(rrsets) + 1) @@ -1848,7 +1854,6 @@ $ORIGIN %NAME% self.assertEqual(r.status_code, 204) self.assertNotIn('Content-Type', r.headers) - @unittest.skipIf(is_auth_lmdb(), "No comments in LMDB") def test_zone_comment_create(self): name, payload, zone = self.create_zone() rrset = { @@ -1872,7 +1877,11 @@ $ORIGIN %NAME% self.url("/api/v1/servers/localhost/zones/" + name), data=json.dumps(payload), headers={'content-type': 'application/json'}) - self.assert_success(r) + if is_auth_lmdb(): + self.assert_error_json(r) # No comments in LMDB + return + else: + self.assert_success(r) # make sure the comments have been set, and that the NS # records are still present data = self.session.get(self.url("/api/v1/servers/localhost/zones/" + name)).json() @@ -1885,7 +1894,6 @@ $ORIGIN %NAME% # verify that TTL is correct (regression test) self.assertEqual(serverset['ttl'], 3600) - @unittest.skipIf(is_auth_lmdb(), "No comments in LMDB") def test_zone_comment_delete(self): # Test: Delete ONLY comments. name, payload, zone = self.create_zone()