summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>1999-03-09 23:22:36 +0000
committerLuke Leighton <lkcl@samba.org>1999-03-09 23:22:36 +0000
commita18c6ba9a411b8b87cc67e02f5287786d1aaad20 (patch)
treeeb6fd7d1f6aca171ae2739c306d0dcb2ed0d1f3d
parent60bfe3819eb92da021218987467b2ff101b094dd (diff)
downloadsamba-a18c6ba9a411b8b87cc67e02f5287786d1aaad20.tar.gz
samba-a18c6ba9a411b8b87cc67e02f5287786d1aaad20.tar.bz2
samba-a18c6ba9a411b8b87cc67e02f5287786d1aaad20.zip
Greg Dickie spotted some wierd memory corruption problem with group
database enumeration. (This used to be commit b0381bb262f51fca916fb951fc0c7e54a58e2dd3)
-rw-r--r--source3/groupdb/aliasunix.c14
-rw-r--r--source3/groupdb/builtinunix.c14
-rw-r--r--source3/groupdb/groupunix.c14
3 files changed, 21 insertions, 21 deletions
diff --git a/source3/groupdb/aliasunix.c b/source3/groupdb/aliasunix.c
index e4a86d4fcd..c53692f328 100644
--- a/source3/groupdb/aliasunix.c
+++ b/source3/groupdb/aliasunix.c
@@ -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);
}
{
diff --git a/source3/groupdb/builtinunix.c b/source3/groupdb/builtinunix.c
index 9f00582592..57421cc449 100644
--- a/source3/groupdb/builtinunix.c
+++ b/source3/groupdb/builtinunix.c
@@ -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);
}
{
diff --git a/source3/groupdb/groupunix.c b/source3/groupdb/groupunix.c
index 1aeae1ca19..306e499858 100644
--- a/source3/groupdb/groupunix.c
+++ b/source3/groupdb/groupunix.c
@@ -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);
}
{