From 5d41dadf31bc8a2f9c34c40d52a442d3794e405c Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Fri, 24 Jan 2014 13:51:15 +0530 Subject: 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. --- nscd/netgroupcache.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'nscd') diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c index 58234b1..924567c 100644 --- a/nscd/netgroupcache.c +++ b/nscd/netgroupcache.c @@ -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, -- cgit v1.1