#ifndef HAVE_GETGRNAM_R
-#define fr_getgrnam getgrnam
+#define fr_getgrnam(_a, _b) getgrnam(_b)
#else
-static struct group *fr_getgrnam(char const *name)
+static struct group *fr_getgrnam(TALLOC_CTX *ctx, char const *name)
{
struct group *grp, my_group;
char *group_buffer;
size_t group_size = 1024;
grp = NULL;
- group_buffer = talloc_array(NULL, char, group_size);
+ group_buffer = talloc_array(ctx, char, group_size);
while (group_buffer) {
int err;
err = getgrnam_r(name, &my_group, group_buffer, group_size, &grp);
if (err == ERANGE) {
group_size *= 2;
- group_buffer = talloc_realloc(NULL, group_buffer, char, group_size);
+ talloc_free(group_buffer);
+ group_buffer = talloc_array(ctx, char, group_size);
continue;
}
if (!pwd)
return -1;
- grp = fr_getgrnam(check->vp_strvalue);
+ grp = fr_getgrnam(req, check->vp_strvalue);
if (!grp)
return -1;
}
}
-#ifdef HAVE_GETGRNAM_R
- talloc_free(grp);
-#endif
-
return retval;
}