示例#1
0
        protected override IConfigDataProvider CreateSession()
        {
            this.ResolveCurrentOrganization();
            ADUser discoveryMailbox = MailboxDataProvider.GetDiscoveryMailbox(base.TenantGlobalCatalogSession);

            return(new UnifiedPolicySyncNotificationDataProvider(base.SessionSettings, discoveryMailbox, "Remove-CompliancePolicySyncNotification"));
        }
示例#2
0
        public static ADUser GetTenantArbitrationMailbox(OrganizationId organizationId)
        {
            ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(ADSystemConfigurationSession.GetRootOrgContainerIdForLocalForest(), organizationId, null, false);
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 287, "GetTenantArbitrationMailbox", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\AdminAuditLog\\AdminAuditLogHelper.cs");

            return(MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession));
        }
        protected override IConfigurable PrepareDataObject()
        {
            string text = this.Identity.ToString();
            MailboxDataProvider mailboxDataProvider = Utils.GetMailboxDataProvider(base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, new Task.TaskErrorLoggingDelegate(base.WriteError));
            SearchObject        searchObject;

            if (Utils.IsLegacySearchObjectIdentity(text))
            {
                MailboxDiscoverySearch mailboxDiscoverySearch = ((DiscoverySearchDataProvider)base.DataSession).FindByLegacySearchObjectIdentity(text);
                if (mailboxDiscoverySearch != null)
                {
                    return(mailboxDiscoverySearch);
                }
                searchObject = (SearchObject)base.GetDataObject <SearchObject>(new SearchObjectIdParameter(text), mailboxDataProvider, this.RootId, base.OptionalIdentityData, new LocalizedString?(Strings.ErrorManagementObjectNotFound(text)), new LocalizedString?(Strings.ErrorManagementObjectAmbiguous(text)));
            }
            else
            {
                searchObject = Utils.GetE14SearchObjectByName(text, mailboxDataProvider);
            }
            if (searchObject == null)
            {
                return(base.PrepareDataObject());
            }
            if (!this.Force && !base.ShouldContinue(Strings.EditWillUpgradeSearchObject))
            {
                base.WriteError(new MailboxSearchTaskException(Strings.CannotEditLegacySearchObjectWithoutUpgrade(searchObject.Name)), ErrorCategory.InvalidArgument, text);
            }
            return(Utils.UpgradeLegacySearchObject(searchObject, mailboxDataProvider, (DiscoverySearchDataProvider)base.DataSession, new Task.TaskErrorLoggingDelegate(base.WriteError), new Action <LocalizedString>(this.WriteWarning)));
        }
示例#4
0
        public static ADUser GetSystemMailbox(IRecipientSession recipientSession, Task task)
        {
            if (recipientSession == null)
            {
                throw new ArgumentNullException("recipientSession");
            }
            if (task == null)
            {
                throw new ArgumentNullException("task");
            }
            ADUser result = null;

            try
            {
                result = MailboxDataProvider.GetDiscoveryMailbox(recipientSession);
            }
            catch (ObjectNotFoundException exception)
            {
                task.WriteError(exception, ErrorCategory.ReadError, null);
            }
            catch (NonUniqueRecipientException exception2)
            {
                task.WriteError(exception2, ErrorCategory.ReadError, null);
            }
            return(result);
        }
示例#5
0
        internal static MailboxSession GetMailboxSession(OrganizationId organizationId, string action)
        {
            ADSessionSettings sessionSettings = organizationId.ToADSessionSettings();
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.FullyConsistent, sessionSettings, 99, "GetMailboxSession", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\AuditLogSearch\\AuditLogSearchDataProvider.cs");
            ADUser            discoveryMailbox = MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession);

            return(AuditLogSearchDataProviderBase.GetMailboxSession(discoveryMailbox, action));
        }
        public IEnumerable <T> GetObjects <T>(ObjectId rootId, IConfigDataProvider session, OptionalIdentityData optionalData, out LocalizedString?notFoundReason) where T : IConfigurable, new()
        {
            MailboxDataProvider mailboxDataProvider = (MailboxDataProvider)session;

            if (mailboxDataProvider == null)
            {
                throw new ArgumentNullException("session");
            }
            if (this.objectIdentifier == null)
            {
                QueryFilter queryFilter = new TextFilter(SearchObjectBaseSchema.Name, this.identifier, this.IsFullyQualified ? MatchOptions.FullString : MatchOptions.Prefix, MatchFlags.IgnoreCase);
                if (this.IsFullyQualified)
                {
                    notFoundReason = new LocalizedString?(Strings.ErrorManagementObjectNotFound(this.ToString()));
                }
                else
                {
                    notFoundReason = null;
                }
                if (optionalData != null && optionalData.AdditionalFilter != null)
                {
                    queryFilter = QueryFilter.AndTogether(new QueryFilter[]
                    {
                        queryFilter,
                        optionalData.AdditionalFilter
                    });
                }
                return(mailboxDataProvider.FindPaged <T>(queryFilter, rootId, false, null, 0));
            }
            notFoundReason = new LocalizedString?(Strings.ErrorManagementObjectNotFound(this.ToString()));
            SearchObjectId identity = this.objectIdentifier;

            if (optionalData != null && optionalData.AdditionalFilter != null)
            {
                throw new NotSupportedException("Supplying Additional Filters and an ObjectIdentifier is not currently supported by this IdParameter.");
            }
            int num = this.identifier.IndexOf('\\');

            if (num == -1 || string.IsNullOrEmpty(this.identifier.Substring(0, num)))
            {
                SearchObjectBase searchObjectBase = ((default(T) == null) ? Activator.CreateInstance <T>() : default(T)) as SearchObjectBase;
                if (searchObjectBase == null)
                {
                    throw new ArgumentException("The generic type must be a SearchObjectBase");
                }
                identity = new SearchObjectId(identity, searchObjectBase.ObjectType);
            }
            T t = (T)((object)mailboxDataProvider.Read <T>(identity));

            if (t != null)
            {
                return(new T[]
                {
                    t
                });
            }
            return(new T[0]);
        }
            protected override TenantInfoProvider CreateOnCacheMiss(Guid key, ref bool shouldAdd)
            {
                OrganizationId    scopingOrganizationId           = OrganizationId.FromExternalDirectoryOrganizationId(key);
                ADSessionSettings adsessionSettings               = ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(scopingOrganizationId);
                IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(null, true, ConsistencyMode.PartiallyConsistent, adsessionSettings, 99, "CreateOnCacheMiss", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\UnifiedPolicy\\TenantInfoProviderFactory.cs");
                ADUser            discoveryMailbox     = MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession);
                ExchangePrincipal syncMailboxPrincipal = ExchangePrincipal.FromADUser(adsessionSettings, discoveryMailbox);

                return(new TenantInfoProvider(syncMailboxPrincipal));
            }
示例#8
0
        internal static SearchObject GetE14SearchObjectByName(string name, MailboxDataProvider e14DataProvider)
        {
            QueryFilter filter = new TextFilter(SearchObjectBaseSchema.Name, name, MatchOptions.FullString, MatchFlags.IgnoreCase);

            IConfigurable[] array = e14DataProvider.Find <SearchObject>(filter, null, false, null);
            if (array == null || array.Length <= 0)
            {
                return(null);
            }
            return((SearchObject)array[0]);
        }
示例#9
0
        public static ADRecipient GetSystemMailbox(ADObject dataObject, IConfigurationSession configSession)
        {
            if (dataObject == null)
            {
                throw new ArgumentNullException("dataObject");
            }
            if (configSession == null)
            {
                throw new ArgumentNullException("configSession");
            }
            IRecipientSession recipientSessionScopedToOrganization = Utility.GetRecipientSessionScopedToOrganization(dataObject.OrganizationId, false);
            ADRecipient       discoveryMailbox = MailboxDataProvider.GetDiscoveryMailbox(recipientSessionScopedToOrganization);

            ExAssert.RetailAssert(dataObject.OrganizationId.Equals(discoveryMailbox.OrganizationId), "The organization ids of the data object and system mailbox do not match.");
            return(discoveryMailbox);
        }
示例#10
0
        internal static MailboxDataProvider CreateMailboxDataProvider(IRecipientSession recipientSession, Task.TaskErrorLoggingDelegate writeErrorDelegate)
        {
            MailboxDataProvider result = null;

            try
            {
                result = new MailboxDataProvider(recipientSession);
            }
            catch (ObjectNotFoundException ex)
            {
                writeErrorDelegate(new MailboxSearchTaskException(ex.LocalizedString), ErrorCategory.ObjectNotFound, null);
            }
            catch (NonUniqueRecipientException ex2)
            {
                writeErrorDelegate(new MailboxSearchTaskException(ex2.LocalizedString), ErrorCategory.NotSpecified, null);
            }
            return(result);
        }
示例#11
0
        internal static MailboxDataProvider GetMailboxDataProvider(ADObjectId rootOrg, OrganizationId currentOrg, OrganizationId executingOrg, Task.TaskErrorLoggingDelegate writeErrorDelegate)
        {
            MailboxDataProvider result = null;

            try
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(rootOrg, currentOrg, executingOrg, true);
                IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 694, "GetMailboxDataProvider", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Search\\Utils.cs");
                result = new MailboxDataProvider(MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession), tenantOrRootOrgRecipientSession);
            }
            catch (ObjectNotFoundException exception)
            {
                writeErrorDelegate(exception, ErrorCategory.WriteError, null);
            }
            catch (NonUniqueRecipientException exception2)
            {
                writeErrorDelegate(exception2, ErrorCategory.WriteError, null);
            }
            return(result);
        }
示例#12
0
        // Token: 0x06000143 RID: 323 RVA: 0x000087B8 File Offset: 0x000069B8
        private ExchangePrincipal GetTenantMailbox(OrganizationId organizationId)
        {
            if (!(organizationId == null) && !(organizationId == OrganizationId.ForestWideOrgId))
            {
                string name = organizationId.OrganizationalUnit.Name;
            }
            ExchangePrincipal result          = null;
            ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(ADSystemConfigurationSession.GetRootOrgContainerIdForLocalForest(), organizationId, null, false);
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.PartiallyConsistent, sessionSettings, 513, "GetTenantMailbox", "f:\\15.00.1497\\sources\\dev\\MailboxAssistants\\src\\assistants\\elc\\AdDataCache.cs");

            try
            {
                result = ExchangePrincipal.FromADUser(MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession), null);
            }
            catch (ObjectNotFoundException ex)
            {
                throw new DataSourceOperationException(ex.LocalizedString, ex);
            }
            return(result);
        }
        public static ExchangePrincipal GetTenantMailbox(OrganizationId organizationId)
        {
            string            organizationKey   = TenantStoreDataProvider.GetOrganizationKey(organizationId);
            ExchangePrincipal exchangePrincipal = null;

            if (!TenantStoreDataProvider.exchangePrincipalCache.TryGetValue(organizationKey, out exchangePrincipal))
            {
                ADSessionSettings sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopes(ADSystemConfigurationSession.GetRootOrgContainerIdForLocalForest(), organizationId, null, false);
                IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 67, "GetTenantMailbox", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Management\\EwsDriver\\TenantStoreDataProvider.cs");
                try
                {
                    exchangePrincipal = ExchangePrincipal.FromADUser(MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession), null);
                }
                catch (ObjectNotFoundException ex)
                {
                    throw new DataSourceOperationException(ex.LocalizedString, ex);
                }
                TenantStoreDataProvider.exchangePrincipalCache.Add(organizationKey, exchangePrincipal);
            }
            return(exchangePrincipal);
        }
        protected override void InternalProcessRecord()
        {
            ADUser                discoveryMailbox  = MailboxDataProvider.GetDiscoveryMailbox((IRecipientSession)base.DataSession);
            ExchangePrincipal     exchangePrincipal = ExchangePrincipal.FromADUser(discoveryMailbox, null);
            List <SyncChangeInfo> list = null;

            if (this.SyncChangeInfos != null && this.SyncChangeInfos.Count > 0)
            {
                list = new List <SyncChangeInfo>();
                foreach (string input in this.SyncChangeInfos)
                {
                    list.Add(new SyncChangeInfo(input));
                }
            }
            SyncNotificationResult syncNotificationResult = RpcClientWrapper.NotifySyncChanges(this.Identity, exchangePrincipal.MailboxInfo.Location.ServerFqdn, new Guid(this.organizationId.ToExternalDirectoryOrganizationId()), this.SyncSvcUrl, this.FullSync, this.SyncNow, (list != null) ? list.ToArray() : null);

            if (!syncNotificationResult.Success)
            {
                base.WriteError(syncNotificationResult.Error, ErrorCategory.WriteError, syncNotificationResult);
            }
            base.WriteObject((UnifiedPolicySyncNotification)syncNotificationResult.ResultObject);
        }
示例#15
0
        internal static void CheckDiscoveryBudget(ADUser arbitrationMailbox, IRecipientSession recipientSession)
        {
            uint discoveryMaxConcurrency = SearchUtils.GetDiscoveryMaxConcurrency(recipientSession);

            if (discoveryMaxConcurrency == 0U)
            {
                throw new SearchDisabledException();
            }
            MailboxDataProvider        mailboxDataProvider = new MailboxDataProvider(arbitrationMailbox, recipientSession);
            IEnumerable <SearchObject> enumerable          = mailboxDataProvider.FindPaged <SearchObject>(null, null, false, null, 0);

            if (enumerable != null)
            {
                Dictionary <ADObjectId, ADUser> dictionary  = new Dictionary <ADObjectId, ADUser>();
                Dictionary <ADObjectId, string> dictionary2 = new Dictionary <ADObjectId, string>();
                ADUser       aduser       = null;
                string       text         = null;
                SearchStatus searchStatus = null;
                uint         num          = 0U;
                try
                {
                    foreach (SearchObject searchObject in from so in enumerable
                             where (so.SearchStatus != null && so.SearchStatus.Status == SearchState.InProgress) || (so.SearchStatus != null && so.SearchStatus.Status == SearchState.EstimateInProgress)
                             select so)
                    {
                        if (!dictionary.TryGetValue(searchObject.TargetMailbox, out aduser))
                        {
                            aduser = (ADUser)recipientSession.Read(searchObject.TargetMailbox);
                            if (aduser != null)
                            {
                                dictionary.Add(searchObject.TargetMailbox, aduser);
                            }
                        }
                        if (aduser != null && !dictionary2.TryGetValue(searchObject.TargetMailbox, out text))
                        {
                            text = ExchangePrincipal.FromADUser(recipientSession.SessionSettings, aduser, RemotingOptions.AllowCrossSite).MailboxInfo.Location.ServerFqdn;
                            if (!string.IsNullOrEmpty(text))
                            {
                                dictionary2.Add(searchObject.TargetMailbox, text);
                            }
                        }
                        if (aduser != null && !string.IsNullOrEmpty(text))
                        {
                            SearchId searchId = new SearchId(mailboxDataProvider.ADUser.Id.DistinguishedName, mailboxDataProvider.ADUser.Id.ObjectGuid, searchObject.Id.Guid.ToString());
                            try
                            {
                                using (MailboxSearchClient mailboxSearchClient = new MailboxSearchClient(text))
                                {
                                    searchStatus = mailboxSearchClient.GetStatus(searchId);
                                }
                            }
                            catch (RpcConnectionException arg)
                            {
                                SearchUtils.Tracer.TraceError <RpcConnectionException>(0L, "SearchUtils.CheckDiscoveryBudget error querying for status: {0}", arg);
                                continue;
                            }
                            catch (RpcException arg2)
                            {
                                SearchUtils.Tracer.TraceError <RpcException>(0L, "SearchUtils.CheckDiscoveryBudget error querying for status: {0}", arg2);
                                continue;
                            }
                            catch (SearchServerException arg3)
                            {
                                SearchUtils.Tracer.TraceError <SearchServerException>(0L, "SearchUtils.CheckDiscoveryBudget error querying for status: {0}", arg3);
                                continue;
                            }
                            if (searchStatus != null && (searchStatus.Status == 0 || searchStatus.Status == 6))
                            {
                                num += 1U;
                            }
                        }
                        if (num >= discoveryMaxConcurrency)
                        {
                            throw new SearchOverBudgetException((int)discoveryMaxConcurrency);
                        }
                    }
                }
                finally
                {
                    dictionary.Clear();
                    dictionary2.Clear();
                }
            }
        }
示例#16
0
 protected override void InternalProcessRecord()
 {
     if (this.InPlaceHoldIdentity != null)
     {
         MailboxDiscoverySearch mailboxDiscoverySearch = ((DiscoverySearchDataProvider)base.DataSession).FindByInPlaceHoldIdentity(this.InPlaceHoldIdentity);
         if (mailboxDiscoverySearch == null)
         {
             base.WriteError(new ManagementObjectNotFoundException(Strings.MailboxSearchObjectWithHoldIdentityNotFound(this.InPlaceHoldIdentity)), ExchangeErrorCategory.Context, null);
         }
         this.WriteResult(mailboxDiscoverySearch);
         return;
     }
     if (this.Identity != null)
     {
         string text = this.Identity.ToString();
         MailboxDataProvider mailboxDataProvider = Utils.GetMailboxDataProvider(base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, new Task.TaskErrorLoggingDelegate(base.WriteError));
         if (Utils.IsLegacySearchObjectIdentity(text))
         {
             MailboxDiscoverySearch mailboxDiscoverySearch2 = ((DiscoverySearchDataProvider)base.DataSession).FindByLegacySearchObjectIdentity(text);
             if (mailboxDiscoverySearch2 != null)
             {
                 this.WriteResult(mailboxDiscoverySearch2);
                 return;
             }
             LocalizedString?           localizedString;
             IEnumerable <SearchObject> dataObjects = base.GetDataObjects <SearchObject>(new SearchObjectIdParameter(text), mailboxDataProvider, this.RootId, base.OptionalIdentityData, out localizedString);
             foreach (SearchObject searchObject in dataObjects)
             {
                 base.WriteResult(new MailboxSearchObject(searchObject, searchObject.SearchStatus ?? new SearchStatus()));
             }
             if (!base.HasErrors && base.WriteObjectCount == 0U)
             {
                 base.WriteError(new ManagementObjectNotFoundException(localizedString ?? base.GetErrorMessageObjectNotFound(text, null, null)), (ErrorCategory)1003, null);
                 return;
             }
         }
         else
         {
             SearchObject e14SearchObjectByName = Utils.GetE14SearchObjectByName(this.Identity.ToString(), mailboxDataProvider);
             if (e14SearchObjectByName == null)
             {
                 base.InternalProcessRecord();
                 return;
             }
             base.WriteResult(new MailboxSearchObject(e14SearchObjectByName, e14SearchObjectByName.SearchStatus ?? new SearchStatus()));
             return;
         }
     }
     else
     {
         base.InternalProcessRecord();
         MailboxDataProvider mailboxDataProvider2 = Utils.GetMailboxDataProvider(base.RootOrgContainerId, base.CurrentOrganizationId, base.ExecutingUserOrganizationId, new Task.TaskErrorLoggingDelegate(base.WriteError));
         try
         {
             foreach (SearchObject searchObject2 in mailboxDataProvider2.FindPaged <SearchObject>(null, null, true, null, (int)(this.ResultSize.IsUnlimited ? 0U : (this.ResultSize.Value - base.WriteObjectCount))))
             {
                 base.WriteResult(new MailboxSearchObject(searchObject2, searchObject2.SearchStatus ?? new SearchStatus()));
             }
         }
         catch (TenantAccessBlockedException exception)
         {
             base.WriteError(exception, (ErrorCategory)1003, null);
         }
     }
 }
示例#17
0
        internal static MailboxDiscoverySearch UpgradeLegacySearchObject(SearchObject searchObject, MailboxDataProvider e14DataProvider, DiscoverySearchDataProvider e15DataProvider, Task.TaskErrorLoggingDelegate writeErrorDelegate, Action <LocalizedString> writeWarningDelegate)
        {
            MailboxDiscoverySearch mailboxDiscoverySearch = new MailboxDiscoverySearch();

            if (e15DataProvider.Find <MailboxDiscoverySearch>(searchObject.Name) != null)
            {
                mailboxDiscoverySearch.Name = searchObject.Name + Guid.NewGuid().ToString();
            }
            else
            {
                mailboxDiscoverySearch.Name = searchObject.Name;
            }
            mailboxDiscoverySearch.Senders     = searchObject.Senders;
            mailboxDiscoverySearch.CreatedBy   = searchObject.CreatedByEx;
            mailboxDiscoverySearch.Description = Strings.UpgradedSearchObjectDescription;
            mailboxDiscoverySearch.EndDate     = searchObject.EndDate;
            mailboxDiscoverySearch.StartDate   = searchObject.StartDate;
            mailboxDiscoverySearch.ExcludeDuplicateMessages = searchObject.ExcludeDuplicateMessages;
            mailboxDiscoverySearch.StatisticsOnly           = searchObject.EstimateOnly;
            mailboxDiscoverySearch.IncludeUnsearchableItems = searchObject.IncludeUnsearchableItems;
            mailboxDiscoverySearch.IncludeKeywordStatistics = searchObject.IncludeKeywordStatistics;
            mailboxDiscoverySearch.Language                   = searchObject.Language.ToString();
            mailboxDiscoverySearch.LogLevel                   = searchObject.LogLevel;
            mailboxDiscoverySearch.ManagedBy                  = searchObject.ManagedBy;
            mailboxDiscoverySearch.MessageTypes               = searchObject.MessageTypes;
            mailboxDiscoverySearch.Query                      = Utils.ConvertAqsToKql(searchObject.SearchQuery, searchObject.Language);
            mailboxDiscoverySearch.Recipients                 = searchObject.Recipients;
            mailboxDiscoverySearch.StatusMailRecipients       = searchObject.StatusMailRecipients;
            mailboxDiscoverySearch.ManagedByOrganization      = e15DataProvider.OrganizationId.ToString();
            mailboxDiscoverySearch.LegacySearchObjectIdentity = searchObject.Identity.ToString();
            if (searchObject.SourceMailboxes != null && searchObject.SourceMailboxes.Count > 0)
            {
                MultiValuedProperty <string> multiValuedProperty = new MultiValuedProperty <string>();
                Result <ADRawEntry>[]        first = e14DataProvider.RecipientSession.ReadMultiple(searchObject.SourceMailboxes.ToArray(), new PropertyDefinition[]
                {
                    ADRecipientSchema.DisplayName,
                    ADRecipientSchema.LegacyExchangeDN,
                    ADObjectSchema.ExchangeVersion
                });
                foreach (ADRawEntry adrawEntry in from x in first
                         select x.Data)
                {
                    if (adrawEntry != null)
                    {
                        if (((ExchangeObjectVersion)adrawEntry[ADObjectSchema.ExchangeVersion]).IsOlderThan(ExchangeObjectVersion.Exchange2012))
                        {
                            writeErrorDelegate(new MailboxSearchTaskException(Strings.SourceMailboxMustBeE15OrLater((string)adrawEntry[ADRecipientSchema.DisplayName])), ErrorCategory.InvalidArgument, null);
                        }
                        else
                        {
                            multiValuedProperty.Add((string)adrawEntry[ADRecipientSchema.LegacyExchangeDN]);
                        }
                    }
                }
                if (multiValuedProperty.Count > 0)
                {
                    mailboxDiscoverySearch.Sources = multiValuedProperty;
                }
            }
            ADUser aduser = null;

            if (searchObject.TargetMailbox != null)
            {
                aduser = (ADUser)e14DataProvider.RecipientSession.Read(searchObject.TargetMailbox);
                if (aduser != null)
                {
                    mailboxDiscoverySearch.Target = aduser.LegacyExchangeDN;
                }
            }
            e15DataProvider.CreateOrUpdate <MailboxDiscoverySearch>(mailboxDiscoverySearch);
            Exception ex = null;

            try
            {
                if (searchObject.SearchStatus != null)
                {
                    if (!string.IsNullOrEmpty(searchObject.SearchStatus.ResultsPath) && aduser != null)
                    {
                        string serverFqdn = ExchangePrincipal.FromADUser(e14DataProvider.RecipientSession.SessionSettings, aduser, RemotingOptions.AllowCrossSite).MailboxInfo.Location.ServerFqdn;
                        if (!string.IsNullOrEmpty(serverFqdn))
                        {
                            goto IL_395;
                        }
                        Utils.< > c__DisplayClassc CS$ < > 8__locals1 = new Utils.< > c__DisplayClassc();
                        CS$ < > 8__locals1.searchId = new SearchId(e14DataProvider.ADUser.Id.DistinguishedName, e14DataProvider.ADUser.Id.ObjectGuid, searchObject.Id.Guid.ToString());
                        using (MailboxSearchClient client = new MailboxSearchClient(serverFqdn))
                        {
                            Utils.RpcCallWithRetry(delegate()
                            {
                                client.Remove(CS$ < > 8__locals1.searchId, true);
                            });
                            goto IL_395;
                        }
                    }
                    e14DataProvider.Delete(searchObject.SearchStatus);
                }
IL_395:
                e14DataProvider.Delete(searchObject);
            }
            catch (RpcConnectionException ex2)
            {
                ex = ex2;
            }
            catch (RpcException ex3)
            {
                ex = ex3;
            }
            catch (StoragePermanentException ex4)
            {
                ex = ex4;
            }
            catch (StorageTransientException ex5)
            {
                ex = ex5;
            }
            if (ex != null)
            {
                writeWarningDelegate(Strings.FailedToDeleteE14SearchObjectWhenUpgrade(searchObject.Name, ex.Message));
            }
            return(e15DataProvider.FindByAlternativeId <MailboxDiscoverySearch>(searchObject.Name));
        }
示例#18
0
 internal static bool SameNameExists(string name, DiscoverySearchDataProvider e15DataProvider, MailboxDataProvider e14DataProvider)
 {
     return(e15DataProvider.Find <MailboxDiscoverySearch>(name) != null || Utils.GetE14SearchObjectByName(name, e14DataProvider) != null);
 }
示例#19
0
        protected override ADUser CreateOnCacheMiss(Guid key, ref bool shouldAdd)
        {
            IRecipientSession tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(null, true, ConsistencyMode.PartiallyConsistent, ADSessionSettings.FromExternalDirectoryOrganizationId(key), 42, "CreateOnCacheMiss", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\UnifiedPolicy\\SyncArbitrationMailboxADObjectCache.cs");

            return(MailboxDataProvider.GetDiscoveryMailbox(tenantOrRootOrgRecipientSession));
        }