xref: /PHP-8.3/ext/ldap/tests/ldap_exop.phpt (revision b3bd55f2)
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