Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MFH: Fixing #48441 (ldap_search() with sizelimit/timelimit/deref opti…
…ons makes those options persistent)
- Loading branch information
1 parent
08c7d57
commit 13594f8
Showing
4 changed files
with
257 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
--TEST-- | ||
ldap_search() bug 48441 - options persists after specifying them in ldap_search | ||
--CREDITS-- | ||
Patrick Allaert <patrickallaert@php.net> | ||
--SKIPIF-- | ||
<?php | ||
require_once('skipif.inc'); | ||
require_once('skipifbindfailure.inc'); | ||
?> | ||
--FILE-- | ||
<?php | ||
include "connect.inc"; | ||
|
||
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); | ||
insert_dummy_data($link); | ||
|
||
$dn = "dc=my-domain,dc=com"; | ||
$filter = "(objectclass=person)"; | ||
|
||
var_dump( | ||
$result = ldap_search($link, $dn, $filter, array('sn')), | ||
ldap_get_entries($link, $result) | ||
); | ||
var_dump( | ||
$result = ldap_search($link, $dn, $filter, array('sn'), 1, 1, 1, LDAP_DEREF_ALWAYS), | ||
ldap_get_entries($link, $result) | ||
); | ||
var_dump( | ||
$result = ldap_search($link, $dn, $filter, array('sn')), | ||
ldap_get_entries($link, $result) | ||
); | ||
?> | ||
===DONE=== | ||
--CLEAN-- | ||
<?php | ||
include "connect.inc"; | ||
|
||
$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version); | ||
remove_dummy_data($link); | ||
?> | ||
--EXPECTF-- | ||
resource(%d) of type (ldap result) | ||
array(4) { | ||
["count"]=> | ||
int(3) | ||
[0]=> | ||
array(4) { | ||
["sn"]=> | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
string(7) "testSN1" | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(28) "cn=userA,dc=my-domain,dc=com" | ||
} | ||
[1]=> | ||
array(4) { | ||
["sn"]=> | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
string(7) "testSN2" | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(28) "cn=userB,dc=my-domain,dc=com" | ||
} | ||
[2]=> | ||
array(4) { | ||
["sn"]=> | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
string(7) "testSN3" | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" | ||
} | ||
} | ||
|
||
Warning: ldap_search(): Partial search results returned: Sizelimit exceeded in %s on line %d | ||
resource(%d) of type (ldap result) | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
array(4) { | ||
["sn"]=> | ||
array(1) { | ||
["count"]=> | ||
int(0) | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(28) "cn=userA,dc=my-domain,dc=com" | ||
} | ||
} | ||
resource(%d) of type (ldap result) | ||
array(4) { | ||
["count"]=> | ||
int(3) | ||
[0]=> | ||
array(4) { | ||
["sn"]=> | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
string(7) "testSN1" | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(28) "cn=userA,dc=my-domain,dc=com" | ||
} | ||
[1]=> | ||
array(4) { | ||
["sn"]=> | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
string(7) "testSN2" | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(28) "cn=userB,dc=my-domain,dc=com" | ||
} | ||
[2]=> | ||
array(4) { | ||
["sn"]=> | ||
array(2) { | ||
["count"]=> | ||
int(1) | ||
[0]=> | ||
string(7) "testSN3" | ||
} | ||
[0]=> | ||
string(2) "sn" | ||
["count"]=> | ||
int(1) | ||
["dn"]=> | ||
string(37) "cn=userC,cn=userB,dc=my-domain,dc=com" | ||
} | ||
} | ||
===DONE=== |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<?php | ||
|
||
/* | ||
Default values are "localhost", "root", database "test" and empty password. | ||
Change the LDAP_TEST_* environment values if you want to use another configuration. | ||
*/ | ||
|
||
$host = getenv("LDAP_TEST_HOST") ? getenv("LDAP_TEST_HOST") : "localhost"; | ||
$port = getenv("LDAP_TEST_PORT") ? getenv("LDAP_TEST_PORT") : 389; | ||
$user = getenv("LDAP_TEST_USER") ? getenv("LDAP_TEST_USER") : "cn=Manager,dc=my-domain,dc=com"; | ||
$sasl_user = getenv("LDAP_TEST_SASL_USER") ? getenv("LDAP_TEST_SASL_USER") : "Manager"; | ||
$passwd = getenv("LDAP_TEST_PASSWD") ? getenv("LDAP_TEST_PASSWD") : "secret"; | ||
$protocol_version = getenv("LDAP_TEST_OPT_PROTOCOL_VERSION") ? getenv("LDAP_TEST_OPT_PROTOCOL_VERSION") : 3; | ||
$skip_on_bind_failure = getenv("LDAP_TEST_SKIP_BIND_FAILURE") ? getenv("LDAP_TEST_SKIP_BIND_FAILURE") : true; | ||
|
||
function ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version) { | ||
$link = ldap_connect($host, $port); | ||
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version); | ||
ldap_bind($link, $user, $passwd); | ||
return $link; | ||
} | ||
|
||
function insert_dummy_data($link) { | ||
ldap_add($link, "dc=my-domain,dc=com", array( | ||
"objectClass" => array( | ||
"top", | ||
"dcObject", | ||
"organization"), | ||
"dc" => "my-domain", | ||
"o" => "my-domain", | ||
)); | ||
ldap_add($link, "cn=userA,dc=my-domain,dc=com", array( | ||
"objectclass" => "person", | ||
"cn" => "userA", | ||
"sn" => "testSN1", | ||
"userPassword" => "oops", | ||
"telephoneNumber" => "xx-xx-xx-xx-xx", | ||
"description" => "user A", | ||
)); | ||
ldap_add($link, "cn=userB,dc=my-domain,dc=com", array( | ||
"objectclass" => "person", | ||
"cn" => "userB", | ||
"sn" => "testSN2", | ||
"userPassword" => "oopsIDitItAgain", | ||
"description" => "user B", | ||
)); | ||
ldap_add($link, "cn=userC,cn=userB,dc=my-domain,dc=com", array( | ||
"objectclass" => "person", | ||
"cn" => "userC", | ||
"sn" => "testSN3", | ||
"userPassword" => "0r1g1na1 passw0rd", | ||
)); | ||
} | ||
|
||
function remove_dummy_data($link) { | ||
ldap_delete($link, "cn=userC,cn=userB,dc=my-domain,dc=com"); | ||
ldap_delete($link, "cn=userA,dc=my-domain,dc=com"); | ||
ldap_delete($link, "cn=userB,dc=my-domain,dc=com"); | ||
ldap_delete($link, "dc=my-domain,dc=com"); | ||
} | ||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?php | ||
require_once 'connect.inc'; | ||
|
||
if ($skip_on_bind_failure) { | ||
|
||
$link = ldap_connect($host, $port); | ||
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, $protocol_version); | ||
if (!@ldap_bind($link, $user, $passwd)) | ||
die(sprintf("skip Can't bind to LDAP Server - [%d] %s", ldap_errno($link), ldap_error($link))); | ||
|
||
ldap_unbind($link); | ||
} | ||
?> |