summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>2017-06-12 12:14:19 +0200
committerjin-gyu.kim <jin-gyu.kim@samsung.com>2017-08-01 12:20:55 +0900
commit537e6f40b94300d0cfa961c68069ce1cb8b790d6 (patch)
tree96d9a542fe76323af08eebc5c2855828037ac48c
parent6357ba7161cab3c0260868cd1144208450a12b64 (diff)
downloadsecurity-manager-accepted/tizen_3.0_ivi.tar.gz
security-manager-accepted/tizen_3.0_ivi.tar.bz2
security-manager-accepted/tizen_3.0_ivi.zip
Old implementation always exit loop after buffer resize without any try to input data once again.
-rw-r--r--src/nss/nss_securitymanager.cpp12
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;