questions on idmap_tdb.c

Herb Lewis hlewis at
Thu Feb 22 19:45:55 GMT 2007

Trying to understand what these functions do I was looking at
idmap_tdb_remove_mapping and have some questions. First it
seems like we have a memory leak on data.dptr. We have the
following 2 lines midway through the function

         /* Check if sid is present in database */
         data = tdb_fetch(ctx->tdb, ksid);

If I followed the code correctly, data.dptr is malloced in
the tdb_fetch function. However between these 2 lines and
the following lines there was no SAFE_FREE like follows
all the remaining calls to tdb_fetch

         /* Delete previous mappings. */

         data = tdb_fetch(ctx->tdb, ksid);

We already know data.dptr is nonzero (or we would have
skipped this code) so it seems a simple SAFE_FREE(data.dptr);
before the next fetch is required or we leak that memory.
The other option would be to just remove the tdb_fetch
for ksid as that is what the previous tdb_fetch got.
I'm not sure if there was a reason for doing the fetch

Second question is we do we need to do the fetch if we are
going to be calling tdb_delete? We do this before the
delete of both ksid and kid.

More information about the samba-technical mailing list