コード例 #1
0
        private static QueryFilter ScopeRestrictionFlagsFilterBuilder <T>(SinglePropertyFilter filter, ScopeFlagsFormat.ConvertToMaskDelegate convertor)
        {
            if (!(filter is ComparisonFilter))
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedFilterForProperty(filter.Property.Name, filter.GetType(), typeof(ComparisonFilter)));
            }
            ComparisonFilter comparisonFilter = (ComparisonFilter)filter;

            if (comparisonFilter.ComparisonOperator != ComparisonOperator.Equal && ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedOperatorForProperty(comparisonFilter.Property.Name, comparisonFilter.ComparisonOperator.ToString()));
            }
            if (!(comparisonFilter.PropertyValue is T))
            {
                throw new ArgumentException("filter.PropertyValue");
            }
            QueryFilter queryFilter = new BitMaskAndFilter(ManagementScopeSchema.ScopeRestrictionFlags, convertor(comparisonFilter.PropertyValue));

            if (comparisonFilter.PropertyValue is bool && !(bool)comparisonFilter.PropertyValue)
            {
                if (ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
                {
                    return(new NotFilter(queryFilter));
                }
                return(queryFilter);
            }
            else
            {
                if (ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
                {
                    return(queryFilter);
                }
                return(new NotFilter(queryFilter));
            }
        }
        private ADObjectId GetPolicyIdFromAD(OrganizationId key)
        {
            ExTraceGlobals.MobileDevicePolicyTracer.Information <OrganizationId>((long)this.GetHashCode(), "MobileDevicePolicyIdCacheByOrganization.GetPolicyFromAD({0})", key);
            ADSessionSettings     settings = ADSessionSettings.FromOrganizationIdWithoutRbacScopesServiceOnly(key);
            IConfigurationSession session  = this.GetConfigSession(settings);
            ADObjectId            rootId   = session.GetOrgContainerId();
            QueryFilter           filter   = new BitMaskAndFilter(MobileMailboxPolicySchema.MobileFlags, 4096UL);
            SortBy     sortBy   = new SortBy(ADObjectSchema.WhenChanged, SortOrder.Descending);
            ADObjectId policyId = null;

            try
            {
                ADNotificationAdapter.RunADOperation(delegate()
                {
                    MobileMailboxPolicy[] array = session.Find <MobileMailboxPolicy>(rootId, QueryScope.SubTree, filter, sortBy, 1);
                    if (array != null && array.Length > 0)
                    {
                        policyId = array[0].Id;
                        OrgIdADObjectWrapper key2 = new OrgIdADObjectWrapper(policyId, key);
                        if (!MobileDevicePolicyCache.Instance.Contains(key2))
                        {
                            MobileDevicePolicyData mobileDevicePolicyDataFromMobileMailboxPolicy = MobileDevicePolicyDataFactory.GetMobileDevicePolicyDataFromMobileMailboxPolicy(array[0]);
                            MobileDevicePolicyCache.Instance.TryAdd(key2, ref mobileDevicePolicyDataFromMobileMailboxPolicy);
                        }
                    }
                });
            }
            catch (LocalizedException arg)
            {
                ExTraceGlobals.MobileDevicePolicyTracer.TraceError <OrganizationId, LocalizedException>((long)this.GetHashCode(), "MobileDevicePolicyIdCacheByOrganization.GetPolicyIdFromAD({0}) threw exception: {1}", key, arg);
                throw;
            }
            ExTraceGlobals.MobileDevicePolicyTracer.Information <OrganizationId, ADObjectId>((long)this.GetHashCode(), "MobileDevicePolicyIdCacheByOrganization.GetPolicyFromAD({0}) returned: {1}", key, policyId);
            return(policyId);
        }
コード例 #3
0
        private static QueryFilter CreateUserEnabledFilter(bool enabled)
        {
            QueryFilter queryFilter = new BitMaskAndFilter(ADUserSchema.UserAccountControl, 2UL);

            if (!enabled)
            {
                return(queryFilter);
            }
            return(new NotFilter(queryFilter));
        }
コード例 #4
0
        public RemoteRoutingAddressGenerator(IConfigurationSession session)
        {
            QueryFilter filter = new BitMaskAndFilter(DomainContentConfigSchema.AcceptMessageTypes, 256UL);

            DomainContentConfig[] array = session.Find <DomainContentConfig>(session.GetOrgContainerId(), QueryScope.SubTree, filter, null, 1);
            if (array.Length > 0)
            {
                this.targetDeliveryDomain = array[0].DomainName.Domain;
            }
        }
コード例 #5
0
        private bool TryGetServerForRoleAndVersion(ServerRole serverRole, ServerVersion version)
        {
            QueryFilter queryFilter  = new BitMaskAndFilter(ServerSchema.CurrentServerRole, (ulong)((long)serverRole));
            QueryFilter queryFilter2 = new ComparisonFilter(ComparisonOperator.Equal, ServerSchema.AdminDisplayVersion, version);
            QueryFilter filter       = new AndFilter(new QueryFilter[]
            {
                queryFilter,
                queryFilter2
            });
            ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.NonCacheSessionFactory.CreateTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 199, "TryGetServerForRoleAndVersion", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Deployment\\CompleteOrganizationUpgradeTask.cs");

            MiniServer[] array = topologyConfigurationSession.Find <MiniServer>(null, QueryScope.SubTree, filter, null, 1, null);
            return(array != null && array.Length > 0);
        }
コード例 #6
0
        protected QueryFilter SinglePropertySmartFilterToNativeFilter(QueryFilter filter, PropertyDefinition nativeProperty)
        {
            MultivaluedInstanceComparisonFilter multivaluedInstanceComparisonFilter = filter as MultivaluedInstanceComparisonFilter;

            if (multivaluedInstanceComparisonFilter != null)
            {
                return(new MultivaluedInstanceComparisonFilter(multivaluedInstanceComparisonFilter.ComparisonOperator, nativeProperty, multivaluedInstanceComparisonFilter.PropertyValue));
            }
            ComparisonFilter comparisonFilter = filter as ComparisonFilter;

            if (comparisonFilter != null)
            {
                return(new ComparisonFilter(comparisonFilter.ComparisonOperator, nativeProperty, comparisonFilter.PropertyValue));
            }
            ExistsFilter existsFilter = filter as ExistsFilter;

            if (existsFilter != null)
            {
                return(new ExistsFilter(nativeProperty));
            }
            TextFilter textFilter = filter as TextFilter;

            if (textFilter != null)
            {
                return(new TextFilter(nativeProperty, textFilter.Text, textFilter.MatchOptions, textFilter.MatchFlags));
            }
            BitMaskFilter bitMaskFilter = filter as BitMaskFilter;

            if (bitMaskFilter != null)
            {
                return(new BitMaskFilter(nativeProperty, bitMaskFilter.Mask, bitMaskFilter.IsNonZero));
            }
            BitMaskAndFilter bitMaskAndFilter = filter as BitMaskAndFilter;

            if (bitMaskAndFilter != null)
            {
                return(new BitMaskAndFilter(nativeProperty, bitMaskAndFilter.Mask));
            }
            BitMaskOrFilter bitMaskOrFilter = filter as BitMaskOrFilter;

            if (bitMaskOrFilter != null)
            {
                return(new BitMaskOrFilter(nativeProperty, bitMaskOrFilter.Mask));
            }
            throw this.CreateInvalidFilterConversionException(filter);
        }
コード例 #7
0
        private static QueryFilter RoleAssignmentFlagsFilterBuilder <T>(SinglePropertyFilter filter, RoleAssignmentFlagsFormat.Bitfields bitfield, RoleAssignmentFlagsFormat.ConvertToUlongDelegate convertor)
        {
            if (!(filter is ComparisonFilter))
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedFilterForProperty(filter.Property.Name, filter.GetType(), typeof(ComparisonFilter)));
            }
            ComparisonFilter comparisonFilter = (ComparisonFilter)filter;

            if (comparisonFilter.ComparisonOperator != ComparisonOperator.Equal && ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedOperatorForProperty(comparisonFilter.Property.Name, comparisonFilter.ComparisonOperator.ToString()));
            }
            if (!(comparisonFilter.PropertyValue is T))
            {
                throw new ArgumentException("filter.PropertyValue");
            }
            ulong       rawUInt64Bits = RoleAssignmentFlagsFormat.GetRawUInt64Bits(convertor(comparisonFilter.PropertyValue), bitfield);
            ulong       mask          = RoleAssignmentFlagsFormat.masks[(int)bitfield] << RoleAssignmentFlagsFormat.shifts[(int)bitfield] & ~rawUInt64Bits;
            QueryFilter queryFilter   = new BitMaskAndFilter(ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags, rawUInt64Bits);
            QueryFilter queryFilter2  = new BitMaskOrFilter(ExchangeRoleAssignmentSchema.ExchangeRoleAssignmentFlags, mask);

            if (comparisonFilter.PropertyValue is bool && !(bool)comparisonFilter.PropertyValue)
            {
                if (ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
                {
                    return(new NotFilter(queryFilter));
                }
                return(queryFilter);
            }
            else
            {
                if (ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
                {
                    return(new AndFilter(new QueryFilter[]
                    {
                        queryFilter,
                        new NotFilter(queryFilter2)
                    }));
                }
                return(new OrFilter(new QueryFilter[]
                {
                    new NotFilter(queryFilter),
                    queryFilter2
                }));
            }
        }
コード例 #8
0
        public AcceptedDomain GetDefaultAcceptedDomain()
        {
            BitMaskAndFilter filter = new BitMaskAndFilter(AcceptedDomainSchema.AcceptedDomainFlags, 4UL);

            AcceptedDomain[] array = base.Find <AcceptedDomain>(this.GetOrgContainerId(), QueryScope.SubTree, filter, null, 0);
            if (array == null || array.Length == 0)
            {
                return(null);
            }
            if (array.Length > 1)
            {
                Globals.LogExchangeTopologyEvent(DirectoryEventLogConstants.Tuple_DSC_EVENT_MULTIPLE_DEFAULT_ACCEPTED_DOMAIN, array[0].DistinguishedName, new object[]
                {
                    array.Length.ToString()
                });
            }
            return(array[0]);
        }
コード例 #9
0
        protected QueryFilter SinglePropertyNativeFilterToSmartFilter(QueryFilter filter, PropertyDefinition nativeProperty)
        {
            SinglePropertyFilter singlePropertyFilter = filter as SinglePropertyFilter;

            if (singlePropertyFilter != null && singlePropertyFilter.Property.Equals(nativeProperty))
            {
                MultivaluedInstanceComparisonFilter multivaluedInstanceComparisonFilter = filter as MultivaluedInstanceComparisonFilter;
                if (multivaluedInstanceComparisonFilter != null)
                {
                    return(new MultivaluedInstanceComparisonFilter(multivaluedInstanceComparisonFilter.ComparisonOperator, this, multivaluedInstanceComparisonFilter.PropertyValue));
                }
                ComparisonFilter comparisonFilter = filter as ComparisonFilter;
                if (comparisonFilter != null)
                {
                    return(new ComparisonFilter(comparisonFilter.ComparisonOperator, this, comparisonFilter.PropertyValue));
                }
                ExistsFilter existsFilter = filter as ExistsFilter;
                if (existsFilter != null)
                {
                    return(new ExistsFilter(this));
                }
                TextFilter textFilter = filter as TextFilter;
                if (textFilter != null)
                {
                    return(new TextFilter(this, textFilter.Text, textFilter.MatchOptions, textFilter.MatchFlags));
                }
                BitMaskFilter bitMaskFilter = filter as BitMaskFilter;
                if (bitMaskFilter != null)
                {
                    return(new BitMaskFilter(this, bitMaskFilter.Mask, bitMaskFilter.IsNonZero));
                }
                BitMaskAndFilter bitMaskAndFilter = filter as BitMaskAndFilter;
                if (bitMaskAndFilter != null)
                {
                    return(new BitMaskAndFilter(this, bitMaskAndFilter.Mask));
                }
                BitMaskOrFilter bitMaskOrFilter = filter as BitMaskOrFilter;
                if (bitMaskOrFilter != null)
                {
                    return(new BitMaskOrFilter(this, bitMaskOrFilter.Mask));
                }
            }
            return(null);
        }
コード例 #10
0
        internal static QueryFilter HasLocalCopyFilterBuilder(SinglePropertyFilter filter)
        {
            LegacyDatabase.InternalAssertComparisonFilter(filter, LegacyDatabaseSchema.HasLocalCopy);
            ComparisonFilter   comparisonFilter   = filter as ComparisonFilter;
            ComparisonOperator comparisonOperator = comparisonFilter.ComparisonOperator;

            if (comparisonOperator != ComparisonOperator.Equal && ComparisonOperator.NotEqual != comparisonOperator)
            {
                throw new ADFilterException(DirectoryStrings.ExceptionInvalidBitwiseComparison(LegacyDatabaseSchema.HasLocalCopy.Name, comparisonOperator.ToString()));
            }
            bool        flag        = (bool)comparisonFilter.PropertyValue;
            bool        flag2       = ComparisonOperator.Equal == comparisonOperator;
            QueryFilter queryFilter = new BitMaskAndFilter(LegacyDatabaseSchema.HasLocalCopyValue, 1UL);

            if (flag ^ flag2)
            {
                queryFilter = new NotFilter(queryFilter);
            }
            return(queryFilter);
        }
コード例 #11
0
        internal static QueryFilter ProvisioningFlagsFilterBuilder(DatabaseProvisioningFlags provisioningFlag, SinglePropertyFilter filter)
        {
            if (!(filter is ComparisonFilter))
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedFilterForProperty(filter.Property.Name, filter.GetType(), typeof(ComparisonFilter)));
            }
            ComparisonFilter comparisonFilter = (ComparisonFilter)filter;

            if (comparisonFilter.ComparisonOperator != ComparisonOperator.Equal && ComparisonOperator.NotEqual != comparisonFilter.ComparisonOperator)
            {
                throw new ADFilterException(DirectoryStrings.ExceptionUnsupportedOperatorForProperty(comparisonFilter.Property.Name, comparisonFilter.ComparisonOperator.ToString()));
            }
            QueryFilter queryFilter = new BitMaskAndFilter(SharedPropertyDefinitions.ProvisioningFlags, (ulong)((long)provisioningFlag));

            if ((comparisonFilter.ComparisonOperator == ComparisonOperator.Equal && (bool)comparisonFilter.PropertyValue) || (ComparisonOperator.NotEqual == comparisonFilter.ComparisonOperator && !(bool)comparisonFilter.PropertyValue))
            {
                return(queryFilter);
            }
            return(new NotFilter(queryFilter));
        }
コード例 #12
0
 protected override void InternalValidate()
 {
     if (this.Assembly != null)
     {
         QueryFilter queryFilter = new ComparisonFilter(ComparisonOperator.Equal, CmdletExtensionAgentSchema.Assembly, this.Assembly);
         if (this.InternalFilter == null)
         {
             this.internalFilter = queryFilter;
         }
         else
         {
             this.internalFilter = new AndFilter(new QueryFilter[]
             {
                 this.InternalFilter,
                 queryFilter
             });
         }
     }
     if (base.Fields["Enabled"] != null)
     {
         QueryFilter queryFilter2 = new BitMaskAndFilter(CmdletExtensionAgentSchema.CmdletExtensionFlags, 1UL);
         if (!this.Enabled)
         {
             queryFilter2 = new NotFilter(queryFilter2);
         }
         if (this.InternalFilter == null)
         {
             this.internalFilter = queryFilter2;
         }
         else
         {
             this.internalFilter = new AndFilter(new QueryFilter[]
             {
                 this.InternalFilter,
                 queryFilter2
             });
         }
     }
     base.InternalValidate();
 }
コード例 #13
0
        private ADRecipient[] FindMatchedUser(MailboxStatistics storeMailbox, bool?accountEnabled)
        {
            int         num           = storeMailbox.LegacyDN.ToUpperInvariant().LastIndexOf("/CN=");
            string      propertyValue = storeMailbox.LegacyDN.Substring(num + "/CN=".Length);
            QueryFilter queryFilter   = new ComparisonFilter(ComparisonOperator.Equal, ADMailboxRecipientSchema.SamAccountName, propertyValue);
            QueryFilter queryFilter2  = new ComparisonFilter(ComparisonOperator.Equal, ADMailboxRecipientSchema.SamAccountName, storeMailbox.DisplayName);
            QueryFilter queryFilter3  = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.DisplayName, propertyValue);
            QueryFilter queryFilter4  = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.DisplayName, storeMailbox.DisplayName);
            QueryFilter queryFilter5  = new ComparisonFilter(ComparisonOperator.Equal, ADRecipientSchema.RecipientType, RecipientType.User);
            AndFilter   andFilter     = new AndFilter(new QueryFilter[]
            {
                queryFilter5,
                new OrFilter(new QueryFilter[]
                {
                    queryFilter,
                    queryFilter2,
                    queryFilter3,
                    queryFilter4
                })
            });

            if (accountEnabled != null && storeMailbox.MailboxType == StoreMailboxType.Private)
            {
                QueryFilter queryFilter6 = new BitMaskAndFilter(ADUserSchema.UserAccountControl, 2UL);
                if (accountEnabled.Value)
                {
                    queryFilter6 = new NotFilter(queryFilter6);
                }
                andFilter = new AndFilter(new QueryFilter[]
                {
                    andFilter,
                    queryFilter6
                });
            }
            return(this.GlobalCatalogSession.Find(null, QueryScope.SubTree, andFilter, null, 0));
        }