move dns_db_getsoaserial() from journal.c to db.c
This commit is contained in:
44
lib/dns/db.c
44
lib/dns/db.c
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user