Пример #1
0
 internal void ValidateMoveRequestProtectionStatus(RequestJobBase moveRequest)
 {
     if (moveRequest.Protect && SetMoveRequestBase.CheckUserOrgIdIsTenant(base.ExecutingUserOrganizationId))
     {
         base.WriteError(new RecipientTaskException(Strings.ErrorMoveRequestIsProtected(this.DataObject.ToString())), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
Пример #2
0
 public PropValue[] GetValuesFromRequestJob(RequestJobBase requestJob)
 {
     PropValue[] result = new PropValue[26];
     this.MakePropValue(result, MapiPropertiesIndex.RequestStatus, requestJob.Status);
     this.MakePropValue(result, MapiPropertiesIndex.JobProcessingState, requestJob.RequestJobState);
     this.MakePropValue(result, MapiPropertiesIndex.MRSServerName, requestJob.MRSServerName);
     this.MakePropValue(result, MapiPropertiesIndex.AllowedToFinishMove, requestJob.AllowedToFinishMove);
     this.MakePropValue(result, MapiPropertiesIndex.CancelRequest, requestJob.CancelRequest);
     this.MakePropValue(result, MapiPropertiesIndex.ExchangeGuid, requestJob.ExchangeGuid);
     this.MakePropValue(result, MapiPropertiesIndex.ArchiveGuid, requestJob.ArchiveGuid ?? Guid.Empty);
     this.MakePropValue(result, MapiPropertiesIndex.LastUpdateTimestamp, requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.LastUpdate) ?? DateTime.MinValue);
     this.MakePropValue(result, MapiPropertiesIndex.CreationTimestamp, requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.Creation) ?? DateTime.MinValue);
     this.MakePropValue(result, MapiPropertiesIndex.JobType, requestJob.JobType);
     this.MakePropValue(result, MapiPropertiesIndex.Flags, requestJob.Flags);
     this.MakePropValue(result, MapiPropertiesIndex.SourceDatabase, (requestJob.SourceDatabase != null) ? requestJob.SourceDatabase.ObjectGuid : Guid.Empty);
     this.MakePropValue(result, MapiPropertiesIndex.TargetDatabase, (requestJob.TargetDatabase != null) ? requestJob.TargetDatabase.ObjectGuid : Guid.Empty);
     this.MakePropValue(result, MapiPropertiesIndex.DoNotPickUntilTimestamp, requestJob.NextPickupTime ?? DateTime.MinValue);
     this.MakePropValue(result, MapiPropertiesIndex.RequestType, requestJob.RequestType);
     this.MakePropValue(result, MapiPropertiesIndex.SourceArchiveDatabase, (requestJob.SourceArchiveDatabase != null) ? requestJob.SourceArchiveDatabase.ObjectGuid : Guid.Empty);
     this.MakePropValue(result, MapiPropertiesIndex.TargetArchiveDatabase, (requestJob.TargetArchiveDatabase != null) ? requestJob.TargetArchiveDatabase.ObjectGuid : Guid.Empty);
     this.MakePropValue(result, MapiPropertiesIndex.Priority, requestJob.Priority);
     this.MakePropValue(result, MapiPropertiesIndex.SourceExchangeGuid, requestJob.SourceExchangeGuid);
     this.MakePropValue(result, MapiPropertiesIndex.TargetExchangeGuid, requestJob.TargetExchangeGuid);
     this.MakePropValue(result, MapiPropertiesIndex.RehomeRequest, requestJob.RehomeRequest);
     this.MakePropValue(result, MapiPropertiesIndex.InternalFlags, requestJob.RequestJobInternalFlags);
     this.MakePropValue(result, MapiPropertiesIndex.PartitionHint, (requestJob.PartitionHint != null) ? requestJob.PartitionHint.GetPersistablePartitionHint() : null);
     this.MakePropValue(result, MapiPropertiesIndex.PoisonCount, requestJob.PoisonCount);
     this.MakePropValue(result, MapiPropertiesIndex.FailureType, requestJob.FailureType);
     this.MakePropValue(result, MapiPropertiesIndex.WorkloadType, requestJob.WorkloadType);
     return(result);
 }
Пример #3
0
 internal void ValidateRequestProtectionStatus(RequestJobBase requestJob)
 {
     if (requestJob.Protect && RequestTaskHelper.CheckUserOrgIdIsTenant(base.ExecutingUserOrganizationId))
     {
         base.WriteError(new RequestIsProtectedPermanentException(requestJob.Name), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
Пример #4
0
 internal void ValidateRequestIsNotCancelled(RequestJobBase requestJob)
 {
     if (requestJob.CancelRequest)
     {
         base.WriteError(new CannotSetCancelledRequestPermanentException(requestJob.Name), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
 internal static void ValidateRequestJob(RequestJobBase requestJob)
 {
     if (requestJob.IsFake || requestJob.WorkItemQueueMdb == null)
     {
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMissing);
         requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestNotDeserialized;
         return;
     }
     if (requestJob.OriginatingMDBGuid != Guid.Empty && requestJob.OriginatingMDBGuid != requestJob.WorkItemQueueMdb.ObjectGuid)
     {
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned);
         requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestInWrongMDB(requestJob.OriginatingMDBGuid, requestJob.WorkItemQueueMdb.ObjectGuid);
         return;
     }
     if (requestJob.CancelRequest)
     {
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
         requestJob.ValidationMessage = LocalizedString.Empty;
         return;
     }
     if (requestJob.Status == RequestStatus.Completed || requestJob.Status == RequestStatus.CompletedWithWarning)
     {
         SyncRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob);
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
         requestJob.ValidationMessage = LocalizedString.Empty;
         return;
     }
     SyncRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob);
     if (!requestJob.ValidateRequestIndexEntries())
     {
         return;
     }
     requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
     requestJob.ValidationMessage = LocalizedString.Empty;
 }
Пример #6
0
 internal static void ValidateRequestJob(RequestJobBase requestJob)
 {
     if (requestJob.IsFake || requestJob.WorkItemQueueMdb == null)
     {
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMissing);
         requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestNotDeserialized;
         return;
     }
     if (requestJob.OriginatingMDBGuid != Guid.Empty && requestJob.OriginatingMDBGuid != requestJob.WorkItemQueueMdb.ObjectGuid)
     {
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned);
         requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestInWrongMDB(requestJob.OriginatingMDBGuid, requestJob.WorkItemQueueMdb.ObjectGuid);
         return;
     }
     if (requestJob.CancelRequest)
     {
         requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
         requestJob.ValidationMessage = LocalizedString.Empty;
         return;
     }
     if (!requestJob.SourceIsLocal && !requestJob.ValidateOutlookAnywhereParams())
     {
         return;
     }
     if (!requestJob.TargetIsLocal && !requestJob.ValidateOutlookAnywhereParams())
     {
         return;
     }
     if (!requestJob.ValidateRequestIndexEntries())
     {
         return;
     }
     requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
     requestJob.ValidationMessage = LocalizedString.Empty;
 }
        internal static void ValidateRequestJob(RequestJobBase requestJob)
        {
            if (requestJob.IsFake || requestJob.WorkItemQueueMdb == null)
            {
                requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMissing);
                requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestNotDeserialized;
                return;
            }
            if (requestJob.OriginatingMDBGuid != Guid.Empty && requestJob.OriginatingMDBGuid != requestJob.WorkItemQueueMdb.ObjectGuid)
            {
                requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned);
                requestJob.ValidationMessage = MrsStrings.ValidationMoveRequestInWrongMDB(requestJob.OriginatingMDBGuid, requestJob.WorkItemQueueMdb.ObjectGuid);
                return;
            }
            if (requestJob.OriginatingMDBGuid == Guid.Empty)
            {
                requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
                requestJob.ValidationMessage = LocalizedString.Empty;
                return;
            }
            MailboxRelocationRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob);
            if (MailboxRelocationRequestStatistics.IsTerminalState(requestJob))
            {
                requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
                requestJob.ValidationMessage = LocalizedString.Empty;
                return;
            }
            if (!requestJob.ValidateUser(requestJob.User, requestJob.UserId))
            {
                return;
            }
            Guid guid;
            Guid guid2;

            RequestIndexEntryProvider.GetMoveGuids(requestJob.User, out guid, out guid2);
            if (guid != requestJob.ExchangeGuid)
            {
                MrsTracer.Common.Error("Orphaned RequestJob: mailbox guid does not match between AD {0} and workitem queue {1}.", new object[]
                {
                    requestJob.User.ExchangeGuid,
                    requestJob.ExchangeGuid
                });
                requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch);
                requestJob.ValidationMessage = MrsStrings.ValidationMailboxGuidsDontMatch(guid, requestJob.ExchangeGuid);
                return;
            }
            if (!MailboxRelocationRequestStatistics.ValidateNoOtherRequests(requestJob))
            {
                return;
            }
            if (CommonUtils.IsImplicitSplit(requestJob.Flags, requestJob.User))
            {
                requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch);
                requestJob.ValidationMessage = MrsStrings.ErrorImplicitSplit;
                return;
            }
            requestJob.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid);
            requestJob.ValidationMessage = LocalizedString.Empty;
        }
 public void UpdateData(RequestJobBase requestJob)
 {
     base.Principal             = AggregatedAccountListConfigurationWrapper.GetExchangePrincipalFromADUser(requestJob.TargetUser);
     this.TargetUser            = requestJob.TargetUser;
     this.TargetExchangeGuid    = requestJob.TargetExchangeGuid;
     base.SmtpAddress           = requestJob.EmailAddress;
     base.RequestGuid           = requestJob.RequestGuid;
     base.AggregatedMailboxGuid = (requestJob.Flags.HasFlag(RequestFlags.TargetIsAggregatedMailbox) ? requestJob.TargetExchangeGuid : Guid.Empty);
 }
 private static void LoadAdditionalPropertiesFromUser(RequestJobBase requestJob)
 {
     if (requestJob.User != null)
     {
         requestJob.Alias                = requestJob.User.Alias;
         requestJob.DisplayName          = requestJob.User.DisplayName;
         requestJob.RecipientTypeDetails = requestJob.User.RecipientTypeDetails;
         requestJob.UserId               = requestJob.User.Id;
     }
 }
 private static void LoadAdditionalPropertiesFromUser(RequestJobBase requestJob)
 {
     if (requestJob.TargetUser != null)
     {
         requestJob.TargetAlias        = requestJob.TargetUser.Alias;
         requestJob.TargetExchangeGuid = (requestJob.TargetIsArchive ? requestJob.TargetUser.ArchiveGuid : requestJob.TargetUser.ExchangeGuid);
         requestJob.TargetDatabase     = ADObjectIdResolutionHelper.ResolveDN(requestJob.TargetIsArchive ? requestJob.TargetUser.ArchiveDatabase : requestJob.TargetUser.Database);
         requestJob.TargetUserId       = requestJob.TargetUser.Id;
     }
 }
Пример #11
0
 internal void ValidateMoveRequestIsSettable(RequestJobBase moveRequest)
 {
     if (moveRequest.Status == RequestStatus.Completed || moveRequest.Status == RequestStatus.CompletedWithWarning)
     {
         base.WriteError(new CannotModifyCompletedRequestPermanentException(this.LocalADUser.ToString()), ErrorCategory.InvalidArgument, this.Identity);
     }
     if (moveRequest.CancelRequest)
     {
         base.WriteError(new RecipientTaskException(Strings.ErrorMoveAlreadyCanceled(this.LocalADUser.ToString())), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
Пример #12
0
 internal void ValidateMoveRequestIsActive(RequestJobBase moveRequest)
 {
     if (moveRequest == null || moveRequest.Status == RequestStatus.None)
     {
         base.WriteError(new ManagementObjectNotFoundException(Strings.ErrorUserNotBeingMoved(this.DataObject.ToString())), ErrorCategory.InvalidArgument, this.Identity);
     }
     if (moveRequest.ValidationResult != RequestJobBase.ValidationResultEnum.Valid)
     {
         base.WriteError(new RecipientTaskException(Strings.ErrorInvalidMoveRequest(this.LocalADUser.ToString(), moveRequest.ValidationMessage.ToString())), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
Пример #13
0
        public override T CreateRequestIndexEntryFromRequestJob(RequestJobBase requestJob, RequestIndexId requestIndexId)
        {
            ArgumentValidator.ThrowIfNull("requestJob", requestJob);
            ArgumentValidator.ThrowIfNull("requestJob.TargetUser", requestJob.TargetUser);
            ArgumentValidator.ThrowIfNull("requestJob.TargetExchangeGuid", requestJob.TargetExchangeGuid);
            ArgumentValidator.ThrowIfInvalidValue <RequestJobBase>("requestJob.RequestType", requestJob, (RequestJobBase x) => x.RequestType == MRSRequestType.Sync);
            T result = Activator.CreateInstance <T>();

            result.UpdateData(requestJob);
            return(result);
        }
Пример #14
0
 internal void ValidateRequestIsRunnable(RequestJobBase requestJob)
 {
     if (requestJob.Status == RequestStatus.Completed || requestJob.Status == RequestStatus.CompletedWithWarning)
     {
         base.WriteError(new CannotModifyCompletedRequestPermanentException(requestJob.Name), ErrorCategory.InvalidArgument, this.Identity);
     }
     if (requestJob.RehomeRequest)
     {
         base.WriteError(new CannotModifyRehomingRequestTransientException(requestJob.Name), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
 private static void LoadAdditionalPropertiesFromUser(RequestJobBase requestJob)
 {
     if (requestJob.SourceUser != null)
     {
         requestJob.SourceAlias          = requestJob.SourceUser.Alias;
         requestJob.SourceExchangeGuid   = (requestJob.SourceIsArchive ? requestJob.SourceUser.ArchiveGuid : requestJob.SourceUser.ExchangeGuid);
         requestJob.SourceDatabase       = ADObjectIdResolutionHelper.ResolveDN(requestJob.SourceIsArchive ? requestJob.SourceUser.ArchiveDatabase : requestJob.SourceUser.Database);
         requestJob.RecipientTypeDetails = requestJob.SourceUser.RecipientTypeDetails;
         requestJob.SourceUserId         = requestJob.SourceUser.Id;
     }
 }
Пример #16
0
 internal void ValidateRequestIsActive(RequestJobBase requestJob)
 {
     if (requestJob == null || requestJob.Status == RequestStatus.None)
     {
         TIdentity identity = this.Identity;
         base.WriteError(new ManagementObjectNotFoundException(Strings.ErrorCouldNotFindRequest(identity.ToString())), ErrorCategory.InvalidArgument, this.Identity);
     }
     if (requestJob.ValidationResult != RequestJobBase.ValidationResultEnum.Valid)
     {
         TIdentity identity2 = this.Identity;
         base.WriteError(new InvalidRequestPermanentException(identity2.ToString(), requestJob.ValidationMessage), ErrorCategory.InvalidArgument, this.Identity);
     }
 }
Пример #17
0
        private RequestJobXML CreateDummyFromSearchKey(byte[] key)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            RequestJobXML requestJobXML = RequestJobBase.CreateDummyObject <RequestJobXML>();

            requestJobXML.Identity     = new RequestJobObjectId(new Guid(key), this.MdbGuid, null);
            requestJobXML.RequestGuid  = new Guid(key);
            requestJobXML.ExchangeGuid = new Guid(key);
            return(requestJobXML);
        }
Пример #18
0
 internal MoveHistoryEntryInternal(RequestJobBase requestJob, ReportData report)
 {
     this.hasReadCompressedEntries = false;
     this.Status                     = (int)requestJob.Status;
     this.Flags                      = (int)requestJob.Flags;
     this.SourceDatabase             = ADObjectIdXML.Serialize(requestJob.SourceDatabase);
     this.SourceVersion              = requestJob.SourceVersion;
     this.SourceServer               = requestJob.SourceServer;
     this.SourceArchiveDatabase      = ADObjectIdXML.Serialize(requestJob.SourceArchiveDatabase);
     this.SourceArchiveVersion       = requestJob.SourceArchiveVersion;
     this.SourceArchiveServer        = requestJob.SourceArchiveServer;
     this.DestinationDatabase        = ADObjectIdXML.Serialize(requestJob.TargetDatabase);
     this.DestinationVersion         = requestJob.TargetVersion;
     this.DestinationServer          = requestJob.TargetServer;
     this.DestinationArchiveDatabase = ADObjectIdXML.Serialize(requestJob.TargetArchiveDatabase);
     this.DestinationArchiveVersion  = requestJob.TargetArchiveVersion;
     this.DestinationArchiveServer   = requestJob.TargetArchiveServer;
     this.RemoteHostName             = requestJob.RemoteHostName;
     if (requestJob.RemoteCredential == null)
     {
         this.RemoteCredentialUserName = null;
     }
     else if (requestJob.RemoteCredential.Domain == null)
     {
         this.RemoteCredentialUserName = requestJob.RemoteCredential.UserName;
     }
     else
     {
         this.RemoteCredentialUserName = requestJob.RemoteCredential.Domain + "\\" + requestJob.RemoteCredential.UserName;
     }
     this.RemoteDatabaseName        = requestJob.RemoteDatabaseName;
     this.RemoteArchiveDatabaseName = requestJob.RemoteArchiveDatabaseName;
     this.BadItemLimit            = requestJob.BadItemLimit;
     this.BadItemsEncountered     = requestJob.BadItemsEncountered;
     this.LargeItemLimit          = requestJob.LargeItemLimit;
     this.LargeItemsEncountered   = requestJob.LargeItemsEncountered;
     this.MissingItemsEncountered = requestJob.MissingItemsEncountered;
     this.TimeTracker             = requestJob.TimeTracker;
     this.MRSServerName           = requestJob.MRSServerName;
     this.TotalMailboxSize        = requestJob.TotalMailboxSize;
     this.TotalMailboxItemCount   = requestJob.TotalMailboxItemCount;
     this.TotalArchiveSize        = requestJob.TotalArchiveSize;
     this.TotalArchiveItemCount   = requestJob.TotalArchiveItemCount;
     this.TargetDeliveryDomain    = requestJob.TargetDeliveryDomain;
     this.ArchiveDomain           = requestJob.ArchiveDomain;
     this.FailureCode             = requestJob.FailureCode;
     this.FailureType             = requestJob.FailureType;
     this.MessageData             = CommonUtils.ByteSerialize(requestJob.Message);
     this.report = report;
 }
 private static void LoadAdditionalPropertiesFromUser(RequestJobBase requestJob)
 {
     if (requestJob.TargetUser != null)
     {
         requestJob.TargetAlias = requestJob.TargetUser.Alias;
         if (!requestJob.Flags.HasFlag(RequestFlags.TargetIsAggregatedMailbox))
         {
             requestJob.TargetExchangeGuid = requestJob.TargetUser.ExchangeGuid;
         }
         requestJob.TargetDatabase       = ADObjectIdResolutionHelper.ResolveDN(requestJob.TargetIsArchive ? requestJob.TargetUser.ArchiveDatabase : requestJob.TargetUser.Database);
         requestJob.RecipientTypeDetails = requestJob.TargetUser.RecipientTypeDetails;
         requestJob.TargetUserId         = requestJob.TargetUser.Id;
     }
 }
Пример #20
0
 public void UpdateData(RequestJobBase requestJob)
 {
     base.Principal               = AggregatedAccountConfigurationWrapper.GetExchangePrincipal(requestJob.TargetUser, requestJob.TargetExchangeGuid, requestJob.Flags.HasFlag(RequestFlags.TargetIsAggregatedMailbox));
     this.TargetUser              = requestJob.TargetUser;
     this.TargetExchangeGuid      = requestJob.TargetExchangeGuid;
     base.EmailAddress            = new SmtpAddress?(requestJob.EmailAddress);
     base.SyncFailureCode         = requestJob.FailureCode;
     base.SyncFailureTimestamp    = (ExDateTime?)requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.Failure);
     base.SyncFailureType         = requestJob.FailureType;
     base.SyncLastUpdateTimestamp = (ExDateTime?)requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.LastUpdate);
     base.SyncQueuedTimestamp     = (ExDateTime?)requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.Creation);
     base.SyncRequestGuid         = new Guid?(requestJob.RequestGuid);
     base.SyncStartTimestamp      = (ExDateTime?)requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.Start);
     base.SyncStatus              = new RequestStatus?(requestJob.Status);
     base.SyncSuspendedTimestamp  = (ExDateTime?)requestJob.TimeTracker.GetTimestamp(RequestJobTimestamp.Suspended);
 }
        private static bool ValidateNoOtherRequests(RequestJobBase requestJobBase)
        {
            IEnumerable <RequestIndexId> source = from i in requestJobBase.IndexEntries
                                                  select i.RequestIndexId into i
                                                  where i.Location == RequestIndexLocation.Mailbox
                                                  select i;

            if (source.Any((RequestIndexId i) => i.Mailbox.Equals(requestJobBase.UserId)))
            {
                string otherRequests = MailboxRequestIndexEntryHandler.GetOtherRequests(requestJobBase.User, new Guid?(requestJobBase.RequestGuid));
                if (!string.IsNullOrEmpty(otherRequests))
                {
                    requestJobBase.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch);
                    requestJobBase.ValidationMessage = MrsStrings.ValidationObjectInvolvedInMultipleRelocations(MrsStrings.Mailbox, otherRequests);
                    return(false);
                }
            }
            if (requestJobBase.User.UnifiedMailbox != null)
            {
                ADRecipient tempRecipient;
                if (ADRecipient.TryGetFromCrossTenantObjectId(requestJobBase.User.UnifiedMailbox, out tempRecipient).Succeeded&& source.Any((RequestIndexId i) => i.Mailbox.Equals(tempRecipient.Id)))
                {
                    string otherRequests = MailboxRequestIndexEntryHandler.GetOtherRequests((ADUser)tempRecipient, new Guid?(requestJobBase.RequestGuid));
                    if (!string.IsNullOrEmpty(otherRequests))
                    {
                        requestJobBase.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch);
                        requestJobBase.ValidationMessage = MrsStrings.ValidationObjectInvolvedInMultipleRelocations(MrsStrings.SourceContainer, otherRequests);
                        return(false);
                    }
                }
            }
            if (requestJobBase.TargetUnifiedMailboxId != null)
            {
                ADRecipient tempRecipient;
                if (ADRecipient.TryGetFromCrossTenantObjectId(requestJobBase.TargetUnifiedMailboxId, out tempRecipient).Succeeded&& source.Any((RequestIndexId i) => i.Mailbox.Equals(tempRecipient.Id)))
                {
                    string otherRequests = MailboxRequestIndexEntryHandler.GetOtherRequests((ADUser)tempRecipient, new Guid?(requestJobBase.RequestGuid));
                    if (!string.IsNullOrEmpty(otherRequests))
                    {
                        requestJobBase.ValidationResult  = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch);
                        requestJobBase.ValidationMessage = MrsStrings.ValidationObjectInvolvedInMultipleRelocations(MrsStrings.TargetContainer, otherRequests);
                        return(false);
                    }
                }
            }
            return(true);
        }
Пример #22
0
        public static void SetStartAfter(DateTime?startAfter, RequestJobBase dataObject, StringBuilder changedValuesTracker = null)
        {
            DateTime?value = null;

            if (startAfter != null)
            {
                value = new DateTime?(startAfter.Value.ToUniversalTime());
            }
            string arg = (value == null) ? "(null)" : value.ToString();

            RequestTaskHelper.TrackerAppendLine(changedValuesTracker, string.Format("TimeTracker.StartAfter: {0} -> {1}", dataObject.TimeTracker.GetTimestamp(RequestJobTimestamp.StartAfter), arg));
            dataObject.TimeTracker.SetTimestamp(RequestJobTimestamp.StartAfter, value);
            DateTime?timestamp = dataObject.TimeTracker.GetTimestamp(RequestJobTimestamp.DoNotPickUntil);

            RequestTaskHelper.TrackerAppendLine(changedValuesTracker, string.Format("TimeTracker.DoNotPickUntilTimeStamp: {0} -> {1}", timestamp, arg));
            dataObject.TimeTracker.SetTimestamp(RequestJobTimestamp.DoNotPickUntil, value);
        }
Пример #23
0
 public override MRSRequestWrapper CreateRequestIndexEntryFromRequestJob(RequestJobBase requestJob, IConfigurationSession session)
 {
     return(new MRSRequestWrapper(session, requestJob.RequestType, ADHandler.GenerateCommonName(requestJob.Name, requestJob.SourceAlias, requestJob.TargetAlias))
     {
         Name = requestJob.Name,
         RequestGuid = requestJob.RequestGuid,
         Status = requestJob.Status,
         Flags = requestJob.Flags,
         RemoteHostName = requestJob.RemoteHostName,
         BatchName = requestJob.BatchName,
         SourceMDB = requestJob.SourceDatabase,
         TargetMDB = requestJob.TargetDatabase,
         StorageMDB = requestJob.WorkItemQueueMdb,
         FilePath = requestJob.FilePath,
         TargetUserId = requestJob.TargetUserId,
         SourceUserId = requestJob.SourceUserId,
         OrganizationId = requestJob.OrganizationId
     });
 }
Пример #24
0
 protected override void UpdateCachedRequestJob(RequestJobBase request)
 {
     base.UpdateCachedRequestJob(request);
     if ((request.Flags & RequestFlags.RemoteLegacy) != RequestFlags.None)
     {
         if (request.Direction == RequestDirection.Pull)
         {
             base.ForeachMailboxContext(delegate(MailboxMover mbxCtx)
             {
                 mbxCtx.SourceMailbox.ConfigADConnection(request.SourceDCName, request.SourceDCName, request.SourceCredential);
             });
             return;
         }
         base.ForeachMailboxContext(delegate(MailboxMover mbxCtx)
         {
             mbxCtx.DestMailbox.ConfigADConnection(request.TargetDCName, request.TargetDCName, request.TargetCredential);
         });
     }
 }
 public static void CreateAndPopulateRequestIndexEntries(RequestJobBase requestJobBase, RequestIndexId requestIndexId)
 {
     if (requestJobBase == null)
     {
         throw new ArgumentNullException("requestJobBase");
     }
     if (requestJobBase.IndexEntries == null)
     {
         requestJobBase.IndexEntries = new List <IRequestIndexEntry>();
     }
     if (requestJobBase.IndexIds == null)
     {
         requestJobBase.IndexIds = new List <RequestIndexId>();
     }
     RequestIndexEntryProvider.Handle(requestIndexId.RequestIndexEntryType, delegate(IRequestIndexEntryHandler handler)
     {
         IRequestIndexEntry item = handler.CreateRequestIndexEntryFromRequestJob(requestJobBase, requestIndexId);
         requestJobBase.IndexIds.Add(requestIndexId);
         requestJobBase.IndexEntries.Add(item);
     });
 }
Пример #26
0
        private static void SetCalculatedSkipMovingDefaults(RequestJobBase moveRequest)
        {
            bool flag  = false;
            bool flag2 = false;

            if (moveRequest.PrimaryIsMoving)
            {
                ServerVersion serverVersion  = new ServerVersion(moveRequest.SourceVersion);
                ServerVersion serverVersion2 = new ServerVersion(moveRequest.TargetVersion);
                if (serverVersion.Major != serverVersion2.Major)
                {
                    flag = true;
                }
                if (serverVersion2.Major < Server.Exchange2011MajorVersion)
                {
                    flag2 = true;
                }
            }
            if (moveRequest.ArchiveIsMoving)
            {
                ServerVersion serverVersion  = new ServerVersion(moveRequest.SourceArchiveVersion);
                ServerVersion serverVersion2 = new ServerVersion(moveRequest.TargetArchiveVersion);
                if (serverVersion.Major != serverVersion2.Major)
                {
                    flag = true;
                }
                if (serverVersion2.Major < Server.Exchange2011MajorVersion)
                {
                    flag2 = true;
                }
            }
            if (flag)
            {
                moveRequest.SkipFolderPromotedProperties = true;
            }
            if (flag2)
            {
                moveRequest.SkipFolderViews = true;
            }
        }
Пример #27
0
 public override MRSRequestMailboxEntry CreateRequestIndexEntryFromRequestJob(RequestJobBase requestJob, RequestIndexId requestIndexId)
 {
     ArgumentValidator.ThrowIfNull("requestJob", requestJob);
     return(new MRSRequestMailboxEntry
     {
         Type = requestJob.RequestType,
         Name = requestJob.Name,
         RequestGuid = requestJob.RequestGuid,
         Status = requestJob.Status,
         Flags = requestJob.Flags,
         RemoteHostName = requestJob.RemoteHostName,
         BatchName = requestJob.BatchName,
         SourceMDB = requestJob.SourceDatabase,
         TargetMDB = requestJob.TargetDatabase,
         StorageMDB = requestJob.WorkItemQueueMdb,
         FilePath = requestJob.FilePath,
         TargetUserId = requestJob.TargetUserId,
         SourceUserId = requestJob.SourceUserId,
         OrganizationId = requestJob.OrganizationId,
         RequestIndexId = requestIndexId
     });
 }
        public static void CreateAndPopulateRequestIndexEntries(RequestJobBase requestJobBase, IConfigurationSession session)
        {
            if (requestJobBase == null)
            {
                throw new ArgumentNullException("requestJobBase");
            }
            if (requestJobBase.IndexEntries == null)
            {
                requestJobBase.IndexEntries = new List <IRequestIndexEntry>();
            }
            if (requestJobBase.IndexIds == null)
            {
                requestJobBase.IndexIds = new List <RequestIndexId>();
            }
            RequestIndexId indexId = new RequestIndexId(RequestIndexLocation.AD);

            RequestIndexEntryProvider.Handle(indexId.RequestIndexEntryType, delegate(IRequestIndexEntryHandler handler)
            {
                IRequestIndexEntry item = handler.CreateRequestIndexEntryFromRequestJob(requestJobBase, session);
                requestJobBase.IndexIds.Add(indexId);
                requestJobBase.IndexEntries.Add(item);
            });
        }
 internal void UpdateADData(ADUser user, TransactionalRequestJob requestJob, bool save)
 {
     if (save)
     {
         user.MailboxMoveStatus           = RequestJobBase.GetVersionAppropriateStatus(requestJob.Status, user.ExchangeVersion);
         user.MailboxMoveFlags            = RequestJobBase.GetVersionAppropriateFlags(requestJob.Flags, user.ExchangeVersion);
         user.MailboxMoveSourceMDB        = requestJob.SourceDatabase;
         user.MailboxMoveTargetMDB        = requestJob.TargetDatabase;
         user.MailboxMoveSourceArchiveMDB = requestJob.SourceArchiveDatabase;
         user.MailboxMoveTargetArchiveMDB = requestJob.TargetArchiveDatabase;
         user.MailboxMoveRemoteHostName   = requestJob.RemoteHostName;
         user.MailboxMoveBatchName        = requestJob.BatchName;
         return;
     }
     user.MailboxMoveStatus           = RequestStatus.None;
     user.MailboxMoveFlags            = RequestFlags.None;
     user.MailboxMoveSourceMDB        = null;
     user.MailboxMoveTargetMDB        = null;
     user.MailboxMoveSourceArchiveMDB = null;
     user.MailboxMoveTargetArchiveMDB = null;
     user.MailboxMoveRemoteHostName   = null;
     user.MailboxMoveBatchName        = null;
 }
Пример #30
0
        public static void SetCompleteAfter(DateTime?completeAfter, RequestJobBase dataObject, StringBuilder changedValuesTracker = null)
        {
            DateTime?value = null;

            if (completeAfter != null)
            {
                value = new DateTime?(completeAfter.Value.ToUniversalTime());
            }
            string arg = (value == null) ? "(null)" : value.ToString();

            RequestTaskHelper.TrackerAppendLine(changedValuesTracker, string.Format("TimeTracker.CompleteAfter: {0} -> {1}", dataObject.TimeTracker.GetTimestamp(RequestJobTimestamp.CompleteAfter), arg));
            dataObject.TimeTracker.SetTimestamp(RequestJobTimestamp.CompleteAfter, value);
            if (dataObject.Status == RequestStatus.Synced)
            {
                DateTime?timestamp = dataObject.TimeTracker.GetTimestamp(RequestJobTimestamp.DoNotPickUntil);
                TimeSpan incrementalSyncInterval = dataObject.IncrementalSyncInterval;
                if (incrementalSyncInterval == TimeSpan.Zero || (value != null && value.Value < timestamp))
                {
                    RequestTaskHelper.TrackerAppendLine(changedValuesTracker, string.Format("TimeTracker.DoNotPickUntilTimeStamp: {0} -> {1}", timestamp, arg));
                    dataObject.TimeTracker.SetTimestamp(RequestJobTimestamp.DoNotPickUntil, value);
                }
            }
        }