. Added get_resource_id($resource) function, which returns the same value as
(int) $resource. It provides the same functionality under a clearer API.
+- LDAP:
+ . Added ldap_count_references(), which returns the number of reference
+ messages in a search result.
+
- OpenSSL:
. Added openssl_cms_encrypt() encrypts the message in the file with the
certificates and outputs the result to the supplied file.
#endif
/* }}} */
+/* {{{ proto int ldap_count_references(resource link, resource result)
+ Count the number of references in a search result */
+PHP_FUNCTION(ldap_count_references)
+{
+ zval *link, *result;
+ ldap_linkdata *ld;
+ LDAPMessage *ldap_result;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "rr", &link, &result) != SUCCESS) {
+ RETURN_THROWS();
+ }
+
+ if ((ld = (ldap_linkdata *)zend_fetch_resource(Z_RES_P(link), "ldap link", le_link)) == NULL) {
+ RETURN_THROWS();
+ }
+
+ if ((ldap_result = (LDAPMessage *)zend_fetch_resource(Z_RES_P(result), "ldap result", le_result)) == NULL) {
+ RETURN_THROWS();
+ }
+
+ RETURN_LONG(ldap_count_references(ld->link, ldap_result));
+}
+/* }}} */
+
/* {{{ proto resource ldap_first_reference(resource link, resource result)
Return first reference */
PHP_FUNCTION(ldap_first_reference)
/** @param resource|null $link_identifier */
function ldap_set_option($link_identifier, int $option, $newval): bool {}
+/**
+ * @param resource $link_identifier
+ * @param resource $result_identifier
+ */
+function ldap_count_references($link_identifier, $result_identifier): int {}
+
/**
* @param resource $link
* @param resource $result
/* This is a generated file, edit the .stub.php file instead.
- * Stub hash: c9ce0e98ab386130b6332ae017808bec67b1cd07 */
+ * Stub hash: 63d7fc9e11bd2821a77f6ee709ceaf1fdcbf190e */
#if defined(HAVE_ORALDAP)
ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_connect, 0, 0, 0)
ZEND_END_ARG_INFO()
#endif
+#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_count_references, 0, 2, IS_LONG, 0)
+ ZEND_ARG_INFO(0, link_identifier)
+ ZEND_ARG_INFO(0, result_identifier)
+ZEND_END_ARG_INFO()
+#endif
+
#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_first_reference, 0, 0, 2)
ZEND_ARG_INFO(0, link)
ZEND_FUNCTION(ldap_set_option);
#endif
#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
+ZEND_FUNCTION(ldap_count_references);
+#endif
+#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
ZEND_FUNCTION(ldap_first_reference);
#endif
#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
ZEND_FE(ldap_set_option, arginfo_ldap_set_option)
#endif
+#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
+ ZEND_FE(ldap_count_references, arginfo_ldap_count_references)
+#endif
#if (LDAP_API_VERSION > 2000) || defined(HAVE_ORALDAP)
ZEND_FE(ldap_first_reference, arginfo_ldap_first_reference)
#endif
--- /dev/null
+--TEST--
+ldap_count_references() - Basic ldap_count_references test
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+<?php require_once('skipifbindfailure.inc'); ?>
+--FILE--
+<?php
+require "connect.inc";
+$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
+insert_dummy_data($link, $base);
+ldap_add($link, "cn=userref,$base", array(
+ "objectClass" => array("extensibleObject", "referral"),
+ "cn" => "userref",
+ "ref" => "cn=userA,$base",
+));
+ldap_add($link, "cn=userref2,$base", array(
+ "objectClass" => array("extensibleObject", "referral"),
+ "cn" => "userref2",
+ "ref" => "cn=userB,$base",
+));
+ldap_set_option($link, LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
+$result = ldap_search($link, "$base", "(cn=*)");
+var_dump(ldap_count_references($link, $result));
+?>
+--CLEAN--
+<?php
+include "connect.inc";
+
+$link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
+// Referral can only be removed with Manage DSA IT Control
+ldap_delete($link, "cn=userref,$base", [['oid' => LDAP_CONTROL_MANAGEDSAIT, 'iscritical' => TRUE]]);
+ldap_delete($link, "cn=userref2,$base", [['oid' => LDAP_CONTROL_MANAGEDSAIT, 'iscritical' => TRUE]]);
+remove_dummy_data($link, $base);
+?>
+--EXPECTF--
+int(2)