]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/glibc/glibc-rh739971.patch
Merge branch 'kernel-update' of ssh://git.ipfire.org/pub/git/ipfire-2.x into kernel...
[ipfire-2.x.git] / src / patches / glibc / glibc-rh739971.patch
diff --git a/src/patches/glibc/glibc-rh739971.patch b/src/patches/glibc/glibc-rh739971.patch
new file mode 100644 (file)
index 0000000..960c192
--- /dev/null
@@ -0,0 +1,44 @@
+commit 32c76b63be605d12314e0c6ac2bd702c883d1423
+Author: Andreas Schwab <schwab@redhat.com>
+Date:   Mon Sep 26 17:49:14 2011 +0200
+
+    Correctly reparse group line after enlarging the buffer
+
+diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c
+index 113abf2..c343b35 100644
+--- a/nss/nss_files/files-initgroups.c
++++ b/nss/nss_files/files-initgroups.c
+@@ -52,8 +52,10 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+   gid_t *groups = *groupsp;
+   /* We have to iterate over the entire file.  */
+-  while (!feof_unlocked (stream))
++  while (1)
+     {
++      fpos_t pos;
++      fgetpos (stream, &pos);
+       ssize_t n = getline (&line, &linelen, stream);
+       if (n < 0)
+       {
+@@ -64,9 +66,8 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+       }
+       struct group grp;
+-      int res;
+-      while ((res = _nss_files_parse_grent (line, &grp, buffer, buflen,
+-                                          errnop)) == -1)
++      int res = _nss_files_parse_grent (line, &grp, buffer, buflen, errnop);
++      if (res == -1)
+       {
+         size_t newbuflen = 2 * buflen;
+         if (buffer_use_malloc || ! __libc_use_alloca (buflen + newbuflen))
+@@ -85,6 +86,9 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+           }
+         else
+           buffer = extend_alloca (buffer, buflen, newbuflen);
++        /* Reread current line, the parser has clobbered it.  */
++        fsetpos (stream, &pos);
++        continue;
+       }
+       if (res > 0 && grp.gr_gid != group)