diff options
author | nectar <nectar@FreeBSD.org> | 2003-04-18 21:13:35 +0000 |
---|---|---|
committer | nectar <nectar@FreeBSD.org> | 2003-04-18 21:13:35 +0000 |
commit | 4c0b31b2e869fb7e49f3c0ec4f4731311f5de89a (patch) | |
tree | 9d97ac5f053220be8b4a83cb46da51d25b1ad5a8 /lib/libc/gen/getpwent.c | |
parent | 801acfe1d4eb59bc3cb5449f681672d6712093a0 (diff) | |
download | FreeBSD-src-4c0b31b2e869fb7e49f3c0ec4f4731311f5de89a.zip FreeBSD-src-4c0b31b2e869fb7e49f3c0ec4f4731311f5de89a.tar.gz |
Follow-up to revision 1.73: set _PWF_FILES when `compat' source is used
but user is found in local file.
Reported by: Shizuka Kudo <shizukakudo_99@yahoo.com>
Sponsored by: DARPA, Network Associates Laboratories
Diffstat (limited to 'lib/libc/gen/getpwent.c')
-rw-r--r-- | lib/libc/gen/getpwent.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c index a38483b..f712644 100644 --- a/lib/libc/gen/getpwent.c +++ b/lib/libc/gen/getpwent.c @@ -1436,8 +1436,9 @@ compat_passwd(void *retval, void *mdata, va_list ap) size_t bufsize; uid_t uid; uint32_t store; - int rv, stayopen, *errnop; + int rv, from_compat, stayopen, *errnop; + from_compat = 0; name = NULL; uid = (uid_t)-1; how = (enum nss_lookup_type)mdata; @@ -1516,8 +1517,10 @@ docompat: default: break; } - if (rv & NS_TERMINATE) + if (rv & NS_TERMINATE) { + from_compat = 1; goto fin; + } key.data = keybuf; rv = NS_NOTFOUND; while (st->keynum >= 0) { @@ -1626,8 +1629,14 @@ fin: (void)st->db->close(st->db); st->db = NULL; } - if (rv == NS_SUCCESS && retval != NULL) - *(struct passwd **)retval = pwd; + if (rv == NS_SUCCESS) { + if (!from_compat) { + pwd->pw_fields &= ~_PWF_SOURCE; + pwd->pw_fields |= _PWF_FILES; + } + if (retval != NULL) + *(struct passwd **)retval = pwd; + } return (rv); } |