X-Git-Url: http://andersk.mit.edu/gitweb/nss_nonlocal.git/blobdiff_plain/1e78305dcf5d03fbd569dcb8a28255c0a50dc21a..a360549ed1deb4b801d1b9bee6baff7fab90dcca:/nonlocal-passwd.c diff --git a/nonlocal-passwd.c b/nonlocal-passwd.c index 05a06bf..40811f9 100644 --- a/nonlocal-passwd.c +++ b/nonlocal-passwd.c @@ -192,6 +192,12 @@ _nss_nonlocal_getpwent_r(struct passwd *pwd, char *buffer, size_t buflen, int *errnop) { enum nss_status status; + + char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV); + if (buflen == MAGIC_LOCAL_PW_BUFLEN || + (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')) + return NSS_STATUS_UNAVAIL; + if (pwent_nip == NULL) { status = _nss_nonlocal_setpwent(0); if (status != NSS_STATUS_SUCCESS) @@ -203,7 +209,7 @@ _nss_nonlocal_getpwent_r(struct passwd *pwd, char *buffer, size_t buflen, else { int nonlocal_errno; do - status = DL_CALL_FCT(pwent_fct.l, (pwd, buffer, buflen, errnop)); + status = DL_CALL_FCT(pwent_fct.l, (pwd, buffer, buflen, errnop)); while (status == NSS_STATUS_SUCCESS && check_nonlocal_uid(pwd->pw_name, pwd->pw_uid, &nonlocal_errno) != NSS_STATUS_SUCCESS); } @@ -234,7 +240,9 @@ _nss_nonlocal_getpwnam_r(const char *name, struct passwd *pwd, } fct; int group_errno; - if (buflen == MAGIC_LOCAL_PW_BUFLEN) + char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV); + if (buflen == MAGIC_LOCAL_PW_BUFLEN || + (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')) return NSS_STATUS_UNAVAIL; nip = nss_passwd_nonlocal_database(); @@ -279,7 +287,9 @@ _nss_nonlocal_getpwuid_r(uid_t uid, struct passwd *pwd, } fct; int group_errno; - if (buflen == MAGIC_LOCAL_PW_BUFLEN) + char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV); + if (buflen == MAGIC_LOCAL_PW_BUFLEN || + (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')) return NSS_STATUS_UNAVAIL; nip = nss_passwd_nonlocal_database();