1--TEST-- 2ldap_exop() and ldap_parse_exop() - EXOP operations 3--CREDITS-- 4Côme Chilliet <mcmic@php.net> 5--EXTENSIONS-- 6ldap 7--SKIPIF-- 8<?php require_once('skipifbindfailure.inc'); ?> 9--FILE-- 10<?php 11require "connect.inc"; 12 13$link = ldap_connect_and_bind($uri, $user, $passwd, $protocol_version); 14insert_dummy_data($link, $base); 15 16function build_reqdata_passwd($user, $oldpw, $newpw) 17{ 18 // This is basic and will only work for small strings 19 $hex = ''; 20 if (!empty($user)) { 21 $hex .= '80'.sprintf("%'.02x", strlen($user)).bin2hex($user); 22 } 23 if (!empty($oldpw)) { 24 $hex .= '81'.sprintf("%'.02x", strlen($oldpw)).bin2hex($oldpw); 25 } 26 if (!empty($newpw)) { 27 $hex .= '82'.sprintf("%'.02x", strlen($newpw)).bin2hex($newpw); 28 } 29 return hex2bin('30'.sprintf("%'.02x", strlen($hex)/2).$hex); 30} 31 32function extract_genpw($retdata) 33{ 34 // Only works for small strings as well 35 return hex2bin(substr(bin2hex($retdata), 4*2)); 36} 37 38$userAPassword = "oops"; 39 40var_dump( 41 ldap_exop($link, LDAP_EXOP_WHO_AM_I, NULL, NULL, $retdata, $retoid), 42 $retdata, 43 $retoid, 44 ldap_exop_sync($link, LDAP_EXOP_WHO_AM_I, NULL, NULL, $retdata, $retoid), 45 $retdata, 46 $retoid, 47 ldap_exop($link, LDAP_EXOP_WHO_AM_I, NULL, [['oid' => LDAP_CONTROL_PROXY_AUTHZ, 'value' => "dn:cn=userA,$base"]], $retdata), 48 $retdata, 49 ldap_exop_sync($link, LDAP_EXOP_WHO_AM_I, NULL, [['oid' => LDAP_CONTROL_PROXY_AUTHZ, 'value' => "dn:cn=userA,$base"]], $retdata), 50 $retdata, 51 $r = ldap_exop($link, LDAP_EXOP_WHO_AM_I), 52 ldap_parse_exop($link, $r, $retdata2), 53 $retdata2, 54 test_bind($uri, "cn=userA,$base", $userAPassword, $protocol_version), 55 $r = ldap_exop($link, LDAP_EXOP_MODIFY_PASSWD, build_reqdata_passwd("cn=userA,$base", $userAPassword, "")), 56 ldap_parse_exop($link, $r, $retpwdata, $retpwoid), 57 $genpw = extract_genpw($retpwdata), 58 $retpwoid, 59 test_bind($uri, "cn=userA,$base", $genpw, $protocol_version) 60); 61?> 62--CLEAN-- 63<?php 64require "connect.inc"; 65 66$link = ldap_connect_and_bind($uri, $user, $passwd, $protocol_version); 67 68remove_dummy_data($link, $base); 69?> 70--EXPECTF-- 71bool(true) 72string(%d) "dn:%s" 73string(0) "" 74bool(true) 75string(%d) "dn:%s" 76string(0) "" 77bool(true) 78string(%d) "dn:cn=user%s" 79bool(true) 80string(%d) "dn:cn=user%s" 81object(LDAP\Result)#%d (0) { 82} 83bool(true) 84string(%d) "dn:%s" 85bool(true) 86object(LDAP\Result)#%d (0) { 87} 88bool(true) 89string(%d) "%s" 90string(0) "" 91bool(true) 92