Zdenek Dohnal 61eac5
diff -up cups-2.1.4/cups/auth.c.resolv_reload cups-2.1.4/cups/auth.c
Zdenek Dohnal 61eac5
--- cups-2.1.4/cups/auth.c.resolv_reload	2016-06-14 19:45:32.000000000 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/cups/auth.c	2017-04-27 10:31:13.430082002 +0200
Zdenek Dohnal f8a15d
@@ -522,6 +522,18 @@ cups_gss_getname(
Zdenek Dohnal 61eac5
   DEBUG_printf(("7cups_gss_getname(http=%p, service_name=\"%s\")", http,
Zdenek Dohnal 61eac5
                 service_name));
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
+ /*
Zdenek Dohnal 61eac5
+  * Check if /etc/resolv.conf is modified.
Zdenek Dohnal 61eac5
+  * If so, reload resolver.
Zdenek Dohnal 61eac5
+  */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  dns_resolver_reload_rv retval;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  retval = dnsReloadResolver();
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_ERROR)
Zdenek Dohnal f8a15d
+    DEBUG_printf(("1cups_gss_getname: dnsReloadResolver() failed - %s.", strerror(retval.errnum)));
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
  /*
Zdenek Dohnal 61eac5
   * Get the hostname...
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/cups/http-addr.c.resolv_reload cups-2.1.4/cups/http-addr.c
Zdenek Dohnal f8a15d
--- cups-2.1.4/cups/http-addr.c.resolv_reload	2017-04-27 10:31:13.415082133 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/cups/http-addr.c	2017-04-27 10:31:13.431081993 +0200
Zdenek Dohnal f8a15d
@@ -364,6 +364,20 @@ httpAddrLookup(
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 #ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
  /*
Zdenek Dohnal 61eac5
+  * Check if /etc/resolv.conf is modified.
Zdenek Dohnal 61eac5
+  * If so, reload resolver and set need_res_init to 0.
Zdenek Dohnal 61eac5
+  */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  dns_resolver_reload_rv retval;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  retval = dnsReloadResolver();
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_RELOADED && cg->need_res_init == 1)
Zdenek Dohnal 61eac5
+    cg->need_res_init = 0;
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_ERROR)
Zdenek Dohnal f8a15d
+    DEBUG_printf(("1httpAddrLookup: dnsReloadResolver() failed - %s.", strerror(retval.errnum)));
Zdenek Dohnal 61eac5
+ /*
Zdenek Dohnal 61eac5
   * STR #2920: Initialize resolver after failure in cups-polld
Zdenek Dohnal 61eac5
   *
Zdenek Dohnal 61eac5
   * If the previous lookup failed, re-initialize the resolver to prevent
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/cups/http-addrlist.c.resolv_reload cups-2.1.4/cups/http-addrlist.c
Zdenek Dohnal f8a15d
--- cups-2.1.4/cups/http-addrlist.c.resolv_reload	2017-04-27 10:31:13.400082264 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/cups/http-addrlist.c	2017-04-27 10:31:13.431081993 +0200
Zdenek Dohnal f8a15d
@@ -414,6 +414,20 @@ httpAddrGetList(const char *hostname,	/*
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 #ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
  /*
Zdenek Dohnal 61eac5
+  * Check if /etc/resolv.conf is modified.
Zdenek Dohnal 61eac5
+  * If so, reload resolver and set cg->need_res_init to 0
Zdenek Dohnal 61eac5
+  */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  dns_resolver_reload_rv retval;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  retval = dnsReloadResolver();
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_RELOADED && cg->need_res_init == 1)
Zdenek Dohnal 61eac5
+    cg->need_res_init = 0;
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_ERROR)
Zdenek Dohnal f8a15d
+    DEBUG_printf(("1httpAddrGetList: dnsReloadResolver() failed - %s.", strerror(retval.errnum)));
Zdenek Dohnal 61eac5
+ /*
Zdenek Dohnal 61eac5
   * STR #2920: Initialize resolver after failure in cups-polld
Zdenek Dohnal 61eac5
   *
Zdenek Dohnal 61eac5
   * If the previous lookup failed, re-initialize the resolver to prevent
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/cups/http.c.resolv_reload cups-2.1.4/cups/http.c
Zdenek Dohnal f8a15d
--- cups-2.1.4/cups/http.c.resolv_reload	2017-04-27 10:31:13.433081976 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/cups/http.c	2017-04-27 10:32:39.450330261 +0200
Zdenek Dohnal f8a15d
@@ -4849,6 +4849,110 @@ http_write_chunk(http_t     *http,	/* I
Zdenek Dohnal 61eac5
 }
Zdenek Dohnal 61eac5
 
Zdenek Dohnal f8a15d
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
+/*
Zdenek Dohnal 61eac5
+ * Function to check modification time of resolv.conf. 
Zdenek Dohnal 2b1684
+ * If time is changed, it reloads resolver. 
Zdenek Dohnal f8a15d
+ * If /etc/resolv.conf doesn't exist, it tries to reload resolver with local nameserver, if it wasn't reloaded before
Zdenek Dohnal f8a15d
+ * If even reloading resolver with local nameserver doesn't work, it ends with error.
Zdenek Dohnal f8a15d
+ * Global variable resolv_conf_modtime is set to -1 before the first call of this function - this is for prevention of resolver's reloading when cupsd is just started and resolv.conf exists - cupsd has current configuration in that case.
Zdenek Dohnal 61eac5
+ */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+dns_resolver_reload_rv
Zdenek Dohnal f8a15d
+dnsReloadResolver()
Zdenek Dohnal 61eac5
+{
Zdenek Dohnal f8a15d
+  dns_resolver_reload_rv retval, lstat_retval, stat_retval, res_init_retval;
Zdenek Dohnal f8a15d
+  struct stat resolv_conf_stat, resolv_conf_lstat, resolv_conf_status;
Zdenek Dohnal f8a15d
+  retval.status = DNS_RESOLVER_RELOAD_OK;
Zdenek Dohnal f8a15d
+  retval.errnum = 0;
Zdenek Dohnal f8a15d
+  stat_retval.errnum = 0;
Zdenek Dohnal f8a15d
+  lstat_retval.errnum = 0;
Zdenek Dohnal f8a15d
+  res_init_retval.errnum = 0;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  /* Variable to store /etc/resolv.conf modification time - initialized by actual time*/
Zdenek Dohnal f8a15d
+  static time_t resolv_conf_modtime = -1;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  /* This part of code is to ensure we get modification time of symlink and original file - we will decide which is newer later */
Zdenek Dohnal f8a15d
+  stat_retval.status = stat(DNS_RESOLV_CONF_PATH, &resolv_conf_stat);
Zdenek Dohnal f8a15d
+  stat_retval.errnum = errno;
Zdenek Dohnal f8a15d
+  lstat_retval.status = lstat(DNS_RESOLV_CONF_PATH, &resolv_conf_lstat);
Zdenek Dohnal f8a15d
+  lstat_retval.errnum = errno;
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+  /* symlink /etc/resolv.conf or original file couldn't be stated because it doesn't exist, try resolver on localhost 
Zdenek Dohnal f8a15d
+   * Covers cases:
Zdenek Dohnal f8a15d
+   * - resolv.conf and original file existed and it doesn't now - resolv_conf_modtime has different value than 0  - reload resolver with local nameserver
Zdenek Dohnal f8a15d
+   * - resolv.conf and original file didn't exist and still doesn't exist - resolv_conf_modtime is set to 0 - do nothing
Zdenek Dohnal f8a15d
+   */
Zdenek Dohnal f8a15d
+  if (stat_retval.status == -1 && lstat_retval.status == -1 && stat_retval.errnum == ENOENT && lstat_retval.errnum == ENOENT)
Zdenek Dohnal f8a15d
+  {
Zdenek Dohnal f8a15d
+    /* if resolv_conf_modtime is set to 0, it means previous reload was for resolver with local nameserver - no need to reload again */
Zdenek Dohnal f8a15d
+    if (resolv_conf_modtime != 0)
Zdenek Dohnal f8a15d
+    {
Zdenek Dohnal f8a15d
+      res_init_retval.status = res_init();
Zdenek Dohnal f8a15d
+      res_init_retval.errnum = errno;
Zdenek Dohnal f8a15d
+      if (res_init_retval.status == 0)
Zdenek Dohnal f8a15d
+      {
Zdenek Dohnal f8a15d
+        resolv_conf_modtime = 0;
Zdenek Dohnal f8a15d
+        retval.status = DNS_RESOLVER_RELOAD_RELOADED;
Zdenek Dohnal f8a15d
+      }
Zdenek Dohnal f8a15d
+      else
Zdenek Dohnal f8a15d
+        retval.status = res_init_retval.status;
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+      retval.errnum = res_init_retval.errnum;
Zdenek Dohnal f8a15d
+    }
Zdenek Dohnal f8a15d
+    else
Zdenek Dohnal f8a15d
+    {
Zdenek Dohnal f8a15d
+      retval.status = DNS_RESOLVER_RELOAD_OK;
Zdenek Dohnal f8a15d
+      retval.errnum = ENOENT;
Zdenek Dohnal f8a15d
+    }
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+    return (retval);
Zdenek Dohnal f8a15d
+  }
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+  /* If stat ends with different errno, return status - it should return both statuses and errnos, but for simplification it returns only stat */
Zdenek Dohnal f8a15d
+  if (stat_retval.status == -1 && lstat_retval.status == -1)
Zdenek Dohnal 2b1684
+  {
Zdenek Dohnal f8a15d
+    retval.errnum = stat_retval.errnum;
Zdenek Dohnal f8a15d
+    retval.status = stat_retval.status;
Zdenek Dohnal f8a15d
+    return (retval);
Zdenek Dohnal 2b1684
+  }
Zdenek Dohnal 2b1684
+
Zdenek Dohnal f8a15d
+  /* Here we compare modification times from lstat and stat to decide which is newer - if they are equal, lstat modification time is used. We are checking only stat() errno, because case with errors in both lstat() and stat() functions is checked before */
Zdenek Dohnal f8a15d
+  if (stat_retval.errnum == 0)
Zdenek Dohnal f8a15d
+    if (resolv_conf_stat.st_mtime > resolv_conf_lstat.st_mtime)
Zdenek Dohnal f8a15d
+      resolv_conf_status = resolv_conf_stat;
Zdenek Dohnal f8a15d
+    else
Zdenek Dohnal f8a15d
+      resolv_conf_status = resolv_conf_lstat;
Zdenek Dohnal f8a15d
+  else
Zdenek Dohnal f8a15d
+    resolv_conf_status = resolv_conf_lstat;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  /* If /etc/resolv.conf exists and modification times are different, reload resolver.
Zdenek Dohnal f8a15d
+   * Covers cases:
Zdenek Dohnal f8a15d
+   * - resolv.conf or original file exists and it was modified - resolv_conf_modtime has different value than resolv_conf_status.st_mtime - reload resolver with nameserver from /etc/resolv.conf 
Zdenek Dohnal f8a15d
+   * - resolv.conf or original file didn't exist and it does now - resolv_conf_modtime is set to 0 and resolv_conf_status.st_mtime has value - reload resolver with nameserver form /etc/resolv.conf
Zdenek Dohnal f8a15d
+   * - resolv.conf or original file exists and it wasn't modified - resolv_conf_modtime is equal to resolv_conf_status.st_mtime - do nothing
Zdenek Dohnal f8a15d
+   */
Zdenek Dohnal f8a15d
+  if (resolv_conf_status.st_mtime != resolv_conf_modtime)
Zdenek Dohnal 61eac5
+  {
Zdenek Dohnal f8a15d
+    res_init_retval.status = res_init();
Zdenek Dohnal f8a15d
+    res_init_retval.errnum = errno;
Zdenek Dohnal f8a15d
+    if (res_init_retval.status == 0)
Zdenek Dohnal f8a15d
+    {
Zdenek Dohnal f8a15d
+      retval.status = DNS_RESOLVER_RELOAD_RELOADED;
Zdenek Dohnal f8a15d
+    }
Zdenek Dohnal f8a15d
+    else
Zdenek Dohnal f8a15d
+      retval.status = res_init_retval.status;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+    retval.errnum = res_init_retval.errnum;
Zdenek Dohnal 61eac5
+  }
Zdenek Dohnal 61eac5
+
Zdenek Dohnal 61eac5
+  resolv_conf_modtime = resolv_conf_status.st_mtime;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  return (retval);
Zdenek Dohnal 61eac5
+}
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+
Zdenek Dohnal 61eac5
 /*
Zdenek Dohnal 61eac5
  * End of "$Id: http.c 12970 2015-11-13 20:02:51Z msweet $".
Zdenek Dohnal f8a15d
  */
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/cups/http.h.resolv_reload cups-2.1.4/cups/http.h
Zdenek Dohnal 61eac5
--- cups-2.1.4/cups/http.h.resolv_reload	2016-06-14 19:45:32.000000000 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/cups/http.h	2017-04-27 10:35:32.279819884 +0200
Zdenek Dohnal 61eac5
@@ -57,6 +57,12 @@ typedef off_t ssize_t;			/* @private@ */
Zdenek Dohnal 61eac5
 #      define SO_PEERCRED LOCAL_PEERCRED
Zdenek Dohnal 61eac5
 #    endif /* LOCAL_PEERCRED && !SO_PEERCRED */
Zdenek Dohnal 61eac5
 #  endif /* WIN32 */
Zdenek Dohnal 61eac5
+#  ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
+#    include <sys/stat.h>
Zdenek Dohnal 61eac5
+#    include <unistd.h>
Zdenek Dohnal 61eac5
+#    include <arpa/nameser.h>
Zdenek Dohnal 61eac5
+#    include <resolv.h>
Zdenek Dohnal 61eac5
+#  endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 /*
Zdenek Dohnal 61eac5
@@ -97,6 +103,13 @@ extern "C" {
Zdenek Dohnal 61eac5
 #endif /* AF_INET6 && !s6_addr32 */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
+/*
Zdenek Dohnal 61eac5
+ * Global variable for storing old modification time of resolv.conf 
Zdenek Dohnal 61eac5
+ */
Zdenek Dohnal 61eac5
+  extern time_t resolv_conf_modtime;
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal 61eac5
 /*
Zdenek Dohnal 61eac5
  * Limits...
Zdenek Dohnal 61eac5
  */
Zdenek Dohnal 61eac5
@@ -105,6 +118,9 @@ extern "C" {
Zdenek Dohnal 61eac5
 #  define HTTP_MAX_HOST		256	/* Max length of hostname string */
Zdenek Dohnal 61eac5
 #  define HTTP_MAX_BUFFER	2048	/* Max length of data buffer */
Zdenek Dohnal 61eac5
 #  define HTTP_MAX_VALUE	256	/* Max header field value length */
Zdenek Dohnal 61eac5
+#  ifdef HAVE_RES_INIT
Zdenek Dohnal f8a15d
+#    define DNS_RESOLV_CONF_PATH	"/etc/resolv.conf" /* Path to resolv.conf */
Zdenek Dohnal 61eac5
+#  endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
 /*
Zdenek Dohnal 61eac5
@@ -408,6 +424,15 @@ typedef enum http_version_e		/**** HTTP
Zdenek Dohnal 61eac5
 #  endif /* !_CUPS_NO_DEPRECATED */
Zdenek Dohnal 61eac5
 } http_version_t;
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal f8a15d
+typedef enum dns_resolver_reload_e
Zdenek Dohnal 61eac5
+{
Zdenek Dohnal f8a15d
+  DNS_RESOLVER_RELOAD_ERROR = -1,
Zdenek Dohnal f8a15d
+  DNS_RESOLVER_RELOAD_OK = 0,
Zdenek Dohnal f8a15d
+  DNS_RESOLVER_RELOAD_RELOADED = 1
Zdenek Dohnal f8a15d
+} dns_resolver_reload_t;
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal 61eac5
 typedef union _http_addr_u		/**** Socket address union, which
Zdenek Dohnal 61eac5
 					 **** makes using IPv6 and other
Zdenek Dohnal 61eac5
 					 **** address types easier and
Zdenek Dohnal f8a15d
@@ -446,6 +471,13 @@ typedef struct http_credential_s	/**** H
Zdenek Dohnal f8a15d
 typedef int (*http_timeout_cb_t)(http_t *http, void *user_data);
Zdenek Dohnal f8a15d
 					/**** HTTP timeout callback @since CUPS 1.5/OS X 10.7@ ****/
Zdenek Dohnal f8a15d
 
Zdenek Dohnal f8a15d
+#ifdef HAVE_RES_INIT
Zdenek Dohnal f8a15d
+typedef struct dns_resolver_reload_retval
Zdenek Dohnal f8a15d
+{
Zdenek Dohnal f8a15d
+  dns_resolver_reload_t status;
Zdenek Dohnal f8a15d
+  int errnum;
Zdenek Dohnal f8a15d
+} dns_resolver_reload_rv;
Zdenek Dohnal f8a15d
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal f8a15d
 
Zdenek Dohnal f8a15d
 
Zdenek Dohnal f8a15d
 /*
Zdenek Dohnal f8a15d
@@ -592,6 +624,11 @@ extern http_version_t	httpGetVersion(htt
Zdenek Dohnal f8a15d
 extern int		httpReconnect2(http_t *http, int msec, int *cancel)
Zdenek Dohnal f8a15d
 			               _CUPS_API_1_6;
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+/**** Prototype of function to check modification time of /etc/resolv.conf ****/
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal f8a15d
+extern dns_resolver_reload_rv	dnsReloadResolver();
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
 
Zdenek Dohnal f8a15d
 /**** New in CUPS 1.7/OS X 10.9 ****/
Zdenek Dohnal f8a15d
 extern http_t		*httpAcceptConnection(int fd, int blocking)
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/cups/http-support.c.resolv_reload cups-2.1.4/cups/http-support.c
Zdenek Dohnal f8a15d
--- cups-2.1.4/cups/http-support.c.resolv_reload	2017-04-27 10:31:13.411082168 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/cups/http-support.c	2017-04-27 10:31:13.434081967 +0200
Zdenek Dohnal f8a15d
@@ -2266,6 +2266,18 @@ http_resolve_cb(
Zdenek Dohnal 61eac5
     http_addrlist_t	*addrlist,	/* List of addresses */
Zdenek Dohnal 61eac5
 			*addr;		/* Current address */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal 61eac5
+   /*
Zdenek Dohnal f8a15d
+    * Check if resolv.conf is modified, if so, reload resolver
Zdenek Dohnal f8a15d
+    */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+    dns_resolver_reload_rv retval;
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+    retval = dnsReloadResolver();
Zdenek Dohnal f8a15d
+    if (retval.status == DNS_RESOLVER_RELOAD_ERROR)
Zdenek Dohnal f8a15d
+      DEBUG_printf(("1http_resolve_cb: dnsReloadResolver() failed - %s.", strerror(retval.errnum)));
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal 61eac5
     DEBUG_printf(("8http_resolve_cb: Looking up \"%s\".", hostTarget));
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
     snprintf(fqdn, sizeof(fqdn), "%d", ntohs(port));
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/scheduler/conf.c.resolv_reload cups-2.1.4/scheduler/conf.c
Zdenek Dohnal f8a15d
--- cups-2.1.4/scheduler/conf.c.resolv_reload	2017-04-27 10:31:13.429082011 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/scheduler/conf.c	2017-04-27 10:31:13.435081958 +0200
Zdenek Dohnal f8a15d
@@ -939,6 +939,15 @@ cupsdReadConfiguration(void)
Zdenek Dohnal 61eac5
   if (!RemotePort)
Zdenek Dohnal 61eac5
     BrowseLocalProtocols = 0;		/* Disable sharing - no remote access */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal f8a15d
+  dns_resolver_reload_rv retval;	/* Return status of dnsReloadResolver() */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  retval = dnsReloadResolver();
Zdenek Dohnal f8a15d
+
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_ERROR)
Zdenek Dohnal f8a15d
+    syslog(LOG_LPR, "1cupsdReadConfiguration: dnsReloadResolver() failed - %s.", strerror(retval.errnum));
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal 61eac5
  /*
Zdenek Dohnal 61eac5
   * See if the ServerName is an IP address...
Zdenek Dohnal 61eac5
   */
Zdenek Dohnal 61eac5
diff -up cups-2.1.4/scheduler/main.c.resolv_reload cups-2.1.4/scheduler/main.c
Zdenek Dohnal f8a15d
--- cups-2.1.4/scheduler/main.c.resolv_reload	2017-04-27 10:31:13.421082081 +0200
Zdenek Dohnal f8a15d
+++ cups-2.1.4/scheduler/main.c	2017-04-27 10:31:13.435081958 +0200
Zdenek Dohnal f8a15d
@@ -140,6 +140,14 @@ main(int  argc,				/* I - Number of comm
Zdenek Dohnal f8a15d
   long			tmo_delay;	/* Time before it must be called */
Zdenek Dohnal 61eac5
 #endif /* HAVE_AVAHI */
Zdenek Dohnal 61eac5
 
Zdenek Dohnal 61eac5
+#ifdef HAVE_RES_INIT
Zdenek Dohnal f8a15d
+  dns_resolver_reload_rv retval;	/* Return status from dnsReloadResolver() */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
+  retval = dnsReloadResolver();
Zdenek Dohnal f8a15d
+  if (retval.status == DNS_RESOLVER_RELOAD_ERROR)
Zdenek Dohnal f8a15d
+    fprintf(stderr, "cupsd: Cannot reload a resolver - %s , using old configuration now.\n", strerror(retval.errnum));
Zdenek Dohnal 61eac5
+#endif /* HAVE_RES_INIT */
Zdenek Dohnal 61eac5
+
Zdenek Dohnal f8a15d
 
Zdenek Dohnal 61eac5
 #ifdef HAVE_GETEUID
Zdenek Dohnal 61eac5
  /*