Package:  libc6
Version:  2.3.2.ds1-16
Tags:     patch
Severity: wishlist

The current DNS resolver in glibc only read the content of
/etc/resolv.conf when a program starts (or during the first call to
one of the resolver function).  This is a problem for long-lasting
programs on for example laptops, where the content of the file may
change when a new IP configuration is fetched using DHCP.  A
workaround is to use nscd and call 'nscd -i hosts' when the file
changes, but it would be better if the content of the file was reread
automatically when it changes.

The following patch by Torstein Kukuk from
<URL:http://sources.redhat.com/ml/libc-alpha/2004-09/msg00130.html>
fixes this problem, by making sure the timestamp of the file is
checked every time a DNS lookup is done.

Please include this patch in the default glibc used in Debian.  It
would make it so much useful on machines with changing IP
configuration.

--- resolv/res_libc.c   6 Aug 2004 17:52:53 -0000       1.20
+++ resolv/res_libc.c   9 Aug 2004 15:14:47 -0000
@@ -22,7 +22,7 @@
 #include <arpa/nameser.h>
 #include <resolv.h>
 #include <bits/libc-lock.h>
-
+#include <sys/stat.h>
 
 /* The following bit is copied from res_data.c (where it is #ifdef'ed
    out) since res_init() should go into libc.so but the rest of that
@@ -100,8 +100,17 @@ res_init(void) {
 int
 __res_maybe_init (res_state resp, int preinit)
 {
-       if (resp->options & RES_INIT) {
-               if (__res_initstamp != resp->_u._ext.initstamp) {
+  static time_t last_mtime;
+  struct stat statbuf;
+  int ret;
+
+               
+  if (resp->options & RES_INIT) {
+       ret = stat (_PATH_RESCONF, &statbuf);
+               if (__res_initstamp != resp->_u._ext.initstamp
+                 || (ret == 0) && (last_mtime != statbuf.st_mtime))
+                 {
+                       last_mtime = statbuf.st_mtime;
                        if (resp->nscount > 0) {
                                __res_nclose (resp);
                                for (int ns = 0; ns < MAXNS; ns++) {


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to