diff options
-rw-r--r-- | include/pwd.h | 5 | ||||
-rw-r--r-- | lib/libc/gen/getpwent.c | 14 |
2 files changed, 17 insertions, 2 deletions
diff --git a/include/pwd.h b/include/pwd.h index 04961ac..8634a7f 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 <sys/cdefs.h> __BEGIN_DECLS 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 */ |