diff options
author | des <des@FreeBSD.org> | 2002-04-14 22:24:55 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2002-04-14 22:24:55 +0000 |
commit | 06b809501b152a7f2bf3d9ad135051c200f36375 (patch) | |
tree | 99cf5a83e5407834eccbe049705b8e3422414ecd /lib/libc/gen/getpwent.c | |
parent | 916765bbc4f80a30a3119b80038db10873e7f870 (diff) | |
download | FreeBSD-src-06b809501b152a7f2bf3d9ad135051c200f36375.zip FreeBSD-src-06b809501b152a7f2bf3d9ad135051c200f36375.tar.gz |
(ab)use unused bits in the pw_fields member of struct passwd to record
the source of the data contained in the structure.
Sponsored by: DARPA, NAI Labs
Diffstat (limited to 'lib/libc/gen/getpwent.c')
-rw-r--r-- | lib/libc/gen/getpwent.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c index d68050b..235aa2b 100644 --- a/lib/libc/gen/getpwent.c +++ b/lib/libc/gen/getpwent.c @@ -408,6 +408,10 @@ _local_getpw(rv, cb_data, ap) (void)(_pw_db->close)(_pw_db); _pw_db = (DB *)NULL; } + if (rval == 0) { + _pw_passwd.pw_fields &= ~_PWF_SOURCE; + _pw_passwd.pw_fields |= _PWF_FILES; + } return (rval); } @@ -481,8 +485,11 @@ _dns_getpw(rv, cb_data, ap) if (search == _PW_KEYBYNUM) goto nextdnsbynum; /* skip dogdy entries */ r = NS_UNAVAIL; - } else + } else { + _pw_passwd.pw_fields &= ~_PWF_SOURCE; + _pw_passwd.pw_fields |= _PWF_HESIOD; r = NS_SUCCESS; + } cleanup_dns_getpw: hesiod_end(context); return (r); @@ -589,8 +596,11 @@ _nis_getpw(rv, cb_data, ap) strncpy(line, data, sizeof(line)); line[sizeof(line) - 1] = '\0'; free(data); - if (! __pwparse(&_pw_passwd, line)) + if (! __pwparse(&_pw_passwd, line)) { + _pw_passwd.pw_fields &= ~_PWF_SOURCE; + _pw_passwd.pw_fields |= _PWF_NIS; return NS_SUCCESS; + } } /* NOTREACHED */ } /* _nis_getpw */ |