Пример #1
0
        protected override void PrepareRecipientObject(ref ADContact contact)
        {
            TaskLogger.LogEnter();
            base.PrepareRecipientObject(ref contact);
            if (RecipientType.Contact != contact.RecipientType)
            {
                base.WriteError(new RecipientTaskException(Strings.ErrorInvalidRecipientType(this.Identity.ToString(), contact.RecipientType.ToString())), ErrorCategory.InvalidArgument, contact.Id);
            }
            contact.SetExchangeVersion(contact.MaximumSupportedExchangeObjectVersion);
            List <PropertyDefinition> list = new List <PropertyDefinition>(DisableMailContact.PropertiesToReset);

            MailboxTaskHelper.RemovePersistentProperties(list);
            MailboxTaskHelper.ClearExchangeProperties(contact, list);
            contact.SetExchangeVersion(contact.MaximumSupportedExchangeObjectVersion);
            if (this.DelayProvisioning && base.IsProvisioningLayerAvailable)
            {
                this.ProvisionDefaultValues(new ADContact(), contact);
            }
            contact.ExternalEmailAddress       = this.ExternalEmailAddress;
            contact.DeliverToForwardingAddress = false;
            contact.UsePreferMessageFormat     = this.UsePreferMessageFormat;
            contact.MessageFormat       = this.MessageFormat;
            contact.MessageBodyFormat   = this.MessageBodyFormat;
            contact.MacAttachmentFormat = this.MacAttachmentFormat;
            contact.RequireAllSendersAreAuthenticated = false;
            contact.UseMapiRichTextFormat             = UseMapiRichTextFormat.UseDefaultSettings;
            contact.RecipientDisplayType = new RecipientDisplayType?(RecipientDisplayType.RemoteMailUser);
            MailContactTaskHelper.ValidateExternalEmailAddress(contact, this.ConfigurationSession, new Task.ErrorLoggerDelegate(base.WriteError), base.ProvisioningCache);
            TaskLogger.LogExit();
        }
Пример #2
0
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            ADUser aduser = (ADUser)base.PrepareDataObject();

            MailboxTaskHelper.BlockRemoveOrDisableIfLitigationHoldEnabled(aduser, new Task.ErrorLoggerDelegate(base.WriteError), true, this.IgnoreLegalHold.ToBool());
            MailboxTaskHelper.BlockRemoveOrDisableIfDiscoveryHoldEnabled(aduser, new Task.ErrorLoggerDelegate(base.WriteError), true, this.IgnoreLegalHold.ToBool());
            if (ComplianceConfigImpl.JournalArchivingHardeningEnabled)
            {
                MailboxTaskHelper.BlockRemoveOrDisableMailUserIfJournalArchiveEnabled(base.DataSession as IRecipientSession, this.ConfigurationSession, aduser, new Task.ErrorLoggerDelegate(base.WriteError), true, false);
            }
            if (!aduser.ExchangeVersion.IsOlderThan(ADUserSchema.ArchiveGuid.VersionAdded))
            {
                if (aduser.ArchiveGuid != Guid.Empty)
                {
                    if (!this.PreventRecordingPreviousDatabase)
                    {
                        aduser.DisabledArchiveGuid     = aduser.ArchiveGuid;
                        aduser.DisabledArchiveDatabase = aduser.ArchiveDatabase;
                    }
                    else
                    {
                        aduser.DisabledArchiveGuid     = Guid.Empty;
                        aduser.DisabledArchiveDatabase = null;
                    }
                }
                aduser.ArchiveGuid             = Guid.Empty;
                aduser.ArchiveName             = null;
                aduser.ArchiveDatabase         = null;
                aduser.ArchiveStatus           = (aduser.ArchiveStatus &= ~ArchiveStatusFlags.Active);
                aduser.AllowArchiveAddressSync = false;
            }
            if ("Archive" == base.ParameterSetName)
            {
                MailboxTaskHelper.ClearExchangeProperties(aduser, DisableMailUserBase <MailUserIdParameter> .MailboxMovePropertiesToReset);
                TaskLogger.Trace("DisableMailbox -Archive skipping PrepareDataObject", new object[0]);
                TaskLogger.LogExit();
                return(aduser);
            }
            int        recipientSoftDeletedStatus = aduser.RecipientSoftDeletedStatus;
            DateTime?  whenSoftDeleted            = aduser.WhenSoftDeleted;
            Guid       disabledArchiveGuid        = aduser.DisabledArchiveGuid;
            ADObjectId disabledArchiveDatabase    = aduser.DisabledArchiveDatabase;

            MailboxTaskHelper.ClearExchangeProperties(aduser, RecipientConstants.DisableMailUserBase_PropertiesToReset);
            aduser.SetExchangeVersion(null);
            aduser.OverrideCorruptedValuesWithDefault();
            aduser.propertyBag.SetField(ADRecipientSchema.RecipientSoftDeletedStatus, recipientSoftDeletedStatus);
            aduser.propertyBag.SetField(ADRecipientSchema.WhenSoftDeleted, whenSoftDeleted);
            if (disabledArchiveGuid != Guid.Empty)
            {
                aduser.propertyBag.SetField(ADUserSchema.DisabledArchiveGuid, disabledArchiveGuid);
                aduser.propertyBag.SetField(ADUserSchema.DisabledArchiveDatabase, disabledArchiveDatabase);
            }
            TaskLogger.LogExit();
            return(aduser);
        }
Пример #3
0
        protected override void PrepareRecipientObject(ref ADGroup group)
        {
            TaskLogger.LogEnter();
            base.PrepareRecipientObject(ref group);
            if (group != null && (group.RecipientTypeDetails == RecipientTypeDetails.GroupMailbox || group.RecipientTypeDetails == RecipientTypeDetails.RemoteGroupMailbox))
            {
                base.WriteError(new RecipientTaskException(Strings.NotAValidDistributionGroup), ExchangeErrorCategory.Client, this.Identity.ToString());
            }
            if (RecipientType.MailUniversalDistributionGroup == group.RecipientType || RecipientType.MailUniversalSecurityGroup == group.RecipientType || RecipientType.MailNonUniversalGroup == group.RecipientType)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorGroupAlreadyMailEnabled(this.Identity.ToString())), ErrorCategory.InvalidOperation, group.Identity);
            }
            if ((group.GroupType & GroupTypeFlags.Universal) == GroupTypeFlags.None)
            {
                base.WriteError(new InvalidOperationException(Strings.ErrorEnableNonUniversalGroup), ErrorCategory.InvalidOperation, group.Identity);
            }
            if (group.RecipientTypeDetails == RecipientTypeDetails.RoleGroup)
            {
                base.WriteError(new CannotEnableRoleGroupException(), ErrorCategory.InvalidOperation, group.Identity);
            }
            group.SetExchangeVersion(group.MaximumSupportedExchangeObjectVersion);
            List <PropertyDefinition> list = new List <PropertyDefinition>(DisableDistributionGroup.PropertiesToReset);

            MailboxTaskHelper.RemovePersistentProperties(list);
            MailboxTaskHelper.ClearExchangeProperties(group, list);
            group.SetExchangeVersion(group.MaximumSupportedExchangeObjectVersion);
            if (this.DelayProvisioning && base.IsProvisioningLayerAvailable)
            {
                this.ProvisionDefaultValues(new ADGroup(), group);
            }
            if (VariantConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).CmdletInfra.ReportToOriginator.Enabled)
            {
                group.ReportToOriginatorEnabled = true;
            }
            else
            {
                group.ReportToOriginatorEnabled = false;
            }
            group.RequireAllSendersAreAuthenticated = true;
            if ((group.GroupType & GroupTypeFlags.SecurityEnabled) == GroupTypeFlags.SecurityEnabled)
            {
                group.RecipientDisplayType = new RecipientDisplayType?(RecipientDisplayType.SecurityDistributionGroup);
            }
            else
            {
                group.RecipientDisplayType = new RecipientDisplayType?(RecipientDisplayType.DistributionGroup);
            }
            TaskLogger.LogExit();
        }
Пример #4
0
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            ADGroup adgroup = (ADGroup)base.PrepareDataObject();

            if (adgroup != null && (adgroup.RecipientTypeDetails == RecipientTypeDetails.GroupMailbox || adgroup.RecipientTypeDetails == RecipientTypeDetails.RemoteGroupMailbox))
            {
                base.WriteError(new RecipientTaskException(Strings.NotAValidDistributionGroup), ExchangeErrorCategory.Client, this.Identity.ToString());
            }
            MailboxTaskHelper.ClearExchangeProperties(adgroup, DisableDistributionGroup.PropertiesToReset);
            adgroup.SetExchangeVersion(null);
            adgroup.OverrideCorruptedValuesWithDefault();
            TaskLogger.LogExit();
            return(adgroup);
        }
Пример #5
0
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            ADContact adcontact = (ADContact)base.PrepareDataObject();

            if (adcontact.RecipientTypeDetails == RecipientTypeDetails.MailForestContact)
            {
                base.WriteError(new InvalidOperationException(Strings.DisableMailForestContactNotAllowed(adcontact.Name)), ErrorCategory.InvalidOperation, adcontact.Identity);
            }
            MailboxTaskHelper.ClearExchangeProperties(adcontact, DisableMailContact.PropertiesToReset);
            adcontact.SetExchangeVersion(null);
            adcontact.OverrideCorruptedValuesWithDefault();
            TaskLogger.LogExit();
            return(adcontact);
        }
Пример #6
0
 protected override void PrepareRecipientObject(ref ADUser user)
 {
     TaskLogger.LogEnter();
     base.PrepareRecipientObject(ref user);
     if (!this.IsValidUser(user))
     {
         base.WriteError(new RecipientTaskException(Strings.ErrorInvalidRecipientType(user.Identity.ToString(), user.RecipientType.ToString())), ErrorCategory.InvalidArgument, user.Id);
     }
     if (user.RecipientType != RecipientType.MailUser)
     {
         user.SetExchangeVersion(ExchangeObjectVersion.Exchange2010);
         List <PropertyDefinition> list = new List <PropertyDefinition>(RecipientConstants.DisableMailUserBase_PropertiesToReset);
         MailboxTaskHelper.RemovePersistentProperties(list);
         MailboxTaskHelper.ClearExchangeProperties(user, list);
         user.SetExchangeVersion(ExchangeObjectVersion.Exchange2010);
         if (this.DelayProvisioning && base.IsProvisioningLayerAvailable)
         {
             this.ProvisionDefaultValues(new ADUser(), user);
         }
     }
     TaskLogger.LogExit();
 }
Пример #7
0
 internal static void ConnectMailboxCore(ADUser userToConnect, Guid deletedMailboxGuid, StoreMailboxType mailboxType, string deletedMailboxLegacyDN, string parameterSetName, bool clearPropertiesBeforeConnecting, IRecipientSession recipientSession, MapiAdministrationSession mapiAdministrationSession, string alias, SecurityIdentifier linkedUserSid, DatabaseLocationInfo databaseLocationInfo, MailboxDatabase database, ADObjectId elcPolicyId, ADObjectId retentionPolicyId, ADObjectId mobilePolicyId, ADObjectId addressBookPolicyId, Task.TaskVerboseLoggingDelegate verboseLogger, Task.TaskWarningLoggingDelegate warningLogger, ADObjectId roleAssignmentPolicyId, Task task)
 {
     if (userToConnect.ExchangeVersion.IsOlderThan(ExchangeObjectVersion.Exchange2012))
     {
         verboseLogger(Strings.VerboseUpdatingVersion(userToConnect.Identity.ToString(), userToConnect.ExchangeVersion.ToString(), ExchangeObjectVersion.Exchange2012.ToString()));
         userToConnect.SetExchangeVersion(ExchangeObjectVersion.Exchange2012);
         recipientSession.Save(userToConnect);
         verboseLogger(Strings.VerboseADOperationSucceeded(userToConnect.Identity.ToString()));
         bool useGlobalCatalog = recipientSession.UseGlobalCatalog;
         try
         {
             recipientSession.UseGlobalCatalog = false;
             userToConnect = (ADUser)recipientSession.Read(userToConnect.Id);
         }
         finally
         {
             recipientSession.UseGlobalCatalog = useGlobalCatalog;
         }
     }
     if (clearPropertiesBeforeConnecting)
     {
         List <PropertyDefinition> list = new List <PropertyDefinition>(RecipientConstants.DisableMailbox_PropertiesToReset);
         MailboxTaskHelper.RemovePersistentProperties(list);
         list.Remove(ADObjectSchema.ExchangeVersion);
         MailboxTaskHelper.ClearExchangeProperties(userToConnect, list);
     }
     userToConnect.Alias = alias;
     if ("Linked" == parameterSetName)
     {
         userToConnect.MasterAccountSid = linkedUserSid;
     }
     else if ("Shared" == parameterSetName)
     {
         userToConnect.MasterAccountSid = new SecurityIdentifier(WellKnownSidType.SelfSid, null);
     }
     else if ("Room" == parameterSetName)
     {
         userToConnect.ResourceType     = new ExchangeResourceType?(ExchangeResourceType.Room);
         userToConnect.MasterAccountSid = new SecurityIdentifier(WellKnownSidType.SelfSid, null);
     }
     else if ("Equipment" == parameterSetName)
     {
         userToConnect.ResourceType     = new ExchangeResourceType?(ExchangeResourceType.Equipment);
         userToConnect.MasterAccountSid = new SecurityIdentifier(WellKnownSidType.SelfSid, null);
     }
     userToConnect.ServerLegacyDN             = databaseLocationInfo.ServerLegacyDN;
     userToConnect.ExchangeGuid               = deletedMailboxGuid;
     userToConnect.Database                   = (ADObjectId)database.Identity;
     userToConnect.LegacyExchangeDN           = deletedMailboxLegacyDN.ToLowerInvariant();
     userToConnect.ManagedFolderMailboxPolicy = elcPolicyId;
     userToConnect.RetentionPolicy            = retentionPolicyId;
     userToConnect.ActiveSyncMailboxPolicy    = mobilePolicyId;
     userToConnect.UseDatabaseQuotaDefaults   = new bool?(true);
     userToConnect.AddressBookPolicy          = addressBookPolicyId;
     if (roleAssignmentPolicyId != null)
     {
         userToConnect.RoleAssignmentPolicy = roleAssignmentPolicyId;
     }
     if (mailboxType == StoreMailboxType.PublicFolderPrimary || mailboxType == StoreMailboxType.PublicFolderSecondary)
     {
         userToConnect.MasterAccountSid            = new SecurityIdentifier(WellKnownSidType.SelfSid, null);
         userToConnect.UserAccountControl          = (UserAccountControlFlags.AccountDisabled | UserAccountControlFlags.NormalAccount);
         userToConnect.ExchangeUserAccountControl |= UserAccountControlFlags.AccountDisabled;
         MailboxTaskHelper.StampMailboxRecipientTypes(userToConnect, "PublicFolder");
     }
     else
     {
         MailboxTaskHelper.StampMailboxRecipientTypes(userToConnect, parameterSetName);
     }
     if (MailboxTaskHelper.SupportsMailboxReleaseVersioning(userToConnect))
     {
         userToConnect.MailboxRelease = databaseLocationInfo.MailboxRelease;
     }
     userToConnect.EmailAddressPolicyEnabled = true;
     ProvisioningLayer.UpdateAffectedIConfigurable(task, RecipientTaskHelper.ConvertRecipientToPresentationObject(userToConnect), false);
     recipientSession.Save(userToConnect);
     verboseLogger(Strings.VerboseADOperationSucceeded(userToConnect.Identity.ToString()));
     ConnectMailbox.UpdateSDAndRefreshMailbox(mapiAdministrationSession, userToConnect, database, deletedMailboxGuid, parameterSetName, verboseLogger, warningLogger);
 }
Пример #8
0
        protected override IConfigurable PrepareDataObject()
        {
            TaskLogger.LogEnter();
            ADUser aduser = (ADUser)base.PrepareDataObject();

            this.exchangeGuid = aduser.ExchangeGuid;
            this.mdbId        = aduser.Database;
            ProxyAddressCollection emailAddresses = aduser.EmailAddresses;

            if (!aduser.ExchangeVersion.IsOlderThan(ADUserSchema.ArchiveGuid.VersionAdded))
            {
                if (("Archive" == base.ParameterSetName || "RemoteArchive" == base.ParameterSetName) && aduser.RecipientType == RecipientType.UserMailbox && aduser.MailboxMoveStatus != RequestStatus.None && aduser.MailboxMoveStatus != RequestStatus.Completed && aduser.MailboxMoveStatus != RequestStatus.CompletedWithWarning)
                {
                    base.WriteError(new RecipientTaskException(Strings.ErrorMailboxBeingMoved(this.Identity.ToString(), aduser.MailboxMoveStatus.ToString())), ErrorCategory.InvalidArgument, aduser);
                }
                if (aduser.ArchiveGuid != Guid.Empty)
                {
                    if (!this.PreventRecordingPreviousDatabase)
                    {
                        aduser.DisabledArchiveGuid     = aduser.ArchiveGuid;
                        aduser.DisabledArchiveDatabase = aduser.ArchiveDatabase;
                    }
                    else
                    {
                        aduser.DisabledArchiveGuid     = Guid.Empty;
                        aduser.DisabledArchiveDatabase = null;
                    }
                }
                aduser.ArchiveRelease  = MailboxRelease.None;
                aduser.ArchiveGuid     = Guid.Empty;
                aduser.ArchiveName     = null;
                aduser.ArchiveDatabase = null;
                aduser.ArchiveDomain   = null;
                if (VariantConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).CmdletInfra.RecoverMailBox.Enabled&& "Archive" == base.ParameterSetName)
                {
                    aduser.ArchiveStatus = (aduser.ArchiveStatus &= ~ArchiveStatusFlags.Active);
                }
                if ((aduser.RemoteRecipientType & RemoteRecipientType.ProvisionArchive) == RemoteRecipientType.ProvisionArchive)
                {
                    aduser.RemoteRecipientType = ((aduser.RemoteRecipientType &= ~RemoteRecipientType.ProvisionArchive) | RemoteRecipientType.DeprovisionArchive);
                }
            }
            if ("Archive" == base.ParameterSetName || "RemoteArchive" == base.ParameterSetName)
            {
                TaskLogger.Trace("DisableMailbox -Archive or -RemoteArchive skipping PrepareDataObject", new object[0]);
                TaskLogger.LogExit();
                return(aduser);
            }
            if (VariantConfiguration.GetSnapshot(MachineSettingsContext.Local, null, null).CmdletInfra.RecoverMailBox.Enabled)
            {
                if (!this.PreventRecordingPreviousDatabase)
                {
                    aduser.PreviousDatabase     = aduser.Database;
                    aduser.PreviousExchangeGuid = aduser.ExchangeGuid;
                }
                else
                {
                    aduser.PreviousDatabase     = null;
                    aduser.PreviousExchangeGuid = Guid.Empty;
                }
            }
            aduser.PreviousRecipientTypeDetails = aduser.RecipientTypeDetails;
            int        recipientSoftDeletedStatus = aduser.RecipientSoftDeletedStatus;
            DateTime?  whenSoftDeleted            = aduser.WhenSoftDeleted;
            Guid       disabledArchiveGuid        = aduser.DisabledArchiveGuid;
            ADObjectId disabledArchiveDatabase    = aduser.DisabledArchiveDatabase;

            MailboxTaskHelper.ClearExchangeProperties(aduser, RecipientConstants.DisableMailbox_PropertiesToReset);
            aduser.SetExchangeVersion(null);
            aduser.MailboxRelease = MailboxRelease.None;
            aduser.OverrideCorruptedValuesWithDefault();
            aduser.propertyBag.SetField(ADRecipientSchema.RecipientSoftDeletedStatus, recipientSoftDeletedStatus);
            aduser.propertyBag.SetField(ADRecipientSchema.WhenSoftDeleted, whenSoftDeleted);
            if (disabledArchiveGuid != Guid.Empty)
            {
                aduser.propertyBag.SetField(ADUserSchema.DisabledArchiveGuid, disabledArchiveGuid);
                aduser.propertyBag.SetField(ADUserSchema.DisabledArchiveDatabase, disabledArchiveDatabase);
            }
            if (this.PreserveEmailAddresses)
            {
                aduser.propertyBag.SetField(ADRecipientSchema.EmailAddresses, emailAddresses);
            }
            TaskLogger.LogExit();
            return(aduser);
        }