Blob Blame History Raw
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