Patch for winbindd memory leaks

Kim R. Pedersen krp at
Mon Sep 23 13:16:01 GMT 2002

Hello Winbindd-Fans,

During my port of winbindd to my company's new platform, I have come across 
three memory leaks in winbindd.

They are all related to misconfigured "password server" parameter, and 
therefore not critical for "normal" environments.

As I'm working on an Internet Appliance, they are however critical for me, and 
perhaps for others doing "ever-running appliance" devices.

Here we go:

1) A simple missing free(ip_list) in cm_get_dc_name() file winbindd_cm.c.

2) A wrong sequence of caching additions in cm_open_connection() file 

3) A potential endless loop in init_domain_list() file winbindd_util.c that 
never calls lp_talloc_free().

I have attached the patches to winbindd_cm.c as the fixes are fairly simple 
and obvious, but bug #3 is more problematic. One could simply add the missing 
call to lp_talloc_free(), but I feel that there is something fundamentally 
wrong with having this endless loop that doesn't take SIGHUP handling into 
consideration or the fact that other non-domain related requests should be 
serviced by winbindd.

In my own version of winbindd I simply return an error from init_domain_list() 
and return back to the main loop, so reconfiguration can take place.

File winbindd_util.c function init_domain_list() :
#ifdef FILANET
	if (!NT_STATUS_IS_OK(result)) {
		DEBUG(0, ("Cannot get SID for domain %s (using password server \"%s\") error 
was %s (0x%x)\n",
			  domain->name, lp_passwordserver(),
			  get_nt_error_msg(result), (unsigned int)NT_STATUS_V(result)));
		return False;
	while (!NT_STATUS_IS_OK(result)) {
		DEBUG(1,("Retrying startup domain sid fetch for %s\n",
		result = cache_methods.domain_sid(domain, &domain->sid);
#endif /* FILANET */

Kimrp, Filanet Europe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winbindd_cm.c-patch
Type: text/x-diff
Size: 1402 bytes
Desc: not available
Url :

More information about the samba-technical mailing list