コード例 #1
0
        private bool HasOrganizationRelationship(OrganizationId organizationId)
        {
            OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(organizationId);
            OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(this.callerExternalIdentity.EmailAddress.Domain);

            return(organizationRelationship != null && organizationRelationship.Enabled && organizationRelationship.DomainNames.Contains(new SmtpDomain(this.callerExternalIdentity.EmailAddress.Domain)));
        }
        // Token: 0x060003AC RID: 940 RVA: 0x00016E68 File Offset: 0x00015068
        private ICollection <OrganizationRelationshipSettings> GetOrganizationRelationships(OrganizationIdCacheValue organizationIdCacheValue, List <SmtpAddress> addressList)
        {
            Dictionary <string, OrganizationRelationshipSettings> dictionary = new Dictionary <string, OrganizationRelationshipSettings>();

            foreach (SmtpAddress smtpAddress in addressList)
            {
                OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(smtpAddress.Domain);
                if (organizationRelationship == null)
                {
                    ExTraceGlobals.FrameworkTracer.TraceDebug <string>(0L, "GetOrganizationRelationshipSettingsRequestMessage.GetOrganizationRelationships() domain: {0} does not match any organization relationship.", smtpAddress.Domain);
                }
                else if (!organizationRelationship.Enabled)
                {
                    ExTraceGlobals.FrameworkTracer.TraceDebug <string, OrganizationId>(0L, "GetOrganizationRelationshipSettingsRequestMessage.GetOrganizationRelationships() organization relationship for domain: {0} with id {1} is disabled.", smtpAddress.Domain, organizationIdCacheValue.OrganizationId);
                }
                else if (!dictionary.ContainsKey(organizationRelationship.DistinguishedName))
                {
                    dictionary.Add(organizationRelationship.DistinguishedName, new OrganizationRelationshipSettings(organizationRelationship));
                }
            }
            if (dictionary.Count == 0)
            {
                return(null);
            }
            return(dictionary.Values);
        }
コード例 #3
0
        public IEnumerable <OrganizationRelationship> GetOrganizationRelationship()
        {
            IEnumerable <OrganizationRelationship> result;

            try
            {
                object[] array = this.monadProvider.ExecuteCommand("Get-OrganizationRelationship");
                if (array != null && array.Length > 0)
                {
                    OrganizationRelationship[] array2 = new OrganizationRelationship[array.Length];
                    for (int i = 0; i < array.Length; i++)
                    {
                        array2[i] = (OrganizationRelationship)array[i];
                    }
                    result = array2;
                }
                else
                {
                    result = null;
                }
            }
            catch
            {
                result = null;
            }
            return(result);
        }
コード例 #4
0
        private static TokenTarget FromOrganizationRelationship(string domain, OrganizationId organizationId)
        {
            OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(organizationId);

            TargetUriResolver.Tracer.TraceDebug <string, OrganizationId>(0L, "Searching for OrganizationRelationship that matches domain {0} in organization {1}", domain, organizationId);
            OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(domain);

            if (organizationRelationship == null)
            {
                TargetUriResolver.Tracer.TraceError <string, OrganizationId>(0L, "Found no OrganizationRelationship that matches domain {0} in organization {1}", domain, organizationId);
                return(null);
            }
            if (organizationRelationship.TargetApplicationUri == null)
            {
                TargetUriResolver.Tracer.TraceError <string, OrganizationId, ADObjectId>(0L, "Found OrganizationRelationship that matches domain {0} in organization {1}, but it has not TargetApplicationUri. OrganizationRelationship is {2}", domain, organizationId, organizationRelationship.Id);
                return(null);
            }
            TokenTarget tokenTarget = organizationRelationship.GetTokenTarget();

            TargetUriResolver.Tracer.TraceDebug(0L, "Found OrganizationRelationship that matches domain {0} in organization {1}. Target is '{2}'. OrganizationRelationship is {3}", new object[]
            {
                domain,
                organizationId,
                tokenTarget,
                organizationRelationship.Id
            });
            return(tokenTarget);
        }
コード例 #5
0
        protected ADObjectId ResolveMailboxDatabase(ADRawEntry activeDirectoryRawEntry)
        {
            if (activeDirectoryRawEntry == null)
            {
                throw new ArgumentNullException("activeDirectoryRawEntry");
            }
            SmtpProxyAddress smtpProxyAddress = (SmtpProxyAddress)activeDirectoryRawEntry[ADRecipientSchema.ExternalEmailAddress];

            if (smtpProxyAddress != null)
            {
                OrganizationId           key = (OrganizationId)activeDirectoryRawEntry[ADObjectSchema.OrganizationId];
                OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(key);
                if (!((SmtpAddress)smtpProxyAddress).IsValidAddress)
                {
                    ExTraceGlobals.VerboseTracer.TraceDebug((long)this.GetHashCode(), "[OwaProxyRequestHandler::ResolveMailboxDatabase]: ExternalEmailAddress configured is invalid.");
                }
                else
                {
                    OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(((SmtpAddress)smtpProxyAddress).Domain);
                    if (organizationRelationship != null && organizationRelationship.TargetOwaURL != null)
                    {
                        string absoluteUri = organizationRelationship.TargetOwaURL.AbsoluteUri;
                        ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "[OwaProxyRequestHandler::ResolveMailboxDatabase]: Stop processing and redirect to {0}.", absoluteUri);
                        base.Logger.AppendGenericInfo("ExternalRedir", absoluteUri);
                        throw new ServerSideTransferException(absoluteUri, LegacyRedirectTypeOptions.Manual);
                    }
                    ExTraceGlobals.VerboseTracer.TraceDebug((long)this.GetHashCode(), "[OwaProxyRequestHandler::ResolveMailboxDatabase]: Unable to find OrganizationRelationShip or its TargetOwaUrl is not configured.");
                    base.Logger.AppendGenericInfo("ExternalRedir", "Org-Relationship or targetOwaUrl not found.");
                }
            }
            return(null);
        }
コード例 #6
0
        private static bool IsOrganizationHasOrganizationRelationshipWithDomain(OrganizationId organizationId, string domain)
        {
            OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(organizationId);
            OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(domain);

            return(organizationRelationship != null);
        }
コード例 #7
0
        private bool TaskConfigure(ITaskContext taskContext)
        {
            IOrganizationConfig organizationConfig = taskContext.TenantSession.GetOrganizationConfig();

            if (organizationConfig.IsDehydrated)
            {
                try
                {
                    taskContext.TenantSession.EnableOrganizationCustomization();
                }
                catch
                {
                }
            }
            if (this.RequiresFederationTrust())
            {
                if (this.updateOnPremisesFedOrgId)
                {
                    IFederatedOrganizationIdentifier federatedOrganizationIdentifier = base.OnPremisesSession.GetFederatedOrganizationIdentifier();
                    string text = (federatedOrganizationIdentifier != null && federatedOrganizationIdentifier.DelegationTrustLink != null) ? federatedOrganizationIdentifier.DelegationTrustLink.ToString() : Configuration.FederatedTrustIdentity;
                    taskContext.OnPremisesSession.SetFederationTrustRefreshMetadata(text);
                    SmtpDomain autoDiscoverHybridDomain = this.AutoDiscoverHybridDomain;
                    string     defaultDomain            = (autoDiscoverHybridDomain != null && autoDiscoverHybridDomain.Domain != null) ? autoDiscoverHybridDomain.Domain : null;
                    taskContext.OnPremisesSession.SetFederatedOrganizationIdentifier(this.accountNamespace, text, defaultDomain);
                }
                List <Uri> acceptedTokenIssuerUris = taskContext.Parameters.Get <List <Uri> >("_onPremAcceptedTokenIssuerUris");
                if (!OrganizationRelationshipTask.VerifyAcceptedTokenIssuerUri(base.OnPremisesSession, acceptedTokenIssuerUris))
                {
                    throw new LocalizedException(HybridStrings.ErrorOnPremUsingConsumerLiveID);
                }
                acceptedTokenIssuerUris = taskContext.Parameters.Get <List <Uri> >("_tenantAcceptedTokenIssuerUris");
                if (!OrganizationRelationshipTask.VerifyAcceptedTokenIssuerUri(base.TenantSession, acceptedTokenIssuerUris))
                {
                    throw new LocalizedException(HybridStrings.ErrorTenantUsingConsumerLiveID);
                }
                if (this.updateTenantFedOrgId)
                {
                    base.TenantSession.SetFederatedOrganizationIdentifier(this.TenantCoexistenceDomain);
                }
                foreach (string domainName in this.addOnPremisesFedDomains)
                {
                    taskContext.OnPremisesSession.AddFederatedDomain(domainName);
                }
            }
            OrganizationRelationship value = OrganizationRelationshipTask.ProvisionOrganizationRelationship(base.OnPremisesSession, taskContext.Parameters.Get <OrganizationRelationship>("_onPremOrgRel"), this.OnpremisesFederationInfo, new SmtpDomain[]
            {
                new SmtpDomain(this.TenantCoexistenceDomain)
            }, TaskCommon.GetOnPremOrgRelationshipName(this.OnPremOrgConfig));

            taskContext.Parameters.Set <OrganizationRelationship>("_onPremOrgRel", value);
            value = OrganizationRelationshipTask.ProvisionOrganizationRelationship(base.TenantSession, taskContext.Parameters.Get <OrganizationRelationship>("_tenantOrgRel"), this.TenantFederationInfo, this.HybridDomains, TaskCommon.GetTenantOrgRelationshipName(this.OnPremOrgConfig));
            taskContext.Parameters.Set <OrganizationRelationship>("_tenantOrgRel", value);
            return(true);
        }
コード例 #8
0
        public override bool NeedsConfiguration(ITaskContext taskContext)
        {
            bool flag = base.NeedsConfiguration(taskContext);
            OrganizationRelationship existingOrgRel  = taskContext.Parameters.Get <OrganizationRelationship>("_onPremOrgRel");
            OrganizationRelationship existingOrgRel2 = taskContext.Parameters.Get <OrganizationRelationship>("_tenantOrgRel");

            return(flag || this.NeedProvisionOrganizationRelationship(base.OnPremisesSession, existingOrgRel, this.OnpremisesFederationInfo, new SmtpDomain[]
            {
                new SmtpDomain(this.TenantCoexistenceDomain)
            }, TaskCommon.GetOnPremOrgRelationshipName(this.OnPremOrgConfig)) || this.NeedProvisionOrganizationRelationship(base.TenantSession, existingOrgRel2, this.TenantFederationInfo, this.HybridDomains, TaskCommon.GetTenantOrgRelationshipName(this.OnPremOrgConfig)) || (this.RequiresFederationTrust() && (this.updateOnPremisesFedOrgId || this.updateTenantFedOrgId || this.addOnPremisesFedDomains.Count > 0)));
        }
コード例 #9
0
        public OrganizationRelationship GetOrganizationRelationship(OrganizationId organizationId, string domain)
        {
            OrganizationRelationship relationship = null;

            this.DoAdCallAndTranslateExceptions(delegate
            {
                OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(organizationId);
                relationship = organizationIdCacheValue.GetOrganizationRelationship(domain);
            }, "DirectoryAccessor:GetOrganizationRelationship");
            return(relationship);
        }
コード例 #10
0
        // Token: 0x0600021F RID: 543 RVA: 0x0000CAE0 File Offset: 0x0000ACE0
        public static bool TryGetEasServerFromConfig(ADRecipient user, string userAgent, out string easServerName)
        {
            OrganizationRelationship organizationRelationship = null;

            easServerName = null;
            if (user == null)
            {
                ExTraceGlobals.FrameworkTracer.TraceError(0L, "[MobileRedirectOptimization] User object is null. Proceeding with <Redirect>.");
                return(false);
            }
            ExTraceGlobals.FrameworkTracer.TraceDebug <string, string>(0L, "[MobileRedirectOptimization] Attempting to retrieve EAS settings with OrganizationRelationship for user {0}, user agent {1}.", MobileRedirectOptimization.SafeGetEmailAddressStringFromADUser(user), userAgent ?? string.Empty);
            string text = FaultInjection.TraceTest <string>((FaultInjection.LIDs) 3866504509U);

            if (text == null)
            {
                if (MobileRedirectOptimization.settings.Member.Enabled)
                {
                    if (MobileRedirectOptimization.settings.Member.UserAgentEnabled(userAgent))
                    {
                        organizationRelationship = MobileRedirectOptimization.GetOrganizationRelationship(user, null);
                    }
                    else
                    {
                        ExTraceGlobals.FrameworkTracer.TraceDebug <string>(0L, "[MobileRedirectOptimization] Redirect bypass is disabled for user agent {0}. Proceeding with <Redirect>.", userAgent ?? string.Empty);
                    }
                }
                else
                {
                    ExTraceGlobals.FrameworkTracer.TraceDebug(0L, "[MobileRedirectOptimization] Redirect bypass is disabled globally. Proceeding with <Redirect>.");
                }
            }
            else
            {
                organizationRelationship = MobileRedirectOptimization.GetOrganizationRelationship(user, text);
            }
            if (organizationRelationship != null)
            {
                if (organizationRelationship.Enabled)
                {
                    easServerName = MobileRedirectOptimization.GetEasServerFromOrgRelationship(user, organizationRelationship);
                }
                else
                {
                    ExTraceGlobals.FrameworkTracer.TraceDebug <string>(0L, "[MobileRedirectOptimization] OrganizationRelationship is disabled for user {0}. Proceeding with <Redirect>.", MobileRedirectOptimization.SafeGetEmailAddressStringFromADUser(user));
                }
            }
            else
            {
                ExTraceGlobals.FrameworkTracer.TraceError <string>(0L, "[MobileRedirectOptimization] OrganizationRelationship retrieval failed for user {0}. Proceeding with <Redirect>.", MobileRedirectOptimization.SafeGetEmailAddressStringFromADUser(user));
            }
            return(easServerName != null);
        }
コード例 #11
0
        protected virtual bool TryGetAutodiscoveryEndpoint(IGenericADUser user, string domain, out TokenTarget tokenTarget, out Uri autodiscoveryEndpoint)
        {
            tokenTarget           = null;
            autodiscoveryEndpoint = null;
            OrganizationRelationship organizationRelationship = this.directoryAccessor.GetOrganizationRelationship(user.OrganizationId ?? OrganizationId.ForestWideOrgId, domain);

            if (this.CheckOrgRelationshipFromRemoteConnection(organizationRelationship, user, domain))
            {
                tokenTarget           = organizationRelationship.GetTokenTarget();
                autodiscoveryEndpoint = organizationRelationship.TargetAutodiscoverEpr;
                return(true);
            }
            return(false);
        }
コード例 #12
0
        // Token: 0x06000302 RID: 770 RVA: 0x000100E8 File Offset: 0x0000E2E8
        private string GetRedirectAddressForUserHasNoMailbox(ActiveSyncMiniRecipient activesyncMiniRecipient)
        {
            string easEndpoint = null;

            if (!VariantConfiguration.InvariantNoFlightingSnapshot.ActiveSync.RedirectForOnBoarding.Enabled)
            {
                AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "The hybrid on boarding redirect feature is only for OnPrem servers.");
                return(null);
            }
            if (this.context.CommandType != CommandType.Options && this.context.AirSyncVersion < GlobalSettings.MinRedirectProtocolVersion)
            {
                AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "The protocol version is less than 14.0 that doesn't support 451 redirect protocol call.");
                return(null);
            }
            AirSyncDiagnostics.FaultInjectionPoint(3414568253U, delegate
            {
                if (activesyncMiniRecipient != null && activesyncMiniRecipient.ExternalEmailAddress != null)
                {
                    AirSyncDiagnostics.TraceDebug <string>(ExTraceGlobals.RequestsTracer, this, "Try to figure out eas endpoint for user: {0}.", activesyncMiniRecipient.ExternalEmailAddress.AddressString);
                    this.context.ProtocolLogger.SetValue(ProtocolLoggerData.RedirectTo, "TryToFigureOutEasEndpoint");
                    SmtpProxyAddress smtpProxyAddress = activesyncMiniRecipient.ExternalEmailAddress as SmtpProxyAddress;
                    if (smtpProxyAddress != null && !string.IsNullOrEmpty(smtpProxyAddress.AddressString))
                    {
                        OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(activesyncMiniRecipient.OrganizationId);
                        string domain = ((SmtpAddress)smtpProxyAddress).Domain;
                        OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(domain);
                        if (organizationRelationship != null)
                        {
                            Uri targetOwaURL = organizationRelationship.TargetOwaURL;
                            easEndpoint      = this.TransferTargetOwaUrlToEasEndpoint(targetOwaURL);
                            AirSyncDiagnostics.TraceDebug <string>(ExTraceGlobals.RequestsTracer, this, "Redirect to EASEndpoint : {0}.", easEndpoint);
                            this.context.ProtocolLogger.AppendValue(ProtocolLoggerData.RedirectTo, easEndpoint);
                            return;
                        }
                        AirSyncDiagnostics.TraceDebug <string>(ExTraceGlobals.RequestsTracer, this, "OrganizationRelationShip is null for the domain {0}", domain);
                        return;
                    }
                    else
                    {
                        AirSyncDiagnostics.TraceDebug(ExTraceGlobals.RequestsTracer, this, "External email address is null");
                    }
                }
            }, delegate
            {
                Uri targetOwaUri = new Uri("http://outlook.com/owa");
                easEndpoint      = this.TransferTargetOwaUrlToEasEndpoint(targetOwaUri);
            });
            return(easEndpoint);
        }
コード例 #13
0
        public static void GetObjectPostAction(DataRow inputRow, DataTable dataTable, DataObjectStore store)
        {
            OrganizationRelationship organizationRelationship = store.GetDataObject("OrganizationRelationship") as OrganizationRelationship;

            if (organizationRelationship != null && dataTable.Rows.Count == 1)
            {
                DataRow dataRow = dataTable.Rows[0];
                if (organizationRelationship.FreeBusyAccessLevel == FreeBusyAccessLevel.None)
                {
                    dataRow["FreeBusyAccessEnabled"] = false;
                    dataRow["FreeBusyAccessLevel"]   = FreeBusyAccessLevel.AvailabilityOnly;
                }
                dataRow["DomainNames"]          = OrganizationRelationshipAssistor.ToStringMVP(organizationRelationship.DomainNames);
                dataRow["FormattedDomainNames"] = DDIHelper.JoinList <SmtpDomain>(organizationRelationship.DomainNames, (SmtpDomain domain) => domain.Domain);
            }
        }
コード例 #14
0
        private void UpgradeFopeConnectors(ITaskContext taskContext)
        {
            MultiValuedProperty <SmtpDomain> multiValuedProperty = new MultiValuedProperty <SmtpDomain>();

            foreach (SmtpDomain item in base.TaskContext.HybridConfigurationObject.Domains)
            {
                multiValuedProperty.Add(item);
            }
            IOrganizationConfig      organizationConfig        = base.OnPremisesSession.GetOrganizationConfig();
            List <string>            domains                   = new List <string>();
            OrganizationRelationship organizationRelationship  = TaskCommon.GetOrganizationRelationship(base.OnPremisesSession, Configuration.OnPremGetOrgRel, domains);
            OrganizationRelationship organizationRelationship2 = TaskCommon.GetOrganizationRelationship(base.TenantSession, Configuration.TenantGetOrgRel, domains);

            if (organizationRelationship2 == null || organizationRelationship == null)
            {
                throw new LocalizedException(HybridStrings.InvalidOrganizationRelationship);
            }
            string            onPremOrgRelationshipName = TaskCommon.GetOnPremOrgRelationshipName(organizationConfig);
            string            tenantOrgRelationshipName = TaskCommon.GetTenantOrgRelationshipName(organizationConfig);
            SessionParameters sessionParameters         = new SessionParameters();
            SessionParameters sessionParameters2        = new SessionParameters();

            sessionParameters.Set("Name", onPremOrgRelationshipName);
            sessionParameters2.Set("Name", tenantOrgRelationshipName);
            base.OnPremisesSession.SetOrganizationRelationship(organizationRelationship.Identity, sessionParameters);
            base.TenantSession.SetOrganizationRelationship(organizationRelationship2.Identity, sessionParameters2);
            organizationRelationship2 = TaskCommon.GetOrganizationRelationship(base.TenantSession, tenantOrgRelationshipName, domains);
            if (organizationRelationship2 == null)
            {
                throw new LocalizedException(HybridStrings.InvalidOrganizationRelationship);
            }
            IInboundConnector inboundConnector = base.TenantSession.GetInboundConnectors().FirstOrDefault((IInboundConnector x) => x.ConnectorSource == TenantConnectorSource.HybridWizard);

            if (inboundConnector == null)
            {
                throw new LocalizedException(HybridStrings.ErrorNoInboundConnector);
            }
            base.TenantSession.RenameInboundConnector(inboundConnector, Configuration.InboundConnectorName(organizationConfig.Guid.ToString()));
            IOutboundConnector outboundConnector = base.TenantSession.GetOutboundConnectors().FirstOrDefault((IOutboundConnector x) => x.ConnectorSource == TenantConnectorSource.HybridWizard);

            if (outboundConnector == null)
            {
                throw new LocalizedException(HybridStrings.ErrorNoOutboundConnector);
            }
            base.TenantSession.RenameOutboundConnector(outboundConnector, Configuration.OutboundConnectorName(organizationConfig.Guid.ToString()));
            base.TenantSession.NewOnPremisesOrganization(organizationConfig, multiValuedProperty, inboundConnector, outboundConnector, organizationRelationship2);
        }
コード例 #15
0
        internal static OrganizationRelationship GetOrganizationRelationship(OrganizationId organizationId, string requesterDomain)
        {
            OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get((organizationId == null) ? OrganizationId.ForestWideOrgId : organizationId);
            OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(requesterDomain);

            if (organizationRelationship == null)
            {
                FreeBusyPermission.SecurityTracer.TraceDebug <object, string>(0L, "{0}: No organization relationship found for domain {1}", TraceContext.Get(), requesterDomain);
                return(null);
            }
            if (!organizationRelationship.Enabled)
            {
                FreeBusyPermission.SecurityTracer.TraceDebug <object, string>(0L, "{0}: Organization relationship for domain {1} is disabled.", TraceContext.Get(), requesterDomain);
                return(null);
            }
            return(organizationRelationship);
        }
コード例 #16
0
        private static FreeBusyPermissionLevel GetMaximumFreeBusyPermissionLevel(OrganizationRelationship organizationRelationship)
        {
            switch (organizationRelationship.FreeBusyAccessLevel)
            {
            case FreeBusyAccessLevel.None:
                return(FreeBusyPermissionLevel.None);

            case FreeBusyAccessLevel.AvailabilityOnly:
                return(FreeBusyPermissionLevel.Simple);

            case FreeBusyAccessLevel.LimitedDetails:
                return(FreeBusyPermissionLevel.Detail);

            default:
                return(FreeBusyPermissionLevel.None);
            }
        }
コード例 #17
0
 private bool CheckOrgRelationshipFromRemoteConnection(OrganizationRelationship orgRelationship, IGenericADUser user, string domain)
 {
     if (orgRelationship == null)
     {
         StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_XtcOrgRelationshipMissing, domain, new object[]
         {
             domain,
             user.LegacyDn
         });
         ExTraceGlobals.XtcTracer.TraceError <string, string>(0L, "Organization relationship for domain {0} is missing. Remote mailbox/archive access will be disabled for user {1}.", domain, user.LegacyDn);
         return(false);
     }
     if (!orgRelationship.ArchiveAccessEnabled)
     {
         StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_XtcOrgRelationshipArchiveDisabled, domain, new object[]
         {
             domain,
             user.LegacyDn
         });
         ExTraceGlobals.XtcTracer.TraceError <string, string>(0L, "Archive access is disabled for organization relationship (domain name: {0}). Remote mailbox/archive access will be disabled for user {1}.", domain, user.LegacyDn);
         return(false);
     }
     if (orgRelationship.TargetAutodiscoverEpr == null)
     {
         StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_XtcInvalidOrgRelationshipTargetAutodiscoverEpr, domain, new object[]
         {
             domain,
             user.LegacyDn
         });
         ExTraceGlobals.XtcTracer.TraceError <string, string>(0L, "Organization relationship for domain {0} doesn't have TargetAutodiscoverEpr set. Remote mailbox/archive access will be disabled for user {1}.", domain, user.LegacyDn);
         return(false);
     }
     if (orgRelationship.TargetApplicationUri == null)
     {
         StorageGlobals.EventLogger.LogEvent(StorageEventLogConstants.Tuple_XtcInvalidOrgRelationshipTargetApplicationUri, domain, new object[]
         {
             domain,
             user.LegacyDn
         });
         ExTraceGlobals.XtcTracer.TraceError <string, string>(0L, "Organization relationship for domain {0} doesn't have TargetApplicationUri set. Remote mailbox/archive access will be disabled for user {1}.", domain, user.LegacyDn);
         return(false);
     }
     return(true);
 }
コード例 #18
0
        private static FreeBusyPermissionLevel FromExternalClientWithOrganizationalRelationship(ExternalClientContext externalClientContext, MailboxSession mailboxSession, RawSecurityDescriptor securityDescriptor, FreeBusyQuery freeBusyQuery)
        {
            OrganizationRelationship organizationRelationship = FreeBusyPermission.GetOrganizationRelationship(mailboxSession.MailboxOwner.MailboxInfo.OrganizationId, externalClientContext.EmailAddress.Domain);

            if (organizationRelationship == null)
            {
                FreeBusyPermission.SecurityTracer.TraceDebug <object, SmtpAddress, string>(0L, "{0}: No organization relationship for {1} with organization id {2}", TraceContext.Get(), externalClientContext.EmailAddress, (mailboxSession.MailboxOwner.MailboxInfo.OrganizationId == null) ? "<null>" : mailboxSession.MailboxOwner.MailboxInfo.OrganizationId.ToString());
                return(FreeBusyPermissionLevel.None);
            }
            FreeBusyPermissionLevel freeBusyPermissionLevel = FreeBusyPermissionLevel.Detail;

            if (organizationRelationship != null)
            {
                freeBusyPermissionLevel = FreeBusyPermission.GetMaximumFreeBusyPermissionLevel(organizationRelationship);
                if (freeBusyPermissionLevel == FreeBusyPermissionLevel.None)
                {
                    FreeBusyPermission.SecurityTracer.TraceDebug <object, ADObjectId>(0L, "{0}: OrganizationRelationship {1} restricts permission level to None.", TraceContext.Get(), organizationRelationship.Id);
                    return(FreeBusyPermissionLevel.None);
                }
            }
            FreeBusyPermissionLevel freeBusyPermissionLevel2 = FreeBusyPermission.AccessCheck(securityDescriptor, ClientSecurityContext.FreeBusyPermissionDefaultClientSecurityContext);

            if (freeBusyPermissionLevel2 == FreeBusyPermissionLevel.None)
            {
                return(FreeBusyPermissionLevel.None);
            }
            if (freeBusyPermissionLevel2 > freeBusyPermissionLevel)
            {
                FreeBusyPermission.SecurityTracer.TraceDebug(0L, "{0}: OrganizationRelationship {1} restricts permission level to {2}. Lowering permission from {3}.", new object[]
                {
                    TraceContext.Get(),
                    organizationRelationship.Id,
                    freeBusyPermissionLevel,
                    freeBusyPermissionLevel2
                });
                freeBusyPermissionLevel2 = freeBusyPermissionLevel;
            }
            if (!FreeBusyPermission.IsAllowedByFreeBusyAccessScope(freeBusyQuery, organizationRelationship))
            {
                freeBusyPermissionLevel2 = FreeBusyPermissionLevel.None;
            }
            return(freeBusyPermissionLevel2);
        }
コード例 #19
0
        // Token: 0x06001232 RID: 4658 RVA: 0x0004D0F0 File Offset: 0x0004B2F0
        private bool PhotoSharingEnabled(PhotoPrincipal requestor, PhotoPrincipal target)
        {
            OrganizationIdCacheValue organizationIdCacheValue = this.organizationConfigCache.Get((target.OrganizationId == null) ? OrganizationId.ForestWideOrgId : target.OrganizationId);

            if (organizationIdCacheValue == null)
            {
                this.tracer.TraceError((long)this.GetHashCode(), "Photo authorization: target organization's configuration not available in cache.");
                return(false);
            }
            foreach (string domain in requestor.GetEmailAddressDomains())
            {
                OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(domain);
                if (organizationRelationship != null && organizationRelationship.Enabled && organizationRelationship.PhotosEnabled)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #20
0
        // Token: 0x060005CB RID: 1483 RVA: 0x000202C4 File Offset: 0x0001E4C4
        protected ADObjectId ResolveMailboxDatabase(ADRawEntry activeDirectoryRawEntry)
        {
            if (activeDirectoryRawEntry == null)
            {
                throw new ArgumentNullException("activeDirectoryRawEntry");
            }
            SmtpProxyAddress smtpProxyAddress = (SmtpProxyAddress)activeDirectoryRawEntry[ADRecipientSchema.ExternalEmailAddress];

            if (smtpProxyAddress != null)
            {
                OrganizationId           organizationId           = (OrganizationId)activeDirectoryRawEntry[ADObjectSchema.OrganizationId];
                OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(organizationId);
                SmtpAddress smtpAddress = (SmtpAddress)smtpProxyAddress;
                if (!smtpAddress.IsValidAddress)
                {
                    if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1))
                    {
                        ExTraceGlobals.VerboseTracer.TraceDebug((long)this.GetHashCode(), "[OwaProxyRequestHandler::ResolveMailboxDatabase]: ExternalEmailAddress configured is invalid.");
                    }
                }
                else
                {
                    OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(((SmtpAddress)smtpProxyAddress).Domain);
                    if (organizationRelationship != null && organizationRelationship.TargetOwaURL != null)
                    {
                        string absoluteUri = organizationRelationship.TargetOwaURL.AbsoluteUri;
                        if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1))
                        {
                            ExTraceGlobals.VerboseTracer.TraceDebug <string>((long)this.GetHashCode(), "[OwaProxyRequestHandler::ResolveMailboxDatabase]: Stop processing and redirect to {0}.", absoluteUri);
                        }
                        base.Logger.AppendGenericInfo("ExternalRedir", absoluteUri);
                        throw new HttpException(302, this.GetCrossPremiseRedirectUrl(smtpAddress.Domain, organizationId.ToExternalDirectoryOrganizationId(), smtpProxyAddress.SmtpAddress));
                    }
                    if (ExTraceGlobals.VerboseTracer.IsTraceEnabled(1))
                    {
                        ExTraceGlobals.VerboseTracer.TraceDebug((long)this.GetHashCode(), "[OwaProxyRequestHandler::ResolveMailboxDatabase]: Unable to find OrganizationRelationShip or its TargetOwaUrl is not configured.");
                    }
                    base.Logger.AppendGenericInfo("ExternalRedir", "Org-Relationship or targetOwaUrl not found.");
                }
            }
            return(null);
        }
コード例 #21
0
        protected override AutoDiscoverQuery CreateAutoDiscoverQuery(string domain, AutoDiscoverQueryItem[] queryItems, int redirectionDepth)
        {
            AutoDiscoverQuery.AutoDiscoverTracer.TraceDebug <object, string>((long)this.GetHashCode(), "{0}: Search for OrganizationRelationship for domain {1}", TraceContext.Get(), domain);
            OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(base.ClientContext.OrganizationId);
            OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(domain);

            if (organizationRelationship == null)
            {
                AutoDiscoverQuery.AutoDiscoverTracer.TraceError <object, string>((long)this.GetHashCode(), "{0}: OrganizationRelationship lookup for domain {1} found nothing", TraceContext.Get(), domain);
                throw new AutoDiscoverFailedException(Strings.descConfigurationInformationNotFound(domain), 54588U);
            }
            if (organizationRelationship.TargetAutodiscoverEpr == null)
            {
                AutoDiscoverQuery.AutoDiscoverTracer.TraceError <object, string, ADObjectId>((long)this.GetHashCode(), "{0}: OrganizationRelationship lookup for domain {1} found {2}, but it doesn't have TargetAutodiscoverEpr set", TraceContext.Get(), domain, organizationRelationship.Id);
                throw new AutoDiscoverFailedException(Strings.descMisconfiguredOrganizationRelationship(organizationRelationship.Id.ToString()), 42300U);
            }
            AutoDiscoverQuery.AutoDiscoverTracer.TraceDebug <object, string, ADObjectId>((long)this.GetHashCode(), "{0}: OrganizationRelationship lookup for domain {1} found {2}", TraceContext.Get(), domain, organizationRelationship.Id);
            QueryList queryListFromQueryItems = base.GetQueryListFromQueryItems(queryItems);

            return(new AutoDiscoverQueryExternal(base.Application, base.ClientContext, base.RequestLogger, organizationRelationship.TargetAutodiscoverEpr, base.Authenticator, queryItems, redirectionDepth, base.CreateAutoDiscoverRequest, queryListFromQueryItems));
        }
コード例 #22
0
 internal OrganizationRelationshipSettings(OrganizationRelationship organizationRelationship)
 {
     if (organizationRelationship.DomainNames != null)
     {
         this.DomainNames = new DomainCollection();
         foreach (SmtpDomain smtpDomain in organizationRelationship.DomainNames)
         {
             this.DomainNames.Add(smtpDomain.Domain);
         }
     }
     this.Name = organizationRelationship.Name;
     this.TargetApplicationUri  = organizationRelationship.TargetApplicationUri;
     this.FreeBusyAccessLevel   = Enum.GetName(typeof(FreeBusyAccessLevel), organizationRelationship.FreeBusyAccessLevel);
     this.FreeBusyAccessEnabled = organizationRelationship.FreeBusyAccessEnabled;
     this.TargetSharingEpr      = organizationRelationship.TargetSharingEpr;
     this.TargetAutodiscoverEpr = organizationRelationship.TargetAutodiscoverEpr;
     this.MailboxMoveEnabled    = organizationRelationship.MailboxMoveEnabled;
     this.DeliveryReportEnabled = organizationRelationship.DeliveryReportEnabled;
     this.MailTipsAccessEnabled = organizationRelationship.MailTipsAccessEnabled;
     this.MailTipsAccessLevel   = Enum.GetName(typeof(MailTipsAccessLevel), organizationRelationship.MailTipsAccessLevel);
 }
コード例 #23
0
        // Token: 0x06000221 RID: 545 RVA: 0x0000CC68 File Offset: 0x0000AE68
        private static string GetEasServerFromOrgRelationship(ADRecipient user, OrganizationRelationship organizationRelationship)
        {
            Uri targetOwaURL = organizationRelationship.TargetOwaURL;

            if (targetOwaURL != null && targetOwaURL.Host != null)
            {
                string text;
                if (targetOwaURL.Host.Contains(MobileRedirectOptimization.legacyO365OwaHost))
                {
                    text = MobileRedirectOptimization.correctO365OwaUrl;
                }
                else
                {
                    text = MobileRedirectOptimization.httpsPrefix + targetOwaURL.Host + MobileRedirectOptimization.activeSyncServerSuffix;
                }
                ExTraceGlobals.FrameworkTracer.TraceDebug <string, string>(0L, "[MobileRedirectOptimization] Redirect bypass succeeded, writing config xml for user {0} using EAS server name {1}.", MobileRedirectOptimization.SafeGetEmailAddressStringFromADUser(user), text);
                return(text);
            }
            ExTraceGlobals.FrameworkTracer.TraceError <string>(0L, "[MobileRedirectOptimization] TargetOwaUrl parsing failed for user {0}. Proceeding with <Redirect>.", MobileRedirectOptimization.SafeGetEmailAddressStringFromADUser(user));
            return(null);
        }
コード例 #24
0
ファイル: TaskCommon.cs プロジェクト: YHZX2013/exchange_diff
        public static OrganizationRelationship GetOrganizationRelationship(ICommonSession session, string identity, IEnumerable <string> domains)
        {
            OrganizationRelationship organizationRelationship = null;
            IEnumerable <OrganizationRelationship> organizationRelationship2 = session.GetOrganizationRelationship();
            bool flag = false;

            foreach (OrganizationRelationship organizationRelationship3 in organizationRelationship2)
            {
                if (organizationRelationship3.Identity.ToString().Equals(identity, StringComparison.InvariantCultureIgnoreCase))
                {
                    if (flag)
                    {
                        throw new LocalizedException(HybridStrings.ErrorMultipleMatchingOrgRelationships);
                    }
                    organizationRelationship = organizationRelationship3;
                }
                foreach (string domain in domains)
                {
                    SmtpDomain smtpDomain = new SmtpDomain(domain);
                    foreach (SmtpDomain smtpDomain2 in organizationRelationship3.DomainNames)
                    {
                        if (smtpDomain2.Domain.Equals(smtpDomain.Domain, StringComparison.InvariantCultureIgnoreCase))
                        {
                            if (flag)
                            {
                                throw new LocalizedException(HybridStrings.ErrorMultipleMatchingOrgRelationships);
                            }
                            organizationRelationship = organizationRelationship3;
                            break;
                        }
                    }
                }
                if (organizationRelationship != null)
                {
                    flag = true;
                }
            }
            return(organizationRelationship);
        }
コード例 #25
0
        public bool IsRemoteTrustedOrg(OrganizationId organizationId, string domain)
        {
            TraceWrapper.SearchLibraryTracer.TraceDebug <OrganizationId, string>(this.GetHashCode(), "Looking for organization relationship for Org: {0} and domain: {1}", organizationId, domain);
            OrganizationRelationship organizationRelationship = this.TryGetOrganizationRelationship(organizationId, domain);

            if (organizationRelationship == null)
            {
                TraceWrapper.SearchLibraryTracer.TraceDebug(this.GetHashCode(), "Organization relationship not found", new object[0]);
                return(false);
            }
            TraceWrapper.SearchLibraryTracer.TraceDebug(this.GetHashCode(), "Organization relationship found", new object[0]);
            if (!organizationRelationship.Enabled)
            {
                TraceWrapper.SearchLibraryTracer.TraceDebug(this.GetHashCode(), "Org relationship disabled,", new object[0]);
                return(false);
            }
            TraceWrapper.SearchLibraryTracer.TraceDebug(this.GetHashCode(), "Organization relationship is enabled", new object[0]);
            if (!organizationRelationship.DeliveryReportEnabled)
            {
                TraceWrapper.SearchLibraryTracer.TraceDebug(this.GetHashCode(), "Delivery Report disabled for relationship.", new object[0]);
                return(false);
            }
            return(true);
        }
コード例 #26
0
 public override bool EnabledInRelationship(OrganizationRelationship organizationRelationship)
 {
     return(organizationRelationship.DeliveryReportEnabled);
 }
コード例 #27
0
        private void Discover(ExchangePrincipal principal, ADUser executingUser, out string ewsEndpoint, out DelegationTokenRequest ewsTokenRequest)
        {
            SmtpAddress              value           = principal.MailboxInfo.RemoteIdentity.Value;
            ADSessionSettings        sessionSettings = ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(OrganizationId.ForestWideOrgId);
            IRecipientSession        tenantOrRootOrgRecipientSession = DirectorySessionFactory.Default.GetTenantOrRootOrgRecipientSession(null, true, ConsistencyMode.FullyConsistent, null, sessionSettings, ConfigScopes.TenantSubTree, 168, "Discover", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Search\\MailboxSearch\\MailboxSearchEwsClient.cs");
            ADUser                   aduser = null;
            TransportConfigContainer transportConfigContainer = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(true, ConsistencyMode.IgnoreInvalid, sessionSettings, 171, "Discover", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Search\\MailboxSearch\\MailboxSearchEwsClient.cs").FindSingletonConfigurationObject <TransportConfigContainer>();

            if (transportConfigContainer != null && transportConfigContainer.OrganizationFederatedMailbox != SmtpAddress.NullReversePath)
            {
                SmtpAddress  organizationFederatedMailbox = transportConfigContainer.OrganizationFederatedMailbox;
                ProxyAddress proxyAddress = null;
                try
                {
                    proxyAddress = ProxyAddress.Parse(organizationFederatedMailbox.ToString());
                }
                catch (ArgumentException ex)
                {
                    ExTraceGlobals.SessionTracer.TraceError <string>((long)this.GetHashCode(), "Proxy address of organization federated mailbox is invalid: {0}", ex.ToString());
                }
                if (proxyAddress != null && !(proxyAddress is InvalidProxyAddress))
                {
                    aduser = (tenantOrRootOrgRecipientSession.FindByProxyAddress(proxyAddress) as ADUser);
                }
            }
            OrganizationIdCacheValue organizationIdCacheValue = OrganizationIdCache.Singleton.Get(OrganizationId.ForestWideOrgId);
            OrganizationRelationship organizationRelationship = organizationIdCacheValue.GetOrganizationRelationship(value.Domain);

            if (aduser == null || organizationRelationship == null)
            {
                throw new OrganizationNotFederatedException();
            }
            DelegationTokenRequest request = new DelegationTokenRequest
            {
                FederatedIdentity = aduser.GetFederatedIdentity(),
                EmailAddress      = aduser.GetFederatedSmtpAddress().ToString(),
                Target            = organizationRelationship.GetTokenTarget(),
                Offer             = Offer.Autodiscover
            };
            FedOrgCredentials credentials = new FedOrgCredentials(request, this.GetSecurityTokenService(aduser.OrganizationId));
            Uri uri = null;

            using (AutoDiscoverUserSettingsClient autoDiscoverUserSettingsClient = AutoDiscoverUserSettingsClient.CreateInstance(DirectorySessionFactory.Default.CreateTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, sessionSettings, 215, "Discover", "f:\\15.00.1497\\sources\\dev\\data\\src\\storage\\Search\\MailboxSearch\\MailboxSearchEwsClient.cs"), credentials, value, organizationRelationship.TargetAutodiscoverEpr, MailboxSearchEwsClient.AutoDiscoverRequestedSettings))
            {
                UserSettings  userSettings  = autoDiscoverUserSettingsClient.Discover();
                StringSetting stringSetting = userSettings.GetSetting("ExternalEwsUrl") as StringSetting;
                if (stringSetting == null || !Uri.TryCreate(stringSetting.Value, UriKind.Absolute, out uri))
                {
                    throw new AutoDAccessException(ServerStrings.AutoDRequestFailed);
                }
            }
            ewsEndpoint = EwsWsSecurityUrl.Fix(uri.ToString());
            string text = null;

            if (executingUser.EmailAddresses != null && executingUser.EmailAddresses.Count > 0)
            {
                List <string> federatedEmailAddresses = executingUser.GetFederatedEmailAddresses();
                if (federatedEmailAddresses != null && federatedEmailAddresses.Count > 0)
                {
                    text = federatedEmailAddresses[0];
                }
            }
            if (string.IsNullOrEmpty(text))
            {
                ewsTokenRequest = new DelegationTokenRequest
                {
                    FederatedIdentity = aduser.GetFederatedIdentity(),
                    EmailAddress      = aduser.GetFederatedSmtpAddress().ToString(),
                    Target            = organizationRelationship.GetTokenTarget(),
                    Offer             = Offer.MailboxSearch
                };
                return;
            }
            ewsTokenRequest = new DelegationTokenRequest
            {
                FederatedIdentity = executingUser.GetFederatedIdentity(),
                EmailAddress      = text.ToString(),
                Target            = organizationRelationship.GetTokenTarget(),
                Offer             = Offer.MailboxSearch
            };
        }
コード例 #28
0
        public void SetOnPremisesOrganization(IOnPremisesOrganization configuration, IOrganizationConfig onPremisesOrgConfig, MultiValuedProperty <SmtpDomain> hybridDomains, IInboundConnector inboundConnector, IOutboundConnector outboundConnector, OrganizationRelationship tenantOrgRel)
        {
            Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization onPremisesOrganization = (Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization)configuration;
            onPremisesOrganization.HybridDomains            = hybridDomains;
            onPremisesOrganization.InboundConnector         = inboundConnector.Identity;
            onPremisesOrganization.OutboundConnector        = outboundConnector.Identity;
            onPremisesOrganization.OrganizationName         = onPremisesOrgConfig.Name;
            onPremisesOrganization.OrganizationRelationship = (ADObjectId)tenantOrgRel.Identity;
            SessionParameters sessionParameters = this.BuildParameters(configuration);

            sessionParameters.Set("Identity", configuration.Identity.ToString());
            base.RemotePowershellSession.RunCommand("Set-OnPremisesOrganization", sessionParameters);
        }
コード例 #29
0
        public IOnPremisesOrganization NewOnPremisesOrganization(IOrganizationConfig onPremisesOrgConfig, MultiValuedProperty <SmtpDomain> hybridDomains, IInboundConnector inboundConnector, IOutboundConnector outboundConnector, OrganizationRelationship tenantOrgRel)
        {
            Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization onPremisesOrganization = new Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization(onPremisesOrgConfig.Guid, onPremisesOrgConfig.Name, hybridDomains, inboundConnector.Identity, outboundConnector.Identity, onPremisesOrgConfig.Guid.ToString(), (ADObjectId)tenantOrgRel.Identity);
            SessionParameters sessionParameters = this.BuildParameters(onPremisesOrganization);

            sessionParameters.Set("Name", onPremisesOrganization.Name);
            sessionParameters.Set("OrganizationGuid", onPremisesOrganization.OrganizationGuid);
            Microsoft.Exchange.Data.Directory.SystemConfiguration.OnPremisesOrganization onPremisesOrganization2 = base.RemotePowershellSession.RunOneCommandSingleResult <Microsoft.Exchange.Data.Directory.SystemConfiguration.OnPremisesOrganization>("New-OnPremisesOrganization", sessionParameters, false);
            if (onPremisesOrganization2 != null)
            {
                return(new Microsoft.Exchange.Management.Hybrid.Entity.OnPremisesOrganization
                {
                    Identity = (ADObjectId)onPremisesOrganization2.Identity,
                    OrganizationGuid = onPremisesOrganization2.OrganizationGuid,
                    OrganizationName = onPremisesOrganization2.OrganizationName,
                    HybridDomains = onPremisesOrganization2.HybridDomains,
                    InboundConnector = onPremisesOrganization2.InboundConnector,
                    OutboundConnector = onPremisesOrganization2.OutboundConnector,
                    Name = onPremisesOrganization2.Name,
                    OrganizationRelationship = onPremisesOrganization2.OrganizationRelationship
                });
            }
            return(null);
        }
コード例 #30
0
 public override bool EnabledInRelationship(OrganizationRelationship organizationRelationship)
 {
     throw new NotImplementedException();
 }