Ejemplo n.º 1
0
        private static bool IsChildrenModified(IOguObject oguObject, ADObjectWrapper targetObject)
        {
            ADHelper     adHelper = SynchronizeContext.Current.ADHelper;
            SearchResult result   = SynchronizeHelper.GetSearchResultByDN(adHelper, targetObject.DN, ADSchemaType.Groups);           //当前肯定有改组存在
            ResultPropertyValueCollection adMembers = result.Properties["member"];

            IUser[] oguUsers = ((IGroup)oguObject).Members.Where(u => u.FullPath.StartsWith(SynchronizeContext.Current.StartPath) && u.IsSideline == false).ToArray();


            if (adMembers.Count != oguUsers.Count())
            {
                return(true);
            }

            foreach (var memberDN in adMembers)
            {
                bool exists = false;
                for (int i = oguUsers.Length - 1; i >= 0; i--)
                {
                    if (SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(oguUsers[i])) == memberDN.ToString())
                    {
                        exists = true;
                        break;
                    }
                }
                if (exists == false)
                {
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 2
0
        protected override bool ComparePropertyValue(IOguObject srcOguObject, string srcPropertyName, ADObjectWrapper adObject, string targetPropertyName, string context)
        {
            string targetPropertyValue = null;

            if (adObject.Properties[targetPropertyName] != null)
            {
                targetPropertyValue = adObject.Properties[targetPropertyName].ToString();
            }

            return(SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(srcOguObject)) == targetPropertyValue);
        }
Ejemplo n.º 3
0
        private static ADObjectWrapper FindOUObject(IOguObject oguObject)
        {
            ADObjectWrapper adObject = null;
            string          objectGuid;

            if (SynchronizeContext.Current.IDMapper.SCIDMappingDictionary.ContainsKey(oguObject.ID))
            {
                var idMapping = SynchronizeContext.Current.IDMapper.SCIDMappingDictionary[oguObject.ID];
                objectGuid = idMapping.ADObjectGuid;
                adObject   = SynchronizeHelper.GetSearchResultByID(SynchronizeContext.Current.ADHelper, objectGuid, ADSchemaType.Organizations).ToADOjectWrapper();

                if (adObject == null)
                {
                    //这里要删除ID映射
                    if (!SynchronizeContext.Current.IDMapper.DeleteIDMappingDictionary.ContainsKey(oguObject.ID))
                    {
                        SynchronizeContext.Current.IDMapper.DeleteIDMappingDictionary.Add(idMapping);
                    }

                    SynchronizeContext.Current.IDMapper.SCIDMappingDictionary.Remove(c => c.SCObjectID == oguObject.ID);
                }
            }

            if (adObject == null)            //通过ID没找到
            {
                string dn = SynchronizeHelper.GetOguObjectDN(oguObject);
                if (dn != "")
                {
                    adObject = SynchronizeHelper.GetSearchResultByDN(SynchronizeContext.Current.ADHelper, dn, ADSchemaType.Organizations).ToADOjectWrapper();

                    if (adObject != null)
                    {
                        //这里首先要判断是否已被映射过
                        if (SynchronizeContext.Current.IDMapper.ADIDMappingDictionary.ContainsKey(adObject.NativeGuid))
                        {
                            adObject = null;
                        }
                    }
                }
                else
                {
                    //using (DirectoryEntry root = SynchronizeContext.Current.ADHelper.GetRootEntry())
                    //{
                    //    adObject = new ADObjectWrapper() { ObjectType = ADSchemaType.Organizations };
                    //    adObject.Properties["distinguishedName"] = root.Properties["distinguishedName"][0].ToString();
                    //    adObject.Properties["objectGUID"] = root.NativeGuid;
                    //    adObject.Properties["name"] = root.Name;
                    //}
                }
            }

            return(adObject);
        }
Ejemplo n.º 4
0
        public static IOguObject Find(ADObjectWrapper childADObject, IEnumerable <IOguObject> oguObjects)
        {
            IOguObject result = null;

            //这里仅仅是查找所给集合里是不是存在相应的对象
            foreach (var obj in oguObjects)
            {
                if (obj.ObjectType == SchemaType.Users)
                {
                    if (((IUser)obj).IsSideline)
                    {
                        // continue;
                    }
                }

                var guid = childADObject.NativeGuid;

                if (SynchronizeContext.Current.IDMapper.ADIDMappingDictionary.ContainsKey(guid))                 //有映射
                {
                    if (obj.ID == SynchronizeContext.Current.IDMapper.ADIDMappingDictionary[guid].SCObjectID)
                    {
                        result = obj;
                    }
                }
                else
                {
                    switch (childADObject.ObjectType)
                    {
                    case ADSchemaType.Organizations:
                        if (SynchronizeHelper.AppendNamingContext(childADObject.DN) ==
                            SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(obj)))
                        {
                            result = obj;
                        }
                        break;

                    case ADSchemaType.Groups:
                    case ADSchemaType.Users:
                        if (childADObject.Properties["samAccountName"].ToString() == obj.Properties["LOGON_NAME"].ToString())
                        {
                            result = obj;
                        }
                        break;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 判断AD对象的DN和ogu对象的Path是否相同,此处需要考虑转义的测试
        /// </summary>
        /// <param stringValue="oguObject"></param>
        /// <param stringValue="adObject"></param>
        /// <returns></returns>
        public static bool ArePathEqaul(IOguObject oguObject, ADObjectWrapper adObject)
        {
            var localPathToDN = SynchronizeHelper.AppendNamingContext(SynchronizeHelper.GetOguObjectDN(oguObject));

            return(localPathToDN == adObject.DN);
        }