aboutsummaryrefslogtreecommitdiff
path: root/modules/pammodutil/modutil_getgrgid.c
diff options
context:
space:
mode:
authorTomas Mraz <tm@t8m.info>2005-03-30 10:42:54 +0000
committerTomas Mraz <tm@t8m.info>2005-03-30 10:42:54 +0000
commit40bfaaed40ba831cacc3d74b8c2f216249c141ec (patch)
tree272f3a993155caef2283cdeed50d4cb7d72e211b /modules/pammodutil/modutil_getgrgid.c
parentd9d7f8271057e87ca766a91873321e3d9c203984 (diff)
downloadpam-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_getgrgid.c')
-rw-r--r--modules/pammodutil/modutil_getgrgid.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/modules/pammodutil/modutil_getgrgid.c b/modules/pammodutil/modutil_getgrgid.c
index dcac4f78..4520ff55 100644
--- a/modules/pammodutil/modutil_getgrgid.c
+++ b/modules/pammodutil/modutil_getgrgid.c
@@ -57,7 +57,7 @@ struct group *_pammodutil_getgrgid(pam_handle_t *pamh, gid_t gid)
void *new_buffer;
struct group *result = NULL;
- new_buffer = realloc(buffer, sizeof(struct passwd) + length);
+ new_buffer = realloc(buffer, sizeof(struct group) + length);
if (new_buffer == NULL) {
D(("out of memory"));
@@ -71,6 +71,7 @@ struct group *_pammodutil_getgrgid(pam_handle_t *pamh, gid_t gid)
buffer = new_buffer;
/* make the re-entrant call to get the grp structure */
+ errno = 0;
status = getgrgid_r(gid, buffer,
sizeof(struct group) + (char *) buffer,
length, &result);
@@ -120,9 +121,12 @@ struct group *_pammodutil_getgrgid(pam_handle_t *pamh, gid_t gid)
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);