]> andersk Git - nss_nonlocal.git/commitdiff
If NSS_NONLOCAL_IGNORE is set, pretend that nonlocal information doesn't exist. 1.5
authorTim Abbott <tabbott@mit.edu>
Tue, 26 Feb 2008 02:27:31 +0000 (21:27 -0500)
committerAnders Kaseorg <andersk@mit.edu>
Sun, 27 Jul 2008 13:20:52 +0000 (09:20 -0400)
Signed-off-by: Tim Abbott <tabbott@mit.edu>
nonlocal-group.c
nonlocal-passwd.c
nonlocal.h

index 56caa4402a5c3176154a737827782ca633eeddc0..f202927c67b0167d6b409ef434e98c3690aaf275 100644 (file)
@@ -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();
index 05a06bff53218e480e9800a2fb3d186d9ae1f49e..40811f9e68ee26ba1d9fa6c13f8b19136afdd8b5 100644 (file)
@@ -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();
index 09c030bcb615968130ff703c71fbdc57f3a560b7..f6a2453f9240e47aef3c045010906a6c77ee29cb 100644 (file)
@@ -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 */
This page took 0.207251 seconds and 5 git commands to generate.