diff --git a/system/api/sessionmanager.inc.php b/system/api/sessionmanager.inc.php index 100c8f14..d9c0d6c4 100644 --- a/system/api/sessionmanager.inc.php +++ b/system/api/sessionmanager.inc.php @@ -76,32 +76,37 @@ public function login( $login, $password, $newPassword = null ) $hash = $user[ 'user_passwd' ]; $isTemp = $user[ 'passwd_temp' ]; - $passwordHash = new System_Core_PasswordHash(); + $ldapHelper = new System_Api_TkLDAPHelper(); + if ( $ldapHelper->checkPassword( $login, $password ) == false) { + $passwordHash = new System_Core_PasswordHash(); - if ( $passwordHash->checkPassword( $password, $hash ) ) { - if ( $newPassword != null ) { - if ( $newPassword == $password ) - throw new System_Api_Error( System_Api_Error::CannotReusePassword ); + if ( $passwordHash->checkPassword( $password, $hash ) ) { + if ( $newPassword != null ) { + if ( $newPassword == $password ) + throw new System_Api_Error( System_Api_Error::CannotReusePassword ); - if ( System_Core_Application::getInstance()->getSite()->getConfig( 'demo_mode' ) ) { - if ( $user[ 'user_access' ] != System_Const::AdministratorAccess ) - throw new System_Api_Error( System_Api_Error::AccessDenied ); - } + if ( System_Core_Application::getInstance()->getSite()->getConfig( 'demo_mode' ) ) { + if ( $user[ 'user_access' ] != System_Const::AdministratorAccess ) + throw new System_Api_Error( System_Api_Error::AccessDenied ); + } - $newHash = $passwordHash->hashPassword( $newPassword ); + $newHash = $passwordHash->hashPassword( $newPassword ); - $query = 'UPDATE {users} SET user_passwd = %s, passwd_temp = 0 WHERE user_id = %d'; - $this->connection->execute( $query, $newHash, $userId ); + $query = 'UPDATE {users} SET user_passwd = %s, passwd_temp = 0 WHERE user_id = %d'; + $this->connection->execute( $query, $newHash, $userId ); - $isTemp = false; - } else if ( $passwordHash->isNewHashNeeeded( $hash ) ) { - $newHash = $passwordHash->hashPassword( $password ); + $isTemp = false; + } else if ( $passwordHash->isNewHashNeeeded( $hash ) ) { + $newHash = $passwordHash->hashPassword( $password ); - $query = 'UPDATE {users} SET user_passwd = %s WHERE user_id = %d'; - $this->connection->execute( $query, $newHash, $userId ); + $query = 'UPDATE {users} SET user_passwd = %s WHERE user_id = %d'; + $this->connection->execute( $query, $newHash, $userId ); + } + } else { + $user = null; } } else { - $user = null; + $isTemp = false; } } diff --git a/system/api/tkldaphelper.inc.php b/system/api/tkldaphelper.inc.php new file mode 100644 index 00000000..8efcfb76 --- /dev/null +++ b/system/api/tkldaphelper.inc.php @@ -0,0 +1,58 @@ +getSetting( 'ldap_domain' ); + self::$ldapHost = 'ldap://' . $serverManager->getSetting( 'ldap_host' ); + self::$ldapPort = $serverManager->getSetting( 'ldap_port' ); + + $ldapConnection = ldap_connect(self::$ldapHost, self::$ldapPort); + + if ($ldapConnection) { + self::$ldapUser = addslashes(trim($user)); + self::$ldapPassword = addslashes(trim($password)); + + ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3); + ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 0); + $ldapbind = @ldap_bind($ldapConnection, self::$ldapUser . self::$ldapDomain, self::$ldapPassword); + + // verify binding + if ($ldapbind) { + ldap_close($ldapConnection); // close ldap connection + return true; + } + } + return false; + } +} +?>