]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Reload resolv.conf on graceful restarts
authorStefan Fritsch <sf@apache.org>
Thu, 3 Feb 2011 20:20:02 +0000 (20:20 +0000)
committerStefan Fritsch <sf@apache.org>
Thu, 3 Feb 2011 20:20:02 +0000 (20:20 +0000)
PR: 50619
Submitted by: Matt Miller <m miller f5 com>, Stefan Fritsch

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1066944 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
configure.in
server/main.c

diff --git a/CHANGES b/CHANGES
index b5695bb9f08b17d21f52cbc003fc0bae390391ab..85820bbbdf90083d72da1dc9dd7c5b28323f4e29 100644 (file)
--- 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]
 
index 0f4142435f40c72082342d3d0bcd355c5c0a04b2..5082c6e1d45c42caafd7b61d7057207964a484a7 100644 (file)
@@ -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
index 3ea53d4bb428343f2d236b3de1b509ffd0d828dc..de9ac5236adcdb3300dddd97a596a498580c0abd 100644 (file)
 #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);
         }