Ejemplo n.º 1
0
        internal ExchangeConfigurationUnit GetConfigurationUnit(string orgName)
        {
            if (string.IsNullOrEmpty(orgName))
            {
                throw new ArgumentException("OrgName must contain a non-empty value", "orgName");
            }
            ExchangeConfigurationUnit exchangeConfigurationUnit = null;

            try
            {
                ADSessionSettings           adsessionSettings          = ADSessionSettings.FromTenantCUName(orgName);
                ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, adsessionSettings, 866, "GetConfigurationUnit", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\ADIdParameter.cs");
                adsessionSettings.TenantConsistencyMode = TenantConsistencyMode.IncludeRetiredTenants;
                exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByName(orgName);
            }
            catch (CannotResolveTenantNameException)
            {
            }
            SmtpDomain smtpDomain = null;

            if (exchangeConfigurationUnit == null && SmtpDomain.TryParse(orgName, out smtpDomain))
            {
                try
                {
                    ADSessionSettings           sessionSettings            = ADSessionSettings.FromTenantAcceptedDomain(orgName);
                    ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings, 890, "GetConfigurationUnit", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\ADIdParameter.cs");
                    exchangeConfigurationUnit = tenantConfigurationSession.GetExchangeConfigurationUnitByNameOrAcceptedDomain(orgName);
                }
                catch (CannotResolveTenantNameException)
                {
                }
            }
            Guid externalDirectoryOrganizationId;

            if (exchangeConfigurationUnit == null && GuidHelper.TryParseGuid(orgName, out externalDirectoryOrganizationId))
            {
                try
                {
                    PartitionId                 partitionIdByExternalDirectoryOrganizationId = ADAccountPartitionLocator.GetPartitionIdByExternalDirectoryOrganizationId(externalDirectoryOrganizationId);
                    ADSessionSettings           sessionSettings2           = ADSessionSettings.FromAllTenantsPartitionId(partitionIdByExternalDirectoryOrganizationId);
                    ITenantConfigurationSession tenantConfigurationSession = DirectorySessionFactory.Default.CreateTenantConfigurationSession(ConsistencyMode.PartiallyConsistent, sessionSettings2, 911, "GetConfigurationUnit", "f:\\15.00.1497\\sources\\dev\\Configuration\\src\\ObjectModel\\BaseTasks\\ADIdParameter.cs");
                    QueryFilter                 filter = new ComparisonFilter(ComparisonOperator.Equal, ExchangeConfigurationUnitSchema.ExternalDirectoryOrganizationId, externalDirectoryOrganizationId.ToString());
                    ExchangeConfigurationUnit[] array  = tenantConfigurationSession.Find <ExchangeConfigurationUnit>(ADSession.GetConfigurationUnitsRoot(partitionIdByExternalDirectoryOrganizationId.ForestFQDN), QueryScope.SubTree, filter, null, 0);
                    if (array.Length == 1)
                    {
                        exchangeConfigurationUnit = array[0];
                    }
                }
                catch (CannotResolveExternalDirectoryOrganizationIdException)
                {
                }
            }
            return(exchangeConfigurationUnit);
        }
Ejemplo n.º 2
0
        public static OrganizationId ResolveOrganizationByRealm(string realm)
        {
            if (string.IsNullOrEmpty(realm))
            {
                throw new ArgumentNullException("realm");
            }
            OrganizationId result = null;

            if (OAuthConfigHelper.isMultiTenancyEnabled)
            {
                try
                {
                    Guid externalDirectoryOrganizationId;
                    ADSessionSettings adsessionSettings;
                    if (Guid.TryParse(realm, out externalDirectoryOrganizationId))
                    {
                        adsessionSettings = ADSessionSettings.FromExternalDirectoryOrganizationId(externalDirectoryOrganizationId);
                    }
                    else
                    {
                        SmtpDomain smtpDomain;
                        if (!SmtpDomain.TryParse(realm, out smtpDomain))
                        {
                            throw new RealmFormatInvalidException(DirectoryStrings.ErrorRealmFormatInvalid(realm));
                        }
                        adsessionSettings = ADSessionSettings.FromTenantAcceptedDomain(realm);
                    }
                    return(adsessionSettings.CurrentOrganizationId);
                }
                catch (CannotResolveExternalDirectoryOrganizationIdException innerException)
                {
                    throw new RealmNotFoundException(DirectoryStrings.ErrorRealmNotFound(realm), innerException);
                }
                catch (CannotResolveTenantNameException innerException2)
                {
                    throw new RealmNotFoundException(DirectoryStrings.ErrorRealmNotFound(realm), innerException2);
                }
            }
            result = OrganizationId.ForestWideOrgId;
            IConfigurationSession tenantOrTopologyConfigurationSession = DirectorySessionFactory.Default.GetTenantOrTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 306, "ResolveOrganizationByRealm", "f:\\15.00.1497\\sources\\dev\\data\\src\\directory\\SystemConfiguration\\OAuth\\OAuthConfigHelper.cs");

            if (tenantOrTopologyConfigurationSession.GetAcceptedDomainByDomainName(realm) == null)
            {
                AuthConfig authConfig = AuthConfig.Read(tenantOrTopologyConfigurationSession);
                if (!realm.Equals(authConfig.Realm))
                {
                    if (OAuthConfigHelper.GetAuthServers().FirstOrDefault((AuthServer server) => realm.Equals(server.Realm, StringComparison.OrdinalIgnoreCase)) == null)
                    {
                        throw new RealmNotFoundException(DirectoryStrings.ErrorRealmNotFound(realm));
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        private static HashSet <string> GetSearchableCertificates(IEnumerable <string> certificateFqdns)
        {
            HashSet <string> hashSet = new HashSet <string>();

            if (certificateFqdns != null && certificateFqdns.Any <string>())
            {
                foreach (string text in certificateFqdns)
                {
                    if (!string.IsNullOrWhiteSpace(text))
                    {
                        if (!hashSet.Contains(text))
                        {
                            hashSet.Add(text);
                        }
                        string             text2 = string.Empty;
                        string             text3 = string.Empty;
                        SmtpX509Identifier smtpX509Identifier;
                        SmtpDomain         smtpDomain;
                        if (SmtpX509Identifier.TryParse(text, out smtpX509Identifier))
                        {
                            if (smtpX509Identifier != null && smtpX509Identifier.SubjectCommonName != null && smtpX509Identifier.SubjectCommonName.SmtpDomain != null)
                            {
                                text2 = smtpX509Identifier.SubjectCommonName.SmtpDomain.Domain;
                            }
                        }
                        else if (SmtpDomain.TryParse(text, out smtpDomain) && smtpDomain != null)
                        {
                            text2 = smtpDomain.Domain;
                        }
                        if (!string.IsNullOrWhiteSpace(text2))
                        {
                            int num = -1;
                            do
                            {
                                num = text2.IndexOf('.', num + 1);
                                if (num != -1)
                                {
                                    if (!string.IsNullOrWhiteSpace(text3))
                                    {
                                        string item = "*." + text3;
                                        if (!hashSet.Contains(item))
                                        {
                                            hashSet.Add(item);
                                        }
                                    }
                                    text3 = text2.Substring(num + 1);
                                }
                            }while (num != -1);
                        }
                    }
                }
            }
            return(hashSet);
        }
Ejemplo n.º 4
0
            protected static bool TryGetDomain(ProxyAddressTemplate template, out SmtpDomain domain)
            {
                SmtpProxyAddressTemplate smtpProxyAddressTemplate = template as SmtpProxyAddressTemplate;

                if (smtpProxyAddressTemplate != null)
                {
                    int    num     = smtpProxyAddressTemplate.AddressTemplateString.LastIndexOf('@');
                    string domain2 = smtpProxyAddressTemplate.AddressTemplateString.Substring(num + 1);
                    return(SmtpDomain.TryParse(domain2, out domain));
                }
                domain = null;
                return(false);
            }
 private static void InitializePartnerIdMap()
 {
     MServDirectorySession.partnerIdToForestMap = new Dictionary <int, string>();
     MServDirectorySession.partnerIdToForestMap.Add(51003, "APCPRD01.prod.exchangelabs.com");
     MServDirectorySession.partnerIdToForestMap.Add(51012, "APCPRD02.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51021, "APCPRD03.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51022, "APCPRD04.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51023, "APCPRD05.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51024, "APCPRD06.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51025, "APCPRD07.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51026, "APCPRD08.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51002, "EURPRD01.prod.exchangelabs.com");
     MServDirectorySession.partnerIdToForestMap.Add(51007, "EURPRD02.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51013, "EURPRD03.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51014, "EURPRD04.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51015, "EURPRD05.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51016, "EURPRD06.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51017, "EURPRD07.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51000, "PROD.exchangelabs.com");
     MServDirectorySession.partnerIdToForestMap.Add(51004, "NAMPRD02.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51008, "NAMPRD03.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51009, "NAMPRD04.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51010, "NAMPRD05.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51011, "NAMPRD06.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51018, "NAMPRD07.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51019, "NAMPRD08.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51020, "NAMPRD09.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51028, "LAMPRD80.prod.outlook.com");
     MServDirectorySession.partnerIdToForestMap.Add(51005, "NAMSDF01.sdf.exchangelabs.com");
     string[] multiStringValueFromRegistry = Globals.GetMultiStringValueFromRegistry("PartnerIdToForestMappings", 0);
     foreach (string text in multiStringValueFromRegistry)
     {
         string[] array2 = text.Split(new char[]
         {
             ':'
         });
         int        num = -1;
         SmtpDomain smtpDomain;
         if (array2.Length != 2 || !int.TryParse(array2[0], out num) || !SmtpDomain.TryParse(array2[1], out smtpDomain))
         {
             ExTraceGlobals.MServTracer.TraceError <string>(0L, "Could not parse PartnerId registry override {0}", text);
         }
         else
         {
             ExTraceGlobals.MServTracer.TraceDebug <int, string>(0L, "Adding registry override: {0} -> {1}", num, array2[1]);
             MServDirectorySession.partnerIdToForestMap[num] = array2[1];
         }
     }
 }
Ejemplo n.º 6
0
 private void ResolveAccessedUser()
 {
     if (string.IsNullOrEmpty(this.accessedUserSmtpAddress))
     {
         this.accessedUserExchangePrincipal = ExchangePrincipal.FromUserSid(this.GetOrganizationIdFromIdentity(this.accessedUserIdentity).ToADSessionSettings(), this.accessedUserSid);
         this.logonUserPrincipal            = new GenericPrincipal(this.LogonUserIdentity, null);
     }
     else
     {
         OrganizationId   organizationId   = OrganizationId.ForestWideOrgId;
         SidBasedIdentity sidBasedIdentity = this.LogonUserIdentity as SidBasedIdentity;
         if (sidBasedIdentity != null)
         {
             organizationId = sidBasedIdentity.UserOrganizationId;
         }
         else
         {
             DelegatedPrincipal delegatedPrincipal = this.logonUserPrincipal as DelegatedPrincipal;
             if (delegatedPrincipal != null)
             {
                 SmtpDomain domain;
                 if (SmtpDomain.TryParse(delegatedPrincipal.DelegatedOrganization, out domain))
                 {
                     organizationId = DomainCache.Singleton.Get(new SmtpDomainWithSubdomains(domain, false)).OrganizationId;
                 }
             }
             else
             {
                 ExchangePrincipal exchangePrincipal = this.GetLogonUserExchangePrincipal();
                 if (exchangePrincipal != null)
                 {
                     organizationId = exchangePrincipal.MailboxInfo.OrganizationId;
                 }
             }
         }
         ADSessionSettings adSettings  = organizationId.ToADSessionSettings();
         string            partitionId = null;
         if (organizationId != null && organizationId != OrganizationId.ForestWideOrgId && organizationId.PartitionId != null)
         {
             partitionId = organizationId.PartitionId.ToString();
         }
         this.accessedUserExchangePrincipal = ExchangePrincipal.FromProxyAddress(adSettings, this.accessedUserSmtpAddress, RemotingOptions.AllowCrossSite);
         this.accessedUserIdentity          = new GenericSidIdentity(this.accessedUserExchangePrincipal.Sid.Value, this.LogonUserIdentity.AuthenticationType + "-ExplicitSignOn", this.accessedUserExchangePrincipal.Sid, partitionId);
         this.accessedUserSid = this.accessedUserIdentity.GetSecurityIdentifier();
     }
     this.hasFullAccess    = this.CanOpenAccessedUserMailbox();
     this.identityResolved = true;
 }
        internal override ADSessionSettings FromTenantAcceptedDomain(string domain)
        {
            if (domain == null)
            {
                throw new ArgumentNullException("domain");
            }
            SmtpDomain domainName;

            if (!SmtpDomain.TryParse(domain, out domainName))
            {
                throw new CannotResolveTenantNameException(DirectoryStrings.CannotResolveTenantNameByAcceptedDomain(domain));
            }
            if (ConsumerIdentityHelper.IsConsumerDomain(domainName))
            {
                return(ADSessionSettings.FromConsumerOrganization());
            }
            OrganizationId scopingOrganizationId = OrganizationId.FromAcceptedDomain(domain);

            return(ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(scopingOrganizationId));
        }
Ejemplo n.º 8
0
        protected static bool TryResolveCanonicalName(string canonicalName, out ADObjectId adObjectId)
        {
            adObjectId = null;
            SmtpDomain smtpDomain;

            if (!string.IsNullOrEmpty(canonicalName) && SmtpDomain.TryParse(canonicalName.Split(new char[]
            {
                '/'
            })[0], out smtpDomain))
            {
                try
                {
                    string distinguishedName = NativeHelpers.DistinguishedNameFromCanonicalName(canonicalName);
                    adObjectId = new ADObjectId(distinguishedName);
                    return(true);
                }
                catch (NameConversionException)
                {
                }
                return(false);
            }
            return(false);
        }
Ejemplo n.º 9
0
        private void InitializeDefaults()
        {
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.MaxInboundConnection))
            {
                this.MaxInboundConnection = 5000;
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.MaxInboundConnectionPerSource))
            {
                this.MaxInboundConnectionPerSource = 20;
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.MaxProtocolErrors))
            {
                this.MaxProtocolErrors = 5;
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.Fqdn))
            {
                string     fqdn = this.serverObject.Fqdn;
                SmtpDomain smtpDomain;
                if (SmtpDomain.TryParse(fqdn, out smtpDomain))
                {
                    this.Fqdn = new Fqdn(fqdn);
                }
                else if (SmtpDomain.TryParse(this.serverObject.Name, out smtpDomain))
                {
                    this.Fqdn = new Fqdn(this.serverObject.Name);
                }
                else
                {
                    base.WriteError(new InvalidFqdnException(), ErrorCategory.InvalidOperation, this.DataObject);
                }
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.TransportRole))
            {
                if ((this.serverObject.CurrentServerRole & ServerRole.Edge) != ServerRole.None)
                {
                    this.TransportRole = ServerRole.HubTransport;
                }
                else if ((this.serverObject.CurrentServerRole & ServerRole.HubTransport) != ServerRole.None)
                {
                    this.TransportRole = ServerRole.HubTransport;
                }
                else if ((this.serverObject.CurrentServerRole & ServerRole.FrontendTransport) != ServerRole.None)
                {
                    this.TransportRole = ServerRole.FrontendTransport;
                }
                else
                {
                    this.TransportRole = ServerRole.HubTransport;
                }
            }
            if (this.isEdgeRole)
            {
                if (!this.DataObject.IsModified(ReceiveConnectorSchema.ConnectionTimeout))
                {
                    this.DataObject.ConnectionTimeout = EnhancedTimeSpan.FromMinutes(5.0);
                }
                if (!this.DataObject.IsModified(ReceiveConnectorSchema.ConnectionInactivityTimeout))
                {
                    this.DataObject.ConnectionInactivityTimeout = EnhancedTimeSpan.OneMinute;
                }
                if (!this.DataObject.IsModified(ReceiveConnectorSchema.MessageRateLimit))
                {
                    this.DataObject.MessageRateLimit = 600;
                }
                if (!this.DataObject.IsModified(ReceiveConnectorSchema.MessageRateSource))
                {
                    this.DataObject.MessageRateSource = MessageRateSourceFlags.IPAddress;
                }
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.PermissionGroups))
            {
                this.SetPermissionGroups();
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.SecurityFlags))
            {
                this.SetAuthMechanism();
            }
            if (this.isUsageSet && this.usage == NewReceiveConnector.UsageType.Internal)
            {
                this.SetUsageInternalProperties();
            }
            if (!this.DataObject.IsModified(ReceiveConnectorSchema.Bindings) && this.usage == NewReceiveConnector.UsageType.Client)
            {
                this.DataObject.Bindings[0].Port = 587;
            }
            LocalizedException exception;

            if (!this.isEdgeRole && (this.AuthMechanism & AuthMechanisms.ExchangeServer) != AuthMechanisms.None && !ReceiveConnectorFqdnCondition.Verify(this.DataObject, this.serverObject, out exception))
            {
                base.WriteError(exception, ErrorCategory.InvalidOperation, this.DataObject);
            }
        }