From 5879a6964b6eb2e8e53e833623f91017b94859b1 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Mon, 28 Jul 2008 07:50:11 -0400 Subject: [PATCH] =?utf8?q?Assume=20that=20errors=20other=20than=20NSS=5FST?= =?utf8?q?ATUS=5FTRYAGAIN=20mean=20=E2=80=9Cnot=20found=E2=80=9D.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Anders Kaseorg --- nonlocal-group.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/nonlocal-group.c b/nonlocal-group.c index 0dfdb98..05f4d46 100644 --- a/nonlocal-group.c +++ b/nonlocal-group.c @@ -356,10 +356,10 @@ _nss_nonlocal_initgroups_dyn(const char *user, gid_t group, long int *start, /* Check that the user is a nonlocal user before adding any groups. */ status = check_nonlocal_user(user, errnop); - if (status == NSS_STATUS_NOTFOUND) - is_local = 1; - else if (status != NSS_STATUS_SUCCESS) + if (status == NSS_STATUS_TRYAGAIN) return status; + else if (status != NSS_STATUS_SUCCESS) + is_local = 1; int old_errno = errno; @@ -372,14 +372,15 @@ _nss_nonlocal_initgroups_dyn(const char *user, gid_t group, long int *start, } status = get_local_group(MAGIC_LOCAL_GROUPNAME, &local_users_group, buffer, buflen, errnop); - if (status == NSS_STATUS_NOTFOUND) { + if (status == NSS_STATUS_SUCCESS) { + local_users_gid = local_users_group.gr_gid; + } else if (status == NSS_STATUS_TRYAGAIN) { + return status; + } else { syslog(LOG_WARNING, "nss_nonlocal: Group %s does not exist locally!", MAGIC_LOCAL_GROUPNAME); local_users_gid = -1; - } else if (status != NSS_STATUS_SUCCESS) { - return status; - } else - local_users_gid = local_users_group.gr_gid; + } free(buffer); if (is_local) { @@ -394,15 +395,16 @@ _nss_nonlocal_initgroups_dyn(const char *user, gid_t group, long int *start, } status = get_local_group(MAGIC_NONLOCAL_GROUPNAME, &nonlocal_users_group, buffer, buflen, errnop); - if (status == NSS_STATUS_NOTFOUND) { + if (status == NSS_STATUS_SUCCESS) { + gid = nonlocal_users_group.gr_gid; + } else if (status == NSS_STATUS_TRYAGAIN) { + errno = old_errno; + return status; + } else { syslog(LOG_WARNING, "nss_nonlocal: Group %s does not exist locally!", MAGIC_NONLOCAL_GROUPNAME); gid = -1; - } else if (status != NSS_STATUS_SUCCESS) { - errno = old_errno; - return status; - } else - gid = nonlocal_users_group.gr_gid; + } free(buffer); } @@ -478,7 +480,7 @@ _nss_nonlocal_initgroups_dyn(const char *user, gid_t group, long int *start, status = check_nonlocal_gid(user, (*groupsp)[in], &nonlocal_errno); if (status == NSS_STATUS_SUCCESS) { (*groupsp)[out++] = (*groupsp)[in]; - } else if (status != NSS_STATUS_NOTFOUND) { + } else if (status == NSS_STATUS_TRYAGAIN) { *start = out; *errnop = nonlocal_errno; return status; -- 2.45.0