From 5469866242f0dfbdc7260c86cfca196b10e4af21 Mon Sep 17 00:00:00 2001 From: Steven Danneman Date: Wed, 29 Jul 2009 16:13:44 -0700 Subject: s3/winbindd: Remove unnecessary check for NULL SID There's a known bug in some Windows implementations of DsEnumerateDomainTrusts() where domain SIDs are not returned for transitively trusted domains within the same forest. Jerry originally worked around this in the winbindd parent by checking for S-0-0 and converting it to S-1-0 in 8b0fce0b. Guenter later moved these checks into the child process in commit 3bdfcbac making the initial patch unecessary. I've removed it and added a clarifying comment to the child process. If ever this SID is needed we could add an extra DsEnumerateDomainTrusts() call in trusted_domains() as suggested by the Microsoft KB. --- source3/winbindd/winbindd_ads.c | 6 +++++- source3/winbindd/winbindd_util.c | 9 ++------- 2 files changed, 7 insertions(+), 8 deletions(-) (limited to 'source3/winbindd') diff --git a/source3/winbindd/winbindd_ads.c b/source3/winbindd/winbindd_ads.c index a9df61d5f4..b5fe08093c 100644 --- a/source3/winbindd/winbindd_ads.c +++ b/source3/winbindd/winbindd_ads.c @@ -1379,9 +1379,13 @@ static NTSTATUS trusted_domains(struct winbindd_domain *domain, DEBUG(10,("trusted_domains: Skipping external trusted domain " "%s because it is outside of our primary domain\n", trusts.array[i].netbios_name)); - continue; + continue; } + /* We must check that the SID of each trusted domain + * was returned to work around a bug in Windows: + * http://support.microsoft.com/kb/922832 */ + (*names)[ret_count] = CONST_DISCARD(char *, trusts.array[i].netbios_name); (*alt_names)[ret_count] = CONST_DISCARD(char *, trusts.array[i].dns_name); if (trusts.array[i].sid) { diff --git a/source3/winbindd/winbindd_util.c b/source3/winbindd/winbindd_util.c index 5c2ebab836..ff8c101b37 100644 --- a/source3/winbindd/winbindd_util.c +++ b/source3/winbindd/winbindd_util.c @@ -322,13 +322,8 @@ static void trustdom_recv(void *private_data, bool success) *q = '\0'; if (!string_to_sid(&sid, sidstr)) { - /* Allow NULL sid for sibling domains */ - if ( strcmp(sidstr,"S-0-0") == 0) { - sid_copy( &sid, &global_sid_NULL); - } else { - DEBUG(0, ("Got invalid trustdom response\n")); - break; - } + DEBUG(0, ("Got invalid trustdom response\n")); + break; } /* use the real alt_name if we have one, else pass in NULL */ -- cgit