2010-07-14 3 views
1

Недавно мы установили систему билетов osTicket и тестировали ее, чтобы увидеть, следует ли ее реализовать в нашем офисе. Это действительно помогло бы иметь возможность аутентифицироваться против нашего существующего открытого каталога. Я нашел статью (http://www.bauer-power.net/2010/04/how-to-make-osticket-160-authenticate.html), что говорит об использовании Active Directory и редактирования файла class.staff.php заменив следующий код:osTicket authenticate with Open Directory

/*compares user password*/ 
function check_passwd($password){ 
    return (strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE):(FALSE); 
} 

новый код:

/*compares user password*/ 
function check_passwd($password){ 
    // Change made for LDAP Auth based on -> http://osticket.com/forums/showthread.php?t=3312 
    // Change this line to the FQDN of your domain controller 
    $ds=ldap_connect('mydc.mydomain.local') or die("Couldn't connect to AD!"); 
    // Change this line to the name of your Active Directory domain 
    if ($ds) { 
     $domain="mydomain"; 
     $ldapbind = ldap_bind($ds); 
     if ([email protected]_bind($ds, $domain."\\".$this->username, $password)) { 
      // Auth failed! lets try at osTicket database 
      return (strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE):(FALSE); 
      // return(FALSE); 
     } 
     else{ 
      // Auth succeeded! 
      return(TRUE); 
     } 
     // End Changes 
    } 

} 

Однако, это кажется, что я все еще не могу подключиться. Я предполагаю, что это потому, что мне нужно использовать OD, а не Active Directory. Любая помощь будет принята с благодарностью.

Спасибо, Аарон

ответ

0

Ваш вопрос в том, что он пытается сделать пароль сравнения между переданным в стоимости, а значение в целевом каталоге.

Ваша добавленная строка: strlen($this->passwd) && strcmp($this->passwd, MD5($password))==0)?(TRUE) пытается MD5 хэш ввести пароль пользователя и сравнить его с полученным паролем.

Но что делает пару ОГРОМНЫХ предположений, что каталог подключение тоже:

  1. Использование MD5 в качестве хэша пароля
  2. Хочет вернуть хэш

You действительно нужно делать тестовое связывание, и если это удастся, yay, если нет, нет! Вы также должны иметь возможность выполнять функцию сравнения паролей.

Тестовое связывание лучше, так как оно увеличивает время последнего входа в большинстве систем каталогов.

+0

Спасибо за ваш ответ на это. Я не так хорошо знаком со всем этим. Как я могу выполнить тестовое связывание? – Aaron

0

Вы можете использовать эту функцию, он работает хорошо:

function check_passwd($password){ 
      $adServer = "ldap://dc.yourdomain.com"; 

      $ldap = ldap_connect($adServer); 
      $username = $this->username; 
      $password = $this->passwd; 
      $ldaprdn = 'yourdomain' . "\\" . $username; 

      ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); 
      ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); 


      $bind = @ldap_bind($ldap, $ldaprdn, $password); 

      if ($bind) { 
        echo "SUCCESS"; 
        return true; 
      } 
      else { 
        echo "FAILUR"; 
        return false; 
      } 
    }