From 9ae08fc32576a04da84f2d15971a37585f84e352 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Thu, 3 Feb 2011 20:20:02 +0000 Subject: [PATCH] Reload resolv.conf on graceful restarts PR: 50619 Submitted by: Matt Miller , Stefan Fritsch git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1066944 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 +++ configure.in | 6 +++++- server/main.c | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) 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 , 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 #endif +#if HAVE_NETINET_IN_H +#include +#endif +#if HAVE_ARPA_NAMESER_H +#include +#endif +#if HAVE_RESOLV_H +#include +#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); } -- 2.40.0