Ejemplo n.º 1
0
 /// <summary>
 /// An overload for expanding a list of SerializableSceneNodes.
 /// </summary>
 public static List <T> ExpandNodeInstanceSubtrees <T>(
     this IReadOnlyList <SerializableSceneNode> nodes,
     ExpansionMode expansionMode,
     CreateNewNodeFunc <SerializableSceneNode, T> createNewNodeFunc)
 => ExpandNodeInstanceSubtrees(
     nodes.Select(n => new SerializableSceneNodeInstanceAdapter(n)).ToList(),
     expansionMode,
     createNewNodeFunc);
Ejemplo n.º 2
0
        internal override void RestoreBookmark(ResultSetBookmark bookmark)
        {
            ADDNLinkedAttrSetBookmark aDDNLinkedAttrSetBookmark = (ADDNLinkedAttrSetBookmark)bookmark;

            this.usersVisited               = aDDNLinkedAttrSetBookmark.usersVisited;
            this.groupsToVisit              = aDDNLinkedAttrSetBookmark.groupsToVisit;
            this.groupsVisited              = aDDNLinkedAttrSetBookmark.groupsVisited;
            this.storeCtx                   = aDDNLinkedAttrSetBookmark.storeCtx;
            this.current                    = aDDNLinkedAttrSetBookmark.current;
            this.returnedPrimaryGroup       = aDDNLinkedAttrSetBookmark.returnedPrimaryGroup;
            this.foreignMembersCurrentGroup = aDDNLinkedAttrSetBookmark.foreignMembersCurrentGroup;
            this.fakePrincipalMembers       = aDDNLinkedAttrSetBookmark.fakePrincipalMembers;
            this.foreignMembersToReturn     = aDDNLinkedAttrSetBookmark.foreignMembersToReturn;
            this.currentForeignPrincipal    = aDDNLinkedAttrSetBookmark.currentForeignPrincipal;
            this.currentForeignDE           = aDDNLinkedAttrSetBookmark.currentForeignDE;
            this.foreignGroups              = aDDNLinkedAttrSetBookmark.foreignGroups;
            if (this.queryMembersResults != null)
            {
                this.queryMembersResults.Dispose();
            }
            this.queryMembersResults           = aDDNLinkedAttrSetBookmark.queryMembersResults;
            this.queryMembersResultEnumerator  = aDDNLinkedAttrSetBookmark.queryMembersResultEnumerator;
            this.memberSearchResults           = aDDNLinkedAttrSetBookmark.memberSearchResults;
            this.memberSearchResultsEnumerator = aDDNLinkedAttrSetBookmark.memberSearchResultsEnumerator;
            this.atBeginning   = aDDNLinkedAttrSetBookmark.atBeginning;
            this.expansionMode = aDDNLinkedAttrSetBookmark.expansionMode;
            this.members       = aDDNLinkedAttrSetBookmark.members;
            this.membersEnum   = aDDNLinkedAttrSetBookmark.membersEnum;
            if (this.membersQueue != null)
            {
                this.membersQueue.Clear();
                if (aDDNLinkedAttrSetBookmark.membersQueue != null)
                {
                    foreach (IEnumerable enumerable in aDDNLinkedAttrSetBookmark.membersQueue)
                    {
                        this.membersQueue.Enqueue(enumerable);
                    }
                }
            }
            if (this.memberSearchersQueue != null)
            {
                foreach (DirectorySearcher directorySearcher in this.memberSearchersQueue)
                {
                    directorySearcher.Dispose();
                }
                this.memberSearchersQueue.Clear();
                if (aDDNLinkedAttrSetBookmark.memberSearcherQueue != null)
                {
                    foreach (DirectorySearcher directorySearcher1 in aDDNLinkedAttrSetBookmark.memberSearcherQueue)
                    {
                        this.memberSearchersQueue.Enqueue(directorySearcher1);
                    }
                }
            }
        }
Ejemplo n.º 3
0
 internal ADDNLinkedAttrSet(string groupDN, DirectorySearcher[] membersSearcher, string primaryGroupDN, DirectorySearcher primaryGroupMembersSearcher, bool recursive, ADStoreCtx storeCtx)
 {
     this.pathLock                     = new object();
     this.usersVisited                 = new Dictionary <string, bool>();
     this.groupsVisited                = new List <string>();
     this.groupsToVisit                = new List <string>();
     this.membersQueue                 = new Queue <IEnumerable>();
     this.originalMembers              = new Queue <IEnumerable>();
     this.atBeginning                  = true;
     this.foreignMembersCurrentGroup   = new List <DirectoryEntry>();
     this.fakePrincipalMembers         = new List <DirectoryEntry>();
     this.foreignGroups                = new List <GroupPrincipal>();
     this.memberSearchersQueue         = new Queue <DirectorySearcher>();
     this.memberSearchersQueueOriginal = new Queue <DirectorySearcher>();
     this.groupsVisited.Add(groupDN);
     this.recursive        = recursive;
     this.storeCtx         = storeCtx;
     this.originalStoreCtx = storeCtx;
     this.members          = null;
     this.originalMembers  = null;
     this.membersEnum      = null;
     this.primaryGroupDN   = primaryGroupDN;
     if (primaryGroupDN == null)
     {
         this.returnedPrimaryGroup = true;
     }
     if (membersSearcher != null)
     {
         DirectorySearcher[] directorySearcherArray = membersSearcher;
         for (int i = 0; i < (int)directorySearcherArray.Length; i++)
         {
             DirectorySearcher directorySearcher = directorySearcherArray[i];
             this.memberSearchersQueue.Enqueue(directorySearcher);
             this.memberSearchersQueueOriginal.Enqueue(directorySearcher);
         }
     }
     this.currentMembersSearcher      = null;
     this.primaryGroupMembersSearcher = primaryGroupMembersSearcher;
     this.expansionMode         = ExpansionMode.ASQ;
     this.originalExpansionMode = this.expansionMode;
 }
 public void TestMode(ExpansionMode mode)
 {
     AddStep("create mod display", () =>
     {
         Child = new ModDisplay
         {
             Anchor        = Anchor.Centre,
             Origin        = Anchor.Centre,
             ExpansionMode = mode,
             Current       =
             {
                 Value = new Mod[]
                 {
                     new OsuModHardRock(),
                     new OsuModDoubleTime(),
                     new OsuModDifficultyAdjust(),
                     new OsuModEasy(),
                 }
             }
         };
     });
 }
Ejemplo n.º 5
0
        // TODO: TECH DEBT - A DUPLICATE OF SerializableSceneNodeExtensions >> GetExpandedGeometryIdsAndTransforms
        public static List <VimSceneNode> GetExpandedVimSceneNodes(
            VimScene scene,
            IReadOnlyList <SerializableSceneNode> nodes,
            ExpansionMode expansionMode)
        {
            // Start with a flat collection of tree nodes.
            var treeNodes = nodes.Select(n => new Tree <SerializableSceneNode> {
                Value = n
            }).ToArray();

            // Establish the parent/child hierarchy.
            foreach (var treeNode in treeNodes)
            {
                var parentIndex = treeNode.Value.Parent;
                if (parentIndex < 0 || parentIndex >= treeNodes.Length)
                {
                    continue;
                }

                treeNodes[parentIndex].AddChild(treeNode);
            }

            var result = new List <VimSceneNode>();

            switch (expansionMode)
            {
            case ExpansionMode.WorldSpaceGeometry:
                // DEPRECATED: This is a legacy stopgap to allow support for objectmodel version 2.
                // objectmodel version 3 and onward expects local space geometry.
                CollectVimSceneNodesFromWorldSpaceGeometry(scene, treeNodes, treeNodes, Matrix4x4.Identity, result);
                break;

            case ExpansionMode.LocalGeometry:
                CollectVimSceneNodesFromLocalSpaceGeometry(scene, treeNodes, treeNodes, Matrix4x4.Identity, result);
                break;
            }

            return(result);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Converts the list of nodes (containing instanced subtrees) into a flattened list of new objects.
        /// </summary>
        public static List <T> ExpandNodeInstanceSubtrees <N, T>(
            this IReadOnlyList <INodeInstance <N> > nodes,
            ExpansionMode expansionMode,
            CreateNewNodeFunc <N, T> createNewNodeFunc)
        {
            // Start with a flat collection of tree nodes.
            var treeNodes = nodes.Select(n => new Tree <INodeInstance <N> > {
                Value = n
            }).ToArray();

            // Establish the parent/child hierarchy.
            foreach (var treeNode in treeNodes)
            {
                var parentIndex = treeNode.Value.Parent;
                if (parentIndex < 0 || parentIndex >= treeNodes.Length)
                {
                    continue;
                }

                treeNodes[parentIndex].AddChild(treeNode);
            }

            var result = new List <T>();

            switch (expansionMode)
            {
            case ExpansionMode.WorldSpaceGeometry:
                // DEPRECATED: This is a legacy stopgap to allow support for objectmodel version 2.
                // objectmodel version 3 and onward expects local space geometry.
                CollectNodesFromWorldSpaceGeometry(treeNodes, treeNodes, Matrix4x4.Identity, createNewNodeFunc, result);
                break;

            case ExpansionMode.LocalGeometry:
                CollectNodesFromLocalSpaceGeometry(treeNodes, treeNodes, Matrix4x4.Identity, createNewNodeFunc, result);
                break;
            }

            return(result);
        }
Ejemplo n.º 7
0
        public static bool CustomDrawer_Enumlist(SettingHandle handle, Rect controlRect, string[] enumNames, float[] forcedWidths, ExpansionMode expansionMode, Color background)
        {
            drawBackground(controlRect, background);
            if (enumNames == null)
            {
                return(false);
            }
            if (enumNames.Length != forcedWidths.Length)
            {
                return(false);
            }

            if (expansionMode == ExpansionMode.Horizontal)
            {
                throw new NotImplementedException("Horizontal scrolling not yet implemented.");
            }

            float buttonWidth   = controlRect.width;
            int   forcedButtons = 0;

            for (int i = 0; i < forcedWidths.Length; i++)
            {
                if (forcedWidths[i] != 0f)
                {
                    forcedButtons++;
                    buttonWidth -= forcedWidths[i];
                }
            }
            if (forcedButtons != enumNames.Length)
            {
                buttonWidth /= (float)(enumNames.Length - forcedButtons);
            }

            float position = controlRect.position.x;

            bool changed = false;

            for (int i = 0; i < enumNames.Length; i++)
            {
                float width = (forcedWidths[i] == 0f) ? buttonWidth : forcedWidths[i];

                Rect buttonRect = new Rect(controlRect);
                buttonRect.position = new Vector2(position, buttonRect.position.y);
                buttonRect.width    = width;
                //buttonRect = buttonRect.ContractedBy(2f);
                bool interacted = false;

                bool selected = handle.StringValue.Equals(enumNames[i]);

                string label = (handle.EnumStringPrefix + enumNames[i]).Translate();

                if (expansionMode == ExpansionMode.Vertical)
                {
                    float height = Text.CalcHeight(label, width);
                    if (handle.CustomDrawerHeight < height)
                    {
                        handle.CustomDrawerHeight = height;
                    }
                }

                Color activeColor = GUI.color;
                if (selected)
                {
                    GUI.color = SelectedOptionColor;
                }

                interacted = Widgets.ButtonText(buttonRect, label);

                if (selected)
                {
                    GUI.color = activeColor;
                }

                if (interacted)
                {
                    handle.StringValue = enumNames[i];
                    changed            = true;
                }

                position += width;
            }
            return(changed);
        }
Ejemplo n.º 8
0
 internal override void Reset()
 {
     if (!this.atBeginning)
     {
         this.usersVisited.Clear();
         this.groupsToVisit.Clear();
         string item = this.groupsVisited[0];
         this.groupsVisited.Clear();
         this.groupsVisited.Add(item);
         this.members     = null;
         this.membersEnum = null;
         if (this.originalMembers != null)
         {
             this.membersQueue.Clear();
             foreach (IEnumerable enumerable in enumerable)
             {
                 this.membersQueue.Enqueue(enumerable);
                 IEnumerator enumerator = enumerable.GetEnumerator();
                 enumerator.Reset();
             }
         }
         this.expansionMode = this.originalExpansionMode;
         this.storeCtx      = this.originalStoreCtx;
         this.current       = null;
         if (this.primaryGroupDN != null)
         {
             this.returnedPrimaryGroup = false;
         }
         this.foreignMembersCurrentGroup.Clear();
         this.fakePrincipalMembers.Clear();
         if (this.foreignMembersToReturn != null)
         {
             this.foreignMembersToReturn.Clear();
         }
         this.currentForeignPrincipal = null;
         this.currentForeignDE        = null;
         this.foreignGroups.Clear();
         this.queryMembersResultEnumerator = null;
         if (this.queryMembersResults != null)
         {
             this.queryMembersResults.Dispose();
             this.queryMembersResults = null;
         }
         if (this.currentMembersSearcher != null)
         {
             this.currentMembersSearcher.Dispose();
             this.currentMembersSearcher = null;
         }
         this.memberSearchResultsEnumerator = null;
         if (this.memberSearchResults != null)
         {
             this.memberSearchResults.Dispose();
             this.memberSearchResults = null;
         }
         if (this.memberSearchersQueue != null)
         {
             foreach (DirectorySearcher directorySearcher in this.memberSearchersQueue)
             {
                 directorySearcher.Dispose();
             }
             this.memberSearchersQueue.Clear();
             if (this.memberSearchersQueueOriginal != null)
             {
                 foreach (DirectorySearcher directorySearcher1 in this.memberSearchersQueueOriginal)
                 {
                     this.memberSearchersQueue.Enqueue(directorySearcher1);
                 }
             }
         }
         this.atBeginning = true;
     }
 }
Ejemplo n.º 9
0
        private bool MoveNextForeign(ref bool outerNeedToRetry)
        {
            bool      flag;
            Principal principal;
            StoreCtx  queryCtx;
            bool      hasValue;

            outerNeedToRetry = false;
            do
            {
                flag = false;
                if (this.foreignMembersCurrentGroup.Count > 0)
                {
                    this.TranslateForeignMembers();
                }
                if (this.fakePrincipalMembers.Count <= 0)
                {
                    if (this.foreignMembersToReturn == null || this.foreignMembersToReturn.Length <= 0)
                    {
                        if (this.foreignGroups.Count <= 0)
                        {
                            return(false);
                        }
                        else
                        {
                            outerNeedToRetry = true;
                            if (this.foreignGroups[0].Context.ServerInformation.OsVersion != DomainControllerMode.Win2k)
                            {
                                GroupScope?groupScope = this.foreignGroups[0].GroupScope;
                                if (groupScope.GetValueOrDefault() != GroupScope.Global)
                                {
                                    hasValue = true;
                                }
                                else
                                {
                                    hasValue = !groupScope.HasValue;
                                }
                                if (!hasValue)
                                {
                                    this.expansionMode = ExpansionMode.ASQ;
                                    return(this.ExpandForeignGroupSearcher());
                                }
                            }
                            this.expansionMode = ExpansionMode.Enum;
                            return(this.ExpandForeignGroupEnumerator());
                        }
                    }
                    else
                    {
                        SidListEntry item    = this.foreignMembersToReturn[0];
                        SidType      sidType = Utils.ClassifySID(item.pSid);
                        if (sidType != SidType.RealObjectFakeDomain)
                        {
                            ContextOptions   aDDefaultContextOption = DefaultContextOptions.ADDefaultContextOption;
                            PrincipalContext context = SDSCache.Domain.GetContext(item.sidIssuerName, this.storeCtx.Credentials, aDDefaultContextOption);
                            queryCtx = context.QueryCtx;
                        }
                        else
                        {
                            queryCtx = this.storeCtx;
                        }
                        principal = queryCtx.FindPrincipalByIdentRef(typeof(Principal), "ms-sid", (new SecurityIdentifier(Utils.ConvertNativeSidToByteArray(this.foreignMembersToReturn[0].pSid), 0)).ToString(), DateTime.UtcNow);
                        if (principal != null)
                        {
                            this.foreignMembersToReturn.RemoveAt(0);
                        }
                        else
                        {
                            throw new PrincipalOperationException(StringResources.ADStoreCtxFailedFindCrossStoreTarget);
                        }
                    }
                }
                else
                {
                    principal = this.storeCtx.ConstructFakePrincipalFromSID((byte[])this.fakePrincipalMembers[0].Properties["objectSid"].Value);
                    this.fakePrincipalMembers[0].Dispose();
                    this.fakePrincipalMembers.RemoveAt(0);
                }
                if (principal as GroupPrincipal == null)
                {
                    DirectoryEntry underlyingObject = (DirectoryEntry)principal.GetUnderlyingObject();
                    this.storeCtx.LoadDirectoryEntryAttributes(underlyingObject);
                    if (this.usersVisited.ContainsKey(underlyingObject.Properties["distinguishedName"][0].ToString()))
                    {
                        principal.Dispose();
                        flag = true;
                    }
                    else
                    {
                        this.usersVisited.Add(underlyingObject.Properties["distinguishedName"][0].ToString(), true);
                        this.current                 = null;
                        this.currentForeignDE        = null;
                        this.currentForeignPrincipal = principal;
                        return(true);
                    }
                }
                else
                {
                    if (!principal.fakePrincipal)
                    {
                        string value = (string)((DirectoryEntry)principal.UnderlyingObject).Properties["distinguishedName"].Value;
                        if (this.groupsVisited.Contains(value) || this.groupsToVisit.Contains(value))
                        {
                            principal.Dispose();
                        }
                        else
                        {
                            this.foreignGroups.Add((GroupPrincipal)principal);
                        }
                    }
                    flag = true;
                }
            }while (flag);
            return(false);
        }
Ejemplo n.º 10
0
        internal override ResultSetBookmark BookmarkAndReset()
        {
            ADDNLinkedAttrSetBookmark aDDNLinkedAttrSetBookmark = new ADDNLinkedAttrSetBookmark();

            aDDNLinkedAttrSetBookmark.usersVisited = this.usersVisited;
            this.usersVisited = new Dictionary <string, bool>();
            aDDNLinkedAttrSetBookmark.groupsToVisit = this.groupsToVisit;
            this.groupsToVisit = new List <string>();
            string item = this.groupsVisited[0];

            aDDNLinkedAttrSetBookmark.groupsVisited = this.groupsVisited;
            this.groupsVisited = new List <string>();
            this.groupsVisited.Add(item);
            aDDNLinkedAttrSetBookmark.expansionMode = this.expansionMode;
            aDDNLinkedAttrSetBookmark.members       = this.members;
            aDDNLinkedAttrSetBookmark.membersEnum   = this.membersEnum;
            this.members     = null;
            this.membersEnum = null;
            if (this.membersQueue != null)
            {
                aDDNLinkedAttrSetBookmark.membersQueue = new Queue <IEnumerable>(this.membersQueue.Count);
                foreach (IEnumerable enumerable in this.membersQueue)
                {
                    aDDNLinkedAttrSetBookmark.membersQueue.Enqueue(enumerable);
                }
            }
            if (this.membersQueue != null)
            {
                this.membersQueue.Clear();
                if (this.originalMembers != null)
                {
                    foreach (IEnumerable enumerable1 in this.originalMembers)
                    {
                        this.membersQueue.Enqueue(enumerable1);
                        IEnumerator enumerator = enumerable1.GetEnumerator();
                        enumerator.Reset();
                    }
                }
            }
            aDDNLinkedAttrSetBookmark.storeCtx = this.storeCtx;
            this.expansionMode = this.originalExpansionMode;
            if (this.currentMembersSearcher != null)
            {
                this.currentMembersSearcher.Dispose();
                this.currentMembersSearcher = null;
            }
            this.storeCtx = this.originalStoreCtx;
            aDDNLinkedAttrSetBookmark.current = this.current;
            aDDNLinkedAttrSetBookmark.returnedPrimaryGroup = this.returnedPrimaryGroup;
            this.current = null;
            if (this.primaryGroupDN != null)
            {
                this.returnedPrimaryGroup = false;
            }
            aDDNLinkedAttrSetBookmark.foreignMembersCurrentGroup = this.foreignMembersCurrentGroup;
            aDDNLinkedAttrSetBookmark.fakePrincipalMembers       = this.fakePrincipalMembers;
            aDDNLinkedAttrSetBookmark.foreignMembersToReturn     = this.foreignMembersToReturn;
            aDDNLinkedAttrSetBookmark.currentForeignPrincipal    = this.currentForeignPrincipal;
            aDDNLinkedAttrSetBookmark.currentForeignDE           = this.currentForeignDE;
            this.foreignMembersCurrentGroup         = new List <DirectoryEntry>();
            this.fakePrincipalMembers               = new List <DirectoryEntry>();
            this.currentForeignDE                   = null;
            aDDNLinkedAttrSetBookmark.foreignGroups = this.foreignGroups;
            this.foreignGroups = new List <GroupPrincipal>();
            aDDNLinkedAttrSetBookmark.queryMembersResults          = this.queryMembersResults;
            aDDNLinkedAttrSetBookmark.queryMembersResultEnumerator = this.queryMembersResultEnumerator;
            this.queryMembersResults                                = null;
            this.queryMembersResultEnumerator                       = null;
            aDDNLinkedAttrSetBookmark.memberSearchResults           = this.memberSearchResults;
            aDDNLinkedAttrSetBookmark.memberSearchResultsEnumerator = this.memberSearchResultsEnumerator;
            this.memberSearchResults                                = null;
            this.memberSearchResultsEnumerator                      = null;
            if (this.memberSearchersQueue != null)
            {
                aDDNLinkedAttrSetBookmark.memberSearcherQueue = new Queue <DirectorySearcher>(this.memberSearchersQueue.Count);
                foreach (DirectorySearcher directorySearcher in this.memberSearchersQueue)
                {
                    aDDNLinkedAttrSetBookmark.memberSearcherQueue.Enqueue(directorySearcher);
                }
            }
            if (this.memberSearchersQueueOriginal != null)
            {
                this.memberSearchersQueue.Clear();
                foreach (DirectorySearcher directorySearcher1 in this.memberSearchersQueueOriginal)
                {
                    this.memberSearchersQueue.Enqueue(directorySearcher1);
                }
            }
            aDDNLinkedAttrSetBookmark.atBeginning = this.atBeginning;
            this.atBeginning = true;
            return(aDDNLinkedAttrSetBookmark);
        }
Ejemplo n.º 11
0
		internal override void RestoreBookmark(ResultSetBookmark bookmark)
		{
			ADDNLinkedAttrSetBookmark aDDNLinkedAttrSetBookmark = (ADDNLinkedAttrSetBookmark)bookmark;
			this.usersVisited = aDDNLinkedAttrSetBookmark.usersVisited;
			this.groupsToVisit = aDDNLinkedAttrSetBookmark.groupsToVisit;
			this.groupsVisited = aDDNLinkedAttrSetBookmark.groupsVisited;
			this.storeCtx = aDDNLinkedAttrSetBookmark.storeCtx;
			this.current = aDDNLinkedAttrSetBookmark.current;
			this.returnedPrimaryGroup = aDDNLinkedAttrSetBookmark.returnedPrimaryGroup;
			this.foreignMembersCurrentGroup = aDDNLinkedAttrSetBookmark.foreignMembersCurrentGroup;
			this.fakePrincipalMembers = aDDNLinkedAttrSetBookmark.fakePrincipalMembers;
			this.foreignMembersToReturn = aDDNLinkedAttrSetBookmark.foreignMembersToReturn;
			this.currentForeignPrincipal = aDDNLinkedAttrSetBookmark.currentForeignPrincipal;
			this.currentForeignDE = aDDNLinkedAttrSetBookmark.currentForeignDE;
			this.foreignGroups = aDDNLinkedAttrSetBookmark.foreignGroups;
			if (this.queryMembersResults != null)
			{
				this.queryMembersResults.Dispose();
			}
			this.queryMembersResults = aDDNLinkedAttrSetBookmark.queryMembersResults;
			this.queryMembersResultEnumerator = aDDNLinkedAttrSetBookmark.queryMembersResultEnumerator;
			this.memberSearchResults = aDDNLinkedAttrSetBookmark.memberSearchResults;
			this.memberSearchResultsEnumerator = aDDNLinkedAttrSetBookmark.memberSearchResultsEnumerator;
			this.atBeginning = aDDNLinkedAttrSetBookmark.atBeginning;
			this.expansionMode = aDDNLinkedAttrSetBookmark.expansionMode;
			this.members = aDDNLinkedAttrSetBookmark.members;
			this.membersEnum = aDDNLinkedAttrSetBookmark.membersEnum;
			if (this.membersQueue != null)
			{
				this.membersQueue.Clear();
				if (aDDNLinkedAttrSetBookmark.membersQueue != null)
				{
					foreach (IEnumerable enumerable in aDDNLinkedAttrSetBookmark.membersQueue)
					{
						this.membersQueue.Enqueue(enumerable);
					}
				}
			}
			if (this.memberSearchersQueue != null)
			{
				foreach (DirectorySearcher directorySearcher in this.memberSearchersQueue)
				{
					directorySearcher.Dispose();
				}
				this.memberSearchersQueue.Clear();
				if (aDDNLinkedAttrSetBookmark.memberSearcherQueue != null)
				{
					foreach (DirectorySearcher directorySearcher1 in aDDNLinkedAttrSetBookmark.memberSearcherQueue)
					{
						this.memberSearchersQueue.Enqueue(directorySearcher1);
					}
				}
			}
		}
Ejemplo n.º 12
0
		internal override void Reset()
		{
			if (!this.atBeginning)
			{
				this.usersVisited.Clear();
				this.groupsToVisit.Clear();
				string item = this.groupsVisited[0];
				this.groupsVisited.Clear();
				this.groupsVisited.Add(item);
				this.members = null;
				this.membersEnum = null;
				if (this.originalMembers != null)
				{
					this.membersQueue.Clear();
					foreach (IEnumerable enumerable in enumerable)
					{
						this.membersQueue.Enqueue(enumerable);
						IEnumerator enumerator = enumerable.GetEnumerator();
						enumerator.Reset();
					}
				}
				this.expansionMode = this.originalExpansionMode;
				this.storeCtx = this.originalStoreCtx;
				this.current = null;
				if (this.primaryGroupDN != null)
				{
					this.returnedPrimaryGroup = false;
				}
				this.foreignMembersCurrentGroup.Clear();
				this.fakePrincipalMembers.Clear();
				if (this.foreignMembersToReturn != null)
				{
					this.foreignMembersToReturn.Clear();
				}
				this.currentForeignPrincipal = null;
				this.currentForeignDE = null;
				this.foreignGroups.Clear();
				this.queryMembersResultEnumerator = null;
				if (this.queryMembersResults != null)
				{
					this.queryMembersResults.Dispose();
					this.queryMembersResults = null;
				}
				if (this.currentMembersSearcher != null)
				{
					this.currentMembersSearcher.Dispose();
					this.currentMembersSearcher = null;
				}
				this.memberSearchResultsEnumerator = null;
				if (this.memberSearchResults != null)
				{
					this.memberSearchResults.Dispose();
					this.memberSearchResults = null;
				}
				if (this.memberSearchersQueue != null)
				{
					foreach (DirectorySearcher directorySearcher in this.memberSearchersQueue)
					{
						directorySearcher.Dispose();
					}
					this.memberSearchersQueue.Clear();
					if (this.memberSearchersQueueOriginal != null)
					{
						foreach (DirectorySearcher directorySearcher1 in this.memberSearchersQueueOriginal)
						{
							this.memberSearchersQueue.Enqueue(directorySearcher1);
						}
					}
				}
				this.atBeginning = true;
			}
		}
Ejemplo n.º 13
0
		private bool MoveNextForeign(ref bool outerNeedToRetry)
		{
			bool flag;
			Principal principal;
			StoreCtx queryCtx;
			bool hasValue;
			outerNeedToRetry = false;
			do
			{
				flag = false;
				if (this.foreignMembersCurrentGroup.Count > 0)
				{
					this.TranslateForeignMembers();
				}
				if (this.fakePrincipalMembers.Count <= 0)
				{
					if (this.foreignMembersToReturn == null || this.foreignMembersToReturn.Length <= 0)
					{
						if (this.foreignGroups.Count <= 0)
						{
							return false;
						}
						else
						{
							outerNeedToRetry = true;
							if (this.foreignGroups[0].Context.ServerInformation.OsVersion != DomainControllerMode.Win2k)
							{
								GroupScope? groupScope = this.foreignGroups[0].GroupScope;
								if (groupScope.GetValueOrDefault() != GroupScope.Global)
								{
									hasValue = true;
								}
								else
								{
									hasValue = !groupScope.HasValue;
								}
								if (!hasValue)
								{
									this.expansionMode = ExpansionMode.ASQ;
									return this.ExpandForeignGroupSearcher();
								}
							}
							this.expansionMode = ExpansionMode.Enum;
							return this.ExpandForeignGroupEnumerator();
						}
					}
					else
					{
						SidListEntry item = this.foreignMembersToReturn[0];
						SidType sidType = Utils.ClassifySID(item.pSid);
						if (sidType != SidType.RealObjectFakeDomain)
						{
							ContextOptions aDDefaultContextOption = DefaultContextOptions.ADDefaultContextOption;
							PrincipalContext context = SDSCache.Domain.GetContext(item.sidIssuerName, this.storeCtx.Credentials, aDDefaultContextOption);
							queryCtx = context.QueryCtx;
						}
						else
						{
							queryCtx = this.storeCtx;
						}
						principal = queryCtx.FindPrincipalByIdentRef(typeof(Principal), "ms-sid", (new SecurityIdentifier(Utils.ConvertNativeSidToByteArray(this.foreignMembersToReturn[0].pSid), 0)).ToString(), DateTime.UtcNow);
						if (principal != null)
						{
							this.foreignMembersToReturn.RemoveAt(0);
						}
						else
						{
							throw new PrincipalOperationException(StringResources.ADStoreCtxFailedFindCrossStoreTarget);
						}
					}
				}
				else
				{
					principal = this.storeCtx.ConstructFakePrincipalFromSID((byte[])this.fakePrincipalMembers[0].Properties["objectSid"].Value);
					this.fakePrincipalMembers[0].Dispose();
					this.fakePrincipalMembers.RemoveAt(0);
				}
				if (principal as GroupPrincipal == null)
				{
					DirectoryEntry underlyingObject = (DirectoryEntry)principal.GetUnderlyingObject();
					this.storeCtx.LoadDirectoryEntryAttributes(underlyingObject);
					if (this.usersVisited.ContainsKey(underlyingObject.Properties["distinguishedName"][0].ToString()))
					{
						principal.Dispose();
						flag = true;
					}
					else
					{
						this.usersVisited.Add(underlyingObject.Properties["distinguishedName"][0].ToString(), true);
						this.current = null;
						this.currentForeignDE = null;
						this.currentForeignPrincipal = principal;
						return true;
					}
				}
				else
				{
					if (!principal.fakePrincipal)
					{
						string value = (string)((DirectoryEntry)principal.UnderlyingObject).Properties["distinguishedName"].Value;
						if (this.groupsVisited.Contains(value) || this.groupsToVisit.Contains(value))
						{
							principal.Dispose();
						}
						else
						{
							this.foreignGroups.Add((GroupPrincipal)principal);
						}
					}
					flag = true;
				}
			}
			while (flag);
			return false;
		}
Ejemplo n.º 14
0
		internal override ResultSetBookmark BookmarkAndReset()
		{
			ADDNLinkedAttrSetBookmark aDDNLinkedAttrSetBookmark = new ADDNLinkedAttrSetBookmark();
			aDDNLinkedAttrSetBookmark.usersVisited = this.usersVisited;
			this.usersVisited = new Dictionary<string, bool>();
			aDDNLinkedAttrSetBookmark.groupsToVisit = this.groupsToVisit;
			this.groupsToVisit = new List<string>();
			string item = this.groupsVisited[0];
			aDDNLinkedAttrSetBookmark.groupsVisited = this.groupsVisited;
			this.groupsVisited = new List<string>();
			this.groupsVisited.Add(item);
			aDDNLinkedAttrSetBookmark.expansionMode = this.expansionMode;
			aDDNLinkedAttrSetBookmark.members = this.members;
			aDDNLinkedAttrSetBookmark.membersEnum = this.membersEnum;
			this.members = null;
			this.membersEnum = null;
			if (this.membersQueue != null)
			{
				aDDNLinkedAttrSetBookmark.membersQueue = new Queue<IEnumerable>(this.membersQueue.Count);
				foreach (IEnumerable enumerable in this.membersQueue)
				{
					aDDNLinkedAttrSetBookmark.membersQueue.Enqueue(enumerable);
				}
			}
			if (this.membersQueue != null)
			{
				this.membersQueue.Clear();
				if (this.originalMembers != null)
				{
					foreach (IEnumerable enumerable1 in this.originalMembers)
					{
						this.membersQueue.Enqueue(enumerable1);
						IEnumerator enumerator = enumerable1.GetEnumerator();
						enumerator.Reset();
					}
				}
			}
			aDDNLinkedAttrSetBookmark.storeCtx = this.storeCtx;
			this.expansionMode = this.originalExpansionMode;
			if (this.currentMembersSearcher != null)
			{
				this.currentMembersSearcher.Dispose();
				this.currentMembersSearcher = null;
			}
			this.storeCtx = this.originalStoreCtx;
			aDDNLinkedAttrSetBookmark.current = this.current;
			aDDNLinkedAttrSetBookmark.returnedPrimaryGroup = this.returnedPrimaryGroup;
			this.current = null;
			if (this.primaryGroupDN != null)
			{
				this.returnedPrimaryGroup = false;
			}
			aDDNLinkedAttrSetBookmark.foreignMembersCurrentGroup = this.foreignMembersCurrentGroup;
			aDDNLinkedAttrSetBookmark.fakePrincipalMembers = this.fakePrincipalMembers;
			aDDNLinkedAttrSetBookmark.foreignMembersToReturn = this.foreignMembersToReturn;
			aDDNLinkedAttrSetBookmark.currentForeignPrincipal = this.currentForeignPrincipal;
			aDDNLinkedAttrSetBookmark.currentForeignDE = this.currentForeignDE;
			this.foreignMembersCurrentGroup = new List<DirectoryEntry>();
			this.fakePrincipalMembers = new List<DirectoryEntry>();
			this.currentForeignDE = null;
			aDDNLinkedAttrSetBookmark.foreignGroups = this.foreignGroups;
			this.foreignGroups = new List<GroupPrincipal>();
			aDDNLinkedAttrSetBookmark.queryMembersResults = this.queryMembersResults;
			aDDNLinkedAttrSetBookmark.queryMembersResultEnumerator = this.queryMembersResultEnumerator;
			this.queryMembersResults = null;
			this.queryMembersResultEnumerator = null;
			aDDNLinkedAttrSetBookmark.memberSearchResults = this.memberSearchResults;
			aDDNLinkedAttrSetBookmark.memberSearchResultsEnumerator = this.memberSearchResultsEnumerator;
			this.memberSearchResults = null;
			this.memberSearchResultsEnumerator = null;
			if (this.memberSearchersQueue != null)
			{
				aDDNLinkedAttrSetBookmark.memberSearcherQueue = new Queue<DirectorySearcher>(this.memberSearchersQueue.Count);
				foreach (DirectorySearcher directorySearcher in this.memberSearchersQueue)
				{
					aDDNLinkedAttrSetBookmark.memberSearcherQueue.Enqueue(directorySearcher);
				}
			}
			if (this.memberSearchersQueueOriginal != null)
			{
				this.memberSearchersQueue.Clear();
				foreach (DirectorySearcher directorySearcher1 in this.memberSearchersQueueOriginal)
				{
					this.memberSearchersQueue.Enqueue(directorySearcher1);
				}
			}
			aDDNLinkedAttrSetBookmark.atBeginning = this.atBeginning;
			this.atBeginning = true;
			return aDDNLinkedAttrSetBookmark;
		}
Ejemplo n.º 15
0
		internal ADDNLinkedAttrSet(string groupDN, DirectorySearcher[] membersSearcher, string primaryGroupDN, DirectorySearcher primaryGroupMembersSearcher, bool recursive, ADStoreCtx storeCtx)
		{
			this.pathLock = new object();
			this.usersVisited = new Dictionary<string, bool>();
			this.groupsVisited = new List<string>();
			this.groupsToVisit = new List<string>();
			this.membersQueue = new Queue<IEnumerable>();
			this.originalMembers = new Queue<IEnumerable>();
			this.atBeginning = true;
			this.foreignMembersCurrentGroup = new List<DirectoryEntry>();
			this.fakePrincipalMembers = new List<DirectoryEntry>();
			this.foreignGroups = new List<GroupPrincipal>();
			this.memberSearchersQueue = new Queue<DirectorySearcher>();
			this.memberSearchersQueueOriginal = new Queue<DirectorySearcher>();
			this.groupsVisited.Add(groupDN);
			this.recursive = recursive;
			this.storeCtx = storeCtx;
			this.originalStoreCtx = storeCtx;
			this.members = null;
			this.originalMembers = null;
			this.membersEnum = null;
			this.primaryGroupDN = primaryGroupDN;
			if (primaryGroupDN == null)
			{
				this.returnedPrimaryGroup = true;
			}
			if (membersSearcher != null)
			{
				DirectorySearcher[] directorySearcherArray = membersSearcher;
				for (int i = 0; i < (int)directorySearcherArray.Length; i++)
				{
					DirectorySearcher directorySearcher = directorySearcherArray[i];
					this.memberSearchersQueue.Enqueue(directorySearcher);
					this.memberSearchersQueueOriginal.Enqueue(directorySearcher);
				}
			}
			this.currentMembersSearcher = null;
			this.primaryGroupMembersSearcher = primaryGroupMembersSearcher;
			this.expansionMode = ExpansionMode.ASQ;
			this.originalExpansionMode = this.expansionMode;
		}