summaryrefslogtreecommitdiff
path: root/ext/ldap/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ldap/tests')
-rw-r--r--ext/ldap/tests/bug48441.phpt171
-rw-r--r--ext/ldap/tests/connect.inc61
-rw-r--r--ext/ldap/tests/skipifbindfailure.inc13
3 files changed, 245 insertions, 0 deletions
diff --git a/ext/ldap/tests/bug48441.phpt b/ext/ldap/tests/bug48441.phpt
new file mode 100644
index 0000000000..996413349d
--- /dev/null
+++ b/ext/ldap/tests/bug48441.phpt
@@ -0,0 +1,171 @@
+--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);
+?>
+--XFAIL--
+This test may still fail in PHP 6 as ext/ldap is still not ready
+--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===
diff --git a/ext/ldap/tests/connect.inc b/ext/ldap/tests/connect.inc
new file mode 100644
index 0000000000..ddb57828e9
--- /dev/null
+++ b/ext/ldap/tests/connect.inc
@@ -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");
+}
+?>
diff --git a/ext/ldap/tests/skipifbindfailure.inc b/ext/ldap/tests/skipifbindfailure.inc
new file mode 100644
index 0000000000..f79bb9d690
--- /dev/null
+++ b/ext/ldap/tests/skipifbindfailure.inc
@@ -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);
+}
+?>