Adjust pointers to triplets in netgroup query data (BZ #16474)

The _nss_*_getnetgrent_r query populates the netgroup results in the
allocated buffer and then sets the result triplet to point to strings
in the buffer.  This is a problem when the buffer is reallocated since
the pointers to the triplet strings are no longer valid.  The pointers
need to be adjusted so that they now point to strings in the
reallocated buffer.
This commit is contained in:
Siddhesh Poyarekar 2014-01-24 13:51:15 +05:30
parent 0bad441c77
commit 5d41dadf31
3 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2013-01-24 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #16474]
* nscd/netgroupcache.c (addgetnetgrentX): Adjust triplet
string pointers after reallocation.
2014-01-24 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h: Use __SH4__ and

2
NEWS
View File

@ -25,7 +25,7 @@ Version 2.19
16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245, 16271, 16274,
16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338, 16356, 16365,
16366, 16369, 16372, 16375, 16379, 16384, 16385, 16386, 16387, 16390,
16394, 16400, 16407, 16408, 16414, 16430, 16431, 16453.
16394, 16400, 16407, 16408, 16414, 16430, 16431, 16453, 16474.
* Slovenian translations for glibc messages have been contributed by the
Translation Project's Slovenian team of translators.

View File

@ -241,7 +241,17 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
if (buflen - req->key_len - bufused < needed)
{
buflen += MAX (buflen, 2 * needed);
buffer = xrealloc (buffer, buflen);
char *newbuf = xrealloc (buffer, buflen);
/* Adjust the pointers in the new
buffer. */
nhost = (nhost ? newbuf + (nhost - buffer)
: NULL);
nuser = (nuser ? newbuf + (nuser - buffer)
: NULL);
ndomain = (ndomain
? newbuf + (ndomain - buffer)
: NULL);
buffer = newbuf;
}
nhost = memcpy (buffer + bufused,