The Samba-Bugzilla – Attachment 9567 Details for
Bug 10358
100% CPU utilization in winbindd when trying to free memory in winbindd_reinit_after_fork
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
The patch for Samba 3.6.12+
winbindd_util.c.patch (text/plain), 5.12 KB, created by
Richard Sharpe
on 2014-01-10 17:50:54 UTC
(
hide
)
Description:
The patch for Samba 3.6.12+
Filename:
MIME Type:
Creator:
Richard Sharpe
Created:
2014-01-10 17:50:54 UTC
Size:
5.12 KB
patch
obsolete
>samba-3.6.12/source3/winbindd/winbindd_util.c >@@ -89,7 +89,10 @@ > } > > >-/* Add a trusted domain to our list of domains */ >+/* Add a trusted domain to our list of domains. >+ If the domain already exists in the list, >+ return it and don't re-initialize. */ >+ > static struct winbindd_domain *add_trusted_domain(const char *domain_name, const char *alt_name, > struct winbindd_methods *methods, > const struct dom_sid *sid) >@@ -99,6 +102,7 @@ > char *idmap_config_option; > const char *param; > const char **ignored_domains, **dom; >+ int role = lp_server_role(); > > ignored_domains = lp_parm_string_list(-1, "winbind", "ignore domains", NULL); > for (dom=ignored_domains; dom && *dom; dom++) { >@@ -146,7 +150,10 @@ > > if (domain != NULL) { > /* >- * We found a match. Possibly update the SID >+ * We found a match on domain->name or >+ * domain->alt_name. Possibly update the SID >+ * if the stored SID was the NULL SID >+ * and return the matching entry. > */ > if ((sid != NULL) > && dom_sid_equal(&domain->sid, &global_sid_NULL)) { >@@ -192,6 +199,15 @@ > sid_copy(&domain->sid, sid); > } > >+ /* Is this our primary domain ? */ >+ if (strequal(domain_name, get_global_sam_name()) && >+ (role != ROLE_DOMAIN_MEMBER)) { >+ domain->primary = true; >+ } else if (strequal(domain_name, lp_workgroup()) && >+ (role == ROLE_DOMAIN_MEMBER)) { >+ domain->primary = true; >+ } >+ > /* Link to domain list */ > DLIST_ADD_END(_domain_list, domain, struct winbindd_domain *); > >@@ -228,6 +244,8 @@ > > done: > >+ setup_domain_child(domain); >+ > DEBUG(2,("Added domain %s %s %s\n", > domain->name, domain->alt_name, > &domain->sid?sid_string_dbg(&domain->sid):"")); >@@ -341,18 +359,10 @@ > necessary. This is important because we need the > SID for sibling domains */ > >- if ( find_domain_from_name_noinit(p) != NULL ) { >- domain = add_trusted_domain(p, alternate_name, >- &cache_methods, >- &sid); >- } else { >- domain = add_trusted_domain(p, alternate_name, >- &cache_methods, >- &sid); >- if (domain) { >- setup_domain_child(domain); >- } >- } >+ (void)add_trusted_domain(p, alternate_name, >+ &cache_methods, >+ &sid); >+ > p=q; > if (p != NULL) > p += 1; >@@ -413,6 +423,12 @@ > the domain_list() as our primary domain may not > have been initialized. */ > >+ DEBUG(10, ("Entry[%02d]: name: %s, DNS: %s, SID: %s," >+ " trust_flags: %x, trust_type: %u\n", >+ i, dom_list[i].domain_name, dom_list[i].dns_name, >+ &dom_list[i].sid?sid_string_dbg(&dom_list[i].sid):"", >+ dom_list[i].trust_flags, dom_list[i].trust_type)); >+ > if ( !(dom_list[i].trust_flags & NETR_TRUST_FLAG_TREEROOT) ) { > continue; > } >@@ -422,13 +438,10 @@ > d = find_domain_from_name_noinit( dom_list[i].domain_name ); > > if ( !d ) { >- d = add_trusted_domain( dom_list[i].domain_name, >+ (void)add_trusted_domain( dom_list[i].domain_name, > dom_list[i].dns_name, > &cache_methods, > &dom_list[i].sid ); >- if (d != NULL) { >- setup_domain_child(d); >- } > } > > if (d == NULL) { >@@ -479,6 +492,12 @@ > uint32 type = dom_list[i].trust_type; > uint32 attribs = dom_list[i].trust_attribs; > >+ DEBUG(10, ("Entry[%02d]: name: %s, DNS: %s, SID: %s," >+ " trust_flags: %x, trust_type: %u\n", >+ i, dom_list[i].domain_name, dom_list[i].dns_name, >+ &dom_list[i].sid?sid_string_dbg(&dom_list[i].sid):"", >+ dom_list[i].trust_flags, dom_list[i].trust_type)); >+ > d = find_domain_from_name_noinit( dom_list[i].domain_name ); > > /* ignore our primary and internal domains */ >@@ -494,13 +513,10 @@ > about it */ > > if ( !d ) { >- d = add_trusted_domain( dom_list[i].domain_name, >+ (void)add_trusted_domain( dom_list[i].domain_name, > dom_list[i].dns_name, > &cache_methods, > &dom_list[i].sid ); >- if (d != NULL) { >- setup_domain_child(d); >- } > } > > if (d == NULL) { >@@ -601,7 +617,6 @@ > /* Look up global info for the winbind daemon */ > bool init_domain_list(void) > { >- struct winbindd_domain *domain; > int role = lp_server_role(); > > /* Free existing list */ >@@ -609,26 +624,18 @@ > > /* BUILTIN domain */ > >- domain = add_trusted_domain("BUILTIN", NULL, &cache_methods, >+ (void)add_trusted_domain("BUILTIN", NULL, &cache_methods, > &global_sid_Builtin); >- if (domain) { >- setup_domain_child(domain); >- } > > /* Local SAM */ > >- domain = add_trusted_domain(get_global_sam_name(), NULL, >+ (void)add_trusted_domain(get_global_sam_name(), NULL, > &cache_methods, get_global_sam_sid()); >- if (domain) { >- if ( role != ROLE_DOMAIN_MEMBER ) { >- domain->primary = True; >- } >- setup_domain_child(domain); >- } > > /* Add ourselves as the first entry. */ > > if ( role == ROLE_DOMAIN_MEMBER ) { >+ struct winbindd_domain *domain; > struct dom_sid our_sid; > > if (!secrets_fetch_domain_sid(lp_workgroup(), &our_sid)) { >@@ -639,9 +646,6 @@ > domain = add_trusted_domain( lp_workgroup(), lp_realm(), > &cache_methods, &our_sid); > if (domain) { >- domain->primary = True; >- setup_domain_child(domain); >- > /* Even in the parent winbindd we'll need to > talk to the DC, so try and see if we can > contact it. Theoretically this isn't neccessary
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 10358
:
9555
|
9557
|
9564
|
9565
| 9567