]> granicus.if.org Git - php/commitdiff
Improved ldap_exop test to encode&decode a passwd EXOP to test sending/recieving...
authorCôme Chilliet <mcmic@php.net>
Tue, 27 Jun 2017 14:15:39 +0000 (16:15 +0200)
committerCôme Chilliet <mcmic@php.net>
Mon, 3 Jul 2017 08:58:13 +0000 (10:58 +0200)
ext/ldap/tests/ldap_exop.phpt

index 5f93a0209340f6de87143f3824e1194794c41611..015894415b05bc7cfd8cad0069882ddeec43caa6 100644 (file)
@@ -12,14 +12,30 @@ require "connect.inc";
 $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
 insert_dummy_data($link, $base);
 
-function ber_encode($string) {
-       $null_padded_string = '';
-       for($i = 0; $i<strlen($string); $i++) {
-               $null_padded_string .= substr($string,$i,1)."\0";
+function build_reqdata_passwd($user, $oldpw, $newpw)
+{
+       // This is basic and will only work for small strings
+       $hex = '';
+       if (!empty($user)) {
+               $hex .= '80'.sprintf("%'.02x", strlen($user)).bin2hex($user);
        }
-       return base64_encode($null_padded_string);
+       if (!empty($oldpw)) {
+               $hex .= '81'.sprintf("%'.02x", strlen($oldpw)).bin2hex($oldpw);
+       }
+       if (!empty($newpw)) {
+               $hex .= '82'.sprintf("%'.02x", strlen($newpw)).bin2hex($newpw);
+       }
+       return hex2bin('30'.sprintf("%'.02x", strlen($hex)/2).$hex);
 }
 
+function extract_genpw($retdata)
+{
+       // Only works for small strings as well
+       return hex2bin(substr(bin2hex($retdata), 4*2));
+}
+
+$userAPassword = "oops";
+
 // ldap_exop(resource link, string reqoid [, string reqdata [, string retoid [, string retdata]]])
 // bool ldap_parse_exop(resource link, resource result [, string retoid [, string retdata]])
 var_dump(
@@ -29,7 +45,13 @@ var_dump(
        $r = ldap_exop($link, LDAP_EXOP_WHO_AM_I),
        ldap_parse_exop($link, $r, $retoid2, $retdata2),
        $retdata2,
-       $retoid2
+       $retoid2,
+       test_bind($host, $port, "cn=userA,$base", $userAPassword, $protocol_version),
+       $r = ldap_exop($link, LDAP_EXOP_MODIFY_PASSWD, build_reqdata_passwd("cn=userA,$base", $userAPassword, "")),
+       ldap_parse_exop($link, $r, $retpwoid, $retpwdata),
+       $genpw = extract_genpw($retpwdata),
+       $retpwoid,
+       test_bind($host, $port, "cn=userA,$base", $genpw, $protocol_version)
 );
 ?>
 ===DONE===
@@ -49,4 +71,10 @@ resource(%d) of type (ldap result)
 bool(true)
 string(%d) "dn:%s"
 string(0) ""
+bool(true)
+resource(%d) of type (ldap result)
+bool(true)
+string(%d) "%s"
+string(0) ""
+bool(true)
 ===DONE===