Example #1
0
            public override Guid GetExternalDirectoryOrganizationId(LoadBalancingMiniRecipient recipient)
            {
                if (recipient.OrganizationId == OrganizationId.ForestWideOrgId)
                {
                    return(TenantPartitionHint.ExternalDirectoryOrganizationIdForRootOrg);
                }
                string text;

                try
                {
                    text = recipient.OrganizationId.ToExternalDirectoryOrganizationId();
                }
                catch (InvalidOperationException ex)
                {
                    string extraData = string.Format("OrgId: {0}, recipientGuid: {1}, database: {2}", recipient.OrganizationId.GetTenantGuid(), recipient.ExchangeObjectId, recipient.Database);
                    ExWatson.SendReport(ex, ReportOptions.None, extraData);
                    throw new InvalidOrganizationException(recipient.OrganizationId.ToString(), ex);
                }
                Guid result;

                if (!Guid.TryParse(text, out result))
                {
                    throw new InvalidOrganizationIdentityException(string.Format("{0}", recipient.OrganizationId), text);
                }
                return(result);
            }
        public DirectoryDatabase GetDatabaseForMailbox(DirectoryIdentity identity)
        {
            LoadBalancingMiniRecipient loadBalancingMiniRecipient = this.RecipientSession.FindRecipient(identity);

            if (loadBalancingMiniRecipient.Database == null)
            {
                return(null);
            }
            return(this.GetDatabase(loadBalancingMiniRecipient.Database.ObjectGuid));
        }
        public IEnumerable <DirectoryMailbox> GetMailboxesForDatabase(DirectoryDatabase database)
        {
            this.logger.LogVerbose("Getting mailboxes for database '{0}'", new object[]
            {
                database.Name
            });
            DirectoryIdentity databaseIdentity = database.Identity;

            using (IPhysicalDatabase physicalDatabase = this.clientFactory.GetPhysicalDatabaseConnection(database))
            {
                physicalDatabase.LoadMailboxes();
                IOperationRetryManager retryManager = LoadBalanceOperationRetryManager.Create(this.logger);
                foreach (LoadBalancingMiniRecipient recipient in this.RecipientSession.FindAllUsersLinkedToDatabase(databaseIdentity.ADObjectId))
                {
                    DirectoryMailbox           mailbox       = null;
                    LoadBalancingMiniRecipient miniRecipient = recipient;
                    retryManager.TryRun(delegate
                    {
                        mailbox        = this.GetMailboxFromMiniRecipient(miniRecipient, this.RecipientSession.GetExternalDirectoryOrganizationId(miniRecipient), physicalDatabase);
                        mailbox.Parent = database;
                        this.NotifyObjectLoaded(mailbox);
                    });
                    if (mailbox != null)
                    {
                        yield return(mailbox);
                    }
                }
                foreach (IPhysicalMailbox consumerMailbox in physicalDatabase.GetConsumerMailboxes())
                {
                    DirectoryIdentity consumerIdentity = DirectoryIdentity.CreateConsumerMailboxIdentity(consumerMailbox.Guid, physicalDatabase.DatabaseGuid, consumerMailbox.OrganizationId);
                    yield return(new DirectoryMailbox(this, consumerIdentity, new IPhysicalMailbox[]
                    {
                        consumerMailbox
                    }, DirectoryMailboxType.Consumer));
                }
                foreach (NonConnectedMailbox disconnectedMailbox in this.GetDisconnectedMailboxesForDatabaseInternal(database, physicalDatabase))
                {
                    yield return(disconnectedMailbox);
                }
            }
            yield break;
        }
        private DirectoryMailbox GetMailboxFromMiniRecipient(LoadBalancingMiniRecipient recipient, Guid organizationId, IPhysicalDatabase physicalDatabaseConnection)
        {
            List <IPhysicalMailbox> physicalMailboxes = new List <IPhysicalMailbox>(2);
            Guid exchangeGuid = recipient.ExchangeGuid;

            if (recipient.Database != null && exchangeGuid != Guid.Empty)
            {
                Guid objectGuid = recipient.Database.ObjectGuid;
                this.AddPhysicalMailboxToList(exchangeGuid, objectGuid, physicalDatabaseConnection, physicalMailboxes, false);
            }
            if (recipient.ArchiveGuid != Guid.Empty && recipient.ArchiveDatabase != null)
            {
                this.AddPhysicalMailboxToList(recipient.ArchiveGuid, recipient.ArchiveDatabase.ObjectGuid, physicalDatabaseConnection, physicalMailboxes, true);
            }
            DirectoryMailbox directoryMailbox;

            if (recipient.RecipientType == RecipientType.MailUser)
            {
                directoryMailbox = new CloudArchive(this, DirectoryIdentity.CreateMailboxIdentity(recipient.Guid, organizationId, DirectoryObjectType.CloudArchive), physicalMailboxes);
            }
            else
            {
                directoryMailbox = new DirectoryMailbox(this, DirectoryIdentity.CreateMailboxIdentity(recipient.Guid, organizationId, DirectoryObjectType.Mailbox), physicalMailboxes, DirectoryMailboxType.Organization);
                if (recipient.propertyBag.Contains(MiniRecipientSchema.ConfigurationXML) && recipient.ConfigXML != null)
                {
                    directoryMailbox.MailboxProvisioningConstraints = recipient.ConfigXML.MailboxProvisioningConstraints;
                }
            }
            if (recipient.MailboxMoveFlags.HasFlag(RequestFlags.IntraOrg) && (recipient.MailboxMoveStatus == RequestStatus.Queued || recipient.MailboxMoveStatus == RequestStatus.InProgress))
            {
                BatchName batchName = BatchName.FromString(recipient.MailboxMoveBatchName);
                if (batchName.IsLoadBalancingBatch)
                {
                    directoryMailbox.IsBeingLoadBalanced = true;
                }
            }
            return(directoryMailbox);
        }
        private DirectoryMailbox GetMailboxObject(DirectoryIdentity identity)
        {
            LoadBalancingMiniRecipient recipient = this.RecipientSession.FindRecipient(identity);

            return(this.GetMailboxFromMiniRecipient(recipient, identity.OrganizationId, null));
        }
Example #6
0
        // Token: 0x060003B5 RID: 949 RVA: 0x00015440 File Offset: 0x00013640
        internal static ADObject CreateAndInitializeRecipientObject <TRecipientObject>(ADPropertyBag propertyBag, ADRawEntry dummyObject, IRecipientSession recipientSession) where TRecipientObject : IConfigurable, new()
        {
            ArgumentValidator.ThrowIfNull("propertyBag", propertyBag);
            ArgumentValidator.ThrowIfNull("dummyObject", dummyObject);
            MultiValuedProperty <string> multiValuedProperty = (MultiValuedProperty <string>)propertyBag[ADObjectSchema.ObjectClass];
            ADObject adobject;

            if (dummyObject is OWAMiniRecipient)
            {
                adobject = new OWAMiniRecipient();
            }
            else if (dummyObject is ActiveSyncMiniRecipient)
            {
                adobject = new ActiveSyncMiniRecipient();
            }
            else if (dummyObject is StorageMiniRecipient)
            {
                adobject = new StorageMiniRecipient();
            }
            else if (dummyObject is TransportMiniRecipient)
            {
                adobject = new TransportMiniRecipient();
            }
            else if (dummyObject is LoadBalancingMiniRecipient)
            {
                adobject = new LoadBalancingMiniRecipient();
            }
            else if (dummyObject is MiniRecipientWithTokenGroups)
            {
                adobject = new MiniRecipientWithTokenGroups();
            }
            else if (dummyObject is FrontEndMiniRecipient)
            {
                adobject = new FrontEndMiniRecipient();
            }
            else if (dummyObject is MiniRecipient)
            {
                adobject = new MiniRecipient();
            }
            else if (dummyObject is RemovedMailbox)
            {
                adobject = new RemovedMailbox();
            }
            else if (dummyObject is DeletedRecipient)
            {
                adobject = new DeletedRecipient();
            }
            else if (multiValuedProperty.Contains(ADComputerRecipient.MostDerivedClass))
            {
                adobject = new ADComputerRecipient();
            }
            else if (multiValuedProperty.Contains(ADUser.MostDerivedClass))
            {
                adobject = new ADUser();
            }
            else if (multiValuedProperty.Contains(ADContact.MostDerivedClass))
            {
                adobject = new ADContact();
            }
            else if (multiValuedProperty.Contains(ADGroup.MostDerivedClass))
            {
                adobject = new ADGroup();
            }
            else if (multiValuedProperty.Contains(ADDynamicGroup.MostDerivedClass))
            {
                adobject = new ADDynamicGroup();
            }
            else if (multiValuedProperty.Contains(ADPublicFolder.MostDerivedClass))
            {
                adobject = new ADPublicFolder();
            }
            else if (multiValuedProperty.Contains(ADSystemAttendantMailbox.MostDerivedClass))
            {
                adobject = new ADSystemAttendantMailbox();
            }
            else if (multiValuedProperty.Contains(ADSystemMailbox.MostDerivedClass))
            {
                adobject = new ADSystemMailbox();
            }
            else if (multiValuedProperty.Contains(ADPublicDatabase.MostDerivedClass))
            {
                adobject = new ADPublicDatabase();
            }
            else
            {
                if (!multiValuedProperty.Contains(ADMicrosoftExchangeRecipient.MostDerivedClass))
                {
                    string objectClass = string.Empty;
                    foreach (string text in multiValuedProperty)
                    {
                        objectClass = text;
                    }
                    ObjectValidationError error = new ObjectValidationError(DirectoryStrings.UnsupportedObjectClass(objectClass), (ADObjectId)propertyBag[ADObjectSchema.Id], string.Empty);
                    ADProviderPerf.UpdateProcessCounter(Counter.ProcessRateCriticalValidationFailures, UpdateType.Update, 1U);
                    Globals.LogEvent(DirectoryEventLogConstants.Tuple_DSC_EVENT_VALIDATION_FAILED_FCO_MODE_RECIPIENT, ((ADObjectId)propertyBag[ADObjectSchema.Id]).ToString(), new object[]
                    {
                        ((ADObjectId)propertyBag[ADObjectSchema.Id]).ToDNString()
                    });
                    throw new DataValidationException(error);
                }
                adobject = new ADMicrosoftExchangeRecipient();
            }
            adobject.m_Session   = recipientSession;
            adobject.propertyBag = propertyBag;
            adobject.Initialize();
            adobject.ResetChangeTracking(true);
            if (recipientSession != null)
            {
                adobject.SetIsReadOnly(recipientSession.ReadOnly);
            }
            ExTraceGlobals.ADReadDetailsTracer.TraceDebug <string, RecipientType>((long)((recipientSession != null) ? recipientSession.GetHashCode() : 0), "ADRecipientObjectSession::CreateObject - Got {0} as {1}", adobject.DistinguishedName, (RecipientType)adobject[ADRecipientSchema.RecipientType]);
            return(adobject);
        }
Example #7
0
 public abstract Guid GetExternalDirectoryOrganizationId(LoadBalancingMiniRecipient recipient);