Пример #1
0
        public static SearchResult GetSearchResultByDN(ADHelper adHelper, string DN, ADSchemaType schemaType)
        {
            ADSearchConditions condition = new ADSearchConditions(SearchScope.Subtree);

            condition.SizeLimit = 1;
            string filter = string.Empty;

            switch (schemaType)
            {
            case ADSchemaType.Organizations:
                filter = "(objectCategory=organizationalUnit)";
                break;

            case ADSchemaType.Users:
                filter = "(&(objectCategory=person)(objectClass=user))";
                break;

            case ADSchemaType.Groups:
                filter = "(&(objectCategory=group)(objectClass=group))";
                break;
            }

            filter = string.Format("(&(distinguishedName={0}){1})", AppendNamingContext(DN), filter);

            using (DirectoryEntry parentEntry = adHelper.GetRootEntry())
            {
                var searchList = adHelper.ExecuteSearch(parentEntry,
                                                        filter,
                                                        condition,
                                                        ADObjNeededProperties);

                return(searchList.FirstOrDefault());
            }
        }
Пример #2
0
        /// <summary>
        /// 将DirectoryEntry转换成ADSchemaType
        /// </summary>
        /// <param name="entry"></param>
        /// <returns></returns>
        public static ADSchemaType ToADSchemaType(this DirectoryEntry entry)
        {
            ADSchemaType result = ADSchemaType.Unspecified;

            EnumItemDescriptionList items = EnumItemDescriptionAttribute.GetDescriptionList(typeof(ADSchemaType));

            foreach (EnumItemDescription item in items)
            {
                if (string.Compare(item.ShortName, entry.SchemaClassName, true) == 0)
                {
                    result = (ADSchemaType)item.EnumValue;
                    break;
                }
            }

            return(result);
        }
Пример #3
0
        public static SearchResult GetSearchResultByLogonName(string logonName, ADSchemaType schemaType)
        {
            ADHelper           adHelper  = SynchronizeContext.Current.ADHelper;
            ADSearchConditions condition = new ADSearchConditions(SearchScope.Subtree);

            condition.SizeLimit = 1;
            string filter = string.Empty;

            string[] neededProperties = GetNeededProperties(schemaType);

            filter = string.Format("(samAccountName={0})", ADHelper.EscapeValueForLdapQuery(logonName));

            using (DirectoryEntry parentEntry = adHelper.GetRootEntry())
            {
                var searchList = adHelper.ExecuteSearch(parentEntry,
                                                        filter,
                                                        condition,
                                                        neededProperties);

                return(searchList.FirstOrDefault());
            }
        }
Пример #4
0
        public static string[] GetNeededProperties(ADSchemaType schemaType)
        {
            string[] neededProperties = null;

            switch (schemaType)
            {
            case ADSchemaType.Organizations:
                neededProperties = ADOUObjNeededProperties;
                break;

            case ADSchemaType.Users:
                neededProperties = ADUserObjNeededProperties;
                break;

            case ADSchemaType.Groups:
                neededProperties = ADGroupObjNeededProperties;
                break;

            default:
                throw new NotSupportedException("不支持的类型:" + schemaType);
            }

            return(neededProperties);
        }
Пример #5
0
        public static string GetFilterByMask(ADSchemaType nMask, ExtraFilter ef)
        {
            StringBuilder strB = new StringBuilder(1024);

            strB.Append("(|");

            if ((ADSchemaType.Domain & nMask) != 0)
            {
                strB.Append("(objectCategory=domain)");
            }

            if ((ADSchemaType.Organizations & nMask) != 0)
            {
                string strOU = string.Empty;

                strOU += "(objectCategory=organizationalUnit)";

                if (ef.OUFilter != string.Empty)
                {
                    strOU += ef.OUFilter;
                }

                strB.Append("(&" + strOU + ")");
            }

            if ((ADSchemaType.Container & nMask) != 0)
            {
                string strContainer = "(objectCategory=person)(objectClass=user)";

                if (ef.ContainerFilter != string.Empty)
                {
                    strContainer += ef.ContainerFilter;
                }

                strB.Append("(&" + strContainer + ")");
            }

            if ((ADSchemaType.Users & nMask) != 0)
            {
                string strUser = "******";

                if (ef.UserFilter != string.Empty)
                {
                    strUser += ef.UserFilter;
                }

                strB.Append("(&" + strUser + ")");
            }

            if ((ADSchemaType.Groups & nMask) != 0)
            {
                string strGroup = "(objectCategory=group)(objectClass=group)";

                if (ef.GroupFilter != string.Empty)
                {
                    strGroup += ef.GroupFilter;
                }

                strB.Append("(&" + strGroup + ")");
            }

            strB.Append(")");

            return(strB.ToString());
        }
Пример #6
0
 public static string GetFilterByMask(ADSchemaType nMask)
 {
     return(GetFilterByMask(nMask, new ExtraFilter()));
 }
Пример #7
0
 /// <summary>
 /// 获取搜索结果
 /// </summary>
 /// <param name="nativeIDs">一组NativeID</param>
 /// <param name="schemaType"></param>
 /// <param name="sizeLimit"></param>
 /// <returns></returns>
 public static IEnumerable <SearchResult> GetSearchResultsByIDs(ADHelper adHelper, IEnumerable <string> nativeIDs, ADSchemaType schemaType, int sizeLimit)
 {
     return(GetSearchResultsByIDs(adHelper, nativeIDs, GetNeededProperties(schemaType), sizeLimit));
 }
Пример #8
0
 public static SearchResult GetSearchResultByID(ADHelper adHelper, string nativeID, ADSchemaType schemaType)
 {
     return(GetSearchResultByID(adHelper, nativeID, GetNeededProperties(schemaType)));
 }
Пример #9
0
        /// <summary>
        /// 基于单个属性的精确匹配多个结果
        /// </summary>
        /// <param name="adHelper"></param>
        /// <param name="propertyName">匹配的单一属性名称</param>
        /// <param name="propertyValues">属性值,注意如果是字符串,会替换其中的特殊字符,只能使用字节数组或基元类型。</param>
        /// <param name="schemaType"></param>
        /// <param name="properties">要提取的属性名</param>
        /// <param name="sizeLimit">返回结果的数量</param>
        /// <returns></returns>
        public static IEnumerable <SearchResult> GetSearchResultsByPropertyValues(ADHelper adHelper, string propertyName, IEnumerable propertyValues, ADSchemaType schemaType, string[] properties, int sizeLimit)
        {
            var filter = ADSearchConditions.GetFilterByMask(schemaType);

            return(GetSearchResultsByPropertyValues(adHelper, propertyName, propertyValues, properties, sizeLimit, filter));
        }
Пример #10
0
        public static IEnumerable <SearchResult> GetSearchResultsByDNList(ADHelper adHelper, IEnumerable <string> rdnList, ADSchemaType schemaType, string[] properties, int sizeLimit)
        {
            ADSearchConditions condition = new ADSearchConditions(SearchScope.Subtree);

            condition.SizeLimit = sizeLimit;
            condition.PageSize  = sizeLimit;
            var filter = ADSearchConditions.GetFilterByMask(schemaType);

            StringBuilder postfixBuilder = new StringBuilder();

            foreach (var val in rdnList)
            {
                postfixBuilder.Append("(").Append("distinguishedName=").Append(AppendNamingContext(val)).Append(")");
            }

            if (postfixBuilder.Length > 0)
            {
                var postExpression = postfixBuilder.Length > 0 ? "(|" + postfixBuilder.ToString() + ")" : string.Empty;
                filter = string.IsNullOrEmpty(filter) ? postExpression : "(&" + filter + postExpression + ")";
                using (DirectoryEntry parentEntry = adHelper.GetRootEntry())
                {
                    var searchList = adHelper.ExecuteSearch(parentEntry,
                                                            filter,
                                                            condition,
                                                            properties);

                    return(searchList);
                }
            }
            else
            {
                return(new SearchResult[0]);
            }
        }
Пример #11
0
 public static IEnumerable <SearchResult> GetSearchResultsByDNList(ADHelper adHelper, IEnumerable <string> rdnList, ADSchemaType schemaType, int sizeLimit)
 {
     return(GetSearchResultsByDNList(adHelper, rdnList, schemaType, GetNeededProperties(schemaType), sizeLimit));
 }
Пример #12
0
        /// <summary>
        /// 转换为AD的ObjectClass
        /// </summary>
        /// <param name="schemaType"></param>
        /// <returns></returns>
        public static string ToObjectClass(this ADSchemaType schemaType)
        {
            EnumItemDescriptionAttribute attr = EnumItemDescriptionAttribute.GetAttribute(schemaType);

            return(attr.ShortName);
        }
Пример #13
0
        public static string GetFilterByMask(ADSchemaType nMask, ExtraFilter ef)
        {
            StringBuilder strB = new StringBuilder(1024);

            strB.Append("(|");

            if ((ADSchemaType.Domain & nMask) != 0)
                strB.Append("(objectCategory=domain)");

            if ((ADSchemaType.Organizations & nMask) != 0)
            {
                string strOU = string.Empty;

                strOU += "(objectCategory=organizationalUnit)";

                if (ef.OUFilter != string.Empty)
                    strOU += ef.OUFilter;

                strB.Append("(&" + strOU + ")");
            }

            if ((ADSchemaType.Container & nMask) != 0)
            {
                string strContainer = "(objectCategory=person)(objectClass=user)";

                if (ef.ContainerFilter != string.Empty)
                    strContainer += ef.ContainerFilter;

                strB.Append("(&" + strContainer + ")");
            }

            if ((ADSchemaType.Users & nMask) != 0)
            {
                string strUser = "******";

                if (ef.UserFilter != string.Empty)
                    strUser += ef.UserFilter;

                strB.Append("(&" + strUser + ")");
            }

            if ((ADSchemaType.Groups & nMask) != 0)
            {
                string strGroup = "(objectCategory=group)(objectClass=group)";

                if (ef.GroupFilter != string.Empty)
                    strGroup += ef.GroupFilter;

                strB.Append("(&" + strGroup + ")");
            }

            strB.Append(")");

            return strB.ToString();
        }
Пример #14
0
 public static string GetFilterByMask(ADSchemaType nMask)
 {
     return GetFilterByMask(nMask, new ExtraFilter());
 }