diff options
author | Tomas Mraz <tm@t8m.info> | 2005-03-30 10:42:54 +0000 |
---|---|---|
committer | Tomas Mraz <tm@t8m.info> | 2005-03-30 10:42:54 +0000 |
commit | 40bfaaed40ba831cacc3d74b8c2f216249c141ec (patch) | |
tree | 272f3a993155caef2283cdeed50d4cb7d72e211b /modules/pammodutil/modutil_getpwnam.c | |
parent | d9d7f8271057e87ca766a91873321e3d9c203984 (diff) | |
download | pam-40bfaaed40ba831cacc3d74b8c2f216249c141ec.tar.gz pam-40bfaaed40ba831cacc3d74b8c2f216249c141ec.tar.bz2 pam-40bfaaed40ba831cacc3d74b8c2f216249c141ec.zip |
Relevant BUGIDs:
Purpose of commit: bugfix
Commit summary:
---------------
Fix wrong allocation in _pammodutil_gr* functions.
Raise the limit on allocated memory size.
Don't retry call if not ERANGE or EINTR
Diffstat (limited to 'modules/pammodutil/modutil_getpwnam.c')
-rw-r--r-- | modules/pammodutil/modutil_getpwnam.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/modules/pammodutil/modutil_getpwnam.c b/modules/pammodutil/modutil_getpwnam.c index 891b0b58..ecef0303 100644 --- a/modules/pammodutil/modutil_getpwnam.c +++ b/modules/pammodutil/modutil_getpwnam.c @@ -61,6 +61,7 @@ struct passwd *_pammodutil_getpwnam(pam_handle_t *pamh, const char *user) buffer = new_buffer; /* make the re-entrant call to get the pwd structure */ + errno = 0; status = getpwnam_r(user, buffer, sizeof(struct passwd) + (char *) buffer, length, &result); @@ -109,9 +110,12 @@ struct passwd *_pammodutil_getpwnam(pam_handle_t *pamh, const char *user) free(buffer); return NULL; - } + } else if (errno != ERANGE && errno != EINTR) { + /* no sense in repeating the call */ + break; + } - length <<= 1; + length <<= 2; } while (length < PWD_ABSURD_PWD_LENGTH); |