From e479b601dd112ffbc0f4cac2e5083126148dde9e Mon Sep 17 00:00:00 2001 From: Dag-Erling Smørgrav Date: Sun, 14 Apr 2002 22:24:55 +0000 Subject: (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 --- include/pwd.h | 5 +++++ lib/libc/gen/getpwent.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/pwd.h b/include/pwd.h index 04961acf99e5e..8634a7fa4ac37 100644 --- a/include/pwd.h +++ b/include/pwd.h @@ -96,6 +96,11 @@ struct passwd { #define _PWF_SHELL _PWF(8) #define _PWF_EXPIRE _PWF(9) +#define _PWF_SOURCE 0x3000 +#define _PWF_FILES 0x1000 +#define _PWF_NIS 0x2000 +#define _PWF_HESIOD 0x3000 + #include __BEGIN_DECLS diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c index d68050bbddda1..235aa2b176341 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 */ -- cgit v1.3