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);
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }