private ADPublicFolder CreatePublicFolderProxy() { ADPublicFolder adpublicFolder = new ADPublicFolder(); if (MapiTaskHelper.IsDatacenter) { adpublicFolder.OrganizationId = base.CurrentOrganizationId; } adpublicFolder.StampPersistableDefaultValues(); string text = this.currentPublicFolder.Name.Trim(); if (text.Length > 256) { adpublicFolder.DisplayName = text.Substring(0, 256); } else { adpublicFolder.DisplayName = text.Trim(); } if (text.Length > 64) { adpublicFolder.Name = text.Substring(0, 64); } else { adpublicFolder.Name = text; } adpublicFolder.Alias = RecipientTaskHelper.GenerateUniqueAlias(this.RecipientSession, OrganizationId.ForestWideOrgId, adpublicFolder.Name, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose)); adpublicFolder.WindowsEmailAddress = adpublicFolder.PrimarySmtpAddress; adpublicFolder.SendModerationNotifications = TransportModerationNotificationFlags.Never; adpublicFolder.RecipientTypeDetails = RecipientTypeDetails.PublicFolder; adpublicFolder.ObjectCategory = this.ConfigurationSession.SchemaNamingContext.GetChildId(adpublicFolder.ObjectCategoryCN); ADRecipient adrecipient = this.RecipientSession.FindByExchangeGuid(this.currentPublicFolder.ContentMailboxGuid); if (adrecipient == null || adrecipient.RecipientTypeDetails != RecipientTypeDetails.PublicFolderMailbox) { base.WriteError(new InvalidOperationException(Strings.ErrorUnableToDetermineContentMailbox(this.Identity.ToString(), this.currentPublicFolder.ContentMailboxGuid)), ErrorCategory.InvalidData, this.Identity); } adpublicFolder.ContentMailbox = adrecipient.Id; adpublicFolder.EntryId = this.currentPublicFolder.EntryId; adpublicFolder.LegacyExchangeDN = PublicFolderSession.ConvertToLegacyDN(this.currentPublicFolder.ContentMailboxGuid.ToString(), this.currentPublicFolder.EntryId); ADObjectId adobjectId; if (!MapiTaskHelper.IsDatacenter) { adobjectId = base.CurrentOrgContainerId.DomainId.GetChildId("Microsoft Exchange System Objects"); } else { adobjectId = base.CurrentOrganizationId.OrganizationalUnit; } ADObjectId childId = adobjectId.GetChildId(adpublicFolder.Name); ADRecipient adrecipient2 = this.RecipientSession.Read(childId); if (adrecipient2 != null) { string text2 = adpublicFolder.Name; if (text2.Length > 55) { text2 = text2.Substring(0, 55); } Random random = new Random(); childId = adobjectId.GetChildId(string.Format("{0} {1}", text2, random.Next(100000000).ToString("00000000"))); } adpublicFolder.SetId(childId); if (base.IsProvisioningLayerAvailable) { base.WriteVerbose(Strings.VerboseInvokingRUS(adpublicFolder.Identity.ToString(), adpublicFolder.GetType().Name)); ADPublicFolder adpublicFolder2 = new ADPublicFolder(); adpublicFolder2.CopyChangesFrom(adpublicFolder); ProvisioningLayer.UpdateAffectedIConfigurable(this, RecipientTaskHelper.ConvertRecipientToPresentationObject(adpublicFolder2), false); adpublicFolder.CopyChangesFrom(adpublicFolder2); } else { base.WriteError(new InvalidOperationException(Strings.ErrorNoProvisioningHandlerAvailable), ErrorCategory.InvalidOperation, null); } return(adpublicFolder); }
protected override void PrepareRecipientObject(ADPublicFolder publicFolder) { this.DataObject = publicFolder; if (MapiTaskHelper.IsDatacenter) { publicFolder.OrganizationId = base.CurrentOrganizationId; } publicFolder.StampPersistableDefaultValues(); if (this.Name.Contains("\n")) { this.Name = this.Name.Replace("\n", "_"); } if (this.Name.Length > 64) { publicFolder.Name = this.Name.Substring(0, 64); } else { publicFolder.Name = this.Name; } publicFolder.DisplayName = publicFolder.Name; publicFolder.Alias = RecipientTaskHelper.GenerateUniqueAlias(this.RecipientSession, OrganizationId.ForestWideOrgId, this.Alias, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose)); if (this.WindowsEmailAddress != SmtpAddress.Empty) { publicFolder.WindowsEmailAddress = this.WindowsEmailAddress; } else { publicFolder.WindowsEmailAddress = publicFolder.PrimarySmtpAddress; } publicFolder.HiddenFromAddressListsEnabled = this.HiddenFromAddressListsEnabled; publicFolder.SendModerationNotifications = TransportModerationNotificationFlags.Never; publicFolder.RecipientTypeDetails = RecipientTypeDetails.PublicFolder; publicFolder.ObjectCategory = this.ConfigurationSession.SchemaNamingContext.GetChildId(publicFolder.ObjectCategoryCN); publicFolder.LegacyExchangeDN = PublicFolderSession.ConvertToLegacyDN("e71f13d1-0178-42a7-8c47-24206de84a77", this.EntryId); ADObjectId adobjectId; if (base.CurrentOrganizationId == OrganizationId.ForestWideOrgId) { adobjectId = base.CurrentOrgContainerId.DomainId.GetChildId("Microsoft Exchange System Objects"); } else { adobjectId = base.CurrentOrganizationId.OrganizationalUnit; } ADObjectId childId = adobjectId.GetChildId(publicFolder.Name); ADRecipient adrecipient = this.RecipientSession.Read(childId); if (adrecipient != null) { Random random = new Random(); childId = adobjectId.GetChildId(string.Format("{0} {1}", publicFolder.Name, random.Next(100000000).ToString("00000000"))); } publicFolder.SetId(childId); if (base.IsProvisioningLayerAvailable) { base.WriteVerbose(Strings.VerboseInvokingRUS(publicFolder.Identity.ToString(), publicFolder.GetType().Name)); ADPublicFolder adpublicFolder = new ADPublicFolder(); adpublicFolder.CopyChangesFrom(publicFolder); ProvisioningLayer.UpdateAffectedIConfigurable(this, RecipientTaskHelper.ConvertRecipientToPresentationObject(adpublicFolder), false); publicFolder.CopyChangesFrom(adpublicFolder); } else { base.WriteError(new InvalidOperationException(Strings.ErrorNoProvisioningHandlerAvailable), ErrorCategory.InvalidOperation, null); } if (this.ExternalEmailAddress != SmtpAddress.Empty) { publicFolder.ExternalEmailAddress = ProxyAddress.Parse(this.ExternalEmailAddress.ToString()); } else { publicFolder.ExternalEmailAddress = ProxyAddress.Parse(publicFolder.WindowsEmailAddress.ToString()); } MailUserTaskHelper.ValidateExternalEmailAddress(publicFolder, this.ConfigurationSession, new Task.ErrorLoggerDelegate(base.WriteError), base.ProvisioningCache); if (this.EmailAddresses != null) { foreach (ProxyAddress proxyAddress in this.EmailAddresses) { if (proxyAddress != null && !publicFolder.EmailAddresses.Contains(proxyAddress)) { publicFolder.EmailAddresses.Add(proxyAddress); } } } adrecipient = this.RecipientSession.FindByProxyAddress(ProxyAddress.Parse("X500:" + publicFolder.LegacyExchangeDN)); if (adrecipient != null) { base.WriteError(new InvalidOperationException(Strings.ErrorObjectAlreadyExists("ADPublicFolder object : ", this.Name)), ErrorCategory.InvalidData, null); } publicFolder.EmailAddresses.Add(ProxyAddress.Parse("X500:" + publicFolder.LegacyExchangeDN)); RecipientTaskHelper.ValidateEmailAddressErrorOut(this.RecipientSession, publicFolder.EmailAddresses, publicFolder, new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.ErrorLoggerReThrowDelegate(this.WriteError)); }
private Guid LinkMailPublicFolder(LinkMailPublicFolderFlags flags, byte[] objectId, Guid contentMailboxGuid, byte[] sourceFolderEntryId) { Guid result = Guid.Empty; try { ADObjectId contentMailbox = null; if (!this.mailboxToADObjectIdMap.TryGetValue(contentMailboxGuid, out contentMailbox)) { ADUser aduser = this.orgRecipientSession.FindByExchangeGuid(contentMailboxGuid) as ADUser; if (aduser == null) { throw new RecipientNotFoundPermanentException(contentMailboxGuid); } this.mailboxToADObjectIdMap[contentMailboxGuid] = aduser.Id; contentMailbox = aduser.Id; } ADPublicFolder adpublicFolder = null; switch (flags) { case LinkMailPublicFolderFlags.ObjectGuid: adpublicFolder = (this.orgRecipientSession.Read(new ADObjectId(objectId)) as ADPublicFolder); if (adpublicFolder == null) { base.Report.Append(new ReportEntry(MrsStrings.MoveRequestMessageWarning(MrsStrings.MailPublicFolderWithObjectIdNotFound(new Guid(objectId))))); } break; case LinkMailPublicFolderFlags.EntryId: { string text = PublicFolderSession.ConvertToLegacyDN("e71f13d1-0178-42a7-8c47-24206de84a77", HexConverter.ByteArrayToHexString(objectId)); ADRecipient[] array = this.orgRecipientSession.Find(null, QueryScope.SubTree, new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.LegacyExchangeDN, text), null, 2); if (array.Length == 1) { adpublicFolder = (array[0] as ADPublicFolder); } else if (array.Length > 1) { base.Report.Append(new ReportEntry(MrsStrings.MoveRequestMessageWarning(MrsStrings.MailPublicFolderWithMultipleEntriesFound(text)))); } else { base.Report.Append(new ReportEntry(MrsStrings.MoveRequestMessageWarning(MrsStrings.MailPublicFolderWithLegacyExchangeDnNotFound(text)))); } break; } default: throw new UnexpectedErrorPermanentException(-2147024809); } if (adpublicFolder != null) { adpublicFolder.ContentMailbox = contentMailbox; adpublicFolder.EntryId = HexConverter.ByteArrayToHexString(base.DestMailbox.GetSessionSpecificEntryId(sourceFolderEntryId)); this.orgRecipientSession.Save(adpublicFolder); result = adpublicFolder.Guid; } } catch (LocalizedException ex) { base.Report.Append(new ReportEntry(new LocalizedString(ex.Message))); throw; } return(result); }