private static bool IsOfObjectClass(DirectoryEntry de, string className) { if (!de.Path.StartsWith("WinNT:", StringComparison.Ordinal)) { return(ADUtils.IsOfObjectClass(de, className)); } else { return(SAMUtils.IsOfObjectClass(de, className)); } }
static internal Principal SearchResultAsPrincipal(SearchResult sr, ADStoreCtx storeCtx, object discriminant) { if (ADUtils.IsOfObjectClass(sr, "computer") || ADUtils.IsOfObjectClass(sr, "user") || ADUtils.IsOfObjectClass(sr, "group")) { return(storeCtx.GetAsPrincipal(sr, discriminant)); } else if (ADUtils.IsOfObjectClass(sr, "foreignSecurityPrincipal")) { return(storeCtx.ResolveCrossStoreRefToPrincipal(sr.GetDirectoryEntry())); } else { return(storeCtx.GetAsPrincipal(sr, discriminant)); } }
static internal Principal DirectoryEntryAsPrincipal(DirectoryEntry de, ADStoreCtx storeCtx) { if (ADUtils.IsOfObjectClass(de, "computer") || ADUtils.IsOfObjectClass(de, "user") || ADUtils.IsOfObjectClass(de, "group")) { return(storeCtx.GetAsPrincipal(de, null)); } else if (ADUtils.IsOfObjectClass(de, "foreignSecurityPrincipal")) { return(storeCtx.ResolveCrossStoreRefToPrincipal(de)); } else { return(storeCtx.GetAsPrincipal(de, null)); } }
private static bool IsOfObjectClass(SearchResult sr, string className) { Debug.Assert(sr.Path.StartsWith("LDAP:", StringComparison.Ordinal) || sr.Path.StartsWith("GC:", StringComparison.Ordinal)); return(ADUtils.IsOfObjectClass(sr, className)); }
private bool MoveNextMemberSearcher() { bool nextSearchResult; bool flag = false; do { nextSearchResult = this.GetNextSearchResult(); flag = false; if (!nextSearchResult) { if (!this.recursive || this.groupsToVisit.Count <= 0) { continue; } string item = this.groupsToVisit[0]; this.groupsToVisit.RemoveAt(0); this.groupsVisited.Add(item); DirectoryEntry directoryEntry = SDSUtils.BuildDirectoryEntry(this.BuildPathFromDN(item), this.storeCtx.Credentials, this.storeCtx.AuthTypes); this.storeCtx.InitializeNewDirectoryOptions(directoryEntry); DirectorySearcher directorySearcher = SDSUtils.ConstructSearcher(directoryEntry); directorySearcher.Filter = "(objectClass=*)"; directorySearcher.SearchScope = SearchScope.Base; directorySearcher.AttributeScopeQuery = "member"; directorySearcher.CacheResults = false; this.memberSearchersQueue.Enqueue(directorySearcher); flag = true; } else { SearchResult current = (SearchResult)this.memberSearchResultsEnumerator.Current; string str = (string)current.Properties["distinguishedName"][0]; if (ADUtils.IsOfObjectClass(current, "group") || ADUtils.IsOfObjectClass(current, "user") || ADUtils.IsOfObjectClass(current, "foreignSecurityPrincipal")) { if (!this.recursive || !ADUtils.IsOfObjectClass(current, "group")) { if (!this.recursive || !ADUtils.IsOfObjectClass(current, "foreignSecurityPrincipal")) { if (this.usersVisited.ContainsKey(current.Properties["distinguishedName"][0].ToString())) { flag = true; } else { this.current = current; this.currentForeignDE = null; this.currentForeignPrincipal = null; this.usersVisited.Add(current.Properties["distinguishedName"][0].ToString(), true); } } else { if (!this.usersVisited.ContainsKey(current.Properties["distinguishedName"][0].ToString())) { this.foreignMembersCurrentGroup.Add(current.GetDirectoryEntry()); this.usersVisited.Add(current.Properties["distinguishedName"][0].ToString(), true); } flag = true; } } else { if (!this.groupsVisited.Contains(str) && !this.groupsToVisit.Contains(str)) { this.groupsToVisit.Add(str); } flag = true; } } else { flag = true; } } }while (flag); return(nextSearchResult); }
private bool MoveNextMemberEnum() { bool nextEnum; bool flag = false; bool flag1 = false; do { nextEnum = this.GetNextEnum(); flag = false; flag1 = false; if (!nextEnum) { if (!this.recursive || this.groupsToVisit.Count <= 0) { continue; } string item = this.groupsToVisit[0]; this.groupsToVisit.RemoveAt(0); this.groupsVisited.Add(item); DirectoryEntry directoryEntry = SDSUtils.BuildDirectoryEntry(this.BuildPathFromDN(item), this.storeCtx.Credentials, this.storeCtx.AuthTypes); this.storeCtx.InitializeNewDirectoryOptions(directoryEntry); this.membersQueue.Enqueue(new RangeRetriever(directoryEntry, "member", true)); flag = true; } else { DirectoryEntry directoryEntry1 = null; using (directoryEntry1) { if (!flag1 || directoryEntry1 == null) { string current = (string)this.membersEnum.Current; directoryEntry1 = SDSUtils.BuildDirectoryEntry(this.BuildPathFromDN(current), this.storeCtx.Credentials, this.storeCtx.AuthTypes); this.storeCtx.InitializeNewDirectoryOptions(directoryEntry1); this.storeCtx.LoadDirectoryEntryAttributes(directoryEntry1); if (ADUtils.IsOfObjectClass(directoryEntry1, "group") || ADUtils.IsOfObjectClass(directoryEntry1, "user") || ADUtils.IsOfObjectClass(directoryEntry1, "foreignSecurityPrincipal")) { if (!this.recursive || !ADUtils.IsOfObjectClass(directoryEntry1, "group")) { if (!this.recursive || !ADUtils.IsOfObjectClass(directoryEntry1, "foreignSecurityPrincipal")) { if (this.usersVisited.ContainsKey(directoryEntry1.Properties["distinguishedName"][0].ToString())) { flag = true; } else { this.current = directoryEntry1; this.currentForeignDE = null; this.currentForeignPrincipal = null; this.usersVisited.Add(directoryEntry1.Properties["distinguishedName"][0].ToString(), true); flag1 = false; } } else { if (!this.usersVisited.ContainsKey(directoryEntry1.Properties["distinguishedName"][0].ToString())) { this.foreignMembersCurrentGroup.Add(directoryEntry1); this.usersVisited.Add(directoryEntry1.Properties["distinguishedName"][0].ToString(), true); flag1 = false; } flag = true; } } else { if (!this.groupsVisited.Contains(current) && !this.groupsToVisit.Contains(current)) { this.groupsToVisit.Add(current); } flag = true; } } else { flag = true; } } } } }while (flag); return(nextEnum); }
private static bool IsOfObjectClass(SearchResult sr, string className) { return(ADUtils.IsOfObjectClass(sr, className)); }