df6203a
From c7027ee2b66fc22d3b128bdb621195c8a3b6a52e Mon Sep 17 00:00:00 2001
df6203a
From: Stanislav Levin <slev@altlinux.org>
df6203a
Date: Fri, 22 Mar 2024 12:09:51 +0300
df6203a
Subject: [PATCH] Try to detect dns_db_settask signature at configure time
df6203a
df6203a
dns_db_settask's signature was changed as of bind 9.16.49 / 9.18.25 / 9.19.22
df6203a
like:
df6203a
df6203a
before: dns_db_settask(dns_db_t *db, isc_task_t *task);
df6203a
after:  dns_db_settask(dns_db_t *db, isc_task_t *task, isc_task_t *prunetask);
df6203a
df6203a
Fixes: https://pagure.io/bind-dyndb-ldap/issue/230
df6203a
Signed-off-by: Stanislav Levin <slev@altlinux.org>
df6203a
---
df6203a
 configure.ac      | 24 ++++++++++++++++++++++++
df6203a
 src/ldap_driver.c |  8 ++++++++
df6203a
 2 files changed, 32 insertions(+)
df6203a
df6203a
diff --git a/configure.ac b/configure.ac
df6203a
index c30f105db..b4a85e234 100644
df6203a
--- a/configure.ac
df6203a
+++ b/configure.ac
df6203a
@@ -241,6 +241,30 @@ AC_CHECK_LIB([dns], [dns_result_totext],
df6203a
   [AC_DEFINE([HAVE_DNS_RESULT_TOTEXT], 1, [Define if dns library provides dns_result_totext])]
df6203a
 )
df6203a
 
df6203a
+# dns_db_settask signature was changed of bind 9.16.49 / 9.18.25 / 9.19.22
df6203a
+# before: dns_db_settask(dns_db_t *db, isc_task_t *task);
df6203a
+# after:  dns_db_settask(dns_db_t *db, isc_task_t *task, isc_task_t *prunetask);
df6203a
+AC_MSG_CHECKING([whether dns_db_settask uses prunetask])
df6203a
+SAVED_CFLAGS="$CFLAGS"
df6203a
+CFLAGS="$CFLAGS -Wincompatible-pointer-types -Werror"
df6203a
+AC_COMPILE_IFELSE(
df6203a
+  [AC_LANG_PROGRAM(
df6203a
+     [[
df6203a
+       #include <dns/db.h>
df6203a
+       void (*_dns_db_settask)(dns_db_t *, isc_task_t *, isc_task_t *);
df6203a
+     ]],
df6203a
+     [[
df6203a
+       _dns_db_settask = dns_db_settask;
df6203a
+     ]],
df6203a
+     )],
df6203a
+  [AC_MSG_RESULT([yes])
df6203a
+   CFLAGS="$SAVED_CFLAGS"
df6203a
+   AC_DEFINE([HAVE_SETTASK_PRUNETASK],
df6203a
+             [1], [define if dns_db_settask uses prunetask])
df6203a
+  ],
df6203a
+  [CFLAGS="$SAVED_CFLAGS"
df6203a
+   AC_MSG_RESULT([no])])
df6203a
+
df6203a
 dnl Older autoconf (2.59, for example) doesn't define docdir
df6203a
 [[ ! -n "$docdir" ]] && docdir='${datadir}/doc/${PACKAGE_TARNAME}'
df6203a
 AC_SUBST([docdir])
df6203a
diff --git a/src/ldap_driver.c b/src/ldap_driver.c
df6203a
index 20e12fcda..2205ea1b9 100644
df6203a
--- a/src/ldap_driver.c
df6203a
+++ b/src/ldap_driver.c
df6203a
@@ -687,13 +687,21 @@ overmem(dns_db_t *db, bool overmem)
df6203a
 }
df6203a
 
df6203a
 static void
df6203a
+#ifdef HAVE_SETTASK_PRUNETASK
df6203a
+settask(dns_db_t *db, isc_task_t *task, isc_task_t *prunetask)
df6203a
+#else
df6203a
 settask(dns_db_t *db, isc_task_t *task)
df6203a
+#endif
df6203a
 {
df6203a
 	ldapdb_t *ldapdb = (ldapdb_t *) db;
df6203a
 
df6203a
 	REQUIRE(VALID_LDAPDB(ldapdb));
df6203a
 
df6203a
+#ifdef HAVE_SETTASK_PRUNETASK
df6203a
+	dns_db_settask(ldapdb->rbtdb, task, prunetask);
df6203a
+#else
df6203a
 	dns_db_settask(ldapdb->rbtdb, task);
df6203a
+#endif
df6203a
 }
df6203a
 
df6203a
 static isc_result_t
df6203a
-- 
df6203a
2.44.0
df6203a