File glibc-2.4.90-nscd.diff of Package glibc.openSUSE_11.3

Index: nscd/cache.c
===================================================================
--- nscd/cache.c.orig	2010-01-18 18:01:41.000000000 +0100
+++ nscd/cache.c	2010-02-14 14:58:08.000000000 +0100
@@ -267,28 +267,31 @@ prune_cache (struct database_dyn *table,
   if (table->inotify_descr < 0 && table->check_file && now != LONG_MAX)
     {
       struct stat64 st;
+      time_t mtime;
 
-      if (stat64 (table->filename, &st) < 0)
+      mtime = stat64 (table->filename, &st) ? LONG_MAX : st.st_mtime;
+      if (mtime != table->file_mtime)
 	{
-	  char buf[128];
-	  /* We cannot stat() the file, disable file checking if the
-             file does not exist.  */
-	  dbg_log (_("cannot stat() file `%s': %s"),
-		   table->filename, strerror_r (errno, buf, sizeof (buf)));
-	  if (errno == ENOENT)
-	    table->check_file = 0;
+	  /* The file changed.  Invalidate all entries.  */
+	  now = LONG_MAX;
+	  table->file_mtime = mtime;
 	}
-      else
+      if (*table->filename2)
 	{
-	  if (st.st_mtime != table->file_mtime)
+	  mtime = stat64 (table->filename2, &st) ? LONG_MAX : st.st_mtime;
+	  if (mtime != table->file_mtime2)
 	    {
 	      /* The file changed.  Invalidate all entries.  */
 	      now = LONG_MAX;
-	      table->file_mtime = st.st_mtime;
+	      table->file_mtime2 = mtime;
 	    }
 	}
     }
 
+  /* now == 0 means just check for changed files */
+  if (now == (time_t)0)
+    return 0;
+
   /* We run through the table and find values which are not valid anymore.
 
      Note that for the initial step, finding the entries to be removed,
Index: nscd/connections.c
===================================================================
--- nscd/connections.c.orig	2010-01-18 18:01:41.000000000 +0100
+++ nscd/connections.c	2010-02-14 14:58:08.000000000 +0100
@@ -119,6 +119,7 @@ struct database_dyn dbs[lastdb] =
     .suggested_module = DEFAULT_SUGGESTED_MODULE,
    .reset_res = 0,
     .filename = "/etc/passwd",
+    .filename2 = "",
     .db_filename = _PATH_NSCD_PASSWD_DB,
     .disabled_iov = &pwd_iov_disabled,
     .postimeout = 3600,
@@ -140,6 +141,7 @@ struct database_dyn dbs[lastdb] =
     .suggested_module = DEFAULT_SUGGESTED_MODULE,
     .reset_res = 0,
     .filename = "/etc/group",
+    .filename2 = "",
     .db_filename = _PATH_NSCD_GROUP_DB,
     .disabled_iov = &grp_iov_disabled,
     .postimeout = 3600,
@@ -161,6 +163,7 @@ struct database_dyn dbs[lastdb] =
     .suggested_module = DEFAULT_SUGGESTED_MODULE,
     .reset_res = 1,
     .filename = "/etc/hosts",
+    .filename2 = "/etc/resolv.conf",
     .db_filename = _PATH_NSCD_HOSTS_DB,
     .disabled_iov = &hst_iov_disabled,
     .postimeout = 3600,
@@ -855,15 +858,9 @@ cannot set socket to close on exec: %s;
 		/* We need the modification date of the file.  */
 		struct stat64 st;
 
-		if (stat64 (dbs[cnt].filename, &st) < 0)
-		  {
-		    /* We cannot stat() the file, disable file checking.  */
-		    dbg_log (_("cannot stat() file `%s': %s"),
-			     dbs[cnt].filename, strerror (errno));
-		    dbs[cnt].check_file = 0;
-		  }
-		else
-		  dbs[cnt].file_mtime = st.st_mtime;
+		dbs[cnt].file_mtime = stat64 (dbs[cnt].filename, &st) ? LONG_MAX : st.st_mtime;
+		if (*dbs[cnt].filename2)
+		  dbs[cnt].file_mtime2 = stat64 (dbs[cnt].filename2, &st) ? LONG_MAX : st.st_mtime;
 	      }
 	  }
 
Index: nscd/nscd.conf
===================================================================
--- nscd/nscd.conf.orig	2010-01-18 18:01:41.000000000 +0100
+++ nscd/nscd.conf	2010-02-14 14:58:08.000000000 +0100
@@ -61,11 +61,11 @@
 	auto-propagate		group		yes
 
 	enable-cache		hosts		yes
-	positive-time-to-live	hosts		3600
-	negative-time-to-live	hosts		20
+	positive-time-to-live	hosts		600
+	negative-time-to-live	hosts		0
 	suggested-size		hosts		211
 	check-files		hosts		yes
-	persistent		hosts		yes
+	persistent		hosts		no
 	shared			hosts		yes
 	max-db-size		hosts		33554432
 
Index: nscd/nscd.h
===================================================================
--- nscd/nscd.h.orig	2010-01-18 18:01:41.000000000 +0100
+++ nscd/nscd.h	2010-02-14 14:59:07.000000000 +0100
@@ -80,8 +80,10 @@ struct database_dyn
   int propagate;
   int reset_res;
   const char filename[16];
+  const char filename2[17];
   const char *db_filename;
   time_t file_mtime;
+  time_t file_mtime2;
   size_t suggested_module;
   size_t max_db_size;
 
Index: nscd/nscd_stat.c
===================================================================
--- nscd/nscd_stat.c.orig	2010-01-18 18:01:41.000000000 +0100
+++ nscd/nscd_stat.c	2010-02-14 15:02:41.000000000 +0100
@@ -37,8 +37,13 @@
 #endif /* HAVE_SELINUX */
 
 
-/* We use this to make sure the receiver is the same.  */
+/* We use this to make sure the receiver is the same.  Capture mtime
+   of this file if possible.  */
+#if defined(__TIMESTAMP__)
+static const char compilation[21] = __TIMESTAMP__;
+#else
 static const char compilation[21] = __DATE__ " " __TIME__;
+#endif
 
 /* Statistic data for one database.  */
 struct dbstat
@@ -302,7 +307,7 @@ receive_print_stats (void)
 	      data.dbs[i].maxnsearched,
 	      data.dbs[i].rdlockdelayed,
 	      data.dbs[i].wrlockdelayed,
-	      data.dbs[i].addfailed, check_file, dbnames[i]);
+	      data.dbs[i].addfailed, check_file, (strcmp(dbnames[i], "hosts") ? dbnames[i] : "{hosts,resolv.conf}"));
     }
 
   if (selinux_enabled)