move dns_db_getsoaserial() from journal.c to db.c

This commit is contained in:
Michael Graff
2000-05-20 01:32:03 +00:00
parent 24d3d0ecff
commit 341323e0e7
4 changed files with 56 additions and 48 deletions

View File

@@ -21,11 +21,13 @@
#include <config.h>
#include <isc/buffer.h>
#include <isc/string.h>
#include <isc/util.h>
#include <dns/callbacks.h>
#include <dns/master.h>
#include <dns/rdata.h>
#include <dns/rdataset.h>
/***
@@ -586,3 +588,45 @@ dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
return ((db->methods->deleterdataset)(db, node, version,
type, covers));
}
isc_result_t
dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, isc_uint32_t *serialp)
{
isc_result_t result;
dns_dbnode_t *node = NULL;
dns_rdataset_t rdataset;
dns_rdata_t rdata;
isc_buffer_t buffer;
REQUIRE(dns_db_iszone(db));
result = dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node);
if (result != ISC_R_SUCCESS)
return (result);
dns_rdataset_init(&rdataset);
result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0,
(isc_stdtime_t)0, &rdataset, NULL);
if (result != ISC_R_SUCCESS)
goto freenode;
result = dns_rdataset_first(&rdataset);
if (result != ISC_R_SUCCESS)
goto freerdataset;
dns_rdataset_current(&rdataset, &rdata);
INSIST(rdata.length > 20);
isc_buffer_init(&buffer, rdata.data, rdata.length);
isc_buffer_add(&buffer, rdata.length);
isc_buffer_forward(&buffer, rdata.length - 20);
*serialp = isc_buffer_getuint32(&buffer);
result = ISC_R_SUCCESS;
freerdataset:
dns_rdataset_disassociate(&rdataset);
freenode:
dns_db_detachnode(db, &node);
return (result);
}

View File

@@ -1113,6 +1113,16 @@ dns_db_deleterdataset(dns_db_t *db, dns_dbnode_t *node,
* implementation used.
*/
isc_result_t
dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, isc_uint32_t *serialp);
/*
* Get the current SOA serial number from a zone database.
*
* Requires:
* 'db' is a valid database with zone semantics.
* 'ver' is a valid version.
*/
ISC_LANG_ENDDECLS
#endif /* DNS_DB_H */

View File

@@ -303,16 +303,6 @@ dns_soa_setserial(isc_uint32_t val, dns_rdata_t *rdata);
* rdata refers to the rdata of a well-formed SOA record.
*/
isc_result_t
dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, isc_uint32_t *serialp);
/*
* Get the current SOA serial number from a zone database.
*
* Requires:
* 'db' is a valid database with zone semantics.
* 'ver' is a valid version.
*/
isc_result_t
dns_db_createsoatuple(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
dns_diffop_t op, dns_difftuple_t **tp);

View File

@@ -121,42 +121,6 @@ dns_soa_setserial(isc_uint32_t val, dns_rdata_t *rdata) {
encode_uint32(val, rdata->data + rdata->length - 20);
}
isc_result_t
dns_db_getsoaserial(dns_db_t *db, dns_dbversion_t *ver, isc_uint32_t *serialp)
{
isc_result_t result;
dns_dbnode_t *node = NULL;
dns_rdataset_t rdataset;
dns_rdata_t rdata;
REQUIRE(dns_db_iszone(db));
result = dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node);
if (result != ISC_R_SUCCESS)
return (result);
dns_rdataset_init(&rdataset);
result = dns_db_findrdataset(db, node, ver, dns_rdatatype_soa, 0,
(isc_stdtime_t) 0, &rdataset, NULL);
if (result != ISC_R_SUCCESS)
goto freenode;
result = dns_rdataset_first(&rdataset);
if (result != ISC_R_SUCCESS)
goto freerdataset;
dns_rdataset_current(&rdataset, &rdata);
*serialp = dns_soa_getserial(&rdata);
result = ISC_R_SUCCESS;
freerdataset:
dns_rdataset_disassociate(&rdataset);
freenode:
dns_db_detachnode(db, &node);
return (result);
}
isc_result_t
dns_db_createsoatuple(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
dns_diffop_t op, dns_difftuple_t **tp)
@@ -228,7 +192,7 @@ dns_difftuple_create(isc_mem_t *mctx,
t->mctx = mctx;
t->op = op;
datap = (unsigned char *) (t + 1);
datap = (unsigned char *)(t + 1);
memcpy(datap, name->ndata, name->length);
dns_name_init(&t->name, NULL);
@@ -248,7 +212,7 @@ dns_difftuple_create(isc_mem_t *mctx,
ISC_LINK_INIT(&t->rdata, link);
t->magic = DNS_DIFFTUPLE_MAGIC;
INSIST(datap == (unsigned char *) t + size);
INSIST(datap == (unsigned char *)t + size);
*tp = t;
return (ISC_R_SUCCESS);