فهرست منبع

fixes ZF-4495

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16890 44c647ce-9c0f-0410-b52a-842ac1e357ba
sgehrig 16 سال پیش
والد
کامیت
e045b7e3a9
2فایلهای تغییر یافته به همراه37 افزوده شده و 1 حذف شده
  1. 5 1
      library/Zend/Ldap.php
  2. 32 0
      tests/Zend/Ldap/CanonTest.php

+ 5 - 1
library/Zend/Ldap.php

@@ -551,7 +551,11 @@ class Zend_Ldap
             throw new Zend_Ldap_Exception(null, "Invalid account name syntax: $acctname");
         }
 
-        $uname = strtolower($uname);
+        if (function_exists('mb_strtolower')) {
+            $uname = mb_strtolower($uname, 'UTF-8');
+        } else {
+            $uname = strtolower($uname);
+        }
 
         if ($form === 0) {
             $form = $this->_getAccountCanonicalForm();

+ 32 - 0
tests/Zend/Ldap/CanonTest.php

@@ -366,4 +366,36 @@ class Zend_Ldap_CanonTest extends PHPUnit_Framework_TestCase
             Zend_Ldap::ACCTNAME_FORM_USERNAME));
 
     }
+
+    /**
+     * ZF-4495
+     */
+    public function testSpecialCharacterInUsername()
+    {
+        $options = $this->_options;
+        $options['accountDomainName'] = 'example.com';
+        $options['accountDomainNameShort'] = 'EXAMPLE';
+        $ldap = new Zend_Ldap($options);
+
+        $this->assertEquals('schäfer', $ldap->getCanonicalAccountName('SCHÄFER@example.com',
+            Zend_Ldap::ACCTNAME_FORM_USERNAME));
+        $this->assertEquals('schäfer', $ldap->getCanonicalAccountName('EXAMPLE\SCHÄFER',
+            Zend_Ldap::ACCTNAME_FORM_USERNAME));
+        $this->assertEquals('schäfer', $ldap->getCanonicalAccountName('SCHÄFER',
+            Zend_Ldap::ACCTNAME_FORM_USERNAME));
+
+        $this->assertEquals('schäfer@example.com', $ldap->getCanonicalAccountName('SCHÄFER@example.com',
+            Zend_Ldap::ACCTNAME_FORM_PRINCIPAL));
+        $this->assertEquals('schäfer@example.com', $ldap->getCanonicalAccountName('EXAMPLE\SCHÄFER',
+            Zend_Ldap::ACCTNAME_FORM_PRINCIPAL));
+        $this->assertEquals('schäfer@example.com', $ldap->getCanonicalAccountName('SCHÄFER',
+            Zend_Ldap::ACCTNAME_FORM_PRINCIPAL));
+
+        $this->assertEquals('EXAMPLE\schäfer', $ldap->getCanonicalAccountName('SCHÄFER@example.com',
+            Zend_Ldap::ACCTNAME_FORM_BACKSLASH));
+        $this->assertEquals('EXAMPLE\schäfer', $ldap->getCanonicalAccountName('EXAMPLE\SCHÄFER',
+            Zend_Ldap::ACCTNAME_FORM_BACKSLASH));
+        $this->assertEquals('EXAMPLE\schäfer', $ldap->getCanonicalAccountName('SCHÄFER',
+            Zend_Ldap::ACCTNAME_FORM_BACKSLASH));
+    }
 }