Exemple #1
0
        // Token: 0x06001561 RID: 5473 RVA: 0x00079BAC File Offset: 0x00077DAC
        public MailboxProcessorMailboxData(DatabaseInfo databaseInfo, Guid mailboxGuid, int mailboxNumber, PropValue[] row) : base(mailboxGuid, mailboxNumber, databaseInfo.Guid)
        {
            MailboxProcessorAssistantType.TraceInformation(0L, "Retrieving mailbox information for database {0}", new object[]
            {
                databaseInfo.Guid
            });
            this.DatabaseName = databaseInfo.DatabaseName;
            PropValue mailboxProperty = MailboxTableQuery.GetMailboxProperty(row, PropTag.MailboxMiscFlags);

            if (mailboxProperty.PropTag == PropTag.MailboxMiscFlags)
            {
                MailboxMiscFlags @int = (MailboxMiscFlags)mailboxProperty.GetInt();
                this.IsMoveDestination = ((@int & MailboxMiscFlags.CreatedByMove) == MailboxMiscFlags.CreatedByMove);
                this.IsArchive         = ((@int & MailboxMiscFlags.ArchiveMailbox) == MailboxMiscFlags.ArchiveMailbox);
            }
            else
            {
                MailboxProcessorAssistantType.TraceInformation(0L, "Cannot retrieve property MailboxMiscFlags for Mailbox with GUID {0}", new object[]
                {
                    mailboxGuid
                });
                this.IsMoveDestination = false;
                this.IsArchive         = false;
            }
            PropValue mailboxProperty2 = MailboxTableQuery.GetMailboxProperty(row, PropTag.PersistableTenantPartitionHint);

            this.TenantPartitionHint = null;
            if (mailboxProperty2.PropTag == PropTag.PersistableTenantPartitionHint)
            {
                byte[] bytes = mailboxProperty2.GetBytes();
                if (bytes != null && bytes.Length != 0)
                {
                    this.TenantPartitionHint = TenantPartitionHint.FromPersistablePartitionHint(bytes);
                }
            }
            else
            {
                MailboxProcessorAssistantType.TraceInformation(0L, "Cannot retrieve property PersistableTenantPartitionHint for Mailbox with GUID {0}", new object[]
                {
                    mailboxGuid
                });
            }
            MailboxProcessorAssistantType.TraceInformation(0L, "Found mailbox with GUID {0}. Is archive: {1}", new object[]
            {
                mailboxGuid,
                this.IsArchive
            });
        }
Exemple #2
0
        // Token: 0x06001558 RID: 5464 RVA: 0x00079684 File Offset: 0x00077884
        bool IMailboxIssueDetector.IsMailboxProblemDetected(MailboxProcessorMailboxData mailboxData)
        {
            if (!mailboxData.IsMoveDestination)
            {
                return(false);
            }
            ADUser aduserFromMailboxGuid;

            try
            {
                aduserFromMailboxGuid = ADHelper.GetADUserFromMailboxGuid(mailboxData.MailboxGuid, mailboxData.TenantPartitionHint);
            }
            catch (NonUniqueRecipientException)
            {
                MailboxProcessorAssistantType.Tracer.TraceError <Guid>((long)this.GetHashCode(), "Got AD duplicate by GUID: {0}", mailboxData.MailboxGuid);
                return(false);
            }
            catch (ADTransientException)
            {
                return(false);
            }
            if (aduserFromMailboxGuid == null || (mailboxData.IsArchive && aduserFromMailboxGuid.ArchiveDatabase == null) || aduserFromMailboxGuid.Database == null)
            {
                return(false);
            }
            Guid a = mailboxData.IsArchive ? aduserFromMailboxGuid.ArchiveDatabase.ObjectGuid : aduserFromMailboxGuid.Database.ObjectGuid;

            if (a != mailboxData.DatabaseGuid)
            {
                MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox {0} is on the different database than AD user {1}. Not eligible for unlocking.", new object[]
                {
                    mailboxData.MailboxGuid,
                    aduserFromMailboxGuid.Guid
                });
                return(false);
            }
            if (aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.Completed && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.CompletedWithWarning && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.None && aduserFromMailboxGuid.MailboxMoveStatus != RequestStatus.Failed)
            {
                MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox with GUID {0} is being moved and not yet completed or not yet failed.", new object[]
                {
                    mailboxData.MailboxGuid
                });
                return(false);
            }
            ExchangePrincipal mailboxOwner = ExchangePrincipal.FromMailboxGuid(aduserFromMailboxGuid.Session.SessionSettings, mailboxData.MailboxGuid, mailboxData.DatabaseGuid, RemotingOptions.LocalConnectionsOnly, null, false);

            try
            {
                string clientInfoString = string.Format("{0};Action={1}", "Client=TBA", base.GetType().Name);
                using (MailboxSession.OpenAsAdmin(mailboxOwner, CultureInfo.InvariantCulture, clientInfoString, true))
                {
                    MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Mailbox {0} is not locked. No repair needed.", new object[]
                    {
                        mailboxData.MailboxGuid
                    });
                }
            }
            catch (MailboxInTransitException)
            {
                MailboxProcessorAssistantType.TraceInformation((long)this.GetHashCode(), "Found illegally locked mailbox with GUID {0}", new object[]
                {
                    mailboxData.MailboxGuid
                });
                this.AddMailboxToStatesCache(mailboxData);
                return(true);
            }
            catch (LocalizedException ex)
            {
                MailboxProcessorAssistantType.Tracer.TraceError((long)this.GetHashCode(), "{0} threw an exception of type {1} with message {2}. Was processing mailbox {3} on database {4}.", new object[]
                {
                    base.GetType().ToString(),
                    ex.GetType().ToString(),
                    ex.Message,
                    mailboxData.MailboxGuid,
                    mailboxData.DatabaseName
                });
            }
            return(false);
        }