]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix use of talloc buffers
authorAlan T. DeKok <aland@freeradius.org>
Tue, 2 Sep 2014 18:17:18 +0000 (14:17 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 2 Sep 2014 18:17:18 +0000 (14:17 -0400)
src/modules/rlm_unix/rlm_unix.c

index c1a95c252a2b389cb744328c518d34e495fd17db..0a01074190ba10d8bfc24eb0b27624de1a17e04c 100644 (file)
@@ -71,23 +71,24 @@ static const CONF_PARSER module_config[] = {
 
 
 #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;
                }
 
@@ -132,7 +133,7 @@ static int groupcmp(UNUSED void *instance, REQUEST *req, UNUSED VALUE_PAIR *requ
        if (!pwd)
                return -1;
 
-       grp = fr_getgrnam(check->vp_strvalue);
+       grp = fr_getgrnam(req, check->vp_strvalue);
        if (!grp)
                return -1;
 
@@ -144,10 +145,6 @@ static int groupcmp(UNUSED void *instance, REQUEST *req, UNUSED VALUE_PAIR *requ
                }
        }
 
-#ifdef HAVE_GETGRNAM_R
-       talloc_free(grp);
-#endif
-
        return retval;
 }