コード例 #1
0
        private void ValidateAndAddToFinalSourceMailboxes(string searchQuery, StorageMiniRecipient recipient, IList <ISource> finalSourceMailboxes, IList <string> versionSkippedMailboxes, IList <string> rbacDeniedMailboxes, Dictionary <MiniRecipient, MailboxInfo> crossPremiseMailboxes)
        {
            if (!this.ExecutingUserRunspace.IsCmdletAllowedInScope("New-MailboxSearch", new string[]
            {
                "EstimateOnly"
            }, recipient, ScopeLocation.RecipientWrite))
            {
                rbacDeniedMailboxes.Add(recipient.LegacyExchangeDN);
                return;
            }
            if (!this.ValidExchangeVersion(recipient))
            {
                versionSkippedMailboxes.Add(recipient.LegacyExchangeDN);
                return;
            }
            MailboxInfo   value = new MailboxInfo(recipient, MailboxType.Primary);
            SourceMailbox item;

            if ((recipient.RecipientTypeDetails & (RecipientTypeDetails)((ulong)-2147483648)) == (RecipientTypeDetails)((ulong)-2147483648) || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteRoomMailbox) == RecipientTypeDetails.RemoteRoomMailbox || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteEquipmentMailbox) == RecipientTypeDetails.RemoteEquipmentMailbox || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteTeamMailbox) == RecipientTypeDetails.RemoteTeamMailbox || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteSharedMailbox) == RecipientTypeDetails.RemoteSharedMailbox)
            {
                crossPremiseMailboxes.Add(recipient, value);
                item = new SourceMailbox(recipient.ExternalEmailAddress.AddressString, recipient.DisplayName, recipient.LegacyExchangeDN, BackEndLocator.GetBackEndWebServicesUrl(recipient), searchQuery);
                finalSourceMailboxes.Add(item);
                return;
            }
            item = new SourceMailbox(recipient.PrimarySmtpAddress.ToString(), recipient.DisplayName, recipient.LegacyExchangeDN, BackEndLocator.GetBackEndWebServicesUrl(recipient), searchQuery);
            ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromMiniRecipient(recipient, RemotingOptions.AllowCrossSite);

            if (exchangePrincipal.MailboxInfo.Location.ServerVersion < Server.E15MinVersion || exchangePrincipal.MailboxInfo.Location == null || string.IsNullOrEmpty(exchangePrincipal.MailboxInfo.Location.ServerFqdn))
            {
                versionSkippedMailboxes.Add(recipient.LegacyExchangeDN);
                return;
            }
            finalSourceMailboxes.Add(item);
        }
コード例 #2
0
        private IGenericADUser TranslateMiniRecipient(StorageMiniRecipient recipient)
        {
            IGenericADUser result = null;

            if (recipient != null)
            {
                result = new MiniRecipientGenericWrapper(recipient);
            }
            return(result);
        }
コード例 #3
0
        public IGenericADUser FindMiniRecipientByProxyAddress(IRecipientSession recipientSession, ProxyAddress proxyAddress, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient)
        {
            ArgumentValidator.ThrowIfNull("recipientSession", recipientSession);
            StorageMiniRecipient localMiniRecipient = null;

            this.DoAdCallAndTranslateExceptions(delegate
            {
                localMiniRecipient = recipientSession.FindMiniRecipientByProxyAddress <StorageMiniRecipient>(proxyAddress, miniRecipientProperties);
            }, "DirectoryAccessor::FindMiniRecipientByProxyAddress");
            miniRecipient = localMiniRecipient;
            return(this.TranslateMiniRecipient(miniRecipient));
        }
コード例 #4
0
 public ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient, RemotingOptions remotingOptions)
 {
     return(this.FromMiniRecipient(new MiniRecipientGenericWrapper(miniRecipient), remotingOptions));
 }
コード例 #5
0
 public ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient)
 {
     return(this.FromMiniRecipient(miniRecipient, RemotingOptions.LocalConnectionsOnly));
 }
コード例 #6
0
        public ExchangePrincipal FromLegacyDNByMiniRecipient(IRecipientSession recipientSession, string legacyDN, RemotingOptions remotingOptions, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient)
        {
            Util.ThrowOnNullArgument(recipientSession, "recipientSession");
            Util.ThrowOnNullArgument(legacyDN, "legacyDN");
            EnumValidator.ThrowIfInvalid <RemotingOptions>(remotingOptions, "remotingOptions");
            if (legacyDN.Length == 0)
            {
                throw new ArgumentException("legacyDN has zero length", "legacyDN");
            }
            Guid mbxGuid;

            legacyDN = this.TryToExtractArchiveOrAggregatedMailboxGuid(legacyDN, out mbxGuid);
            IGenericADUser genericADUser = this.directoryAccessor.FindMiniRecipientByProxyAddress(recipientSession, ProxyAddressPrefix.LegacyDN.GetProxyAddress(legacyDN, true), miniRecipientProperties, out miniRecipient);

            if (genericADUser == null)
            {
                throw new ObjectNotFoundException(ServerStrings.ADUserNotFound);
            }
            ADObjectId mdb;
            bool       asArchive             = this.UpdateArchiveStatus(mbxGuid, genericADUser, out mdb);
            Guid?      aggregatedMailboxGuid = null;

            if (genericADUser.AggregatedMailboxGuids != null)
            {
                aggregatedMailboxGuid = (genericADUser.AggregatedMailboxGuids.Any((Guid mailbox) => mailbox == mbxGuid) ? new Guid?(mbxGuid) : null);
            }
            IMailboxLocation  mailboxLocation   = new OnDemandMailboxLocation(() => new MailboxDatabaseLocation(this.databaseLocationProvider.GetLocationInfo(mdb.ObjectGuid, false, (remotingOptions & RemotingOptions.AllowCrossSite) == RemotingOptions.AllowCrossSite)));
            ExchangePrincipal exchangePrincipal = this.InternalFromMiniRecipient(genericADUser, mdb, mailboxLocation, remotingOptions, asArchive, aggregatedMailboxGuid);

            if (mbxGuid != Guid.Empty && !exchangePrincipal.MailboxInfo.IsAggregated && !exchangePrincipal.MailboxInfo.IsArchive)
            {
                throw new ObjectNotFoundException(ServerStrings.AggregatedMailboxNotFound(mbxGuid.ToString()));
            }
            return(exchangePrincipal);
        }
コード例 #7
0
 public ExchangePrincipal FromLegacyDNByMiniRecipient(ADSessionSettings adSettings, string legacyDN, RemotingOptions remotingOptions, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient)
 {
     Util.ThrowOnNullArgument(adSettings, "adSettings");
     return(this.FromLegacyDNByMiniRecipient(adSettings.CreateRecipientSession(null), legacyDN, remotingOptions, miniRecipientProperties, out miniRecipient));
 }
コード例 #8
0
 public static ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient, RemotingOptions remotingOptions)
 {
     return(ExchangePrincipal.ExchangePrincipalFactory.FromMiniRecipient(miniRecipient, remotingOptions));
 }
コード例 #9
0
 public static ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient)
 {
     return(ExchangePrincipal.ExchangePrincipalFactory.FromMiniRecipient(miniRecipient));
 }
コード例 #10
0
 public static ExchangePrincipal FromLegacyDNByMiniRecipient(IRecipientSession recipientSession, string legacyDN, RemotingOptions remotingOptions, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient)
 {
     return(ExchangePrincipal.ExchangePrincipalFactory.FromLegacyDNByMiniRecipient(recipientSession, legacyDN, remotingOptions, miniRecipientProperties, out miniRecipient));
 }
コード例 #11
0
        // Token: 0x060003B5 RID: 949 RVA: 0x00015440 File Offset: 0x00013640
        internal static ADObject CreateAndInitializeRecipientObject <TRecipientObject>(ADPropertyBag propertyBag, ADRawEntry dummyObject, IRecipientSession recipientSession) where TRecipientObject : IConfigurable, new()
        {
            ArgumentValidator.ThrowIfNull("propertyBag", propertyBag);
            ArgumentValidator.ThrowIfNull("dummyObject", dummyObject);
            MultiValuedProperty <string> multiValuedProperty = (MultiValuedProperty <string>)propertyBag[ADObjectSchema.ObjectClass];
            ADObject adobject;

            if (dummyObject is OWAMiniRecipient)
            {
                adobject = new OWAMiniRecipient();
            }
            else if (dummyObject is ActiveSyncMiniRecipient)
            {
                adobject = new ActiveSyncMiniRecipient();
            }
            else if (dummyObject is StorageMiniRecipient)
            {
                adobject = new StorageMiniRecipient();
            }
            else if (dummyObject is TransportMiniRecipient)
            {
                adobject = new TransportMiniRecipient();
            }
            else if (dummyObject is LoadBalancingMiniRecipient)
            {
                adobject = new LoadBalancingMiniRecipient();
            }
            else if (dummyObject is MiniRecipientWithTokenGroups)
            {
                adobject = new MiniRecipientWithTokenGroups();
            }
            else if (dummyObject is FrontEndMiniRecipient)
            {
                adobject = new FrontEndMiniRecipient();
            }
            else if (dummyObject is MiniRecipient)
            {
                adobject = new MiniRecipient();
            }
            else if (dummyObject is RemovedMailbox)
            {
                adobject = new RemovedMailbox();
            }
            else if (dummyObject is DeletedRecipient)
            {
                adobject = new DeletedRecipient();
            }
            else if (multiValuedProperty.Contains(ADComputerRecipient.MostDerivedClass))
            {
                adobject = new ADComputerRecipient();
            }
            else if (multiValuedProperty.Contains(ADUser.MostDerivedClass))
            {
                adobject = new ADUser();
            }
            else if (multiValuedProperty.Contains(ADContact.MostDerivedClass))
            {
                adobject = new ADContact();
            }
            else if (multiValuedProperty.Contains(ADGroup.MostDerivedClass))
            {
                adobject = new ADGroup();
            }
            else if (multiValuedProperty.Contains(ADDynamicGroup.MostDerivedClass))
            {
                adobject = new ADDynamicGroup();
            }
            else if (multiValuedProperty.Contains(ADPublicFolder.MostDerivedClass))
            {
                adobject = new ADPublicFolder();
            }
            else if (multiValuedProperty.Contains(ADSystemAttendantMailbox.MostDerivedClass))
            {
                adobject = new ADSystemAttendantMailbox();
            }
            else if (multiValuedProperty.Contains(ADSystemMailbox.MostDerivedClass))
            {
                adobject = new ADSystemMailbox();
            }
            else if (multiValuedProperty.Contains(ADPublicDatabase.MostDerivedClass))
            {
                adobject = new ADPublicDatabase();
            }
            else
            {
                if (!multiValuedProperty.Contains(ADMicrosoftExchangeRecipient.MostDerivedClass))
                {
                    string objectClass = string.Empty;
                    foreach (string text in multiValuedProperty)
                    {
                        objectClass = text;
                    }
                    ObjectValidationError error = new ObjectValidationError(DirectoryStrings.UnsupportedObjectClass(objectClass), (ADObjectId)propertyBag[ADObjectSchema.Id], string.Empty);
                    ADProviderPerf.UpdateProcessCounter(Counter.ProcessRateCriticalValidationFailures, UpdateType.Update, 1U);
                    Globals.LogEvent(DirectoryEventLogConstants.Tuple_DSC_EVENT_VALIDATION_FAILED_FCO_MODE_RECIPIENT, ((ADObjectId)propertyBag[ADObjectSchema.Id]).ToString(), new object[]
                    {
                        ((ADObjectId)propertyBag[ADObjectSchema.Id]).ToDNString()
                    });
                    throw new DataValidationException(error);
                }
                adobject = new ADMicrosoftExchangeRecipient();
            }
            adobject.m_Session   = recipientSession;
            adobject.propertyBag = propertyBag;
            adobject.Initialize();
            adobject.ResetChangeTracking(true);
            if (recipientSession != null)
            {
                adobject.SetIsReadOnly(recipientSession.ReadOnly);
            }
            ExTraceGlobals.ADReadDetailsTracer.TraceDebug <string, RecipientType>((long)((recipientSession != null) ? recipientSession.GetHashCode() : 0), "ADRecipientObjectSession::CreateObject - Got {0} as {1}", adobject.DistinguishedName, (RecipientType)adobject[ADRecipientSchema.RecipientType]);
            return(adobject);
        }
コード例 #12
0
 public MiniRecipientGenericWrapper(StorageMiniRecipient storageMiniRecipient)
 {
     ArgumentValidator.ThrowIfNull("storageMiniRecipient", storageMiniRecipient);
     this.storageMiniRecipient = storageMiniRecipient;
 }
コード例 #13
0
 public static SmtpAddress GetFederatedSmtpAddress(this StorageMiniRecipient storageMiniRecipient)
 {
     return(new MiniRecipientGenericWrapper(storageMiniRecipient).GetFederatedSmtpAddress(storageMiniRecipient.PrimarySmtpAddress));
 }
コード例 #14
0
        public IList <ISource> ValidateAndGetFinalSourceMailboxes(string searchQuery, IList <string> sourceMailboxes, IList <string> notFoundMailboxes, IList <string> versionSkippedMailboxes, IList <string> rbacDeniedMailboxes, IList <string> crossPremiseFailedMailboxes, IDictionary <Uri, string> crossPremiseUrls)
        {
            Util.ThrowIfNullOrEmpty(searchQuery, "Search query cannot be empty.");
            Util.ThrowIfNull(sourceMailboxes, "sourceMailboxes");
            Util.ThrowIfNull(notFoundMailboxes, "notFoundMailboxes");
            Util.ThrowIfNull(versionSkippedMailboxes, "versionSkippedMailboxes");
            Util.ThrowIfNull(rbacDeniedMailboxes, "rbacDeniedMailboxes");
            Util.ThrowIfNull(crossPremiseFailedMailboxes, "crossPremiseFailedMailboxes");
            Util.ThrowIfNull(crossPremiseUrls, "crossPremiseUrls");
            List <ISource> list = new List <ISource>();
            Dictionary <MiniRecipient, MailboxInfo> dictionary = new Dictionary <MiniRecipient, MailboxInfo>();
            int num = 0;

            if (sourceMailboxes.Count == 0)
            {
                AndFilter filter = new AndFilter(new QueryFilter[]
                {
                    new OrFilter(new QueryFilter[]
                    {
                        Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.UserMailbox),
                        Util.CreateRecipientTypeDetailsValueFilter((RecipientTypeDetails)((ulong)int.MinValue)),
                        Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteRoomMailbox),
                        Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteEquipmentMailbox),
                        Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteSharedMailbox),
                        Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteTeamMailbox)
                    }),
                    new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.ArbitrationMailbox)),
                    new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.MonitoringMailbox)),
                    new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.AuditLogMailbox)),
                    new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.MailboxPlan))
                });
                this.CheckRecipientSessionIsNotNull();
                ADPagedReader <StorageMiniRecipient> adpagedReader = this.recipientSession.FindPagedMiniRecipient <StorageMiniRecipient>(null, QueryScope.SubTree, filter, null, 1000, SearchMailboxCriteria.RecipientTypeDetailsProperty);
                using (IEnumerator <StorageMiniRecipient> enumerator = adpagedReader.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        StorageMiniRecipient storageMiniRecipient = enumerator.Current;
                        if (!storageMiniRecipient.LegacyExchangeDN.Equals(this.SearchObject.Target, StringComparison.OrdinalIgnoreCase))
                        {
                            if ((long)(++num) > (long)((ulong)this.MaxMailboxesToSearch))
                            {
                                throw new SearchTooManyMailboxesException((int)this.MaxMailboxesToSearch);
                            }
                            this.ValidateAndAddToFinalSourceMailboxes(searchQuery, storageMiniRecipient, list, versionSkippedMailboxes, rbacDeniedMailboxes, dictionary);
                        }
                    }
                    goto IL_2B6;
                }
            }
            foreach (ADObjectId adobjectId in this.ExpandGroupMembers(sourceMailboxes, this.DiscoverySystemMailboxUser.OrganizationId, notFoundMailboxes))
            {
                if ((this.SearchObject.Target == null || !adobjectId.Equals(this.TargetMailboxUser.Id)) && !adobjectId.Equals(this.DiscoverySystemMailboxUser.Id))
                {
                    this.CheckRecipientSessionIsNotNull();
                    StorageMiniRecipient storageMiniRecipient2 = this.recipientSession.ReadMiniRecipient <StorageMiniRecipient>(adobjectId, SearchMailboxCriteria.RecipientTypeDetailsProperty);
                    if (storageMiniRecipient2 != null)
                    {
                        if ((long)(++num) > (long)((ulong)this.MaxMailboxesToSearch))
                        {
                            throw new SearchTooManyMailboxesException((int)this.MaxMailboxesToSearch);
                        }
                        this.ValidateAndAddToFinalSourceMailboxes(searchQuery, storageMiniRecipient2, list, versionSkippedMailboxes, rbacDeniedMailboxes, dictionary);
                    }
                    else
                    {
                        Util.Tracer.TraceError <string>((long)this.GetHashCode(), "Unable to find mailbox: {0}", adobjectId.Name);
                    }
                }
            }
IL_2B6:
            if (dictionary.Count > 0)
            {
                string domain = dictionary.First <KeyValuePair <MiniRecipient, MailboxInfo> >().Value.GetDomain();
                Util.Tracer.TraceDebug <string>((long)this.GetHashCode(), "Before autodiscover for cross premise domain: {0}", domain);
                Uri uri = null;
                EndPointDiscoveryInfo endPointDiscoveryInfo;
                bool flag = RemoteDiscoveryEndPoint.TryGetDiscoveryEndPoint(this.SearchDataProvider.OrganizationId, domain, null, null, null, out uri, out endPointDiscoveryInfo);
                if (endPointDiscoveryInfo != null)
                {
                    ScenarioData.Current["IOC"] = ((int)endPointDiscoveryInfo.Status).ToString();
                    if (endPointDiscoveryInfo.Status != EndPointDiscoveryInfo.DiscoveryStatus.Success)
                    {
                        SearchEventLogger.Instance.LogSearchErrorEvent(ScenarioData.Current["SID"], endPointDiscoveryInfo.Message);
                    }
                }
                if (flag)
                {
                    Util.Tracer.TraceDebug <Uri>((long)this.GetHashCode(), "Auto discover Url : {1}", uri);
                    ICredentials       oauthCredentialsForAppToken = OAuthCredentials.GetOAuthCredentialsForAppToken(this.SearchDataProvider.OrganizationId, domain);
                    List <MailboxInfo> list2 = new List <MailboxInfo>(dictionary.Count);
                    foreach (KeyValuePair <MiniRecipient, MailboxInfo> keyValuePair in dictionary)
                    {
                        list2.Add(keyValuePair.Value);
                    }
                    IAutodiscoveryClient autodiscoveryClient = Factory.Current.CreateUserSettingAutoDiscoveryClient(list2, EwsWsSecurityUrl.FixForAnonymous(uri), oauthCredentialsForAppToken, new CallerInfo(true, null, null, string.Empty, null, null, null));
                    IAsyncResult         result = autodiscoveryClient.BeginAutodiscover(null, null);
                    Dictionary <GroupId, List <MailboxInfo> > dictionary2 = autodiscoveryClient.EndAutodiscover(result);
                    if (dictionary2 != null)
                    {
                        using (Dictionary <GroupId, List <MailboxInfo> > .Enumerator enumerator4 = dictionary2.GetEnumerator())
                        {
                            while (enumerator4.MoveNext())
                            {
                                KeyValuePair <GroupId, List <MailboxInfo> > keyValuePair2 = enumerator4.Current;
                                if (keyValuePair2.Key.GroupType == GroupType.CrossPremise)
                                {
                                    if (!crossPremiseUrls.ContainsKey(keyValuePair2.Key.Uri))
                                    {
                                        crossPremiseUrls.Add(keyValuePair2.Key.Uri, domain);
                                    }
                                    using (List <ISource> .Enumerator enumerator5 = list.GetEnumerator())
                                    {
                                        while (enumerator5.MoveNext())
                                        {
                                            ISource       source        = enumerator5.Current;
                                            SourceMailbox sourceMailbox = (SourceMailbox)source;
                                            foreach (MailboxInfo mailboxInfo in keyValuePair2.Value)
                                            {
                                                if (string.Compare(sourceMailbox.LegacyExchangeDN, mailboxInfo.LegacyExchangeDN, StringComparison.OrdinalIgnoreCase) == 0)
                                                {
                                                    sourceMailbox.ServiceEndpoint = keyValuePair2.Key.Uri;
                                                    break;
                                                }
                                            }
                                        }
                                        continue;
                                    }
                                }
                                if (keyValuePair2.Key.GroupType == GroupType.SkippedError)
                                {
                                    foreach (MailboxInfo mailboxInfo2 in keyValuePair2.Value)
                                    {
                                        Util.Tracer.TraceError <SmtpAddress>((long)this.GetHashCode(), "Auto discover skipped error for mailbox: {0}", mailboxInfo2.PrimarySmtpAddress);
                                        crossPremiseFailedMailboxes.Add(mailboxInfo2.LegacyExchangeDN);
                                    }
                                }
                            }
                            goto IL_5F2;
                        }
                    }
                    Util.Tracer.TraceError <string>((long)this.GetHashCode(), "Auto discover results is null for domain: {0}", domain);
                }
                else
                {
                    Util.Tracer.TraceError <string>((long)this.GetHashCode(), "Organization relationship is not set up for domain: {0}", domain);
                    foreach (KeyValuePair <MiniRecipient, MailboxInfo> keyValuePair3 in dictionary)
                    {
                        crossPremiseFailedMailboxes.Add(keyValuePair3.Value.LegacyExchangeDN);
                    }
                }
            }
IL_5F2:
            if (crossPremiseFailedMailboxes.Count > 0)
            {
                foreach (string b in crossPremiseFailedMailboxes)
                {
                    for (int i = list.Count - 1; i >= 0; i--)
                    {
                        ISource source2 = list[i];
                        if (source2.LegacyExchangeDN == b)
                        {
                            list.RemoveAt(i);
                        }
                    }
                }
            }
            return(list);
        }