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 EnsureExternalFreeBusyFolder(Server localServer, PublicFolderDatabase[] publicFolderDatabases) { Organization orgContainer = this.configurationSession.GetOrgContainer(); if (orgContainer == null) { base.WriteVerbose(Strings.InstallFreeBusyFolderCannotGetOrganizationContainer); return; } string legacyDN = orgContainer.LegacyExchangeDN + "/ou=External (FYDIBOHF25SPDLT)"; if (this.IsExternalFreeBusyFolderCreated(legacyDN, publicFolderDatabases)) { base.WriteVerbose(Strings.InstallFreeBusyFolderAlreadyExists); return; } using (PublicFolderSession publicFolderSession = this.GetPublicFolderSession(localServer)) { StoreObjectId freeBusyFolderId = FreeBusyFolder.GetFreeBusyFolderId(publicFolderSession, legacyDN, FreeBusyFolderDisposition.CreateIfNeeded); if (freeBusyFolderId == null) { base.WriteVerbose(Strings.InstallFreeBusyFolderUnableToCreateFolder); } else { base.WriteVerbose(Strings.InstallFreeBusyFolderCreatedFolder(freeBusyFolderId.ToString())); using (Folder folder = Folder.Bind(publicFolderSession, freeBusyFolderId, new PropertyDefinition[] { FolderSchema.ReplicaList })) { string[] array = Array.ConvertAll <PublicFolderDatabase, string>(publicFolderDatabases, (PublicFolderDatabase database) => database.ExchangeLegacyDN); string[] secondArray = (string[])folder[FolderSchema.ReplicaList]; if (!this.IsEqualsArrayOfLegacyDN(array, secondArray)) { folder[FolderSchema.ReplicaList] = array; folder.Save(); folder.Load(); } } } } }
private PublicFolderSession GetPublicFolderSession(Server server) { return(FreeBusyFolder.RetryOnStorageTransientException <PublicFolderSession>(() => PublicFolderSession.OpenAsAdmin(OrganizationId.ForestWideOrgId, null, Guid.Empty, null, CultureInfo.CurrentCulture, "Client=management;Action=Install-FreeBusyFolder", null))); }
protected override void UpdateMovedMailbox() { ReportEntry[] entries = null; ADUser aduser = base.GetRootMailboxContext().SourceMailbox.GetADUser(); ConfigurableObjectXML configObject = ConfigurableObjectXML.Create(aduser); base.Report.Append(MrsStrings.ReportSourceMailboxBeforeFinalization2(aduser.ToString(), aduser.OriginatingServer), configObject, ReportEntryFlags.Source | ReportEntryFlags.Before); ADUser aduser2 = base.GetRootMailboxContext().DestMailbox.GetADUser(); configObject = ConfigurableObjectXML.Create(aduser2); base.Report.Append(MrsStrings.ReportTargetMailUserBeforeFinalization2(aduser2.ToString(), aduser2.OriginatingServer), configObject, ReportEntryFlags.Target | ReportEntryFlags.Before); bool isFromDatacenter = aduser.IsFromDatacenter; bool isFromDatacenter2 = aduser2.IsFromDatacenter; if (base.CachedRequestJob.PrimaryIsMoving) { CommonUtils.ValidateTargetDeliveryDomain(aduser2.EmailAddresses, base.CachedRequestJob.TargetDeliveryDomain); MailboxCopierBase rootMailboxContext = base.GetRootMailboxContext(); if (!isFromDatacenter && isFromDatacenter2) { rootMailboxContext.SyncState.ExternalLegacyExchangeDN = FreeBusyFolder.GetExternalLegacyDN(aduser); } else if (isFromDatacenter && !isFromDatacenter2) { string mdbLegDN = base.GetRootMailboxContext().DestMailbox.GetMailboxInformation().MdbLegDN; rootMailboxContext.SyncState.InternalLegacyExchangeDN = FreeBusyFolder.GetInternalLegacyDN(aduser2, mdbLegDN); } List <PropertyUpdateXML> list = new List <PropertyUpdateXML>(); if (rootMailboxContext.SyncState.ExternalLegacyExchangeDN != null) { this.AddX500ProxyAddressIfNeeded(list, aduser2, rootMailboxContext.SyncState.ExternalLegacyExchangeDN, aduser.Identity.ToString()); } if (rootMailboxContext.SyncState.InternalLegacyExchangeDN != null) { PropertyUpdateXML.Add(list, ADRecipientSchema.LegacyExchangeDN, rootMailboxContext.SyncState.InternalLegacyExchangeDN, PropertyUpdateOperation.Replace); this.AddX500ProxyAddressIfNeeded(list, aduser2, aduser2.LegacyExchangeDN, aduser2.Identity.ToString()); } aduser.LinkedMasterAccount = XMLSerializableBase.Serialize(list.ToArray(), false); } MrsTracer.Service.Debug("Updating destination mailbox...", new object[0]); UpdateMovedMailboxOperation op; Guid newDatabaseGuid; Guid newArchiveDatabaseGuid; ArchiveStatusFlags archiveStatus; string archiveDomain; if (base.CachedRequestJob.PrimaryOnly) { op = UpdateMovedMailboxOperation.MorphToMailbox; newDatabaseGuid = base.CachedRequestJob.TargetMDBGuid; newArchiveDatabaseGuid = ((aduser2.ArchiveDatabase != null) ? aduser2.ArchiveDatabase.ObjectGuid : Guid.Empty); archiveStatus = ArchiveStatusFlags.None; archiveDomain = ((aduser2.ArchiveDatabase == null) ? base.CachedRequestJob.ArchiveDomain : null); } else if (base.CachedRequestJob.ArchiveOnly) { op = UpdateMovedMailboxOperation.UpdateArchiveOnly; newDatabaseGuid = Guid.Empty; newArchiveDatabaseGuid = base.CachedRequestJob.TargetArchiveMDBGuid; archiveStatus = ((aduser2.Database == null) ? ArchiveStatusFlags.Active : ArchiveStatusFlags.None); archiveDomain = null; } else { op = UpdateMovedMailboxOperation.MorphToMailbox; newDatabaseGuid = base.CachedRequestJob.TargetMDBGuid; newArchiveDatabaseGuid = base.CachedRequestJob.TargetArchiveMDBGuid; archiveDomain = null; archiveStatus = ArchiveStatusFlags.None; } UpdateMovedMailboxFlags updateMovedMailboxFlags = UpdateMovedMailboxFlags.None; if (base.CachedRequestJob.SkipMailboxReleaseCheck) { updateMovedMailboxFlags |= UpdateMovedMailboxFlags.SkipMailboxReleaseCheck; } if (base.CachedRequestJob.SkipProvisioningCheck) { updateMovedMailboxFlags |= UpdateMovedMailboxFlags.SkipProvisioningCheck; } try { base.GetRootMailboxContext().DestMailbox.UpdateMovedMailbox(op, aduser, base.CachedRequestJob.DestDomainControllerToUpdate, out entries, newDatabaseGuid, newArchiveDatabaseGuid, archiveDomain, archiveStatus, updateMovedMailboxFlags, null, null); } finally { base.AppendReportEntries(entries); } }