svn commit: samba r20207 - in branches:
SAMBA_3_0/source/nsswitch SAMBA_3_0_24/source/nsswitch
Jeremy Allison
jra at samba.org
Sat Dec 16 04:51:27 GMT 2006
On Fri, Dec 15, 2006 at 11:34:39PM -0500, simo wrote:
>
> > Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c
> > ===================================================================
> > --- branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c 2006-12-16 01:32:57 UTC (rev 20206)
> > +++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_group.c 2006-12-16 01:52:06 UTC (rev 20207)
> > @@ -1398,12 +1398,15 @@
> > return WINBINDD_OK;
> > }
> >
> > - if (!print_sidlist(NULL, groups, num_groups, &sidstring, &len)) {
> > - DEBUG(0, ("malloc failed\n"));
> > + if (!print_sidlist(state->mem_ctx, groups, num_groups, &sidstring, &len)) {
> > + DEBUG(0, ("talloc failed\n"));
> > return WINBINDD_ERROR;
> > }
> >
> > - state->response.extra_data.data = sidstring;
> > + state->response.extra_data.data = SMB_STRDUP(sidstring);
> > + if (!state->response.extra_data.data) {
> > + return WINBINDD_ERROR;
> > + }
> > state->response.length += len+1;
> > state->response.data.num_entries = num_groups;
>
> Jeremy,
> If I correctly read this patch we are leaking memory here and you should
> free sidstring.
I don't think so. I changed the call from print_sidlist from taking
a NULL context to taking the state->mem_ctx instead. I think it was
leaking memory before, but isn't now.
Are you reading the patch backwards ?
> I think the way print_sidlist() and sprintf_append() are coded up is
> very bad and misleading, I am sure it will be very easy to get them
> wrong again in future.
print_sidlist is ok, sprintf_append is bad. I've been removing the
idiom that mem_ctx == NULL means malloc, and mem_ctx != NUll means
talloc wherever I've found it. This is just another one.
I'll look at how hard it is to fix.
> I would either separate these functions in a malloc and a talloc
> version, or rather convert all paths to just use the talloc one and let
> it alloc on the NULL context when you don't want/need to set up a
> specific memory context. This way you can consistently always use
> talloc_free() in functions calling print_sidlist() without risking
> errors.
FYI: At least in SAMBA_3_0_24 there are no calls to print_sidlist
that take a null context anymore. Did you make changes to this in
your new idmap code ?
Jeremy.
More information about the samba-cvs
mailing list