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