public static void ReadRemoteHostFQDN(string hostname, out string hostFQDN) { hostFQDN = string.Empty; string domain = string.Empty; uint error = CNetlogon.GetCurrentDomain(out domain); if (error != 0 && String.IsNullOrEmpty(domain)) { return; } string[] rootDNcom = domain.Split('.'); string rootDN = ""; string errorMessage = ""; foreach (string str in rootDNcom) { string temp = string.Concat("dc=", str, ","); rootDN = string.Concat(rootDN, temp); } rootDN = rootDN.Substring(0, rootDN.Length - 1); try { DirectoryContext dirContext = DirectoryContext.CreateDirectoryContext (domain, rootDN, null, null, 389, false, out errorMessage); if (!String.IsNullOrEmpty(errorMessage)) { Logger.ShowUserError(errorMessage); } if (dirContext == null) { return; } List <LdapEntry> ldapEntries = new List <LdapEntry>(); string[] attrs = { "name", "dNSHostName", null }; int ret = dirContext.ListChildEntriesSynchronous (rootDN, LdapAPI.LDAPSCOPE.SUB_TREE, string.Format("(&(objectClass=computer)(cn={0}))", hostname), attrs, false, out ldapEntries); if (ldapEntries == null) { return; } LdapEntry ldapNextEntry = ldapEntries[0]; string[] attrsList = ldapNextEntry.GetAttributeNames(); Logger.Log("The number of attributes are " + attrsList.Length, Logger.ldapLogLevel); if (attrsList != null) { foreach (string attr in attrsList) { if (attr.Trim().Equals("dNSHostName")) { LdapValue[] attrValues = ldapNextEntry.GetAttributeValues(attr, dirContext); if (attrValues != null && attrValues.Length > 0) { hostFQDN = attrValues[0].stringData; break; } } } } } catch (Exception ex) { hostFQDN = string.Empty; Logger.LogException("EventAPI.ReadRemoteHostFQDN", ex); } }
/// <summary> /// Method that is used to connect to multiple domains /// </summary> /// <returns></returns> public DirectoryContext ConnectToDomain(bool usingSimpleBind) { string[] rootDNcom = _hn.domainName.Split('.'); string rootDN = ""; foreach (string str in rootDNcom) { string temp = string.Concat("dc=", str, ","); rootDN = string.Concat(rootDN, temp); } rootDN = rootDN.Substring(0, rootDN.Length - 1); _rootDN = rootDN; if (DirectoryEntry.exisitngDirContext != null && DirectoryEntry.exisitngDirContext.Count > 0) { foreach (DirectoryContext dirContext in DirectoryEntry.exisitngDirContext) { if (dirContext.DistinguishedName.ToLower().Contains(rootDN.ToLower())) { DirectoryEntry.exisitngDirContext.Remove(dirContext); break; } } } if (DirectoryEntry.existingSchemaCache != null && DirectoryEntry.existingSchemaCache.Count > 0) { foreach (LDAPSchemaCache ldapSchema in DirectoryEntry.existingSchemaCache) { if (ldapSchema != null && ldapSchema.rootDN.Equals(rootDN, StringComparison.InvariantCultureIgnoreCase)) { DirectoryEntry.existingSchemaCache.Remove(ldapSchema); break; } } } string errorMessage = null; Logger.Log(String.Format("ADUCDomain: About to build directory context: {0}", _hn.ToString())); _adContext = DirectoryContext.CreateDirectoryContext(_hn.domainControllerName, //_hn.domainName, rootDN, _hn.creds.UserName, _hn.creds.Password, 389, usingSimpleBind, out errorMessage); if (String.IsNullOrEmpty(errorMessage)) { Logger.Log("ADUCDomain: Built directory context", Logger.ADUCLogLevel); } else { Logger.ShowUserError(errorMessage); } if (_adContext != null && !BuildSchemaCache(usingSimpleBind)) { Logger.Log("BuildSchemaCache() failed!"); } return(_adContext); }
private DirectoryContext Assign_dirContext() { if (dirContext == null) { if (sProtocol.Equals("GC", StringComparison.InvariantCultureIgnoreCase)) { if (!findDircontext(GC_PORT)) { //Console.WriteLine("****************Creating GC directoryContext*******************"); if (findGCServer() != null) { sServer = findGCServer(); } string errorMessage = null; dirContext = DirectoryContext.CreateDirectoryContext( sServer, rootDN, this.sUsername, this.sPassword, GC_PORT, findBindingMethod(), out errorMessage); if (dirContext != null) { //Console.WriteLine("-------------Global catalog DirectoryContext is created.--------------------"); exisitngDirContext.Add(dirContext); if (!FindSchemaCache()) { dirContext.SchemaCache = LDAPSchemaCache.Build(dirContext); existingSchemaCache.Add(dirContext.SchemaCache); } } } } else if (sProtocol.Equals("LDAP", StringComparison.InvariantCultureIgnoreCase)) { if (!findDircontext(LDAP_PORT)) { string errorMessage = null; //Console.WriteLine("****************Creating Normal Ldap directoryContext*******************"); dirContext = DirectoryContext.CreateDirectoryContext( sServer, rootDN, this.sUsername, this.sPassword, LDAP_PORT, findBindingMethod(), out errorMessage); if (dirContext != null) { //Console.WriteLine("-------------------Normal LDAP DirectoryContext is created.--------------------"); exisitngDirContext.Add(dirContext); //Console.WriteLine("dircontext portnumber is " + dirContext.PortNumber + dirContext.LdapHandle); if (!FindSchemaCache()) { dirContext.SchemaCache = LDAPSchemaCache.Build(dirContext); existingSchemaCache.Add(dirContext.SchemaCache); } } } } } if (dirContext == null) { throw new Exception("Create DirectoryContext Failed - logon failure: Unknown Username or Bad password."); } else { return(dirContext); } }