private bool IsExternalFreeBusyFolderCreated(string legacyDN, PublicFolderDatabase publicFolderDatabase) { Server server = publicFolderDatabase.GetServer(); if (server == null) { return(false); } bool result; try { using (PublicFolderSession publicFolderSession = this.GetPublicFolderSession(server)) { StoreObjectId freeBusyFolderId = FreeBusyFolder.GetFreeBusyFolderId(publicFolderSession, legacyDN, FreeBusyFolderDisposition.None); result = (freeBusyFolderId != null); } } catch (LocalizedException) { base.WriteVerbose(Strings.InstallFreeBusyFolderUnableToCheckDatabase(publicFolderDatabase.Id.ToString())); result = false; } return(result); }
private void VerifyLegacyPublicFolderDatabaseLocked() { PublicFolderEndpoint publicFolderEndpoint = (PublicFolderEndpoint)this.DataObject.SourceEndpoint; using (DisposeGuard disposeGuard = default(DisposeGuard)) { IMailbox mailbox; if (publicFolderEndpoint != null) { mailbox = disposeGuard.Add <IMailbox>(publicFolderEndpoint.ConnectToSourceDatabase()); } else { DatabaseIdParameter id = DatabaseIdParameter.Parse(this.DataObject.SourcePublicFolderDatabase); PublicFolderDatabase publicFolderDatabase = (PublicFolderDatabase)base.GetDataObject <PublicFolderDatabase>(id, this.ConfigurationSession, null, new LocalizedString?(Strings.ErrorDatabaseNotFound(this.DataObject.SourcePublicFolderDatabase)), new LocalizedString?(Strings.ErrorDatabaseNotUnique(this.DataObject.SourcePublicFolderDatabase))); mailbox = disposeGuard.Add <IMailbox>(PublicFolderEndpoint.ConnectToLocalSourceDatabase(publicFolderDatabase.ExchangeObjectId)); } try { bool flag; mailbox.SetInTransitStatus(InTransitStatus.MoveSource, out flag); mailbox.SetInTransitStatus(InTransitStatus.NotInTransit, out flag); } catch (SourceMailboxAlreadyBeingMovedTransientException) { base.WriteError(new MigrationBatchCannotBeCompletedException(Strings.CompletePublicFolderMigrationBatchRequiresSourceLockDown)); } } }
protected override void ModifyRequest(TransactionalRequestJob requestJob) { base.ModifyRequest(requestJob); if (base.IsFieldSet("SourceDatabase")) { PublicFolderDatabase publicFolderDatabase = (PublicFolderDatabase)base.GetDataObject <PublicFolderDatabase>(this.SourceDatabase, base.ConfigSession, null, new LocalizedString?(Strings.ErrorDatabaseNotFound(this.SourceDatabase.ToString())), new LocalizedString?(Strings.ErrorDatabaseNotUnique(this.SourceDatabase.ToString()))); DatabaseInformation databaseInformation = MapiUtils.FindServerForMdb(publicFolderDatabase.Id.ObjectGuid, null, null, FindServerFlags.None); if (!this.IsSupportedDatabaseVersion(databaseInformation.ServerVersion)) { base.WriteError(new DatabaseVersionUnsupportedPermanentException(publicFolderDatabase.Identity.ToString(), databaseInformation.ServerFqdn, new ServerVersion(databaseInformation.ServerVersion).ToString()), ErrorCategory.InvalidArgument, null); } requestJob.SourceDatabase = publicFolderDatabase.Id; } if (base.IsFieldSet("RemoteMailboxLegacyDN")) { requestJob.RemoteMailboxLegacyDN = this.RemoteMailboxLegacyDN; } if (base.IsFieldSet("RemoteMailboxServerLegacyDN")) { requestJob.RemoteMailboxServerLegacyDN = this.RemoteMailboxServerLegacyDN; } if (base.IsFieldSet("OutlookAnywhereHostName")) { requestJob.OutlookAnywhereHostName = this.OutlookAnywhereHostName; } if (base.IsFieldSet("AuthenticationMethod")) { requestJob.AuthenticationMethod = new AuthenticationMethod?(this.AuthenticationMethod); } if (base.IsFieldSet("RemoteCredential")) { requestJob.RemoteCredential = RequestTaskHelper.GetNetworkCredential(this.RemoteCredential, requestJob.AuthenticationMethod); } }
internal static void DoMaintenanceTask(PublicFolderDatabase publicStore, string domainController, Task.TaskWarningLoggingDelegate warningHandler) { Server server = publicStore.GetServer(); if (!server.IsExchange2007OrLater) { warningHandler(Strings.WarningSiteFolderCheckTaskNotAvailableOnTiServer(server.Name)); return; } string a = domainController; try { a = SystemConfigurationTasksHelper.GetConfigurationDomainControllerFqdn(domainController); } catch (SocketException ex) { warningHandler(Strings.ErrorResolveFqdnForDomainController(domainController, ex.Message)); } string configDC = ADSession.GetConfigDC(TopologyProvider.LocalForestFqdn, server.Name); if (string.Equals(a, configDC, StringComparison.InvariantCultureIgnoreCase)) { try { using (ExRpcAdmin exRpcAdmin = ExRpcAdmin.Create("Client=Management", server.Fqdn, null, null, null)) { exRpcAdmin.DoMaintenanceTask(publicStore.Guid, MaintenanceTask.SiteFolderCheck); } return; } catch (MapiPermanentException ex2) { TaskLogger.Trace("Set/New-OfflineAddressBook.InternalProcessRecord raises exception while running site folder check task: {0}", new object[] { ex2.Message }); warningHandler(Strings.ErrorFailedToRunSiteFolderCheckTask(server.Name, ex2.Message)); return; } catch (MapiRetryableException ex3) { TaskLogger.Trace("Set/New-OfflineAddressBook.InternalProcessRecord raises exception while running site folder check task: {0}", new object[] { ex3.Message }); warningHandler(Strings.ErrorFailedToRunSiteFolderCheckTask(server.Name, ex3.Message)); return; } } warningHandler(Strings.WarningOabSiteFolderCheckNotRun(server.Name)); }
private void ValidateSourcePublicFolderDatabase(MigrationJob job) { if (job.MigrationType != MigrationType.PublicFolder || job.JobDirection != MigrationBatchDirection.Local) { base.WriteError(new MigrationPermanentException(Strings.ErrorInvalidBatchParameter("SourcePublicFolderDatabase", job.MigrationType.ToString(), job.JobDirection.ToString()))); } PublicFolderDatabase publicFolderDatabase = (PublicFolderDatabase)base.GetDataObject <PublicFolderDatabase>(this.SourcePublicFolderDatabase, this.ConfigurationSession, null, new LocalizedString?(Strings.ErrorDatabaseNotFound(this.SourcePublicFolderDatabase.ToString())), new LocalizedString?(Strings.ErrorDatabaseNotUnique(this.SourcePublicFolderDatabase.ToString()))); using (IMailbox mailbox = PublicFolderEndpoint.ConnectToLocalSourceDatabase(publicFolderDatabase.ExchangeObjectId)) { mailbox.Disconnect(); } }
internal static PublicFolderDatabase FindPublicFolderDatabase(IConfigDataProvider session, ADObjectId server, Task.TaskErrorLoggingDelegate errorHandler) { Server server2 = (Server)session.Read <Server>(server); PublicFolderDatabase[] publicFolderDatabases = server2.GetPublicFolderDatabases(); PublicFolderDatabase result; if (publicFolderDatabases.Length == 0) { ADObjectId identity = PublicFolderDatabase.FindClosestPublicFolderDatabase(session, server); result = (PublicFolderDatabase)session.Read <PublicFolderDatabase>(identity); } else { result = publicFolderDatabases[0]; } return(result); }
protected override void InternalBeginProcessing() { TaskLogger.LogEnter(); base.InternalBeginProcessing(); MailboxDatabase mailboxDatabase = (MailboxDatabase)this.GetDynamicParameters(); if (base.Fields.IsModified("PublicFolderDatabase")) { this.PublicFolderDatabase.AllowLegacy = true; PublicFolderDatabase publicFolderDatabase = (PublicFolderDatabase)base.GetDataObject <PublicFolderDatabase>(this.PublicFolderDatabase, base.GlobalConfigSession, null, new LocalizedString?(Strings.ErrorPublicFolderDatabaseNotFound(this.PublicFolderDatabase.ToString())), new LocalizedString?(Strings.ErrorPublicFolderDatabaseNotUnique(this.PublicFolderDatabase.ToString()))); mailboxDatabase.PublicFolderDatabase = (ADObjectId)publicFolderDatabase.Identity; } if (base.Fields.IsModified("OfflineAddressBook")) { if (this.OfflineAddressBook == null) { mailboxDatabase.OfflineAddressBook = null; } else { OfflineAddressBook offlineAddressBook = (OfflineAddressBook)base.GetDataObject <OfflineAddressBook>(this.OfflineAddressBook, this.ConfigurationSession, null, new LocalizedString?(Strings.ErrorOfflineAddressBookNotFound(this.OfflineAddressBook.ToString())), new LocalizedString?(Strings.ErrorOfflineAddressBookNotUnique(this.OfflineAddressBook.ToString()))); mailboxDatabase.OfflineAddressBook = (ADObjectId)offlineAddressBook.Identity; } } if (base.Fields.IsModified("JournalRecipient")) { if (this.JournalRecipient == null) { mailboxDatabase.JournalRecipient = null; } else { ADRecipient adrecipient = (ADRecipient)base.GetDataObject <ADRecipient>(this.JournalRecipient, base.TenantGlobalCatalogSession, null, new LocalizedString?(Strings.ErrorRecipientNotFound(this.JournalRecipient.ToString())), new LocalizedString?(Strings.ErrorRecipientNotUnique(this.JournalRecipient.ToString()))); mailboxDatabase.JournalRecipient = (ADObjectId)adrecipient.Identity; } } if (base.Fields.IsModified(DatabaseSchema.MailboxProvisioningAttributes)) { mailboxDatabase.MailboxProvisioningAttributes = this.MailboxProvisioningAttributes; } TaskLogger.LogExit(); }
protected override void InternalValidate() { TaskLogger.LogEnter(); try { string empty = string.Empty; string empty2 = string.Empty; int num = 0; ADObjectId adobjectId = null; base.OrganizationId = OrganizationId.ForestWideOrgId; if (base.ParameterSetName.Equals("MailboxMigrationOutlookAnywherePublicFolder")) { IConfigurationSession session = RequestTaskHelper.CreateOrganizationFindingSession(base.CurrentOrganizationId, base.ExecutingUserOrganizationId); if (this.Organization == null && base.CurrentOrganizationId != OrganizationId.ForestWideOrgId) { this.Organization = new OrganizationIdParameter(base.CurrentOrganizationId.OrganizationalUnit); } if (this.Organization != null) { ADOrganizationalUnit adorganizationalUnit = (ADOrganizationalUnit)base.GetDataObject <ADOrganizationalUnit>(this.Organization, session, null, new LocalizedString?(Strings.ErrorOrganizationNotFound(this.Organization.ToString())), new LocalizedString?(Strings.ErrorOrganizationNotUnique(this.Organization.ToString()))); base.OrganizationId = adorganizationalUnit.OrganizationId; } base.RescopeToOrgId(base.OrganizationId); base.Flags = (RequestFlags.CrossOrg | RequestFlags.Pull); } else if (base.ParameterSetName.Equals("MailboxMigrationLocalPublicFolder")) { base.Flags = (RequestFlags.IntraOrg | RequestFlags.Pull); PublicFolderDatabase publicFolderDatabase = base.CheckDatabase <PublicFolderDatabase>(this.SourceDatabase, NewRequest <PublicFolderMailboxMigrationRequest> .DatabaseSide.Source, this.SourceDatabase, out empty, out empty2, out adobjectId, out num); this.sourceDatabase = publicFolderDatabase.Id; } this.recipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(true, ConsistencyMode.FullyConsistent, ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(base.OrganizationId), 408, "InternalValidate", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\MailboxReplication\\PublicFolderMailboxMigrationRequest\\NewPublicFolderMailboxMigrationRequest.cs"); this.TargetMailboxUser = (ADUser)base.GetDataObject <ADUser>(this.TargetMailbox, this.recipientSession, null, new LocalizedString?(Strings.ErrorMailboxNotFound(this.TargetMailbox.ToString())), new LocalizedString?(Strings.ErrorMailboxNotUnique(this.TargetMailbox.ToString()))); TenantPublicFolderConfigurationCache.Instance.RemoveValue(base.OrganizationId); this.PublicFolderConfiguration = TenantPublicFolderConfigurationCache.Instance.GetValue(base.OrganizationId); if (this.PublicFolderConfiguration.HeuristicsFlags.HasFlag(HeuristicsFlags.PublicFolderMigrationComplete)) { base.WriteError(new RecipientTaskException(Strings.ErrorPublicFolderMigrationCompletedPreviously), ExchangeErrorCategory.Client, null); } if (this.PublicFolderConfiguration.GetHierarchyMailboxInformation().HierarchyMailboxGuid == Guid.Empty) { base.WriteError(new RecipientTaskException(MrsStrings.PublicFolderMailboxesNotProvisionedForMigration), ExchangeErrorCategory.ServerOperation, null); } if (this.PublicFolderConfiguration.GetLocalMailboxRecipient(this.TargetMailboxUser.ExchangeGuid) == null) { base.WriteError(new RecipientTaskException(Strings.ErrorCannotMigratePublicFolderIntoNonPublicFolderMailbox), ExchangeErrorCategory.Client, this.TargetMailboxUser); } if (base.WorkloadType == RequestWorkloadType.None) { base.WorkloadType = (((base.Flags & RequestFlags.IntraOrg) == RequestFlags.IntraOrg) ? RequestWorkloadType.Local : RequestWorkloadType.Onboarding); } base.RequestName = "PublicFolderMailboxMigration" + this.TargetMailboxUser.ExchangeGuid; ADObjectId requestQueueForMailboxMigrationRequest = this.GetRequestQueueForMailboxMigrationRequest(); DatabaseIdParameter databaseIdParameter = new DatabaseIdParameter(requestQueueForMailboxMigrationRequest); ADObjectId mdbServerSite = null; MailboxDatabase mailboxDatabase = base.CheckDatabase <MailboxDatabase>(databaseIdParameter, NewRequest <PublicFolderMailboxMigrationRequest> .DatabaseSide.RequestStorage, this.Organization, out empty, out empty2, out mdbServerSite, out num); MailboxTaskHelper.VerifyDatabaseIsWithinScopeForRecipientCmdlets(base.CurrentOrgConfigSession.SessionSettings, mailboxDatabase, new Task.ErrorLoggerDelegate(base.WriteError)); base.MdbId = mailboxDatabase.Id; base.MdbServerSite = mdbServerSite; base.RequestName = this.CheckRequestNameAvailability(base.RequestName, null, false, MRSRequestType.PublicFolderMailboxMigration, this.TargetMailbox, false); if (base.CheckRequestOfTypeExists(MRSRequestType.PublicFolderMigration)) { base.WriteError(new MultiplePublicFolderMigrationTypesNotAllowedException(), ExchangeErrorCategory.Client, this.Organization); } this.ValidateCSV(); base.InternalValidate(); } finally { TaskLogger.LogExit(); } }
public bool DoesPublicFolderDatabaseBelongToCurrentTenant(PublicFolderDatabase database) { return(database.PublicFolderHierarchy.DistinguishedName.Equals(((ADObjectId)this.PFTree.Identity).DistinguishedName, StringComparison.OrdinalIgnoreCase)); }
protected override void InternalValidate() { TaskLogger.LogEnter(); try { string empty = string.Empty; string empty2 = string.Empty; int num = 0; ADObjectId adobjectId = null; if (base.ParameterSetName.Equals("MigrationOutlookAnywherePublicFolder")) { IConfigurationSession session = RequestTaskHelper.CreateOrganizationFindingSession(base.CurrentOrganizationId, base.ExecutingUserOrganizationId); if (this.Organization == null) { this.Organization = new OrganizationIdParameter(base.CurrentOrganizationId.OrganizationalUnit); } ADOrganizationalUnit adorganizationalUnit = (ADOrganizationalUnit)base.GetDataObject <ADOrganizationalUnit>(this.Organization, session, null, new LocalizedString?(Strings.ErrorOrganizationNotFound(this.Organization.ToString())), new LocalizedString?(Strings.ErrorOrganizationNotUnique(this.Organization.ToString()))); base.RescopeToOrgId(adorganizationalUnit.OrganizationId); base.Flags = (RequestFlags.CrossOrg | RequestFlags.Pull); } else if (base.ParameterSetName.Equals("MigrationLocalPublicFolder")) { base.OrganizationId = OrganizationId.ForestWideOrgId; base.Flags = (RequestFlags.IntraOrg | RequestFlags.Pull); PublicFolderDatabase publicFolderDatabase = base.CheckDatabase <PublicFolderDatabase>(this.SourceDatabase, NewRequest <PublicFolderMigrationRequest> .DatabaseSide.Source, this.SourceDatabase, out empty, out empty2, out adobjectId, out num); this.sourceDatabase = publicFolderDatabase.Id; } if (base.WorkloadType == RequestWorkloadType.None) { base.WorkloadType = (((base.Flags & RequestFlags.IntraOrg) == RequestFlags.IntraOrg) ? RequestWorkloadType.Local : RequestWorkloadType.Onboarding); } if (!string.IsNullOrEmpty(this.Name)) { base.ValidateName(); base.RequestName = this.Name; } else { base.RequestName = "PublicFolderMigration"; } ADObjectId adObjectId = this.AutoSelectRequestQueueForPFRequest(base.OrganizationId); DatabaseIdParameter databaseIdParameter = new DatabaseIdParameter(adObjectId); ADObjectId mdbServerSite = null; MailboxDatabase mailboxDatabase = base.CheckDatabase <MailboxDatabase>(databaseIdParameter, NewRequest <PublicFolderMigrationRequest> .DatabaseSide.RequestStorage, this.Organization, out empty, out empty2, out mdbServerSite, out num); MailboxTaskHelper.VerifyDatabaseIsWithinScopeForRecipientCmdlets(base.CurrentOrgConfigSession.SessionSettings, mailboxDatabase, new Task.ErrorLoggerDelegate(base.WriteError)); base.MdbId = mailboxDatabase.Id; base.MdbServerSite = mdbServerSite; this.CheckRequestNameAvailability(null, null, false, MRSRequestType.PublicFolderMigration, this.Organization, false); if (base.CheckRequestOfTypeExists(MRSRequestType.PublicFolderMailboxMigration)) { base.WriteError(new MultiplePublicFolderMigrationTypesNotAllowedException(), ExchangeErrorCategory.Client, this.Organization); } this.publicFolderConfiguration = TenantPublicFolderConfigurationCache.Instance.GetValue(base.OrganizationId); if (this.publicFolderConfiguration.HeuristicsFlags.HasFlag(HeuristicsFlags.PublicFolderMigrationComplete)) { base.WriteError(new RecipientTaskException(Strings.ErrorPublicFolderMigrationCompletedPreviously), ExchangeErrorCategory.Client, null); } this.ValidateCSV(); base.InternalValidate(); } finally { TaskLogger.LogExit(); } }