summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--configure.in6
-rw-r--r--server/main.c21
3 files changed, 29 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index b5695bb9f0..85820bbbdf 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
Changes with Apache 2.3.11
+ *) core: Reload resolv.conf on graceful restarts. PR 50619.
+ [Matt Miller <m miller f5 com>, Stefan Fritsch]
+
*) mod_mime: Ignore leading dots when looking for mime extensions.
PR 50434 [Stefan Fritsch]
diff --git a/configure.in b/configure.in
index 0f4142435f..5082c6e1d4 100644
--- a/configure.in
+++ b/configure.in
@@ -400,6 +400,7 @@ sys/sem.h \
sys/sdt.h
)
AC_HEADER_SYS_WAIT
+AC_HEADER_RESOLV
dnl ## Check for typedefs, structures, and compiler characteristics.
@@ -416,6 +417,7 @@ LIBS="$saved_LIBS"
dnl See Comment #Spoon
+AC_SEARCH_LIBS(res_init, resolv, , [AC_SEARCH_LIBS(__res_init,resolv)])
AC_CHECK_FUNCS( \
getpwnam \
getgrnam \
@@ -424,7 +426,9 @@ bindprocessor \
prctl \
timegm \
getpgid \
-fopen64
+fopen64 \
+res_init \
+__res_init
)
dnl confirm that a void pointer is large enough to store a long integer
diff --git a/server/main.c b/server/main.c
index 3ea53d4bb4..de9ac5236a 100644
--- a/server/main.c
+++ b/server/main.c
@@ -44,6 +44,16 @@
#include <unistd.h>
#endif
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#if HAVE_ARPA_NAMESER_H
+#include <arpa/nameser.h>
+#endif
+#if HAVE_RESOLV_H
+#include <resolv.h>
+#endif
+
/* WARNING: Win32 binds http_main.c dynamically to the server. Please place
* extern functions and global data in another appropriate module.
*
@@ -679,6 +689,17 @@ int main(int argc, const char * const argv[])
apr_pool_clear(pconf);
ap_clear_auth_internal();
+/* glibc has __res_init that is #defined to res_init */
+#if HAVE_RES_INIT || HAVE___RES_INIT
+ /*
+ * resolv.conf may have changed, so this will read/reread it.
+ */
+ if (res_init() == -1) {
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
+ "Resolver initialization failed.");
+ }
+#endif
+
for (mod = ap_prelinked_modules; *mod != NULL; mod++) {
ap_register_hooks(*mod, pconf);
}