]> andersk Git - nss_nonlocal.git/blobdiff - nonlocal-passwd.c
Autoheaderfiscate.
[nss_nonlocal.git] / nonlocal-passwd.c
index 05a06bff53218e480e9800a2fb3d186d9ae1f49e..6d70ea2d287a871a46e938608c7646f5292600e4 100644 (file)
@@ -72,7 +72,6 @@ check_nonlocal_uid(const char *user, uid_t uid, int *errnop)
        errno = old_errno;
        return NSS_STATUS_TRYAGAIN;
     }
-    errno = 0;
     ret = getpwuid_r(uid, pwbufp, buf, buflen, &pwbufp);
     if (ret != 0) {
        *errnop = errno;
@@ -101,7 +100,6 @@ check_nonlocal_user(const char *user, int *errnop)
        errno = old_errno;
        return NSS_STATUS_TRYAGAIN;
     }
-    errno = 0;
     ret = getpwnam_r(user, pwbufp, buf, buflen, &pwbufp);
     if (ret != 0) {
        *errnop = errno;
@@ -192,6 +190,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 +207,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 +238,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 +285,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();
This page took 0.027974 seconds and 4 git commands to generate.