protected override void BeginProcessing() { conn = DirectoryUtils.GetLdapConnection(ConnectionType.Ldap); forestRootDomain = DirectoryUtils.GetForestRootDomain(); base.BeginProcessing(); }
public static List <string> GetComputerDN(string ComputerName) { //searching against default domain controller and GC interface List <string> retVal = new List <string>(); using (LdapConnection connGC = GetLdapConnection(ConnectionType.GC)) { ForestInfo di = GetForestRootDomain(); SearchRequest rq = new SearchRequest(); string searchString = string.Format("(&(objectClass=computer)(cn={0}))", ComputerName); rq = new SearchRequest(); rq.Filter = searchString; rq.Scope = SearchScope.Subtree; SearchResponse rsp = (SearchResponse)connGC.SendRequest(rq); foreach (SearchResultEntry sr in rsp.Entries) { retVal.Add(sr.DistinguishedName); } } return(retVal); }
public static ForestInfo GetForestRootDomain() { ForestInfo retVal = new ForestInfo(); string[] propsToLoad = new string[] { "rootDomainNamingContext", "configurationNamingContext", "schemaNamingContext", "dnsHostName" }; using (LdapConnection conn = GetLdapConnection(ConnectionType.Ldap)) { SearchRequest rq = new SearchRequest(); rq.Attributes.AddRange(propsToLoad); rq.Scope = SearchScope.Base; ExtendedDNControl ctrl = new ExtendedDNControl(ExtendedDNFlag.StandardString); rq.Controls.Add(ctrl); SearchResponse rsp = (SearchResponse)conn.SendRequest(rq); string rootNC = (rsp.Entries[0].Attributes["rootDomainNamingContext"].GetValues(typeof(string)))[0] as string; int start = rootNC.IndexOf("<SID=", StringComparison.CurrentCultureIgnoreCase); if (start > -1) { retVal.RootDomain.Dn = rootNC.Split(';')[2]; int end = rootNC.IndexOf('>', start); start += 5; //prefix of SID: <SID= string sid = rootNC.Substring(start, end - start); retVal.RootDomain.Sid = new SecurityIdentifier(sid); } retVal.ConfigurationNamingContext = ((rsp.Entries[0].Attributes["configurationNamingContext"].GetValues(typeof(string)))[0] as string).Split(';')[1]; retVal.SchemaNamingContext = ((rsp.Entries[0].Attributes["schemaNamingContext"].GetValues(typeof(string)))[0] as string).Split(';')[1]; retVal.RootDomain.ConnectedHost = rsp.Entries[0].Attributes["dnsHostName"].GetValues(typeof(string))[0] as string; //get DNS name of forest root domain rq = new SearchRequest(); rq.DistinguishedName = "cn=Partitions," + retVal.ConfigurationNamingContext; rq.Scope = SearchScope.OneLevel; rq.Attributes.Add("dnsRoot"); rq.Filter = string.Format(System.Globalization.CultureInfo.InvariantCulture, "(&(objectClass=crossRef)(nCName={0}))", retVal.RootDomain.Dn); rsp = (SearchResponse)conn.SendRequest(rq); retVal.RootDomain.DnsName = rsp.Entries[0].Attributes["dnsRoot"].GetValues(typeof(string))[0] as string; } return(retVal); }
public static ReadOnlyCollection <string> GetComputerDN(string computerName) { //searching against default domain controller and GC interface List <string> retVal = new List <string>(); using (LdapConnection connGC = GetLdapConnection(ConnectionType.Gc)) { ForestInfo di = GetForestRootDomain(); SearchRequest rq = new SearchRequest(); string searchString = string.Format(System.Globalization.CultureInfo.InvariantCulture, "(&(objectClass=computer)(cn={0}))", computerName); rq = new SearchRequest(); rq.Filter = searchString; rq.Scope = SearchScope.Subtree; rq.DistinguishedName = di.RootDomain.Dn; SearchResponse rsp = (SearchResponse)connGC.SendRequest(rq); foreach (SearchResultEntry sr in rsp.Entries) { retVal.Add(sr.DistinguishedName); } } return(new ReadOnlyCollection <string>(retVal)); }
protected override void ProcessRecord() { ForestInfo fi = DirectoryUtils.GetForestRootDomain(); using (LdapConnection conn = DirectoryUtils.GetLdapConnection(ConnectionType.Ldap)) { AddRequest rqAdd; ModifyRequest rqMod; AddResponse rspAdd; ModifyResponse rspMod; //password timestamp rqAdd = new AddRequest(); rqAdd.DistinguishedName = "cn=" + Constants.TimestampAttributeName + "," + fi.SchemaNamingContext; rqAdd.Attributes.Add(new DirectoryAttribute("ldapDisplayName", Constants.TimestampAttributeName)); rqAdd.Attributes.Add(new DirectoryAttribute("adminDisplayName", Constants.TimestampAttributeName)); rqAdd.Attributes.Add(new DirectoryAttribute("objectClass", "attributeSchema")); rqAdd.Attributes.Add(new DirectoryAttribute("attributeId", "1.2.840.113556.1.8000.2554.50051.45980.28112.18903.35903.6685103.1224907.2.2")); rqAdd.Attributes.Add(new DirectoryAttribute("attributeSyntax", "2.5.5.16")); rqAdd.Attributes.Add(new DirectoryAttribute("omSyntax", "65")); rqAdd.Attributes.Add(new DirectoryAttribute("isSingleValued", "TRUE")); rqAdd.Attributes.Add(new DirectoryAttribute("systemOnly", "FALSE")); rqAdd.Attributes.Add(new DirectoryAttribute("isMemberOfPartialAttributeSet", "FALSE")); rqAdd.Attributes.Add(new DirectoryAttribute("searchFlags", "0")); rqAdd.Attributes.Add(new DirectoryAttribute("showInAdvancedViewOnly", "FALSE")); try { rspAdd = conn.SendRequest(rqAdd) as AddResponse; WriteObject(new DirectoryOperationStatus(DirectoryOperationType.AddSchemaAttribute, rqAdd.DistinguishedName, rspAdd.ResultCode)); } catch (DirectoryOperationException ex) { if (ex.Response.ResultCode == ResultCode.EntryAlreadyExists) { WriteObject(new DirectoryOperationStatus(DirectoryOperationType.AddSchemaAttribute, rqAdd.DistinguishedName, ex.Response.ResultCode)); } else { throw; } } //password rqAdd = new AddRequest(); rqAdd.DistinguishedName = "cn=" + Constants.PasswordAttributeName + "," + fi.SchemaNamingContext; rqAdd.Attributes.Add(new DirectoryAttribute("ldapDisplayName", Constants.PasswordAttributeName)); rqAdd.Attributes.Add(new DirectoryAttribute("adminDisplayName", Constants.PasswordAttributeName)); rqAdd.Attributes.Add(new DirectoryAttribute("objectClass", "attributeSchema")); rqAdd.Attributes.Add(new DirectoryAttribute("attributeId", "1.2.840.113556.1.8000.2554.50051.45980.28112.18903.35903.6685103.1224907.2.1")); rqAdd.Attributes.Add(new DirectoryAttribute("attributeSyntax", "2.5.5.5")); rqAdd.Attributes.Add(new DirectoryAttribute("omSyntax", "19")); rqAdd.Attributes.Add(new DirectoryAttribute("isSingleValued", "TRUE")); rqAdd.Attributes.Add(new DirectoryAttribute("systemOnly", "FALSE")); rqAdd.Attributes.Add(new DirectoryAttribute("isMemberOfPartialAttributeSet", "FALSE")); rqAdd.Attributes.Add(new DirectoryAttribute("searchFlags", "904")); rqAdd.Attributes.Add(new DirectoryAttribute("showInAdvancedViewOnly", "FALSE")); try { rspAdd = conn.SendRequest(rqAdd) as AddResponse; WriteObject(new DirectoryOperationStatus(DirectoryOperationType.AddSchemaAttribute, rqAdd.DistinguishedName, rspAdd.ResultCode)); } catch (DirectoryOperationException ex) { if (ex.Response.ResultCode == ResultCode.EntryAlreadyExists) { WriteObject(new DirectoryOperationStatus(DirectoryOperationType.AddSchemaAttribute, rqAdd.DistinguishedName, ex.Response.ResultCode)); } else { throw; } } //Reload schema rqMod = new ModifyRequest(); DirectoryAttributeModification schemaReload = new DirectoryAttributeModification(); schemaReload.Name = "SchemaUpdateNow"; schemaReload.Operation = DirectoryAttributeOperation.Add; schemaReload.Add("1"); rqMod.Modifications.Add(schemaReload); //we don't sent result of this operation to pipeline conn.SendRequest(rqMod); //modify computer object rqMod = new ModifyRequest(); rqMod.DistinguishedName = "cn=computer," + fi.SchemaNamingContext; DirectoryAttributeModification mayContain = new DirectoryAttributeModification(); mayContain.Name = "mayContain"; mayContain.Operation = DirectoryAttributeOperation.Add; mayContain.Add(Constants.PasswordAttributeName); mayContain.Add(Constants.TimestampAttributeName); rqMod.Modifications.Add(mayContain); try { rspMod = conn.SendRequest(rqMod) as ModifyResponse; WriteObject(new DirectoryOperationStatus(DirectoryOperationType.ModifySchemaClass, rqMod.DistinguishedName, rspMod.ResultCode)); } catch (DirectoryOperationException ex) { if (ex.Response.ResultCode == ResultCode.AttributeOrValueExists) { WriteObject(new DirectoryOperationStatus(DirectoryOperationType.ModifySchemaClass, rqMod.DistinguishedName, ex.Response.ResultCode)); } else { throw; } } //Reload schema rqMod = new ModifyRequest(); rqMod.Modifications.Add(schemaReload); conn.SendRequest(rqMod); } }