Blob Blame History Raw
From 1989225b9f91f98145f41a9dd4b23331a7b4f941 Mon Sep 17 00:00:00 2001
From: Alexander Bokovoy <abokovoy@redhat.com>
Date: Thu, 12 Jan 2023 13:25:10 +0200
Subject: [PATCH] Support bind 9.18.10 or later

dns_db_allrdatasets() gained a new parameter. Adopt the code to allow
injecting 0 options if building against 9.18.10.

Fixes: https://pagure.io/bind-dyndb-ldap/issue/216

Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
---
 src/ldap_driver.c | 7 ++++---
 src/ldap_helper.c | 4 ++--
 src/metadb.c      | 3 ++-
 src/util.h        | 7 +++++++
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/ldap_driver.c b/src/ldap_driver.c
index 5f9e00a..eb19d3e 100644
--- a/src/ldap_driver.c
+++ b/src/ldap_driver.c
@@ -461,13 +461,14 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
 
 static isc_result_t
 allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
-	     isc_stdtime_t now, dns_rdatasetiter_t **iteratorp)
+	     DNS_DB_ALLRDATASETS_OPTIONS(unsigned int options, isc_stdtime_t now),
+	     dns_rdatasetiter_t **iteratorp)
 {
 	ldapdb_t *ldapdb = (ldapdb_t *) db;
 
 	REQUIRE(VALID_LDAPDB(ldapdb));
 
-	return dns_db_allrdatasets(ldapdb->rbtdb, node, version, now, iteratorp);
+	return dns_db_allrdatasets(ldapdb->rbtdb, node, version, DNS_DB_ALLRDATASETS_OPTIONS(options, now), iteratorp);
 }
 
 /* TODO: Add 'tainted' flag to the LDAP instance if something went wrong. */
@@ -510,7 +511,7 @@ node_isempty(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
 
 	CHECK(ldapdb_name_fromnode(node, dns_fixedname_initname(&fname)));
 
-	result = dns_db_allrdatasets(db, node, version, now, &rds_iter);
+	result = dns_db_allrdatasets(db, node, version, DNS_DB_ALLRDATASETS_OPTIONS(0, now), &rds_iter);
 	if (result == ISC_R_NOTFOUND) {
 		*isempty = true;
 	} else if (result == ISC_R_SUCCESS) {
diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 97a1859..119975d 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -2004,7 +2004,7 @@ zone_sync_apex(const ldap_instance_t * const inst,
 				 zone_settings, &rdatalist));
 
 	CHECK(dns_db_getoriginnode(rbtdb, &node));
-	result = dns_db_allrdatasets(rbtdb, node, version, 0,
+	result = dns_db_allrdatasets(rbtdb, node, version, DNS_DB_ALLRDATASETS_OPTIONS(0, 0),
 				     &rbt_rds_iterator);
 	if (result == ISC_R_SUCCESS) {
 		CHECK(diff_ldap_rbtdb(inst->mctx, &name, &rdatalist,
@@ -3928,7 +3928,7 @@ update_restart:
 	CHECK(dns_db_newversion(ldapdb, &version));
 
 	CHECK(dns_db_findnode(rbtdb, &entry->fqdn, true, &node));
-	result = dns_db_allrdatasets(rbtdb, node, version, 0, &rbt_rds_iterator);
+	result = dns_db_allrdatasets(rbtdb, node, version, DNS_DB_ALLRDATASETS_OPTIONS(0, 0), &rbt_rds_iterator);
 	if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
 		goto cleanup;
 
diff --git a/src/metadb.c b/src/metadb.c
index f469a30..276de24 100644
--- a/src/metadb.c
+++ b/src/metadb.c
@@ -217,7 +217,8 @@ metadb_node_delete(metadb_node_t **nodep) {
 	node = *nodep;
 
 	dns_rdataset_init(&rdataset);
-	CHECK(dns_db_allrdatasets(node->rbtdb, node->dbnode, node->version, 0,
+	CHECK(dns_db_allrdatasets(node->rbtdb, node->dbnode, node->version,
+				  DNS_DB_ALLRDATASETS_OPTIONS(0, 0),
 				  &iter));
 
 	for (result = dns_rdatasetiter_first(iter);
diff --git a/src/util.h b/src/util.h
index 7a8555b..affaba4 100644
--- a/src/util.h
+++ b/src/util.h
@@ -15,9 +15,16 @@
 #include <dns/result.h>
 
 #include "log.h"
+#include "dyndb-config.h"
 
 extern bool verbose_checks; /* from settings.c */
 
+#if LIBDNS_VERSION_MAJOR >= 1810 || (LIBDNS_VERSION_MAJOR >= 1636 && LIBDNS_VERSION_MAJOR < 1800)
+#define DNS_DB_ALLRDATASETS_OPTIONS(options, tstamp) options, tstamp
+#else
+#define DNS_DB_ALLRDATASETS_OPTIONS(options, tstamp) tstamp
+#endif
+
 #define CLEANUP_WITH(result_code)				\
 	do {							\
 		result = (result_code);				\
-- 
2.39.1