Пример #1
0
        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);
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
            }
        }