From a360549ed1deb4b801d1b9bee6baff7fab90dcca Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Mon, 25 Feb 2008 21:27:31 -0500 Subject: [PATCH] If NSS_NONLOCAL_IGNORE is set, pretend that nonlocal information doesn't exist. Signed-off-by: Tim Abbott --- nonlocal-group.c | 14 ++++++++++++-- nonlocal-passwd.c | 16 +++++++++++++--- nonlocal.h | 1 + 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/nonlocal-group.c b/nonlocal-group.c index 56caa44..f202927 100644 --- a/nonlocal-group.c +++ b/nonlocal-group.c @@ -223,6 +223,12 @@ _nss_nonlocal_getgrent_r(struct group *grp, char *buffer, size_t buflen, int *errnop) { enum nss_status status; + + char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV); + if (buflen == MAGIC_LOCAL_GR_BUFLEN || + (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')) + return NSS_STATUS_UNAVAIL; + if (grent_nip == NULL) { status = _nss_nonlocal_setgrent(0); if (status != NSS_STATUS_SUCCESS) @@ -264,7 +270,9 @@ _nss_nonlocal_getgrnam_r(const char *name, struct group *grp, void *ptr; } fct; - if (buflen == MAGIC_LOCAL_GR_BUFLEN) + char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV); + if (buflen == MAGIC_LOCAL_GR_BUFLEN || + (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')) return NSS_STATUS_UNAVAIL; nip = nss_group_nonlocal_database(); @@ -301,7 +309,9 @@ _nss_nonlocal_getgrgid_r(gid_t gid, struct group *grp, void *ptr; } fct; - if (buflen == MAGIC_LOCAL_GR_BUFLEN) + char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV); + if (buflen == MAGIC_LOCAL_GR_BUFLEN || + (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')) return NSS_STATUS_UNAVAIL; nip = nss_group_nonlocal_database(); 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(); diff --git a/nonlocal.h b/nonlocal.h index 09c030b..f6a2453 100644 --- a/nonlocal.h +++ b/nonlocal.h @@ -3,4 +3,5 @@ enum nss_status check_nonlocal_uid(const char *user, uid_t uid, int *errnop); enum nss_status check_nonlocal_gid(const char *user, gid_t gid, int *errnop); enum nss_status check_nonlocal_user(const char *user, int *errnop); +#define NONLOCAL_IGNORE_ENV "NSS_NONLOCAL_IGNORE" #endif /* NON_LOCAL_H */ -- 2.45.0