mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-17 13:00:43 +08:00
Return NULL for wildcard values in getnetgrent from nscd (BZ #16759)
getnetgrent is supposed to return NULL for values that are wildcards in the (host, user, domain) triplet. This works correctly with nscd disabled, but with it enabled, it returns a blank ("") instead of a NULL. This is easily seen with the output of `getent netgroup foonet` for a netgroup foonet defined as follows in /etc/netgroup: foonet (,foo,) The output with nscd disabled is: foonet ( ,foo,) while with nscd enabled, it is: foonet (,foo,) The extra space with nscd disabled is due to the fact that `getent netgroup` adds it if the return value from getnetgrent is NULL for either host or user.
This commit is contained in:
parent
ea7d8b95e2
commit
dd3022d75e
@ -1,5 +1,9 @@
|
||||
2014-03-27 Siddhesh Poyarekar <siddhesh@redhat.com>
|
||||
|
||||
[BZ #16759]
|
||||
* inet/getnetgrent_r.c (get_nonempty_val): New function.
|
||||
(nscd_getnetgrent): Use it.
|
||||
|
||||
[BZ #16760]
|
||||
* nscd/netgroupcache.c (addgetnetgrentX): Use memmove instead
|
||||
of stpcpy.
|
||||
|
3
NEWS
3
NEWS
@ -12,7 +12,8 @@ Version 2.20
|
||||
15347, 15804, 15894, 16002, 16198, 16284, 16357, 16447, 16532, 16545,
|
||||
16574, 16599, 16600, 16609, 16610, 16611, 16613, 16623, 16632, 16634,
|
||||
16639, 16642, 16649, 16670, 16674, 16677, 16680, 16683, 16689, 16695,
|
||||
16701, 16706, 16707, 16712, 16713, 16714, 16731, 16743, 16758, 16760.
|
||||
16701, 16706, 16707, 16712, 16713, 16714, 16731, 16743, 16758, 16759,
|
||||
16760.
|
||||
|
||||
* Running the testsuite no longer terminates as soon as a test fails.
|
||||
Instead, a file tests.sum (xtests.sum from "make xcheck") is generated,
|
||||
|
@ -235,6 +235,14 @@ endnetgrent (void)
|
||||
}
|
||||
|
||||
#ifdef USE_NSCD
|
||||
static const char *
|
||||
get_nonempty_val (const char *in)
|
||||
{
|
||||
if (*in == '\0')
|
||||
return NULL;
|
||||
return in;
|
||||
}
|
||||
|
||||
static enum nss_status
|
||||
nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
|
||||
int *errnop)
|
||||
@ -243,11 +251,11 @@ nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
|
||||
return NSS_STATUS_UNAVAIL;
|
||||
|
||||
datap->type = triple_val;
|
||||
datap->val.triple.host = datap->cursor;
|
||||
datap->val.triple.host = get_nonempty_val (datap->cursor);
|
||||
datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1;
|
||||
datap->val.triple.user = datap->cursor;
|
||||
datap->val.triple.user = get_nonempty_val (datap->cursor);
|
||||
datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1;
|
||||
datap->val.triple.domain = datap->cursor;
|
||||
datap->val.triple.domain = get_nonempty_val (datap->cursor);
|
||||
datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1;
|
||||
|
||||
return NSS_STATUS_SUCCESS;
|
||||
|
Loading…
Reference in New Issue
Block a user