summaryrefslogtreecommitdiff
path: root/source3/passdb
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2003-06-18 12:00:52 +0000
committerVolker Lendecke <vlendec@samba.org>2003-06-18 12:00:52 +0000
commite6fd597fce61787789b76c323c56edc979e4e1fc (patch)
treee4fa003a56b1067a700e8f15e277df78f9eb42ad /source3/passdb
parente48ebd09ffc57633fcb96c3a9406c9e7f65c5b3c (diff)
downloadsamba-e6fd597fce61787789b76c323c56edc979e4e1fc.tar.gz
samba-e6fd597fce61787789b76c323c56edc979e4e1fc.tar.bz2
samba-e6fd597fce61787789b76c323c56edc979e4e1fc.zip
And some more memory leaks in mapping.c and pdb_tdb.c. tdb_nextkey
mallocs its key, so we should free it after use. Volker (This used to be commit 9750799ba2e1aaa59fa255f23880c9c618195c3d)
Diffstat (limited to 'source3/passdb')
-rw-r--r--source3/passdb/pdb_tdb.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/source3/passdb/pdb_tdb.c b/source3/passdb/pdb_tdb.c
index d323c20d32..2cf7a0119f 100644
--- a/source3/passdb/pdb_tdb.c
+++ b/source3/passdb/pdb_tdb.c
@@ -490,6 +490,7 @@ static void close_tdb(struct tdbsam_privates *tdb_state)
static void tdbsam_endsampwent(struct pdb_methods *my_methods)
{
struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data;
+ SAFE_FREE(tdb_state->key.dptr);
close_tdb(tdb_state);
DEBUG(7, ("endtdbpwent: closed sam database.\n"));
@@ -503,7 +504,7 @@ static NTSTATUS tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *
{
NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL;
struct tdbsam_privates *tdb_state = (struct tdbsam_privates *)my_methods->private_data;
- TDB_DATA data;
+ TDB_DATA data, old_key;
const char *prefix = USERPREFIX;
int prefixlen = strlen (prefix);
@@ -514,10 +515,16 @@ static NTSTATUS tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *
}
/* skip all non-USER entries (eg. RIDs) */
- while ((tdb_state->key.dsize != 0) && (strncmp(tdb_state->key.dptr, prefix, prefixlen)))
+ while ((tdb_state->key.dsize != 0) && (strncmp(tdb_state->key.dptr, prefix, prefixlen))) {
+
+ old_key = tdb_state->key;
+
/* increment to next in line */
tdb_state->key = tdb_nextkey(tdb_state->passwd_tdb, tdb_state->key);
+ SAFE_FREE(old_key.dptr);
+ }
+
/* do we have an valid iteration pointer? */
if(tdb_state->passwd_tdb == NULL) {
DEBUG(0,("pdb_get_sampwent: Bad TDB Context pointer.\n"));
@@ -538,9 +545,13 @@ static NTSTATUS tdbsam_getsampwent(struct pdb_methods *my_methods, SAM_ACCOUNT *
}
SAFE_FREE(data.dptr);
+ old_key = tdb_state->key;
+
/* increment to next in line */
tdb_state->key = tdb_nextkey(tdb_state->passwd_tdb, tdb_state->key);
+ SAFE_FREE(old_key.dptr);
+
return NT_STATUS_OK;
}