Updated to fedora-glibc-20071212T1051
[kopensolaris-gnu/glibc.git] / nscd / pwdcache.c
index 01c223a..bc1b6ba 100644 (file)
@@ -1,11 +1,12 @@
 /* Cache handling for passwd lookup.
-   Copyright (C) 1998-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
    This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License version 2 as
-   published by the Free Software Foundation.
+   it under the terms of the GNU General Public License as published
+   by the Free Software Foundation; version 2 of the License, or
+   (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -274,10 +275,13 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
                {
                  /* Adjust pointer into the memory block.  */
                  cp = (char *) newp + (cp - (char *) dataset);
+                 key_copy = (char *) newp + (key_copy - (char *) dataset);
 
                  dataset = memcpy (newp, dataset, total + n);
                  alloca_used = false;
                }
+             else
+               ++db->head->addfailed;
 
              /* Mark the old record as obsolete.  */
              dh->usable = false;
@@ -440,23 +444,14 @@ addpwbyX (struct database_dyn *db, int fd, request_header *req,
        dbg_log (_("Reloading \"%s\" in password cache!"), keystr);
     }
 
-#if 0
-  uid_t oldeuid = 0;
-  if (db->secure)
-    {
-      oldeuid = geteuid ();
-      pthread_seteuid_np (c_uid);
-    }
-#endif
-
   while (lookup (req->type, key, &resultbuf, buffer, buflen, &pwd) != 0
         && (errval = errno) == ERANGE)
     {
-      char *old_buffer = buffer;
       errno = 0;
 
       if (__builtin_expect (buflen > 32768, 0))
        {
+         char *old_buffer = buffer;
          buflen *= 2;
          buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen);
          if (buffer == NULL)
@@ -481,11 +476,6 @@ addpwbyX (struct database_dyn *db, int fd, request_header *req,
        buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen);
     }
 
-#if 0
-  if (db->secure)
-    pthread_seteuid_np (oldeuid);
-#endif
-
   /* Add the entry to the cache.  */
   cache_addpw (db, fd, req, keystr, pwd, c_uid, he, dh, errval);