Пример #1
0
 internal override IEnumerable <T> GetExtendedObjectFromFilter(IADOPathNode filter, string searchBase, ADSearchScope searchScope, ICollection <string> propertiesToFetch, int?resultSetSize, int?pageSize, bool showDeleted)
 {
     if (base.CmdletSessionInfo != null)
     {
         MappingTable <AttributeConverterEntry> item         = ADNtdsSiteSettingFactory <ADNtdsSiteSetting> .AttributeTable[base.ConnectedStore];
         MappingTable <AttributeConverterEntry> mappingTable = ADReplicationSiteFactory <T> .AttributeTable[base.ConnectedStore];
         ICollection <string> parentAttributes = ADTopologyUtil.GetParentAttributes(mappingTable, item, propertiesToFetch);
         ICollection <string> childAttributes  = ADTopologyUtil.GetChildAttributes(mappingTable, item, propertiesToFetch);
         if (!parentAttributes.Contains("*"))
         {
             parentAttributes.Add("*");
         }
         IEnumerable <T> extendedObjectFromFilter = base.GetExtendedObjectFromFilter(this.StructuralObjectFilter, searchBase, searchScope, parentAttributes, resultSetSize, pageSize, showDeleted);
         ADNtdsSiteSettingFactory <ADNtdsSiteSetting> aDNtdsSiteSettingFactory = new ADNtdsSiteSettingFactory <ADNtdsSiteSetting>();
         aDNtdsSiteSettingFactory.SetCmdletSessionInfo(base.CmdletSessionInfo);
         IEnumerable <ADNtdsSiteSetting>        aDNtdsSiteSettings = aDNtdsSiteSettingFactory.GetExtendedObjectFromFilter(aDNtdsSiteSettingFactory.StructuralObjectFilter, searchBase, searchScope, childAttributes, resultSetSize, pageSize, showDeleted);
         Dictionary <string, ADNtdsSiteSetting> strs = new Dictionary <string, ADNtdsSiteSetting>();
         foreach (ADNtdsSiteSetting aDNtdsSiteSetting in aDNtdsSiteSettings)
         {
             strs.Add(aDNtdsSiteSetting.DistinguishedName, aDNtdsSiteSetting);
         }
         List <T> ts = new List <T>();
         foreach (T t in extendedObjectFromFilter)
         {
             string str = ADPathModule.MakePath(t.DistinguishedName, "CN=NTDS Site Settings,", ADPathFormat.X500);
             if (strs.ContainsKey(str))
             {
                 ADNtdsSiteSetting item1 = strs[str];
                 ADTopologyUtil.MergeADObjectProperties(t, item1);
             }
             ts.Add(t);
         }
         IEnumerable <T> ts1 = this.ApplyClientSideFilter(ts);
         return(ADTopologyUtil.RemoveExtraPropertiesFromADAggregateObject <T>(mappingTable, item, propertiesToFetch, ts1));
     }
     else
     {
         throw new ArgumentNullException(StringResources.SessionRequired);
     }
 }
Пример #2
0
        private void CreateSiteChildObjects(ADFactory <T> .DirectoryOperation operation, T instance, ADParameterSet parameters, ADObject directoryObj)
        {
            AttributeConverterEntry attributeConverterEntry = null;
            bool flag = ADFactory <T> .DirectoryOperation.Create == operation;
            MappingTable <AttributeConverterEntry>          item         = ADNtdsSiteSettingFactory <ADNtdsSiteSetting> .AttributeTable[base.ConnectedStore];
            MappingTable <AttributeConverterEntry>          mappingTable = ADReplicationSiteFactory <T> .AttributeTable[base.ConnectedStore];
            IDictionary <string, ADPropertyValueCollection> strs         = new Dictionary <string, ADPropertyValueCollection>();

            if (instance != null)
            {
                foreach (string propertyName in instance.PropertyNames)
                {
                    if (flag && instance[propertyName].Value == null || mappingTable.TryGetValue(propertyName, out attributeConverterEntry) || !item.TryGetValue(propertyName, out attributeConverterEntry))
                    {
                        continue;
                    }
                    strs.Add(propertyName, instance[propertyName]);
                }
            }
            IDictionary <string, ADPropertyValueCollection> aDPVCDictionary = parameters.GetADPVCDictionary();

            foreach (string key in aDPVCDictionary.Keys)
            {
                if (mappingTable.TryGetValue(key, out attributeConverterEntry) || !item.TryGetValue(key, out attributeConverterEntry))
                {
                    continue;
                }
                if (!strs.ContainsKey(key))
                {
                    strs.Add(key, aDPVCDictionary[key]);
                }
                else
                {
                    strs[key] = aDPVCDictionary[key];
                }
            }
            string str = ADPathModule.MakePath(directoryObj.DistinguishedName, "CN=NTDS Site Settings,", ADPathFormat.X500);
            ADNtdsSiteSettingFactory <ADNtdsSiteSetting> aDNtdsSiteSettingFactory = new ADNtdsSiteSettingFactory <ADNtdsSiteSetting>();

            aDNtdsSiteSettingFactory.SetCmdletSessionInfo(base.CmdletSessionInfo);
            ADObject directoryObjectFromIdentity = null;

            if (!flag)
            {
                try
                {
                    ADNtdsSiteSetting aDNtdsSiteSetting = new ADNtdsSiteSetting(str);
                    directoryObjectFromIdentity = aDNtdsSiteSettingFactory.GetDirectoryObjectFromIdentity(aDNtdsSiteSetting, directoryObj.DistinguishedName);
                }
                catch (ADIdentityNotFoundException aDIdentityNotFoundException)
                {
                    DebugLogger.LogInfo(this._debugCategory, string.Format("ADReplicationSiteFactory: Ntds-Site-Setting object not found for the site {0}, while updating the properties of the ntds-site-settings", directoryObj.DistinguishedName));
                }
            }
            if (directoryObjectFromIdentity == null)
            {
                flag = true;
                directoryObjectFromIdentity = new ADObject(str, aDNtdsSiteSettingFactory.StructuralObjectClass);
            }
            foreach (string key1 in strs.Keys)
            {
                if (!item.TryGetValue(key1, out attributeConverterEntry) || !attributeConverterEntry.IsDirectoryConverterDefined)
                {
                    continue;
                }
                attributeConverterEntry.InvokeToDirectoryConverter(strs[key1], directoryObjectFromIdentity, base.CmdletSessionInfo);
            }
            using (ADActiveObject aDActiveObject = new ADActiveObject(base.CmdletSessionInfo.ADSessionInfo, directoryObjectFromIdentity))
            {
                if (!flag)
                {
                    aDActiveObject.Update();
                }
                else
                {
                    aDActiveObject.Create();
                }
            }
            if (operation == ADFactory <T> .DirectoryOperation.Create)
            {
                this.CreateServerContainer(directoryObj.DistinguishedName);
            }
        }