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())); } }
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))); } }
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; }
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>()); }
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]); }
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; } } }
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); }
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>(); }
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); }
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); }
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>()); }