private void ValidateAndAddToFinalSourceMailboxes(string searchQuery, StorageMiniRecipient recipient, IList <ISource> finalSourceMailboxes, IList <string> versionSkippedMailboxes, IList <string> rbacDeniedMailboxes, Dictionary <MiniRecipient, MailboxInfo> crossPremiseMailboxes) { if (!this.ExecutingUserRunspace.IsCmdletAllowedInScope("New-MailboxSearch", new string[] { "EstimateOnly" }, recipient, ScopeLocation.RecipientWrite)) { rbacDeniedMailboxes.Add(recipient.LegacyExchangeDN); return; } if (!this.ValidExchangeVersion(recipient)) { versionSkippedMailboxes.Add(recipient.LegacyExchangeDN); return; } MailboxInfo value = new MailboxInfo(recipient, MailboxType.Primary); SourceMailbox item; if ((recipient.RecipientTypeDetails & (RecipientTypeDetails)((ulong)-2147483648)) == (RecipientTypeDetails)((ulong)-2147483648) || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteRoomMailbox) == RecipientTypeDetails.RemoteRoomMailbox || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteEquipmentMailbox) == RecipientTypeDetails.RemoteEquipmentMailbox || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteTeamMailbox) == RecipientTypeDetails.RemoteTeamMailbox || (recipient.RecipientTypeDetails & RecipientTypeDetails.RemoteSharedMailbox) == RecipientTypeDetails.RemoteSharedMailbox) { crossPremiseMailboxes.Add(recipient, value); item = new SourceMailbox(recipient.ExternalEmailAddress.AddressString, recipient.DisplayName, recipient.LegacyExchangeDN, BackEndLocator.GetBackEndWebServicesUrl(recipient), searchQuery); finalSourceMailboxes.Add(item); return; } item = new SourceMailbox(recipient.PrimarySmtpAddress.ToString(), recipient.DisplayName, recipient.LegacyExchangeDN, BackEndLocator.GetBackEndWebServicesUrl(recipient), searchQuery); ExchangePrincipal exchangePrincipal = ExchangePrincipal.FromMiniRecipient(recipient, RemotingOptions.AllowCrossSite); if (exchangePrincipal.MailboxInfo.Location.ServerVersion < Server.E15MinVersion || exchangePrincipal.MailboxInfo.Location == null || string.IsNullOrEmpty(exchangePrincipal.MailboxInfo.Location.ServerFqdn)) { versionSkippedMailboxes.Add(recipient.LegacyExchangeDN); return; } finalSourceMailboxes.Add(item); }
private IGenericADUser TranslateMiniRecipient(StorageMiniRecipient recipient) { IGenericADUser result = null; if (recipient != null) { result = new MiniRecipientGenericWrapper(recipient); } return(result); }
public IGenericADUser FindMiniRecipientByProxyAddress(IRecipientSession recipientSession, ProxyAddress proxyAddress, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient) { ArgumentValidator.ThrowIfNull("recipientSession", recipientSession); StorageMiniRecipient localMiniRecipient = null; this.DoAdCallAndTranslateExceptions(delegate { localMiniRecipient = recipientSession.FindMiniRecipientByProxyAddress <StorageMiniRecipient>(proxyAddress, miniRecipientProperties); }, "DirectoryAccessor::FindMiniRecipientByProxyAddress"); miniRecipient = localMiniRecipient; return(this.TranslateMiniRecipient(miniRecipient)); }
public ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient, RemotingOptions remotingOptions) { return(this.FromMiniRecipient(new MiniRecipientGenericWrapper(miniRecipient), remotingOptions)); }
public ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient) { return(this.FromMiniRecipient(miniRecipient, RemotingOptions.LocalConnectionsOnly)); }
public ExchangePrincipal FromLegacyDNByMiniRecipient(IRecipientSession recipientSession, string legacyDN, RemotingOptions remotingOptions, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient) { Util.ThrowOnNullArgument(recipientSession, "recipientSession"); Util.ThrowOnNullArgument(legacyDN, "legacyDN"); EnumValidator.ThrowIfInvalid <RemotingOptions>(remotingOptions, "remotingOptions"); if (legacyDN.Length == 0) { throw new ArgumentException("legacyDN has zero length", "legacyDN"); } Guid mbxGuid; legacyDN = this.TryToExtractArchiveOrAggregatedMailboxGuid(legacyDN, out mbxGuid); IGenericADUser genericADUser = this.directoryAccessor.FindMiniRecipientByProxyAddress(recipientSession, ProxyAddressPrefix.LegacyDN.GetProxyAddress(legacyDN, true), miniRecipientProperties, out miniRecipient); if (genericADUser == null) { throw new ObjectNotFoundException(ServerStrings.ADUserNotFound); } ADObjectId mdb; bool asArchive = this.UpdateArchiveStatus(mbxGuid, genericADUser, out mdb); Guid? aggregatedMailboxGuid = null; if (genericADUser.AggregatedMailboxGuids != null) { aggregatedMailboxGuid = (genericADUser.AggregatedMailboxGuids.Any((Guid mailbox) => mailbox == mbxGuid) ? new Guid?(mbxGuid) : null); } IMailboxLocation mailboxLocation = new OnDemandMailboxLocation(() => new MailboxDatabaseLocation(this.databaseLocationProvider.GetLocationInfo(mdb.ObjectGuid, false, (remotingOptions & RemotingOptions.AllowCrossSite) == RemotingOptions.AllowCrossSite))); ExchangePrincipal exchangePrincipal = this.InternalFromMiniRecipient(genericADUser, mdb, mailboxLocation, remotingOptions, asArchive, aggregatedMailboxGuid); if (mbxGuid != Guid.Empty && !exchangePrincipal.MailboxInfo.IsAggregated && !exchangePrincipal.MailboxInfo.IsArchive) { throw new ObjectNotFoundException(ServerStrings.AggregatedMailboxNotFound(mbxGuid.ToString())); } return(exchangePrincipal); }
public ExchangePrincipal FromLegacyDNByMiniRecipient(ADSessionSettings adSettings, string legacyDN, RemotingOptions remotingOptions, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient) { Util.ThrowOnNullArgument(adSettings, "adSettings"); return(this.FromLegacyDNByMiniRecipient(adSettings.CreateRecipientSession(null), legacyDN, remotingOptions, miniRecipientProperties, out miniRecipient)); }
public static ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient, RemotingOptions remotingOptions) { return(ExchangePrincipal.ExchangePrincipalFactory.FromMiniRecipient(miniRecipient, remotingOptions)); }
public static ExchangePrincipal FromMiniRecipient(StorageMiniRecipient miniRecipient) { return(ExchangePrincipal.ExchangePrincipalFactory.FromMiniRecipient(miniRecipient)); }
public static ExchangePrincipal FromLegacyDNByMiniRecipient(IRecipientSession recipientSession, string legacyDN, RemotingOptions remotingOptions, PropertyDefinition[] miniRecipientProperties, out StorageMiniRecipient miniRecipient) { return(ExchangePrincipal.ExchangePrincipalFactory.FromLegacyDNByMiniRecipient(recipientSession, legacyDN, remotingOptions, miniRecipientProperties, out miniRecipient)); }
// 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); }
public MiniRecipientGenericWrapper(StorageMiniRecipient storageMiniRecipient) { ArgumentValidator.ThrowIfNull("storageMiniRecipient", storageMiniRecipient); this.storageMiniRecipient = storageMiniRecipient; }
public static SmtpAddress GetFederatedSmtpAddress(this StorageMiniRecipient storageMiniRecipient) { return(new MiniRecipientGenericWrapper(storageMiniRecipient).GetFederatedSmtpAddress(storageMiniRecipient.PrimarySmtpAddress)); }
public IList <ISource> ValidateAndGetFinalSourceMailboxes(string searchQuery, IList <string> sourceMailboxes, IList <string> notFoundMailboxes, IList <string> versionSkippedMailboxes, IList <string> rbacDeniedMailboxes, IList <string> crossPremiseFailedMailboxes, IDictionary <Uri, string> crossPremiseUrls) { Util.ThrowIfNullOrEmpty(searchQuery, "Search query cannot be empty."); Util.ThrowIfNull(sourceMailboxes, "sourceMailboxes"); Util.ThrowIfNull(notFoundMailboxes, "notFoundMailboxes"); Util.ThrowIfNull(versionSkippedMailboxes, "versionSkippedMailboxes"); Util.ThrowIfNull(rbacDeniedMailboxes, "rbacDeniedMailboxes"); Util.ThrowIfNull(crossPremiseFailedMailboxes, "crossPremiseFailedMailboxes"); Util.ThrowIfNull(crossPremiseUrls, "crossPremiseUrls"); List <ISource> list = new List <ISource>(); Dictionary <MiniRecipient, MailboxInfo> dictionary = new Dictionary <MiniRecipient, MailboxInfo>(); int num = 0; if (sourceMailboxes.Count == 0) { AndFilter filter = new AndFilter(new QueryFilter[] { new OrFilter(new QueryFilter[] { Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.UserMailbox), Util.CreateRecipientTypeDetailsValueFilter((RecipientTypeDetails)((ulong)int.MinValue)), Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteRoomMailbox), Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteEquipmentMailbox), Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteSharedMailbox), Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.RemoteTeamMailbox) }), new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.ArbitrationMailbox)), new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.MonitoringMailbox)), new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.AuditLogMailbox)), new NotFilter(Util.CreateRecipientTypeDetailsValueFilter(RecipientTypeDetails.MailboxPlan)) }); this.CheckRecipientSessionIsNotNull(); ADPagedReader <StorageMiniRecipient> adpagedReader = this.recipientSession.FindPagedMiniRecipient <StorageMiniRecipient>(null, QueryScope.SubTree, filter, null, 1000, SearchMailboxCriteria.RecipientTypeDetailsProperty); using (IEnumerator <StorageMiniRecipient> enumerator = adpagedReader.GetEnumerator()) { while (enumerator.MoveNext()) { StorageMiniRecipient storageMiniRecipient = enumerator.Current; if (!storageMiniRecipient.LegacyExchangeDN.Equals(this.SearchObject.Target, StringComparison.OrdinalIgnoreCase)) { if ((long)(++num) > (long)((ulong)this.MaxMailboxesToSearch)) { throw new SearchTooManyMailboxesException((int)this.MaxMailboxesToSearch); } this.ValidateAndAddToFinalSourceMailboxes(searchQuery, storageMiniRecipient, list, versionSkippedMailboxes, rbacDeniedMailboxes, dictionary); } } goto IL_2B6; } } foreach (ADObjectId adobjectId in this.ExpandGroupMembers(sourceMailboxes, this.DiscoverySystemMailboxUser.OrganizationId, notFoundMailboxes)) { if ((this.SearchObject.Target == null || !adobjectId.Equals(this.TargetMailboxUser.Id)) && !adobjectId.Equals(this.DiscoverySystemMailboxUser.Id)) { this.CheckRecipientSessionIsNotNull(); StorageMiniRecipient storageMiniRecipient2 = this.recipientSession.ReadMiniRecipient <StorageMiniRecipient>(adobjectId, SearchMailboxCriteria.RecipientTypeDetailsProperty); if (storageMiniRecipient2 != null) { if ((long)(++num) > (long)((ulong)this.MaxMailboxesToSearch)) { throw new SearchTooManyMailboxesException((int)this.MaxMailboxesToSearch); } this.ValidateAndAddToFinalSourceMailboxes(searchQuery, storageMiniRecipient2, list, versionSkippedMailboxes, rbacDeniedMailboxes, dictionary); } else { Util.Tracer.TraceError <string>((long)this.GetHashCode(), "Unable to find mailbox: {0}", adobjectId.Name); } } } IL_2B6: if (dictionary.Count > 0) { string domain = dictionary.First <KeyValuePair <MiniRecipient, MailboxInfo> >().Value.GetDomain(); Util.Tracer.TraceDebug <string>((long)this.GetHashCode(), "Before autodiscover for cross premise domain: {0}", domain); Uri uri = null; EndPointDiscoveryInfo endPointDiscoveryInfo; bool flag = RemoteDiscoveryEndPoint.TryGetDiscoveryEndPoint(this.SearchDataProvider.OrganizationId, domain, null, null, null, out uri, out endPointDiscoveryInfo); if (endPointDiscoveryInfo != null) { ScenarioData.Current["IOC"] = ((int)endPointDiscoveryInfo.Status).ToString(); if (endPointDiscoveryInfo.Status != EndPointDiscoveryInfo.DiscoveryStatus.Success) { SearchEventLogger.Instance.LogSearchErrorEvent(ScenarioData.Current["SID"], endPointDiscoveryInfo.Message); } } if (flag) { Util.Tracer.TraceDebug <Uri>((long)this.GetHashCode(), "Auto discover Url : {1}", uri); ICredentials oauthCredentialsForAppToken = OAuthCredentials.GetOAuthCredentialsForAppToken(this.SearchDataProvider.OrganizationId, domain); List <MailboxInfo> list2 = new List <MailboxInfo>(dictionary.Count); foreach (KeyValuePair <MiniRecipient, MailboxInfo> keyValuePair in dictionary) { list2.Add(keyValuePair.Value); } IAutodiscoveryClient autodiscoveryClient = Factory.Current.CreateUserSettingAutoDiscoveryClient(list2, EwsWsSecurityUrl.FixForAnonymous(uri), oauthCredentialsForAppToken, new CallerInfo(true, null, null, string.Empty, null, null, null)); IAsyncResult result = autodiscoveryClient.BeginAutodiscover(null, null); Dictionary <GroupId, List <MailboxInfo> > dictionary2 = autodiscoveryClient.EndAutodiscover(result); if (dictionary2 != null) { using (Dictionary <GroupId, List <MailboxInfo> > .Enumerator enumerator4 = dictionary2.GetEnumerator()) { while (enumerator4.MoveNext()) { KeyValuePair <GroupId, List <MailboxInfo> > keyValuePair2 = enumerator4.Current; if (keyValuePair2.Key.GroupType == GroupType.CrossPremise) { if (!crossPremiseUrls.ContainsKey(keyValuePair2.Key.Uri)) { crossPremiseUrls.Add(keyValuePair2.Key.Uri, domain); } using (List <ISource> .Enumerator enumerator5 = list.GetEnumerator()) { while (enumerator5.MoveNext()) { ISource source = enumerator5.Current; SourceMailbox sourceMailbox = (SourceMailbox)source; foreach (MailboxInfo mailboxInfo in keyValuePair2.Value) { if (string.Compare(sourceMailbox.LegacyExchangeDN, mailboxInfo.LegacyExchangeDN, StringComparison.OrdinalIgnoreCase) == 0) { sourceMailbox.ServiceEndpoint = keyValuePair2.Key.Uri; break; } } } continue; } } if (keyValuePair2.Key.GroupType == GroupType.SkippedError) { foreach (MailboxInfo mailboxInfo2 in keyValuePair2.Value) { Util.Tracer.TraceError <SmtpAddress>((long)this.GetHashCode(), "Auto discover skipped error for mailbox: {0}", mailboxInfo2.PrimarySmtpAddress); crossPremiseFailedMailboxes.Add(mailboxInfo2.LegacyExchangeDN); } } } goto IL_5F2; } } Util.Tracer.TraceError <string>((long)this.GetHashCode(), "Auto discover results is null for domain: {0}", domain); } else { Util.Tracer.TraceError <string>((long)this.GetHashCode(), "Organization relationship is not set up for domain: {0}", domain); foreach (KeyValuePair <MiniRecipient, MailboxInfo> keyValuePair3 in dictionary) { crossPremiseFailedMailboxes.Add(keyValuePair3.Value.LegacyExchangeDN); } } } IL_5F2: if (crossPremiseFailedMailboxes.Count > 0) { foreach (string b in crossPremiseFailedMailboxes) { for (int i = list.Count - 1; i >= 0; i--) { ISource source2 = list[i]; if (source2.LegacyExchangeDN == b) { list.RemoveAt(i); } } } } return(list); }