summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2001-06-11 22:05:56 +0000
committerJeremy Allison <jra@samba.org>2001-06-11 22:05:56 +0000
commit5008ac0eb7a98db5a6521fae1d93160608ae445a (patch)
treed8ddc8a3d691212a0859372ced304893b5e63b3d
parent38e6b1098ab4194818ce1b1a819ba9f866f9aedd (diff)
downloadsamba-5008ac0eb7a98db5a6521fae1d93160608ae445a.tar.gz
samba-5008ac0eb7a98db5a6521fae1d93160608ae445a.tar.xz
samba-5008ac0eb7a98db5a6521fae1d93160608ae445a.zip
Found & fixed memory bug. num+1 * sizeof(x) != (num+1)*sizeof(x)........
Jeremy.
-rw-r--r--source/lib/util_getent.c45
1 files changed, 35 insertions, 10 deletions
diff --git a/source/lib/util_getent.c b/source/lib/util_getent.c
index 7223cf834d9..610d31f0d5b 100644
--- a/source/lib/util_getent.c
+++ b/source/lib/util_getent.c
@@ -21,6 +21,26 @@
#include "includes.h"
+static void print_grent_list(struct sys_grent *glist)
+{
+ DEBUG(100, ("print_grent_list: %x\n", glist ));
+ while (glist) {
+ DEBUG(100,("glist: %x ", glist));
+ if (glist->gr_name)
+ DEBUG(100,(": gr_name = (%x) %s ", glist->gr_name, glist->gr_name));
+ if (glist->gr_passwd)
+ DEBUG(100,(": gr_passwd = (%x) %s ", glist->gr_passwd, glist->gr_passwd));
+ if (glist->gr_mem) {
+ int i;
+ for (i = 0; glist->gr_mem[i]; i++)
+ DEBUG(100,(" : gr_mem[%d] = (%x) %s ", i, glist->gr_mem[i], glist->gr_mem[i]));
+ }
+ DEBUG(100,(": gr_next = %x\n", glist->next ));
+ glist = glist->next;
+ }
+ DEBUG(100,("FINISHED !\n\n"));
+}
+
/****************************************************************
Returns a single linked list of group entries.
Use grent_free() to free it after use.
@@ -66,10 +86,10 @@ struct sys_grent * getgrent_list(void)
;
/* alloc space for gr_mem string pointers */
- if ((gent->gr_mem = (char **) malloc(num+1 * sizeof(char *))) == NULL)
+ if ((gent->gr_mem = (char **) malloc((num+1) * sizeof(char *))) == NULL)
goto err;
- memset(gent->gr_mem, '\0', num+1 * sizeof(char *));
+ memset(gent->gr_mem, '\0', (num+1) * sizeof(char *));
for (i=0; i < num; i++) {
if ((gent->gr_mem[i] = strdup(grp->gr_mem[i])) == NULL)
@@ -88,6 +108,8 @@ struct sys_grent * getgrent_list(void)
}
endgrent();
+ print_grent_list(glist);
+ DEBUG(100,("getgrent_list returned %x\n", glist ));
return glist;
err:
@@ -105,9 +127,12 @@ struct sys_grent * getgrent_list(void)
void grent_free (struct sys_grent *glist)
{
+ DEBUG(100,("getgrent_free %x\n", glist ));
while (glist) {
- struct sys_grent *temp;
+ struct sys_grent *prev;
+ print_grent_list(glist);
+
if (glist->gr_name)
free(glist->gr_name);
if (glist->gr_passwd)
@@ -118,9 +143,9 @@ void grent_free (struct sys_grent *glist)
free(glist->gr_mem[i]);
free(glist->gr_mem);
}
- temp = glist->next;
- free(glist);
- glist = temp;
+ prev = glist;
+ glist = glist->next;
+ free(prev);
}
}
@@ -197,7 +222,7 @@ struct sys_pwent * getpwent_list(void)
void pwent_free (struct sys_pwent *plist)
{
while (plist) {
- struct sys_pwent *temp;
+ struct sys_pwent *prev;
if (plist->pw_name)
free(plist->pw_name);
@@ -210,8 +235,8 @@ void pwent_free (struct sys_pwent *plist)
if (plist->pw_shell)
free(plist->pw_shell);
- temp = plist->next;
- free(plist);
- plist = temp;
+ prev = plist;
+ plist = plist->next;
+ free(prev);
}
}