From c7027ee2b66fc22d3b128bdb621195c8a3b6a52e Mon Sep 17 00:00:00 2001 From: Stanislav Levin Date: Mar 25 2024 17:02:36 +0000 Subject: 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 --- diff --git a/configure.ac b/configure.ac index c30f105..b4a85e2 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 + 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 20e12fc..2205ea1 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