Exemple #1
0
        IEnumerable <T> IIdentityParameter.GetObjects <T>(ObjectId rootId, IConfigDataProvider session, OptionalIdentityData optionalData, out LocalizedString?notFoundReason)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }
            if (null == this.InternalInboxRuleId)
            {
                throw new InvalidOperationException(Strings.ErrorOperationOnInvalidObject);
            }
            IConfigurable[] array = session.Find <T>(null, this.InternalInboxRuleId, false, null);
            if (array == null || array.Length == 0)
            {
                notFoundReason = new LocalizedString?(Strings.ErrorManagementObjectNotFound(this.ToString()));
                return(new T[0]);
            }
            notFoundReason = null;
            T[] array2 = new T[array.Length];
            int num    = 0;

            foreach (IConfigurable configurable in array)
            {
                array2[num++] = (T)((object)configurable);
            }
            return(array2);
        }
        public static void ValidateLinkedAutoAttendant(IConfigDataProvider session, string autoAttendantName, bool checkEnabled, UMAutoAttendant referringAutoAttendant)
        {
            if (session == null)
            {
                throw new ArgumentNullException("session");
            }
            if (autoAttendantName == null)
            {
                throw new ArgumentNullException("autoAttendantName");
            }
            if (referringAutoAttendant == null)
            {
                throw new ArgumentNullException("referringAutoAttendant");
            }
            QueryFilter filter = new AndFilter(new QueryFilter[]
            {
                new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.Name, autoAttendantName),
                new ComparisonFilter(ComparisonOperator.Equal, UMAutoAttendantSchema.UMDialPlan, referringAutoAttendant.UMDialPlan)
            });
            UMAutoAttendant umautoAttendant = null;

            UMAutoAttendant[] array = (UMAutoAttendant[])session.Find <UMAutoAttendant>(filter, referringAutoAttendant.Id.Parent, false, null);
            if (array != null && array.Length == 1)
            {
                umautoAttendant = array[0];
            }
            if (umautoAttendant == null)
            {
                throw new InvalidAutoAttendantException(Strings.InvalidAutoAttendantInDialPlan(autoAttendantName, referringAutoAttendant.UMDialPlan.Name));
            }
            if (checkEnabled && umautoAttendant.Status != StatusEnum.Enabled)
            {
                throw new InvalidAutoAttendantException(Strings.DisabledLinkedAutoAttendant(autoAttendantName, referringAutoAttendant.Id.ToString()));
            }
        }
Exemple #3
0
        internal static IList <RuleStorage> LoadRuleStoragesByPolicy(IConfigDataProvider dataSession, PolicyStorage policyStorage, ObjectId rootId)
        {
            Guid policyId = Utils.GetUniversalIdentity(policyStorage);

            return((from RuleStorage x in dataSession.Find <RuleStorage>(new ComparisonFilter(ComparisonOperator.Equal, RuleStorageSchema.ParentPolicyId, policyId), rootId, true, null)
                    where x.ParentPolicyId.Equals(policyId)
                    select x).ToList <RuleStorage>());
        }
 public static IEnumerable <UnifiedPolicySettingStatus> LoadSyncStatuses(IConfigDataProvider dataSession, Guid objectId, string typeName)
 {
     return(dataSession.Find <UnifiedPolicySettingStatus>(QueryFilter.AndTogether(new QueryFilter[]
     {
         new ComparisonFilter(ComparisonOperator.Equal, UnifiedPolicySettingStatusSchema.SettingType, typeName),
         new ComparisonFilter(ComparisonOperator.Equal, UnifiedPolicySettingStatusSchema.ObjectId, objectId)
     }), null, false, null).Cast <UnifiedPolicySettingStatus>());
 }
        internal static void CheckSenderIpAddressesOverlap(IConfigDataProvider dataSession, TenantInboundConnector dataObject, Task task)
        {
            if (task == null || dataObject.SenderIPAddresses == null)
            {
                return;
            }
            TenantInboundConnector[] array = (TenantInboundConnector[])dataSession.Find <TenantInboundConnector>(null, null, true, null);
            List <string>            list  = null;
            List <string>            list2 = null;

            using (MultiValuedProperty <IPRange> .Enumerator enumerator = dataObject.SenderIPAddresses.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    IPRange ipRange = enumerator.Current;
                    bool    flag    = false;
                    foreach (TenantInboundConnector tenantInboundConnector in array)
                    {
                        if (tenantInboundConnector.Enabled && tenantInboundConnector.SenderIPAddresses != null && ((ADObjectId)tenantInboundConnector.Identity).ObjectGuid != ((ADObjectId)dataObject.Identity).ObjectGuid)
                        {
                            if (tenantInboundConnector.SenderIPAddresses.Any((IPRange exisingSenderIpRange) => exisingSenderIpRange.Overlaps(ipRange)))
                            {
                                if (list != null)
                                {
                                    list.Add(tenantInboundConnector.Name);
                                }
                                else
                                {
                                    list = new List <string>
                                    {
                                        tenantInboundConnector.Name
                                    };
                                }
                                flag = true;
                            }
                        }
                    }
                    if (flag)
                    {
                        if (list2 != null)
                        {
                            list2.Add(ipRange.Expression);
                        }
                        else
                        {
                            list2 = new List <string>
                            {
                                ipRange.Expression
                            };
                        }
                    }
                }
            }
            if (list != null && list2 != null)
            {
                task.WriteWarning(Strings.SenderIPAddressOverlapsExistingTenantInboundConnectors(string.Join(", ", list2), string.Join(", ", list)));
            }
        }
Exemple #6
0
        internal static IList <BindingStorage> LoadBindingStoragesByPolicy(IConfigDataProvider dataSession, UnifiedPolicyStorageBase policyStorage)
        {
            ArgumentValidator.ThrowIfNull("dataSession", dataSession);
            ArgumentValidator.ThrowIfNull("policyStorage", policyStorage);
            Guid        universalIdentity = Utils.GetUniversalIdentity(policyStorage);
            QueryFilter filter            = new ComparisonFilter(ComparisonOperator.Equal, ExPolicyConfigProvider.IsFFOOnline ? UnifiedPolicyStorageBaseSchema.ContainerProp : BindingStorageSchema.PolicyId, universalIdentity);

            return(dataSession.Find <BindingStorage>(filter, null, false, null).Cast <BindingStorage>().ToList <BindingStorage>());
        }
 public IEnumerable <T> GetObjects <T>(ObjectId rootId, IConfigDataProvider session) where T : IConfigurable, new()
 {
     IConfigurable[] array = session.Find <T>(null, this.MigrationBatchId, false, null);
     for (int i = 0; i < array.Length; i++)
     {
         T instance = (T)((object)array[i]);
         yield return(instance);
     }
     yield break;
 }
Exemple #8
0
        private static ADComplianceProgramCollection GetDlpPolicyCollection(IConfigDataProvider dataSession, string collectionName)
        {
            QueryFilter filter = new TextFilter(ADObjectSchema.Name, collectionName, MatchOptions.FullString, MatchFlags.Default);

            ADComplianceProgramCollection[] array = (ADComplianceProgramCollection[])dataSession.Find <ADComplianceProgramCollection>(filter, null, true, null);
            if (array.Length != 1)
            {
                throw new DlpPolicyInvalidCollectionException();
            }
            return(array[0]);
        }
 internal static bool FindTenantScopedOnPremiseInboundConnector(IConfigDataProvider dataSession, Func <TenantInboundConnector, bool> connectorMatches = null)
 {
     TenantInboundConnector[] array = (TenantInboundConnector[])dataSession.Find <TenantInboundConnector>(null, null, true, null);
     foreach (TenantInboundConnector tenantInboundConnector in array)
     {
         if (tenantInboundConnector.Enabled && tenantInboundConnector.ConnectorType == TenantConnectorType.OnPremises && (tenantInboundConnector.AssociatedAcceptedDomains == null || tenantInboundConnector.AssociatedAcceptedDomains.Count == 0) && (connectorMatches == null || connectorMatches(tenantInboundConnector)))
         {
             return(true);
         }
     }
     return(false);
 }
        public static bool ValidateIfAcceptedDomainCanBeRoutedUsingConnectors(IConfigDataProvider dataSession, SmtpDomainWithSubdomains acceptedDomain)
        {
            ArgumentValidator.ThrowIfNull("dataSession", dataSession);
            ArgumentValidator.ThrowIfNull("acceptedDomain", acceptedDomain);
            TenantOutboundConnector[]       connectors = (TenantOutboundConnector[])dataSession.Find <TenantOutboundConnector>(null, null, true, null);
            List <SmtpDomainWithSubdomains> list;

            return(ManageTenantOutboundConnectors.ValidateIfConnectorsCanRouteDomains(connectors, new SmtpDomainWithSubdomains[]
            {
                acceptedDomain
            }, out list));
        }
        public static SqlPropertyDefinition[] FindPropertyDefinition(DatabaseType databaseType, string entityName = null, string propertyName = null, int?entityId = null, int?propertyId = null)
        {
            IConfigDataProvider configDataProvider = ConfigDataProviderFactory.Default.Create(databaseType);
            QueryFilter         filter             = QueryFilter.AndTogether(new QueryFilter[]
            {
                new ComparisonFilter(ComparisonOperator.Equal, SqlPropertyDefinition.EntityNameProp, entityName),
                new ComparisonFilter(ComparisonOperator.Equal, SqlPropertyDefinition.PropertyNameProp, propertyName),
                new ComparisonFilter(ComparisonOperator.Equal, SqlPropertyDefinition.EntityIdProp, entityId),
                new ComparisonFilter(ComparisonOperator.Equal, SqlPropertyDefinition.PropertyIdProp, propertyId)
            });

            return(configDataProvider.Find <SqlPropertyDefinition>(filter, null, true, null).Cast <SqlPropertyDefinition>().ToArray <SqlPropertyDefinition>());
        }
Exemple #12
0
 internal static void ValidatePublicFolderInfrastructure(IConfigDataProvider session, Task.TaskErrorLoggingDelegate errorHandler, Task.TaskWarningLoggingDelegate warningHandler, bool publicFolderDistributionEnabled)
 {
     IConfigurable[] array = session.Find <PublicFolderDatabase>(null, null, true, null);
     if (array.Length == 0)
     {
         if (publicFolderDistributionEnabled)
         {
             errorHandler(new InvalidOperationException(Strings.ErrorPublicFolderFree), ErrorCategory.InvalidOperation, null);
             return;
         }
         warningHandler(Strings.WarningPublicFolderFree);
     }
 }
 private static ADMiniUser GetMiniUser(IConfigDataProvider dataProvider, QueryFilter filter)
 {
     IConfigurable[] array = dataProvider.Find <ADMiniUser>(filter, null, false, null);
     if (array == null || array.Length == 0)
     {
         return(null);
     }
     if (array.Length > 1)
     {
         throw new AmbiguousMatchException(string.Format("Found multiple entries for given query filter. QueryFilter: {0}", filter.ToString()));
     }
     return((ADMiniUser)array[0]);
 }
Exemple #14
0
        internal static OfflineAddressBook ResetOldDefaultOab(IConfigDataProvider session, Task.TaskErrorLoggingDelegate errorHandler)
        {
            OfflineAddressBook offlineAddressBook = null;
            QueryFilter        filter             = new ComparisonFilter(ComparisonOperator.Equal, OfflineAddressBookSchema.IsDefault, true);

            IConfigurable[] array = session.Find <OfflineAddressBook>(filter, null, true, null);
            if (array.Length > 0)
            {
                offlineAddressBook           = (OfflineAddressBook)array[0];
                offlineAddressBook.IsDefault = false;
                session.Save(offlineAddressBook);
            }
            return(offlineAddressBook);
        }
 public IEnumerable <T> GetObjects <T>(ObjectId rootId, IConfigDataProvider session) where T : IConfigurable, new()
 {
     if (this.Id == null)
     {
         throw new ArgumentException("this.Id");
     }
     IConfigurable[] array = session.Find <T>(null, this.Id, false, null);
     for (int i = 0; i < array.Length; i++)
     {
         T instance = (T)((object)array[i]);
         yield return(instance);
     }
     yield break;
 }
 private static void ValidateCentralizedMailControlAndAssociatedAcceptedDomainsRestriction(IConfigDataProvider dataSession, TenantInboundConnector dataObject, Task task)
 {
     TenantOutboundConnector[] array = (TenantOutboundConnector[])dataSession.Find <TenantOutboundConnector>(null, null, true, null);
     foreach (TenantOutboundConnector tenantOutboundConnector in array)
     {
         if (tenantOutboundConnector.Enabled && tenantOutboundConnector.RouteAllMessagesViaOnPremises)
         {
             if (!NewInboundConnector.FindTenantScopedOnPremiseInboundConnector(dataSession, (TenantInboundConnector c) => ((ADObjectId)c.Identity).ObjectGuid != ((ADObjectId)dataObject.Identity).ObjectGuid))
             {
                 task.WriteError(new TenantScopedInboundConnectorRequiredForCMCConnectorException(tenantOutboundConnector.Name), ErrorCategory.InvalidArgument, null);
             }
             break;
         }
     }
 }
Exemple #17
0
        public static bool TryGetTransportRules(IConfigDataProvider dataSession, out IEnumerable <TransportRule> rules, out string error)
        {
            string      text   = Utils.RuleCollectionNameFromRole();
            QueryFilter filter = new TextFilter(ADObjectSchema.Name, text, MatchOptions.FullString, MatchFlags.Default);

            TransportRuleCollection[] array = (TransportRuleCollection[])dataSession.Find <TransportRuleCollection>(filter, null, true, null);
            if (array.Any <TransportRuleCollection>())
            {
                rules = dataSession.FindPaged <TransportRule>(null, array[0].Id, false, null, 0);
                error = null;
                return(true);
            }
            rules = null;
            error = string.Format("Unable to find rule collection {0}. Tenant is not provisioned for Exchange Transport Rules.", text);
            return(false);
        }
 private static IEnumerable <TenantOutboundConnector> GetOutboundConnectorsToValidate(IConfigDataProvider dataSession, TenantOutboundConnector connectorBeingModified)
 {
     if (connectorBeingModified != null)
     {
         yield return(connectorBeingModified);
     }
     TenantOutboundConnector[] connectors = (TenantOutboundConnector[])dataSession.Find <TenantOutboundConnector>(null, null, true, null);
     foreach (TenantOutboundConnector connector in connectors)
     {
         if (connectorBeingModified == null || ((ADObjectId)connector.Identity).ObjectGuid != ((ADObjectId)connectorBeingModified.Identity).ObjectGuid)
         {
             yield return(connector);
         }
     }
     yield break;
 }
        private static List <SmtpDomainWithSubdomains> GetNonAuthoritativeAcceptedDomains(IConfigDataProvider dataSession)
        {
            List <SmtpDomainWithSubdomains> list = null;

            AcceptedDomain[] array = (AcceptedDomain[])dataSession.Find <AcceptedDomain>(null, null, true, null);
            foreach (AcceptedDomain acceptedDomain in array)
            {
                if (acceptedDomain.DomainType != AcceptedDomainType.Authoritative && acceptedDomain.DomainName != null)
                {
                    if (list == null)
                    {
                        list = new List <SmtpDomainWithSubdomains>();
                    }
                    list.Add(acceptedDomain.DomainName);
                }
            }
            return(list);
        }
        internal static T FindWebAppVirtualDirectoryInSameWebSite <T>(ExchangeWebAppVirtualDirectory source, IConfigDataProvider dataProvider) where T : ExchangeWebAppVirtualDirectory, new()
        {
            T result = default(T);

            IConfigurable[] array = dataProvider.Find <T>(null, source.Server, true, null);
            if (array != null)
            {
                foreach (ExchangeWebAppVirtualDirectory exchangeWebAppVirtualDirectory in array)
                {
                    if (IisUtility.Exists(exchangeWebAppVirtualDirectory.MetabasePath))
                    {
                        WebAppVirtualDirectoryHelper.UpdateFromMetabase(exchangeWebAppVirtualDirectory);
                        if (string.Equals(source.WebSite, exchangeWebAppVirtualDirectory.WebSite, StringComparison.OrdinalIgnoreCase))
                        {
                            result = (T)((object)exchangeWebAppVirtualDirectory);
                            break;
                        }
                    }
                }
            }
            return(result);
        }
        private static IEnumerable <TenantInboundConnector> GetInboundConnectors(IConfigDataProvider dataProvider, ADPropertyDefinition propertyDefinition, IEnumerable <string> propertyValues, bool enabledOnly)
        {
            IEnumerable <ComparisonFilter> propertyNameFilters = from propertyValue in propertyValues
                                                                 select new ComparisonFilter(ComparisonOperator.Equal, propertyDefinition, propertyValue);
            QueryFilter filter = QueryFilter.AndTogether(new QueryFilter[]
            {
                QueryFilter.OrTogether(propertyNameFilters.ToArray <QueryFilter>()),
                new ComparisonFilter(ComparisonOperator.Equal, DalHelper.CacheFailoverModeProp, CacheFailoverMode.BloomFilter)
            });
            IEnumerable <IConfigurable> inboundConnectors = dataProvider.Find <TenantInboundConnector>(filter, null, false, null);

            foreach (IConfigurable configurable in inboundConnectors)
            {
                TenantInboundConnector inboundConnector = (TenantInboundConnector)configurable;
                if (!enabledOnly || inboundConnector.Enabled)
                {
                    FfoDirectorySession.FixDistinguishedName(inboundConnector, DalHelper.GetTenantDistinguishedName(inboundConnector.OrganizationalUnitRoot.ObjectGuid.ToString()), inboundConnector.OrganizationalUnitRoot.ObjectGuid, inboundConnector.Id.ObjectGuid, null);
                    yield return(inboundConnector);
                }
            }
            yield break;
        }
 public override void FixIdPropertiesForWebservice(IConfigDataProvider dataProvider, ADObjectId orgId, bool isServer)
 {
     if (typeof(T) == typeof(TenantInboundConnector))
     {
         MultiValuedProperty <ADObjectId> multiValuedProperty = (MultiValuedProperty <ADObjectId>) this[TenantInboundConnectorSchema.AssociatedAcceptedDomains];
         if (multiValuedProperty != null && multiValuedProperty.Count != 0)
         {
             QueryFilter filter = new ComparisonFilter(ComparisonOperator.Equal, ADObjectSchema.OrganizationalUnitRoot, orgId.ObjectGuid);
             IEnumerable <AcceptedDomain> source = dataProvider.Find <AcceptedDomain>(filter, null, false, null).OfType <AcceptedDomain>();
             for (int i = 0; i < multiValuedProperty.Count; i++)
             {
                 ADObjectId     domainId        = multiValuedProperty[i];
                 AcceptedDomain acceptedDomain2 = source.FirstOrDefault((AcceptedDomain acceptedDomain) => acceptedDomain.Name == domainId.Name);
                 if (acceptedDomain2 != null)
                 {
                     domainId = new ADObjectId(domainId.DistinguishedName, acceptedDomain2.Id.ObjectGuid);
                     multiValuedProperty[i] = domainId;
                 }
             }
         }
     }
     base.FixIdPropertiesForWebservice(dataProvider, orgId, isServer);
 }
Exemple #23
0
        internal static AttachmentFilteringConfig GetAFilterConfig(IConfigDataProvider session)
        {
            ObjectId rootId = null;

            try
            {
                rootId = ((IConfigurationSession)session).GetOrgContainerId();
            }
            catch (OrgContainerNotFoundException)
            {
                throw new AttachmentFilterADEntryNotFoundException();
            }
            catch (TenantOrgContainerNotFoundException)
            {
                throw new AttachmentFilterADEntryNotFoundException();
            }
            IConfigurable[] array = session.Find <AttachmentFilteringConfig>(null, rootId, false, null);
            if (array.Length != 1)
            {
                throw new AttachmentFilterADEntryNotFoundException();
            }
            return(array[0] as AttachmentFilteringConfig);
        }
        internal static void ValidateDBVersion(DatabaseType databaseType)
        {
            IConfigDataProvider configDataProvider = ConfigDataProviderFactory.Default.Create(databaseType);

            configDataProvider.Find <SqlDBVersion>(null, null, false, null).Cast <SqlDBVersion>().ToArray <SqlDBVersion>();
        }
Exemple #25
0
 internal bool ObjectExists <T>(IConfigDataProvider session, QueryFilter filter) where T : ADConfigurationObject, new()
 {
     this.writeVerbose(TaskVerboseStringHelper.GetFindDataObjectsVerboseString(session, typeof(T), filter, null, true));
     return(session.Find <T>(filter, null, true, null).Length > 0);
 }
Exemple #26
0
        internal static PublicFolderDatabase FindClosestPublicFolderDatabase(IConfigDataProvider scSession, ADObjectId sourceServerId, Func <PublicFolderDatabase, bool> candidateMatcher)
        {
            if (scSession == null)
            {
                throw new ArgumentNullException("scSession");
            }
            PublicFolderDatabase result = null;

            PublicFolderDatabase[] array = (PublicFolderDatabase[])scSession.Find <PublicFolderDatabase>(null, null, true, null);
            if (candidateMatcher != null && 0 < array.Length)
            {
                array = array.Where(candidateMatcher).ToArray <PublicFolderDatabase>();
            }
            if (1 == array.Length)
            {
                result = array[0];
            }
            else if (array.Length > 1)
            {
                ExchangeTopology exchangeTopology = ExchangeTopology.Discover(null, ExchangeTopologyScope.ADAndExchangeServerAndSiteTopology);
                TopologySite     topologySite     = null;
                TopologySite     topologySite2    = null;
                if (sourceServerId == null)
                {
                    topologySite = exchangeTopology.LocalSite;
                }
                else
                {
                    string text   = null;
                    Server server = (Server)scSession.Read <Server>(sourceServerId);
                    if (server != null)
                    {
                        text = server.Fqdn;
                    }
                    if (!string.IsNullOrEmpty(text))
                    {
                        topologySite = exchangeTopology.SiteFromADServer(text);
                    }
                }
                if (topologySite != null)
                {
                    ReadOnlyCollection <TopologySite>         allTopologySites     = exchangeTopology.AllTopologySites;
                    ReadOnlyCollection <TopologySiteLink>     allTopologySiteLinks = exchangeTopology.AllTopologySiteLinks;
                    ReadOnlyCollection <TopologyServer>       allTopologyServers   = exchangeTopology.AllTopologyServers;
                    Dictionary <TopologyServer, TopologySite> dictionary           = new Dictionary <TopologyServer, TopologySite>();
                    foreach (TopologyServer topologyServer in allTopologyServers)
                    {
                        if (topologyServer.TopologySite != null)
                        {
                            foreach (TopologySite topologySite3 in allTopologySites)
                            {
                                if (topologySite3.DistinguishedName.Equals(topologyServer.TopologySite.DistinguishedName, StringComparison.OrdinalIgnoreCase))
                                {
                                    dictionary[topologyServer] = topologySite3;
                                    break;
                                }
                            }
                        }
                    }
                    Dictionary <TopologySite, PublicFolderDatabase> dictionary2 = new Dictionary <TopologySite, PublicFolderDatabase>();
                    List <TopologySite> list = new List <TopologySite>();
                    foreach (PublicFolderDatabase publicFolderDatabase in array)
                    {
                        foreach (KeyValuePair <TopologyServer, TopologySite> keyValuePair in dictionary)
                        {
                            if (keyValuePair.Key.DistinguishedName.Equals(publicFolderDatabase.Server.DistinguishedName, StringComparison.OrdinalIgnoreCase))
                            {
                                if (!dictionary2.ContainsKey(keyValuePair.Value))
                                {
                                    dictionary2[keyValuePair.Value] = publicFolderDatabase;
                                    list.Add(keyValuePair.Value);
                                    break;
                                }
                                if (keyValuePair.Key.IsExchange2007OrLater)
                                {
                                    dictionary2[keyValuePair.Value] = publicFolderDatabase;
                                    break;
                                }
                                break;
                            }
                        }
                    }
                    topologySite2 = exchangeTopology.FindClosestDestinationSite(topologySite, list);
                    if (topologySite2 != null)
                    {
                        result = dictionary2[topologySite2];
                    }
                }
                if (topologySite2 == null)
                {
                    result = array[0];
                }
            }
            return(result);
        }
Exemple #27
0
 internal static IList <PolicyStorage> LoadPolicyStorages(IConfigDataProvider dataSession, PolicyScenario scenarioType)
 {
     return((from PolicyStorage s in dataSession.Find <PolicyStorage>(null, Utils.GetRootId(dataSession), false, null)
             where s.Scenario == scenarioType
             select s).ToList <PolicyStorage>());
 }