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) { FolderMoveRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; return; } if (!requestJob.ValidateUser(requestJob.SourceUser, requestJob.SourceUserId)) { return; } if (!requestJob.ValidateMailbox(requestJob.SourceUser, requestJob.SourceIsArchive)) { return; } if (!requestJob.ValidateUser(requestJob.TargetUser, requestJob.TargetUserId)) { return; } if (!requestJob.ValidateMailbox(requestJob.TargetUser, requestJob.TargetIsArchive)) { 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; }
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; } MoveRequestStatistics.LoadAdditionalPropertiesFromUser(requestJob); if (requestJob.CancelRequest || requestJob.Status == RequestStatus.Completed || requestJob.Status == RequestStatus.CompletedWithWarning) { 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 (requestJob.User.MailboxMoveStatus == RequestStatus.None) { MrsTracer.Common.Warning("Orphaned RequestJob: AD user {0} is not being moved.", new object[] { requestJob.User.ToString() }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Orphaned); requestJob.ValidationMessage = MrsStrings.ValidationADUserIsNotBeingMoved; return; } if (requestJob.Flags != requestJob.User.MailboxMoveFlags) { if ((requestJob.Flags & RequestJobBase.StaticFlags) != (requestJob.User.MailboxMoveFlags & RequestJobBase.StaticFlags)) { MrsTracer.Common.Error("Mismatched RequestJob: flags don't match: AD [{0}], workitem queue [{1}]", new object[] { requestJob.User.MailboxMoveFlags, requestJob.Flags }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationFlagsMismatch(requestJob.User.MailboxMoveFlags.ToString(), requestJob.Flags.ToString()); return; } MrsTracer.Common.Debug("Possibly mismatched RequestJob: flags don't match: AD [{0}], workitem queue [{1}]", new object[] { requestJob.User.MailboxMoveFlags, requestJob.Flags }); } if (requestJob.PrimaryIsMoving) { if (requestJob.SourceIsLocal && (requestJob.SourceDatabase == null || !requestJob.SourceDatabase.Equals(requestJob.User.MailboxMoveSourceMDB))) { MrsTracer.Common.Error("Mismatched RequestJob: Source database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveSourceMDB, requestJob.SourceDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationSourceMDBMismatch((requestJob.User.MailboxMoveSourceMDB != null) ? requestJob.User.MailboxMoveSourceMDB.ToString() : "(null)", (requestJob.SourceDatabase != null) ? requestJob.SourceDatabase.ToString() : "(null)"); return; } if (requestJob.TargetIsLocal && (requestJob.TargetDatabase == null || (!requestJob.RehomeRequest && !requestJob.TargetDatabase.Equals(requestJob.User.MailboxMoveTargetMDB)))) { MrsTracer.Common.Error("Target database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveTargetMDB, requestJob.TargetDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationTargetMDBMismatch((requestJob.User.MailboxMoveTargetMDB != null) ? requestJob.User.MailboxMoveTargetMDB.ToString() : "(null)", (requestJob.TargetDatabase != null) ? requestJob.TargetDatabase.ToString() : "(null)"); return; } } if (requestJob.JobType >= MRSJobType.RequestJobE14R5_PrimaryOrArchiveExclusiveMoves && requestJob.ArchiveIsMoving) { if (requestJob.SourceIsLocal && (requestJob.SourceArchiveDatabase == null || !requestJob.SourceArchiveDatabase.Equals(requestJob.User.MailboxMoveSourceArchiveMDB))) { MrsTracer.Common.Error("Mismatched RequestJob: Source archive database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveSourceArchiveMDB, requestJob.SourceArchiveDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationSourceArchiveMDBMismatch((requestJob.User.MailboxMoveSourceArchiveMDB != null) ? requestJob.User.MailboxMoveSourceArchiveMDB.ToString() : "(null)", (requestJob.SourceArchiveDatabase != null) ? requestJob.SourceArchiveDatabase.ToString() : "(null)"); return; } if (requestJob.TargetIsLocal && (requestJob.TargetArchiveDatabase == null || (!requestJob.RehomeRequest && !requestJob.TargetArchiveDatabase.Equals(requestJob.User.MailboxMoveTargetArchiveMDB)))) { MrsTracer.Common.Error("Target archive database does not match between AD ({0}) and RequestJob ({1})", new object[] { requestJob.User.MailboxMoveTargetArchiveMDB, requestJob.TargetArchiveDatabase }); requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.DataMismatch); requestJob.ValidationMessage = MrsStrings.ValidationTargetArchiveMDBMismatch((requestJob.User.MailboxMoveTargetArchiveMDB != null) ? requestJob.User.MailboxMoveTargetArchiveMDB.ToString() : "(null)", (requestJob.TargetArchiveDatabase != null) ? requestJob.TargetArchiveDatabase.ToString() : "(null)"); return; } } requestJob.ValidationResult = new RequestJobBase.ValidationResultEnum?(RequestJobBase.ValidationResultEnum.Valid); requestJob.ValidationMessage = LocalizedString.Empty; }