From bfbea562e6404c87e07a049e62875fbbba348307 Mon Sep 17 00:00:00 2001 From: Andreas Gustafsson Date: Thu, 29 Nov 2001 00:15:35 +0000 Subject: [PATCH] new function dns_diff_applysilently() [RT #2157] --- lib/dns/diff.c | 29 ++++++++++++++++++++--------- lib/dns/include/dns/diff.h | 7 ++++++- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/lib/dns/diff.c b/lib/dns/diff.c index b3e2bc2bed..76285d7efa 100644 --- a/lib/dns/diff.c +++ b/lib/dns/diff.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: diff.c,v 1.4 2001/01/09 21:50:47 bwelling Exp $ */ +/* $Id: diff.c,v 1.5 2001/11/29 00:15:34 gson Exp $ */ #include @@ -188,8 +188,9 @@ dns_diff_appendminimal(dns_diff_t *diff, dns_difftuple_t **tuplep) ENSURE(*tuplep == NULL); } -isc_result_t -dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) +static isc_result_t +diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, + isc_boolean_t warn) { dns_difftuple_t *t; dns_dbnode_t *node = NULL; @@ -253,14 +254,13 @@ dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) t->rdata.type == type && rdata_covers(&t->rdata) == covers) { - if (t->ttl != rdl.ttl) { + if (t->ttl != rdl.ttl && warn) isc_log_write(DIFF_COMMON_LOGARGS, ISC_LOG_WARNING, "TTL differs in rdataset, " "adjusting %lu -> %lu", (unsigned long) t->ttl, (unsigned long) rdl.ttl); - } ISC_LIST_APPEND(rdl.rdata, &t->rdata, link); t = ISC_LIST_NEXT(t, link); } @@ -298,9 +298,10 @@ dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) * from a server that is not as careful. * Issue a warning and continue. */ - isc_log_write(DIFF_COMMON_LOGARGS, - ISC_LOG_WARNING, - "update with no effect"); + if (warn) + isc_log_write(DIFF_COMMON_LOGARGS, + ISC_LOG_WARNING, + "update with no effect"); } else if (result == ISC_R_SUCCESS || result == DNS_R_NXRRSET) { /* @@ -320,7 +321,17 @@ dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) return (result); } -/* XXX this duplicates lots of code in dns_diff_apply(). */ +isc_result_t +dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) { + return (diff_apply(diff, db, ver, ISC_TRUE)); +} + +isc_result_t +dns_diff_applysilently(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver) { + return (diff_apply(diff, db, ver, ISC_FALSE)); +} + +/* XXX this duplicates lots of code in diff_apply(). */ isc_result_t dns_diff_load(dns_diff_t *diff, dns_addrdatasetfunc_t addfunc, diff --git a/lib/dns/include/dns/diff.h b/lib/dns/include/dns/diff.h index 7539c6751b..41d8840d5e 100644 --- a/lib/dns/include/dns/diff.h +++ b/lib/dns/include/dns/diff.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: diff.h,v 1.4 2001/08/28 03:58:16 marka Exp $ */ +/* $Id: diff.h,v 1.5 2001/11/29 00:15:35 gson Exp $ */ #ifndef DNS_DIFF_H #define DNS_DIFF_H 1 @@ -221,9 +221,14 @@ dns_diff_sort(dns_diff_t *diff, dns_diff_compare_func *compare); isc_result_t dns_diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver); +isc_result_t +dns_diff_applysilently(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver); /* * Apply 'diff' to the database 'db'. * + * dns_diff_apply() logs warnings about updates with no effect or + * with inconsistent TTLs; dns_diff_applysilently() does not. + * * For efficiency, the diff should be sorted by owner name. * If it is not sorted, operation will still be correct, * but less efficient.