PHP ldap_get_entries возвращает ноль, но только в одной системе, а не в другой - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь подключиться к Active Directory и проверить работоспособность моего пользователя, и я получаю определенное поле, которое возвращает и код сотрудника, который хранится в AD для нашего приложения для расчета заработной платы / ESS, этот код работает на нескольких разных клиентах, новнезапно на одном клиенте код проходит до тех пор, пока он не достигнет ldap_get_entries, ldap_search успешно запустился, но ничего не возвращается в get_entries

Если отмечены некоторые подобные проблемы, когда люди изменили sAMAccount наUID или электронная почта в фильтре, но это не помогло мне решить эту проблему. Может быть, у кого-нибудь есть идея, что я пропустил, что может привести к сбою этого кода в одной системе, но хорошо работает в других, магия происходит во второй функции (RetrieveADEntry)первая (Authenticate) просто показывает мое соединение

    public function authenticate()
    {
        error_reporting(0);
        //10.0.4.22
        $this->ldapConnection = ldap_connect($this->mHost, $this->mPort);
        if(isset($this->ldapConnection))
        {
            if(trim($this->mUsername) === "")
            {
                $this->mErrorCode = ERR_USERNAME_REQUIRED;
                $this->mConnected = false;
                return false;
            }
            else if(trim($this->mPassword) === "")
            {
                $this->mErrorCode = ERR_PASSWORD_REQUIRED;
                $this->mConnected = false;
                return false;
            }
            echo "pre bind";
            ldap_set_option($this->ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
            ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
            if ($this->mGroup == null)
            { 
                $ldaprdn = $this->mPrdn . "\\" . $this->mUsername;
            }
            else
            {
                $ldaprdn = 'cn='.$this->mGroup.$this->mPrdn . "\\" . $this->mUsername;
            }
                $mConnected = ldap_bind($this->ldapConnection, $ldaprdn, $this->mPassword);
                if ($mConnected)
                {
                    $this->retrieveADEntry();
                    echo "Binded";
                    if ($this->mErrorCode == UNAUTHORIZED)
                    {
                        $this->mErrorCode = UNAUTHORIZED;
                        $this->mConnected = false;
                    }
                    else if ($this->mErrorCode == ERR_LOGIN_FAILED)
                    {
                        $this->mErrorCode = ERR_LOGIN_FAILED;
                        $this->mConnected = false;
                    }
                    else
                    {
                        $this->mErrorCode = SUCCESSFUL;
                        $this->mConnected = true;
                        if ($data->{"rlogcompanycode"} != ''){
                            $this->setCompanyCode(trim((string)$data->{"rlogcompanycode"}));
                        }

                    }
                }
                else
                {
                    echo "Not binded";
                    $this->mErrorCode = ERR_LOGIN_FAILED;
                    $this->mConnected = false;
                }
                return $this->mConnected;

        }
        else{
            $this->mErrorCode = ERR_CONNECTION_FAILED;
            $this->mConnected = false;
            return false;
        }

        error_reporting(E_ALL);
    }
    private function retrieveADEntry()
    {
        //$ldap_base_dn = 'DC='.$this->mDC.',DC='.$this->mDomain;
        $ldap_base_dn = "OU=group,DC=domain,DC=co,DC=za";
        $filter = "";
        $attr = array(
            $this->mField,
            "sAMAccountName",
        );
        $filter .="(sAMAccountName=$this->mUsername)";
        $search_results = ldap_search($this->ldapConnection,$ldap_base_dn, $filter);
        //For each account returned by the search
        if (FALSE !==  $search_results ){
            $entries = ldap_get_entries($this->ldapConnection, $search_results);
            $values = ldap_get_values($this->ldapConnection,$search_results, $attr);
            $access = 0;
            //For each account returned by the search
            echo "succesfull query";
            echo $entries['count'];
            echo $this->mUsername;
            var_dump($values);
            for ($x=0; $x<$entries['count']; $x++)
            {
                echo "in loop";
                var_dump($entries); 
                if (strpos( $entries[$x]['memberof'][0], $this->mGroup)) //Check if member is part of specified group
                {
                    echo "GroupCheck1";
                    $access = 1;
                    $group =  $this->mGroup;

                }

                if ($this->mGroup == null)
                {
                    echo "GroupCheck2";
                    $access = 1;
                }
                echo "PostGroupChecks";
                echo $access;
                if ($access != 0)
                {
                    echo "access";
                    echo $this->mField;
                    echo $entries[$x]['sAMAccountName'][0];
                    if (!empty($entries[$x][$this->mField][0]))
                    {
                        $this->setEmpkey($entries[$x][$this->mField][0]);
                        echo $entries[$x][$this->mField][0];
                    }
                    echo "return succesfull";

                    $this->mConnected = true;
                    $this->mErrorCode = SUCCESSFUL;
                }
                else
                {
                    echo "No Access";
                    $this->mConnected = false;
                    $this->mErrorCode = UNAUTHORIZED;

                } //END for loop
            }
            //END FALSE !== $result
            ldap_unbind($ldap_connection); // Clean up after ourselves.

        }
        else
        {
            $this->mConnected = false;
            $this->mErrorCode = ERR_LOGIN_FAILED;
        }
        return $this->ldapEntry;
    }

PS. Я также написал скрипт C # для нашего настольного приложения, который прекрасно работает в этой системе, как и во всех остальных, и не дает этой проблемы

...