diff options
-rw-r--r-- | src/nss/nss_securitymanager.cpp | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/nss/nss_securitymanager.cpp b/src/nss/nss_securitymanager.cpp index 2a975e69..4c7eef3f 100644 --- a/src/nss/nss_securitymanager.cpp +++ b/src/nss/nss_securitymanager.cpp @@ -88,13 +88,11 @@ enum nss_status _nss_securitymanager_initgroups_dyn(const char *user, gid_t grou passwd pwnambuffer; passwd *pwnam = NULL; - do { - ret = TEMP_FAILURE_RETRY(getpwnam_r(user, &pwnambuffer, buffer.data(), buffer.size(), &pwnam)); - if (ret == ERANGE && buffer.size() < MEMORY_LIMIT) { - buffer.resize(buffer.size() << 1); - continue; - } - } while (0); + while (ERANGE == (ret = TEMP_FAILURE_RETRY(getpwnam_r(user, &pwnambuffer, buffer.data(), buffer.size(), &pwnam))) + && buffer.size() < MEMORY_LIMIT) + { + buffer.resize(buffer.size() << 1); + } if (ret == ERANGE) { *errnop = ENOMEM; |