فهرست منبع

ZF-3068
- Fixed case folding issues in Zend_Auth_Adapter_DbTable

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@18065 44c647ce-9c0f-0410-b52a-842ac1e357ba

ralph 16 سال پیش
والد
کامیت
a5a12ab8ad
2فایلهای تغییر یافته به همراه58 افزوده شده و 20 حذف شده
  1. 7 4
      library/Zend/Auth/Adapter/DbTable.php
  2. 51 16
      tests/Zend/Auth/Adapter/DbTable/BasicSqliteTest.php

+ 7 - 4
library/Zend/Auth/Adapter/DbTable.php

@@ -373,7 +373,9 @@ class Zend_Auth_Adapter_DbTable implements Zend_Auth_Adapter_Interface
                 . ' = ' . $this->_credentialTreatment, $this->_credential
                 . ' = ' . $this->_credentialTreatment, $this->_credential
                 )
                 )
             . ' THEN 1 ELSE 0 END) AS '
             . ' THEN 1 ELSE 0 END) AS '
-            . $this->_zendDb->quoteIdentifier('zend_auth_credential_match')
+            . $this->_zendDb->quoteIdentifier(
+                $this->_zendDb->foldCase('zend_auth_credential_match')
+                )
             );
             );
 
 
         // get select
         // get select
@@ -426,7 +428,6 @@ class Zend_Auth_Adapter_DbTable implements Zend_Auth_Adapter_Interface
     protected function _authenticateValidateResultSet(array $resultIdentities)
     protected function _authenticateValidateResultSet(array $resultIdentities)
     {
     {
 
 
-
         if (count($resultIdentities) < 1) {
         if (count($resultIdentities) < 1) {
             $this->_authenticateResultInfo['code'] = Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND;
             $this->_authenticateResultInfo['code'] = Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND;
             $this->_authenticateResultInfo['messages'][] = 'A record with the supplied identity could not be found.';
             $this->_authenticateResultInfo['messages'][] = 'A record with the supplied identity could not be found.';
@@ -449,13 +450,15 @@ class Zend_Auth_Adapter_DbTable implements Zend_Auth_Adapter_Interface
      */
      */
     protected function _authenticateValidateResult($resultIdentity)
     protected function _authenticateValidateResult($resultIdentity)
     {
     {
-        if ($resultIdentity['zend_auth_credential_match'] != '1') {
+        $zendAuthCredentialMatchColumn = $this->_zendDb->foldCase('zend_auth_credential_match');
+        
+        if ($resultIdentity[$zendAuthCredentialMatchColumn] != '1') {
             $this->_authenticateResultInfo['code'] = Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID;
             $this->_authenticateResultInfo['code'] = Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID;
             $this->_authenticateResultInfo['messages'][] = 'Supplied credential is invalid.';
             $this->_authenticateResultInfo['messages'][] = 'Supplied credential is invalid.';
             return $this->_authenticateCreateAuthResult();
             return $this->_authenticateCreateAuthResult();
         }
         }
 
 
-        unset($resultIdentity['zend_auth_credential_match']);
+        unset($resultIdentity[$zendAuthCredentialMatchColumn]);
         $this->_resultRow = $resultIdentity;
         $this->_resultRow = $resultIdentity;
 
 
         $this->_authenticateResultInfo['code'] = Zend_Auth_Result::SUCCESS;
         $this->_authenticateResultInfo['code'] = Zend_Auth_Result::SUCCESS;

+ 51 - 16
tests/Zend/Auth/Adapter/DbTable/BasicSqliteTest.php

@@ -81,22 +81,15 @@ class Zend_Auth_Adapter_DbTable_BasicSqliteTest extends PHPUnit_Framework_TestCa
      */
      */
     public function setUp()
     public function setUp()
     {
     {
-        $this->_db = new Zend_Db_Adapter_Pdo_Sqlite(
-            array('dbname' => TESTS_ZEND_AUTH_ADAPTER_DBTABLE_PDO_SQLITE_DATABASE)
-            );
-
-        $sqlCreate = 'CREATE TABLE [users] ( '
-                   . '[id] INTEGER  NOT NULL PRIMARY KEY, '
-                   . '[username] VARCHAR(50) NOT NULL, '
-                   . '[password] VARCHAR(32) NULL, '
-                   . '[real_name] VARCHAR(150) NULL)';
-        $this->_db->query($sqlCreate);
-
-        $sqlInsert = 'INSERT INTO users (username, password, real_name) '
-                   . 'VALUES ("my_username", "my_password", "My Real Name")';
-        $this->_db->query($sqlInsert);
-
-        $this->_adapter = new Zend_Auth_Adapter_DbTable($this->_db, 'users', 'username', 'password');
+        $this->_setupDbAdapter();
+        $this->_setupAuthAdapter();
+    }
+    
+    public function tearDown()
+    {
+        $this->_adapter = null;
+        $this->_db->query('DROP TABLE [users]');
+        $this->_db = null;
     }
     }
 
 
     /**
     /**
@@ -333,7 +326,49 @@ class Zend_Auth_Adapter_DbTable_BasicSqliteTest extends PHPUnit_Framework_TestCa
         // $this->assertEquals($e->getMessage(), 'The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.');
         // $this->assertEquals($e->getMessage(), 'The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.');
     }
     }
 
 
+    /**
+     * 
+     * @group ZF-3068
+     */
+    public function testDbTableAdapterUsesCaseFolding()
+    {
+        $this->tearDown();
+        $this->_setupDbAdapter(array(Zend_Db::CASE_FOLDING => Zend_Db::CASE_UPPER));
+        $this->_setupAuthAdapter();
 
 
+        $this->_adapter->setIdentity('my_username');
+        $this->_adapter->setCredential('my_password');
+        $this->_db->foldCase(Zend_Db::CASE_UPPER);
+        $this->_adapter->authenticate();
+    }
+    
+    protected function _setupDbAdapter($optionalParams = array())
+    {
+        $params = array('dbname' => TESTS_ZEND_AUTH_ADAPTER_DBTABLE_PDO_SQLITE_DATABASE); 
+        
+        if (!empty($optionalParams)) {
+            $params['options'] = $optionalParams;
+        }
+
+        $this->_db = new Zend_Db_Adapter_Pdo_Sqlite($params);
+
+        $sqlCreate = 'CREATE TABLE [users] ( '
+                   . '[id] INTEGER  NOT NULL PRIMARY KEY, '
+                   . '[username] VARCHAR(50) NOT NULL, '
+                   . '[password] VARCHAR(32) NULL, '
+                   . '[real_name] VARCHAR(150) NULL)';
+        $this->_db->query($sqlCreate);
+
+        $sqlInsert = 'INSERT INTO users (username, password, real_name) '
+                   . 'VALUES ("my_username", "my_password", "My Real Name")';
+        $this->_db->query($sqlInsert);
+    }
+    
+    protected function _setupAuthAdapter()
+    {
+        $this->_adapter = new Zend_Auth_Adapter_DbTable($this->_db, 'users', 'username', 'password');
+    }
+    
 
 
 }
 }