ExplodingTest.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Ldap
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. /**
  23. * Test helper
  24. */
  25. require_once dirname(dirname(dirname(dirname(__FILE__)))) . DIRECTORY_SEPARATOR . 'TestHelper.php';
  26. /**
  27. * Zend_Ldap_Dn
  28. */
  29. require_once 'Zend/Ldap/Dn.php';
  30. /**
  31. * @category Zend
  32. * @package Zend_Ldap
  33. * @subpackage UnitTests
  34. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  35. * @license http://framework.zend.com/license/new-bsd New BSD License
  36. * @group Zend_Ldap
  37. * @group Zend_Ldap_Dn
  38. */
  39. class Zend_Ldap_Dn_ExplodingTest extends PHPUnit_Framework_TestCase
  40. {
  41. public static function explodeDnOperationProvider()
  42. {
  43. $testData = array(
  44. array('CN=Alice Baker,CN=Users,DC=example,DC=com', true),
  45. array('CN=Baker\\, Alice,CN=Users,DC=example,DC=com', true),
  46. array('OU=Sales,DC=local', true),
  47. array('OU=Sales;DC=local', true),
  48. array('OU=Sales ,DC=local', true),
  49. array('OU=Sales, dC=local', true),
  50. array('ou=Sales , DC=local', true),
  51. array('OU=Sales ; dc=local', true),
  52. array('DC=local', true),
  53. array(' DC=local', true),
  54. array('DC= local ', true),
  55. array('username', false),
  56. array('username@example.com', false),
  57. array('EXAMPLE\\username', false),
  58. array('CN=,Alice Baker,CN=Users,DC=example,DC=com', false),
  59. array('CN=Users,DC==example,DC=com', false),
  60. array('O=ACME', true),
  61. array('', false),
  62. array(' ', false),
  63. array('uid=rogasawara,ou=営業部,o=Airius', true),
  64. array('cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com', true),
  65. array('CN=Steve Kille,O=Isode Limited,C=GB', true),
  66. array('OU=Sales+CN=J. Smith,O=Widget Inc.,C=US', true),
  67. array('CN=L. Eagle,O=Sue\, Grabbit and Runn,C=GB', true),
  68. array('CN=Before\0DAfter,O=Test,C=GB', true),
  69. array('SN=Lu\C4\8Di\C4\87', true),
  70. array('OU=Sales+,O=Widget Inc.,C=US', false),
  71. array('+OU=Sales,O=Widget Inc.,C=US', false),
  72. array('OU=Sa+les,O=Widget Inc.,C=US', false),
  73. );
  74. return $testData;
  75. }
  76. /**
  77. * @dataProvider explodeDnOperationProvider
  78. */
  79. public function testExplodeDnOperation($input, $expected)
  80. {
  81. $ret = Zend_Ldap_Dn::checkDn($input);
  82. $this->assertTrue($ret === $expected);
  83. }
  84. public function testExplodeDnCaseFold()
  85. {
  86. $dn='CN=Alice Baker,cn=Users,DC=example,dc=com';
  87. $k=array();
  88. $v=null;
  89. $this->assertTrue(Zend_Ldap_Dn::checkDn($dn, $k, $v, Zend_Ldap_Dn::ATTR_CASEFOLD_NONE));
  90. $this->assertEquals(array('CN', 'cn', 'DC', 'dc'), $k);
  91. $this->assertTrue(Zend_Ldap_Dn::checkDn($dn, $k, $v, Zend_Ldap_Dn::ATTR_CASEFOLD_LOWER));
  92. $this->assertEquals(array('cn', 'cn', 'dc', 'dc'), $k);
  93. $this->assertTrue(Zend_Ldap_Dn::checkDn($dn, $k, $v, Zend_Ldap_Dn::ATTR_CASEFOLD_UPPER));
  94. $this->assertEquals(array('CN', 'CN', 'DC', 'DC'), $k);
  95. }
  96. public function testExplodeDn()
  97. {
  98. $dn='cn=name1,cn=name2,dc=example,dc=org';
  99. $k=array();
  100. $v=array();
  101. $dnArray=Zend_Ldap_Dn::explodeDn($dn, $k, $v);
  102. $expected=array(
  103. array("cn" => "name1"),
  104. array("cn" => "name2"),
  105. array("dc" => "example"),
  106. array("dc" => "org")
  107. );
  108. $ke=array('cn', 'cn', 'dc', 'dc');
  109. $ve=array('name1', 'name2', 'example', 'org');
  110. $this->assertEquals($expected, $dnArray);
  111. $this->assertEquals($ke, $k);
  112. $this->assertEquals($ve, $v);
  113. }
  114. public function testExplodeDnWithUtf8Characters()
  115. {
  116. $dn='uid=rogasawara,ou=営業部,o=Airius';
  117. $k=array();
  118. $v=array();
  119. $dnArray=Zend_Ldap_Dn::explodeDn($dn, $k, $v);
  120. $expected=array(
  121. array("uid" => "rogasawara"),
  122. array("ou" => "営業部"),
  123. array("o" => "Airius"),
  124. );
  125. $ke=array('uid', 'ou', 'o');
  126. $ve=array('rogasawara', '営業部', 'Airius');
  127. $this->assertEquals($expected, $dnArray);
  128. $this->assertEquals($ke, $k);
  129. $this->assertEquals($ve, $v);
  130. }
  131. public function testExplodeDnWithSpaces()
  132. {
  133. $dn='cn=Barbara Jensen, ou=Product Development, dc=airius, dc=com';
  134. $k=array();
  135. $v=array();
  136. $dnArray=Zend_Ldap_Dn::explodeDn($dn, $k, $v);
  137. $expected=array(
  138. array("cn" => "Barbara Jensen"),
  139. array("ou" => "Product Development"),
  140. array("dc" => "airius"),
  141. array("dc" => "com"),
  142. );
  143. $ke=array('cn', 'ou', 'dc', 'dc');
  144. $ve=array('Barbara Jensen', 'Product Development', 'airius', 'com');
  145. $this->assertEquals($expected, $dnArray);
  146. $this->assertEquals($ke, $k);
  147. $this->assertEquals($ve, $v);
  148. }
  149. public function testCoreExplodeDnWithMultiValuedRdn()
  150. {
  151. $dn='cn=name1+uid=user,cn=name2,dc=example,dc=org';
  152. $k=array();
  153. $v=array();
  154. $this->assertTrue(Zend_Ldap_Dn::checkDn($dn, $k, $v));
  155. $ke=array(array('cn', 'uid'), 'cn', 'dc', 'dc');
  156. $ve=array(array('name1', 'user'), 'name2', 'example', 'org');
  157. $this->assertEquals($ke, $k);
  158. $this->assertEquals($ve, $v);
  159. $dn='cn=name11+cn=name12,cn=name2,dc=example,dc=org';
  160. $this->assertFalse(Zend_Ldap_Dn::checkDn($dn));
  161. $dn='CN=name11+Cn=name12,cn=name2,dc=example,dc=org';
  162. $this->assertFalse(Zend_Ldap_Dn::checkDn($dn));
  163. }
  164. public function testExplodeDnWithMultiValuedRdn()
  165. {
  166. $dn='cn=Surname\, Firstname+uid=userid,cn=name2,dc=example,dc=org';
  167. $k=array();
  168. $v=array();
  169. $dnArray=Zend_Ldap_Dn::explodeDn($dn, $k, $v);
  170. $ke=array(array('cn', 'uid'), 'cn', 'dc', 'dc');
  171. $ve=array(array('Surname, Firstname', 'userid'), 'name2', 'example', 'org');
  172. $this->assertEquals($ke, $k);
  173. $this->assertEquals($ve, $v);
  174. $expected=array(
  175. array("cn" => "Surname, Firstname", "uid" => "userid"),
  176. array("cn" => "name2"),
  177. array("dc" => "example"),
  178. array("dc" => "org")
  179. );
  180. $this->assertEquals($expected, $dnArray);
  181. }
  182. public function testExplodeDnWithMultiValuedRdn2()
  183. {
  184. $dn='cn=Surname\, Firstname+uid=userid+sn=Surname,cn=name2,dc=example,dc=org';
  185. $k=array();
  186. $v=array();
  187. $dnArray=Zend_Ldap_Dn::explodeDn($dn, $k, $v);
  188. $ke=array(array('cn', 'uid', 'sn'), 'cn', 'dc', 'dc');
  189. $ve=array(array('Surname, Firstname', 'userid', 'Surname'), 'name2', 'example', 'org');
  190. $this->assertEquals($ke, $k);
  191. $this->assertEquals($ve, $v);
  192. $expected=array(
  193. array("cn" => "Surname, Firstname", "uid" => "userid", "sn" => "Surname"),
  194. array("cn" => "name2"),
  195. array("dc" => "example"),
  196. array("dc" => "org")
  197. );
  198. $this->assertEquals($expected, $dnArray);
  199. }
  200. /**
  201. * @expectedException Zend_Ldap_Exception
  202. */
  203. public function testCreateDnArrayIllegalDn()
  204. {
  205. $dn='name1,cn=name2,dc=example,dc=org';
  206. $dnArray=Zend_Ldap_Dn::explodeDn($dn);
  207. }
  208. public static function rfc2253DnProvider()
  209. {
  210. $testData = array(
  211. array('CN=Steve Kille,O=Isode Limited,C=GB',
  212. array(
  213. array('CN' => 'Steve Kille'),
  214. array('O' => 'Isode Limited'),
  215. array('C' => 'GB')
  216. )),
  217. array('OU=Sales+CN=J. Smith,O=Widget Inc.,C=US',
  218. array(
  219. array('OU' => 'Sales', 'CN' => 'J. Smith'),
  220. array('O' => 'Widget Inc.'),
  221. array('C' => 'US')
  222. )),
  223. array('CN=L. Eagle,O=Sue\, Grabbit and Runn,C=GB',
  224. array(
  225. array('CN' => 'L. Eagle'),
  226. array('O' => 'Sue, Grabbit and Runn'),
  227. array('C' => 'GB')
  228. )),
  229. array('CN=Before\0DAfter,O=Test,C=GB',
  230. array(
  231. array('CN' => "Before\rAfter"),
  232. array('O' => 'Test'),
  233. array('C' => 'GB')
  234. )),
  235. array('SN=Lu\C4\8Di\C4\87',
  236. array(
  237. array('SN' => 'Lučić')
  238. ))
  239. );
  240. return $testData;
  241. }
  242. /**
  243. * @dataProvider rfc2253DnProvider
  244. */
  245. public function testExplodeDnsProvidedByRFC2253($input, $expected)
  246. {
  247. $dnArray=Zend_Ldap_Dn::explodeDn($input);
  248. $this->assertEquals($expected, $dnArray);
  249. }
  250. }