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); }
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); }
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); }