summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authornectar <nectar@FreeBSD.org>2003-04-18 21:13:35 +0000
committernectar <nectar@FreeBSD.org>2003-04-18 21:13:35 +0000
commit4c0b31b2e869fb7e49f3c0ec4f4731311f5de89a (patch)
tree9d97ac5f053220be8b4a83cb46da51d25b1ad5a8 /lib/libc
parent801acfe1d4eb59bc3cb5449f681672d6712093a0 (diff)
downloadFreeBSD-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')
-rw-r--r--lib/libc/gen/getpwent.c17
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);
}
OpenPOWER on IntegriCloud