/** * For Bitrix calls. * * @param array &$params * * @return int */ public static function authenticate(&$params) { try { // Import PEAR library gracefully... if (!@(include_once 'Net/LDAP2.php')) { throw new Capall_Ldaper_UnavailableDependencyException('PEAR::Net_LDAP2'); } $ldapConnection = Net_LDAP2::connect(array('host' => COption::GetOptionString('sh.ldaper', 'host'), 'port' => COption::GetOptionInt('sh.ldaper', 'port'), 'binddn' => COption::GetOptionString('sh.ldaper', 'binddn'), 'bindpw' => COption::GetOptionString('sh.ldaper', 'bindpw'))); if (PEAR::isError($ldapConnection)) { throw new Capall_Ldaper_LdapException($ldapConnection); } $ldaper = new self($ldapConnection, new Capall_Ldaper_BitrixUserManager(new CUser(), array_filter(explode(',', COption::GetOptionString('sh.ldaper', 'default_groups', '')), 'trim')), COption::GetOptionString('sh.ldaper', 'basedn'), COption::GetOptionString('sh.ldaper', 'login_attribute'), COption::GetOptionString('sh.ldaper', 'mail_attribute'), COption::GetOptionString('sh.ldaper', 'mail_attribute_index')); $ldapUser = $ldaper->getLdapUser($params['LOGIN']); if ($ldapUser) { if ($ldaper->authenticateUser($ldapUser, $params['PASSWORD'])) { $bitrixUserIdentifier = $ldaper->getBitrixUser($ldapUser); } else { // Authentication failed. May be user not from LDAP? return false; } } else { // User not found. It's normal use case. return; } // Return identifier to Bitrix for authorization. return $bitrixUserIdentifier; } catch (Exception $error) { CEventLog::Log('WARNING', 'USER_LOGIN', 'sh.ldaper', $params['LOGIN'], (string) $error); } }