1 diff --git a/CHANGELOG b/CHANGELOG
2 index 2c815e7..f8260b1 100644
6 - when default master map, auto.master, is used also check for auto_master.
7 - fix schema selection in LDAP schema discovery.
8 - update negative mount timeout handling.
9 +- fix large group handling (Ryan Thomas).
11 18/06/2007 autofs-5.0.2
12 -----------------------
13 diff --git a/daemon/direct.c b/daemon/direct.c
14 index 4ab4204..88e59ab 100644
17 @@ -1218,11 +1218,11 @@ static void *do_mount_direct(void *arg)
18 struct passwd *ppw = &pw;
19 struct passwd **pppw = &ppw;
21 - struct group *pgr = &gr;
22 - struct group **ppgr = &pgr;
24 + struct group **ppgr;
25 char *pw_tmp, *gr_tmp;
26 struct thread_stdenv_vars *tsv;
32 @@ -1326,7 +1326,7 @@ static void *do_mount_direct(void *arg)
34 /* Try to get group info */
36 - tmplen = sysconf(_SC_GETGR_R_SIZE_MAX);
37 + grplen = sysconf(_SC_GETGR_R_SIZE_MAX);
39 error(ap->logopt, "failed to get buffer size for getgrgid_r");
41 @@ -1335,16 +1335,28 @@ static void *do_mount_direct(void *arg)
45 - gr_tmp = malloc(tmplen + 1);
47 - error(ap->logopt, "failed to malloc buffer for getgrgid_r");
55 + char *tmp = realloc(gr_tmp, tmplen + 1);
57 + error(ap->logopt, "failed to malloc buffer for getgrgid_r");
68 + status = getgrgid_r(mt->gid, pgr, gr_tmp, tmplen, ppgr);
69 + if (status != ERANGE)
74 - status = getgrgid_r(mt->gid, pgr, gr_tmp, tmplen, ppgr);
76 error(ap->logopt, "failed to get group info from getgrgid_r");
78 diff --git a/daemon/indirect.c b/daemon/indirect.c
79 index 5c422c8..f6b93d0 100644
80 --- a/daemon/indirect.c
81 +++ b/daemon/indirect.c
82 @@ -666,11 +666,11 @@ static void *do_mount_indirect(void *arg)
83 struct passwd *ppw = &pw;
84 struct passwd **pppw = &ppw;
86 - struct group *pgr = &gr;
87 - struct group **ppgr = &pgr;
89 + struct group **ppgr;
90 char *pw_tmp, *gr_tmp;
91 struct thread_stdenv_vars *tsv;
92 - int len, tmplen, status, state;
93 + int len, tmplen, grplen, status, state;
95 mt = (struct pending_args *) arg;
97 @@ -771,7 +771,7 @@ static void *do_mount_indirect(void *arg)
99 /* Try to get group info */
101 - tmplen = sysconf(_SC_GETGR_R_SIZE_MAX);
102 + grplen = sysconf(_SC_GETGR_R_SIZE_MAX);
104 error(ap->logopt, "failed to get buffer size for getgrgid_r");
106 @@ -780,16 +780,28 @@ static void *do_mount_indirect(void *arg)
110 - gr_tmp = malloc(tmplen + 1);
112 - error(ap->logopt, "failed to malloc buffer for getgrgid_r");
120 + char *tmp = realloc(gr_tmp, tmplen + 1);
122 + error(ap->logopt, "failed to malloc buffer for getgrgid_r");
133 + status = getgrgid_r(mt->gid, pgr, gr_tmp, tmplen, ppgr);
134 + if (status != ERANGE)
139 - status = getgrgid_r(mt->gid, pgr, gr_tmp, tmplen, ppgr);
140 if (status || !pgr) {
141 error(ap->logopt, "failed to get group info from getgrgid_r");