Greg Dickie spotted some wierd memory corruption problem with group
authorLuke Leighton <lkcl@samba.org>
Tue, 9 Mar 1999 23:22:36 +0000 (23:22 +0000)
committerLuke Leighton <lkcl@samba.org>
Tue, 9 Mar 1999 23:22:36 +0000 (23:22 +0000)
database enumeration.
(This used to be commit b0381bb262f51fca916fb951fc0c7e54a58e2dd3)

source3/groupdb/aliasunix.c
source3/groupdb/builtinunix.c
source3/groupdb/groupunix.c

index e4a86d4fcd7ff35b39f07394f67d8399d5448247..c53692f32825df470c2854434312ac253cc8f594 100644 (file)
@@ -170,7 +170,7 @@ static LOCAL_GRP *getalsunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
 {
        /* Static buffers we will return. */
        static LOCAL_GRP gp_buf;
-       struct group *unix_grp = NULL;
+       struct group unix_grp;
        struct unix_entries *grps = (struct unix_entries *)vp;
 
        if (lp_server_role() == ROLE_DOMAIN_NONE)
@@ -195,12 +195,12 @@ static LOCAL_GRP *getalsunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
                DOM_NAME_MAP gmep;
                fstring sid_str;
 
-               unix_grp = &grps->grps[grps->grp_idx];
+               memcpy(&unix_grp, &grps->grps[grps->grp_idx], sizeof(unix_grp));
 
                DEBUG(10,("getgrpunixpwent: enum unix group entry %s\n",
-                          unix_grp->gr_name));
+                          unix_grp.gr_name));
                        
-               if (!lookupsmbgrpgid(unix_grp->gr_gid, &gmep))
+               if (!lookupsmbgrpgid(unix_grp.gr_gid, &gmep))
                {
                        continue;
                }
@@ -224,7 +224,7 @@ static LOCAL_GRP *getalsunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
                break;
        }
 
-       if (unix_grp == NULL || grps->grp_idx >= grps->num_grps)
+       if (grps->grp_idx >= grps->num_grps)
        {
                return NULL;
        }
@@ -236,8 +236,8 @@ static LOCAL_GRP *getalsunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
                (*mem) = NULL;
                (*num_mem) = 0;
 
-               unix_grp = getgrgid(unix_grp->gr_gid);
-               get_unixalias_members(unix_grp, num_mem, mem);
+               memcpy(&unix_grp, getgrgid(unix_grp.gr_gid), sizeof(unix_grp));
+               get_unixalias_members(&unix_grp, num_mem, mem);
        }
 
        {
index 9f00582592fd054794d35312a6d021e21d7546ca..57421cc449bbec491f91c8b1164cab8c00796985 100644 (file)
@@ -170,7 +170,7 @@ static LOCAL_GRP *getbltunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
 {
        /* Static buffers we will return. */
        static LOCAL_GRP gp_buf;
-       struct group *unix_grp = NULL;
+       struct group unix_grp;
        struct unix_entries *grps = (struct unix_entries *)vp;
 
        if (grps == NULL)
@@ -200,12 +200,12 @@ static LOCAL_GRP *getbltunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
                DOM_NAME_MAP gmep;
                fstring sid_str;
 
-               unix_grp = &grps->grps[grps->grp_idx];
+               memcpy(&unix_grp, &grps->grps[grps->grp_idx], sizeof(unix_grp));
 
                DEBUG(10,("getgrpunixpwent: enum unix group entry %s\n",
-                          unix_grp->gr_name));
+                          unix_grp.gr_name));
                        
-               if (!lookupsmbgrpgid(unix_grp->gr_gid, &gmep))
+               if (!lookupsmbgrpgid(unix_grp.gr_gid, &gmep))
                {
                        continue;
                }
@@ -229,7 +229,7 @@ static LOCAL_GRP *getbltunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
                break;
        }
 
-       if (unix_grp == NULL || grps->grp_idx >= grps->num_grps)
+       if (grps->grp_idx >= grps->num_grps)
        {
                return NULL;
        }
@@ -241,8 +241,8 @@ static LOCAL_GRP *getbltunixpwent(void *vp, LOCAL_GRP_MEMBER **mem, int *num_mem
                (*mem) = NULL;
                (*num_mem) = 0;
 
-               unix_grp = getgrgid(unix_grp->gr_gid);
-               get_unixbuiltin_members(unix_grp, num_mem, mem);
+               memcpy(&unix_grp, getgrgid(unix_grp.gr_gid), sizeof(unix_grp));
+               get_unixbuiltin_members(&unix_grp, num_mem, mem);
        }
 
        {
index 1aeae1ca1961e19d9d4569723fee2efe6efc1101..306e499858ce44891ee8bab8aabc7176c1a81a4e 100644 (file)
@@ -170,7 +170,7 @@ static DOMAIN_GRP *getgrpunixpwent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_m
 {
        /* Static buffers we will return. */
        static DOMAIN_GRP gp_buf;
-       struct group *unix_grp = NULL;
+       struct group unix_grp;
        struct unix_entries *grps = (struct unix_entries *)vp;
 
        if (grps == NULL)
@@ -204,12 +204,12 @@ static DOMAIN_GRP *getgrpunixpwent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_m
        {
                DOM_NAME_MAP gmep;
 
-               unix_grp = &grps->grps[grps->grp_idx];
+               memcpy(&unix_grp, &grps->grps[grps->grp_idx], sizeof(unix_grp));
 
                DEBUG(10,("getgrpunixpwent: enum unix group entry %s\n",
-                          unix_grp->gr_name));
+                          unix_grp.gr_name));
                        
-               if (!lookupsmbgrpgid(unix_grp->gr_gid, &gmep))
+               if (!lookupsmbgrpgid(unix_grp.gr_gid, &gmep))
                {
                        continue;
                }
@@ -230,7 +230,7 @@ static DOMAIN_GRP *getgrpunixpwent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_m
                break;
        }
 
-       if (unix_grp == NULL || grps->grp_idx >= grps->num_grps)
+       if (grps->grp_idx >= grps->num_grps)
        {
                return NULL;
        }
@@ -242,8 +242,8 @@ static DOMAIN_GRP *getgrpunixpwent(void *vp, DOMAIN_GRP_MEMBER **mem, int *num_m
                (*mem) = NULL;
                (*num_mem) = 0;
 
-               unix_grp = getgrgid(unix_grp->gr_gid);
-               get_unixgroup_members(unix_grp, num_mem, mem);
+               memcpy(&unix_grp, getgrgid(unix_grp.gr_gid), sizeof(unix_grp));
+               get_unixgroup_members(&unix_grp, num_mem, mem);
        }
 
        {