mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 13:38:26 +00:00
525. [func] New arguement 'exact' for dns_db_subtractrdataset(),
and dns_rdataslab_subtract() requesting that the RR's must exist prior to deletion. DNS_R_NOTEXACT is returned if the condition is not met.
This commit is contained in:
parent
e0425840a8
commit
b55c30f2de
4
CHANGES
4
CHANGES
@ -1,3 +1,7 @@
|
||||
525. [func] New arguement 'exact' for dns_db_subtractrdataset(),
|
||||
and dns_rdataslab_subtract() requesting that the RR's
|
||||
must exist prior to deletion. DNS_R_NOTEXACT is
|
||||
returned if the condition is not met.
|
||||
|
||||
524. [func] The 'forward' and 'forwarders' statement in
|
||||
non-forward zones should work now.
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: db.c,v 1.57 2000/10/17 07:22:29 marka Exp $ */
|
||||
/* $Id: db.c,v 1.58 2000/10/18 23:53:21 marka Exp $ */
|
||||
|
||||
/***
|
||||
*** Imports
|
||||
@ -589,7 +589,7 @@ dns_db_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
isc_result_t
|
||||
dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
|
||||
dns_dbversion_t *version, dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *newrdataset)
|
||||
isc_boolean_t exact, dns_rdataset_t *newrdataset)
|
||||
{
|
||||
/*
|
||||
* Remove any rdata in 'rdataset' from 'node' in version 'version' of
|
||||
@ -607,7 +607,7 @@ dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
|
||||
! dns_rdataset_isassociated(newrdataset)));
|
||||
|
||||
return ((db->methods->subtractrdataset)(db, node, version, rdataset,
|
||||
newrdataset));
|
||||
exact, newrdataset));
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: db.h,v 1.58 2000/08/31 13:00:57 marka Exp $ */
|
||||
/* $Id: db.h,v 1.59 2000/10/18 23:53:29 marka Exp $ */
|
||||
|
||||
#ifndef DNS_DB_H
|
||||
#define DNS_DB_H 1
|
||||
@ -134,6 +134,7 @@ typedef struct dns_dbmethods {
|
||||
isc_result_t (*subtractrdataset)(dns_db_t *db, dns_dbnode_t *node,
|
||||
dns_dbversion_t *version,
|
||||
dns_rdataset_t *rdataset,
|
||||
isc_boolean_t exact,
|
||||
dns_rdataset_t *newrdataset);
|
||||
isc_result_t (*deleterdataset)(dns_db_t *db, dns_dbnode_t *node,
|
||||
dns_dbversion_t *version,
|
||||
@ -1047,7 +1048,7 @@ dns_db_addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
isc_result_t
|
||||
dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
|
||||
dns_dbversion_t *version, dns_rdataset_t *rdataset,
|
||||
dns_rdataset_t *newrdataset);
|
||||
isc_boolean_t exact, dns_rdataset_t *newrdataset);
|
||||
/*
|
||||
* Remove any rdata in 'rdataset' from 'node' in version 'version' of
|
||||
* 'db'.
|
||||
@ -1067,6 +1068,9 @@ dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
|
||||
* 'rdataset' is a valid, associated rdataset with the same class
|
||||
* as 'db'.
|
||||
*
|
||||
* 'exact' if ISC_TRUE then all rdata in 'rdataset' must exist
|
||||
* at 'node'.
|
||||
*
|
||||
* 'newrdataset' is NULL, or a valid, unassociated rdataset.
|
||||
*
|
||||
* The database has zone semantics and 'version' is a valid
|
||||
@ -1078,6 +1082,8 @@ dns_db_subtractrdataset(dns_db_t *db, dns_dbnode_t *node,
|
||||
* DNS_R_UNCHANGED The operation did not change anything.
|
||||
* DNS_R_NXRRSET All rdata of the same type as those
|
||||
* in 'rdataset' have been deleted.
|
||||
* DNS_R_NOTEXACT Some part of 'rdataset' did not
|
||||
* exist and 'exact' was ISC_TRUE.
|
||||
*
|
||||
* Other results are possible, depending upon the database
|
||||
* implementation used.
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rdataslab.h,v 1.15 2000/09/01 01:35:21 bwelling Exp $ */
|
||||
/* $Id: rdataslab.h,v 1.16 2000/10/18 23:53:30 marka Exp $ */
|
||||
|
||||
#ifndef DNS_RDATASLAB_H
|
||||
#define DNS_RDATASLAB_H 1
|
||||
@ -107,9 +107,10 @@ isc_result_t
|
||||
dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
|
||||
unsigned int reservelen, isc_mem_t *mctx,
|
||||
dns_rdataclass_t rdclass, dns_rdatatype_t type,
|
||||
unsigned char **tslabp);
|
||||
isc_boolean_t exact, unsigned char **tslabp);
|
||||
/*
|
||||
* Subtract 'sslab' from 'mslab'.
|
||||
* Subtract 'sslab' from 'mslab'. If 'exact' is true then all elements
|
||||
* of 'sslab' must exist in 'mslab'.
|
||||
*
|
||||
* XXX
|
||||
*/
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: result.h,v 1.69 2000/10/17 07:22:38 marka Exp $ */
|
||||
/* $Id: result.h,v 1.70 2000/10/18 23:53:31 marka Exp $ */
|
||||
|
||||
#ifndef DNS_RESULT_H
|
||||
#define DNS_RESULT_H 1
|
||||
@ -71,7 +71,7 @@
|
||||
#define DNS_R_CNAME (ISC_RESULTCLASS_DNS + 32)
|
||||
#define DNS_R_BADDB (ISC_RESULTCLASS_DNS + 33)
|
||||
#define DNS_R_ZONECUT (ISC_RESULTCLASS_DNS + 34)
|
||||
#define DNS_R_BADZONE (ISC_RESULTCLASS_DNS + 35) /* XXX MPA*/
|
||||
#define DNS_R_BADZONE (ISC_RESULTCLASS_DNS + 35)
|
||||
#define DNS_R_MOREDATA (ISC_RESULTCLASS_DNS + 36)
|
||||
#define DNS_R_UPTODATE (ISC_RESULTCLASS_DNS + 37)
|
||||
#define DNS_R_TSIGVERIFYFAILURE (ISC_RESULTCLASS_DNS + 38)
|
||||
@ -103,8 +103,9 @@
|
||||
#define DNS_R_UNKNOWNOPT (ISC_RESULTCLASS_DNS + 64)
|
||||
#define DNS_R_UNEXPECTEDID (ISC_RESULTCLASS_DNS + 65)
|
||||
#define DNS_R_SEENINCLUDE (ISC_RESULTCLASS_DNS + 66)
|
||||
#define DNS_R_NOTEXACT (ISC_RESULTCLASS_DNS + 67)
|
||||
|
||||
#define DNS_R_NRESULTS 67 /* Number of results */
|
||||
#define DNS_R_NRESULTS 68 /* Number of results */
|
||||
|
||||
/*
|
||||
* DNS wire format rcodes.
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: journal.c,v 1.57 2000/08/01 01:22:25 tale Exp $ */
|
||||
/* $Id: journal.c,v 1.58 2000/10/18 23:53:22 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@ -402,6 +402,7 @@ dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver)
|
||||
} else if (op == DNS_DIFFOP_DEL) {
|
||||
result = dns_db_subtractrdataset(db, node, ver,
|
||||
&rds,
|
||||
ISC_TRUE,
|
||||
NULL);
|
||||
} else {
|
||||
INSIST(0);
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rbtdb.c,v 1.127 2000/10/13 18:55:10 halley Exp $ */
|
||||
/* $Id: rbtdb.c,v 1.128 2000/10/18 23:53:23 marka Exp $ */
|
||||
|
||||
/*
|
||||
* Principal Author: Bob Halley
|
||||
@ -3397,7 +3397,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
|
||||
static isc_result_t
|
||||
subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
dns_rdataset_t *rdataset, dns_rdataset_t *newrdataset)
|
||||
dns_rdataset_t *rdataset, isc_boolean_t exact,
|
||||
dns_rdataset_t *newrdataset)
|
||||
{
|
||||
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
|
||||
dns_rbtnode_t *rbtnode = (dns_rbtnode_t *)node;
|
||||
@ -3456,7 +3457,7 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
rbtdb->common.mctx,
|
||||
rbtdb->common.rdclass,
|
||||
(dns_rdatatype_t)header->type,
|
||||
&subresult);
|
||||
exact, &subresult);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
free_rdataset(rbtdb->common.mctx, newheader);
|
||||
newheader = (rdatasetheader_t *)subresult;
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: rdataslab.c,v 1.20 2000/09/23 01:05:03 bwelling Exp $ */
|
||||
/* $Id: rdataslab.c,v 1.21 2000/10/18 23:53:24 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@ -363,12 +363,11 @@ isc_result_t
|
||||
dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
|
||||
unsigned int reservelen, isc_mem_t *mctx,
|
||||
dns_rdataclass_t rdclass, dns_rdatatype_t type,
|
||||
unsigned char **tslabp)
|
||||
isc_boolean_t exact, unsigned char **tslabp)
|
||||
{
|
||||
unsigned char *mcurrent, *sstart, *scurrent, *tstart, *tcurrent;
|
||||
unsigned int mcount, scount, count, tlength, tcount;
|
||||
unsigned int mcount, scount, rcount ,count, tlength, tcount;
|
||||
dns_rdata_t srdata, mrdata;
|
||||
isc_boolean_t removed_something = ISC_FALSE;
|
||||
|
||||
REQUIRE(tslabp != NULL && *tslabp == NULL);
|
||||
REQUIRE(mslab != NULL && sslab != NULL);
|
||||
@ -391,6 +390,7 @@ dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
|
||||
*/
|
||||
tlength = reservelen + 2;
|
||||
tcount = 0;
|
||||
rcount = 0;
|
||||
|
||||
/*
|
||||
* Add in the length of rdata in the mslab that aren't in
|
||||
@ -413,10 +413,17 @@ dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
|
||||
tlength += mcurrent - mrdatabegin;
|
||||
tcount++;
|
||||
} else
|
||||
removed_something = ISC_TRUE;
|
||||
rcount++;
|
||||
mcount--;
|
||||
} while (mcount > 0);
|
||||
|
||||
/*
|
||||
* Check that all the records originally existed. The numeric
|
||||
* check only works as rdataslabs do not contain duplicates.
|
||||
*/
|
||||
if (exact && (rcount != scount))
|
||||
return (DNS_R_NOTEXACT);
|
||||
|
||||
/*
|
||||
* Don't continue if the new rdataslab would be empty.
|
||||
*/
|
||||
@ -426,7 +433,7 @@ dns_rdataslab_subtract(unsigned char *mslab, unsigned char *sslab,
|
||||
/*
|
||||
* If nothing is going to change, we can stop.
|
||||
*/
|
||||
if (!removed_something)
|
||||
if (rcount == 0)
|
||||
return (DNS_R_UNCHANGED);
|
||||
|
||||
/*
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: result.c,v 1.75 2000/10/17 07:22:31 marka Exp $ */
|
||||
/* $Id: result.c,v 1.76 2000/10/18 23:53:26 marka Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@ -105,7 +105,8 @@ static const char *text[DNS_R_NRESULTS] = {
|
||||
"unknown opt attribute record", /* 64 DNS_R_UNKNOWNOPT */
|
||||
|
||||
"unexpected message id", /* 65 DNS_R_UNEXPECTEDID */
|
||||
"seen include file" /* 66 DNS_R_SEENINCLUDE */
|
||||
"seen include file", /* 66 DNS_R_SEENINCLUDE */
|
||||
"not exact" /* 67 DNS_R_NOTEXACT */
|
||||
};
|
||||
|
||||
static const char *rcode_text[DNS_R_NRCODERESULTS] = {
|
||||
|
@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: sdb.c,v 1.11 2000/10/06 21:20:59 bwelling Exp $ */
|
||||
/* $Id: sdb.c,v 1.12 2000/10/18 23:53:27 marka Exp $ */
|
||||
|
||||
/* NOMINUM_PUBLIC_DELETE */
|
||||
|
||||
@ -1031,12 +1031,14 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
|
||||
static isc_result_t
|
||||
subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
||||
dns_rdataset_t *rdataset, dns_rdataset_t *newrdataset)
|
||||
dns_rdataset_t *rdataset, isc_boolean_t exact,
|
||||
dns_rdataset_t *newrdataset)
|
||||
{
|
||||
UNUSED(db);
|
||||
UNUSED(node);
|
||||
UNUSED(version);
|
||||
UNUSED(rdataset);
|
||||
UNUSED(exact);
|
||||
UNUSED(newrdataset);
|
||||
|
||||
return (ISC_R_NOTIMPLEMENTED);
|
||||
|
Loading…
x
Reference in New Issue
Block a user