コード例 #1
0
        private ExpandedGroup ExpandGroupInAD(object stateNotUsed, Tuple <PartitionId, OrganizationId, Guid> tuple)
        {
            PartitionId       item    = tuple.Item1;
            OrganizationId    item2   = tuple.Item2;
            Guid              item3   = tuple.Item3;
            IRecipientSession session = this.ReconstructRecipientSession(item, item2);

            IsMemberOfResolver <TGroupKeyType> .Tracer.TraceDebug <Guid>((long)this.GetHashCode(), "Expanding group '{0}' in AD", item3);

            int           count;
            ExpandedGroup result = this.adAdapter.ExpandGroup(session, new ADObjectId(item3), out count) ?? new ExpandedGroup();

            this.perfCounters.IncrementLDAPQueryCount(count);
            return(result);
        }
コード例 #2
0
        private bool IsMemberOf(IRecipientSession session, Guid recipientGuid, Guid groupGuid)
        {
            Queue <Guid> queue = new Queue <Guid>();

            queue.Enqueue(groupGuid);
            HashSet <Guid> hashSet = new HashSet <Guid>();
            bool           flag    = false;

            while (queue.Count > 0)
            {
                Guid guid = queue.Dequeue();
                if (!hashSet.Contains(guid))
                {
                    hashSet.Add(guid);
                    ExpandedGroup value = this.expandedGroups.GetValue(null, new Tuple <PartitionId, OrganizationId, Guid>(session.SessionSettings.PartitionId, session.SessionSettings.CurrentOrganizationId, guid));
                    if (value != null)
                    {
                        if (value.ContainsRecipient(recipientGuid))
                        {
                            flag = true;
                            break;
                        }
                        foreach (Guid guid2 in value.MemberGroups)
                        {
                            if (guid2 == recipientGuid)
                            {
                                flag = true;
                                break;
                            }
                            queue.Enqueue(guid2);
                        }
                        if (flag)
                        {
                            break;
                        }
                    }
                }
            }
            IsMemberOfResolver <TGroupKeyType> .Tracer.TraceDebug <Guid, Guid, bool>((long)this.GetHashCode(), "IsMemberOf result for recipientGuid='{0}', groupGuid='{1}' is '{2}'", recipientGuid, groupGuid, flag);

            return(flag);
        }
コード例 #3
0
        public virtual ExpandedGroup ExpandGroup(IRecipientSession session, ADObjectId groupId, out int ldapQueries)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }
            ExpandedGroup expandedGroup = null;
            int           numQueries    = 0;

            this.RunADOperation(groupId, delegate
            {
                IADDistributionList iaddistributionList = session.Read(groupId) as IADDistributionList;
                numQueries++;
                if (iaddistributionList != null)
                {
                    if (this.disableDynamicGroups && iaddistributionList is ADDynamicGroup)
                    {
                        expandedGroup = null;
                        return;
                    }
                    List <Guid> list  = new List <Guid>();
                    List <Guid> list2 = new List <Guid>();
                    ADPagedReader <ADRawEntry> adpagedReader = iaddistributionList.Expand(1000, IsMemberOfResolverADAdapter <GroupKeyType> .properties);
                    numQueries++;
                    foreach (ADRawEntry adrawEntry in adpagedReader)
                    {
                        Microsoft.Exchange.Data.Directory.Recipient.RecipientType recipientType = (Microsoft.Exchange.Data.Directory.Recipient.RecipientType)adrawEntry[ADRecipientSchema.RecipientType];
                        if (this.IsGroup(recipientType))
                        {
                            list.Add(adrawEntry.Id.ObjectGuid);
                        }
                        else
                        {
                            list2.Add(adrawEntry.Id.ObjectGuid);
                        }
                    }
                    expandedGroup = this.CreateExpandedGroup((ADObject)iaddistributionList, list, list2);
                }
            });
            ldapQueries = numQueries;
            return(expandedGroup);
        }