Beispiel #1
0
 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));
     }
 }
Beispiel #2
0
 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));
     }
 }
Beispiel #3
0
 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));
     }
 }
Beispiel #4
0
 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));
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
 private static bool IsOfObjectClass(SearchResult sr, string className)
 {
     return(ADUtils.IsOfObjectClass(sr, className));
 }