Le mercredi 26 juillet 2017, 12:48:04 CEST Sara Golemon a écrit :
> The current return value for 4 or more args is simply `true`, so the
> BC break would be trivial to make that a resource (which evaluates as
> true), but I think we can make that even simpler.  Just fix it before
> beta3 (or beta2 if the fix is already ready) and I won't tell on you
> to Remi.

So how about the patch attached?

I did not include your suggested changes as I did not manage to make it work 
for now, plus this will have to be changed for all functions so I’d prefer to 
work on this clean up after I get back from holidays at the end of August.
But thanks for the suggested changes, ext/ldap code does need more set of eyes 
looking at it and I do not master PHP internal features yet.

Côme
>From e8de35b801f4bbeb090ee1bd13958cf77b096429 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <mc...@php.net>
Date: Thu, 27 Jul 2017 09:45:37 +0200
Subject: [PATCH] Added controls parameters to ldap_exop so that control
 support can be added later

---
 ext/ldap/ldap.c               | 19 ++++++++++++-------
 ext/ldap/tests/ldap_exop.phpt |  6 +++---
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c
index 2fd43359a4..009d37ad29 100644
--- a/ext/ldap/ldap.c
+++ b/ext/ldap/ldap.c
@@ -3326,10 +3326,11 @@ PHP_FUNCTION(ldap_control_paged_result_response)
 
 /* {{{ Extended operations, Pierangelo Masarati */
 #ifdef HAVE_LDAP_EXTENDED_OPERATION_S
-/* {{{ proto ? ldap_exop(resource link, string reqoid [, string reqdata [, string retdata [, string retoid]]])
+/* {{{ proto resource ldap_exop(resource link, string reqoid [, string reqdata [, array servercontrols [, array clientcontrols [, string &retdata [, string &retoid]]]]])
    Extended operation */
 PHP_FUNCTION(ldap_exop)
 {
+	zval *servercontrols, *clientcontrols;
 	zval *link, *reqoid, *reqdata, *retdata, *retoid;
 	char *lreqoid, *lretoid = NULL;
 	struct berval lreqdata, *lretdata = NULL;
@@ -3338,7 +3339,7 @@ PHP_FUNCTION(ldap_exop)
 	int rc, msgid, myargcount = ZEND_NUM_ARGS();
 	/* int reqoid_len, reqdata_len, retdata_len, retoid_len, retdat_len; */
 
-	if (zend_parse_parameters(ZEND_NUM_ARGS(), "rz|zz/z/", &link, &reqoid, &reqdata, &retdata, &retoid) != SUCCESS) {
+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "rz|zzzz/z/", &link, &reqoid, &reqdata, &servercontrols, &clientcontrols, &retdata, &retoid) != SUCCESS) {
 		WRONG_PARAM_COUNT;
 	}
 
@@ -3347,6 +3348,8 @@ PHP_FUNCTION(ldap_exop)
 	}
 
 	switch (myargcount) {
+	case 7:
+	case 6:
 	case 5:
 	case 4:
 	case 3:
@@ -3359,13 +3362,13 @@ PHP_FUNCTION(ldap_exop)
 		lreqoid = Z_STRVAL_P(reqoid);
 	}
 
-	if (myargcount > 3) {
+	if (myargcount > 5) {
 		/* synchronous call */
 		rc = ldap_extended_operation_s(ld->link, lreqoid,
 			lreqdata.bv_len > 0 ? &lreqdata: NULL,
 			NULL,
 			NULL,
-			myargcount > 4 ? &lretoid : NULL,
+			myargcount > 6 ? &lretoid : NULL,
 			&lretdata );
 		if (rc != LDAP_SUCCESS ) {
 			php_error_docref(NULL, E_WARNING, "Extended operation %s failed: %s (%d)", lreqoid, ldap_err2string(rc), rc);
@@ -3374,7 +3377,7 @@ PHP_FUNCTION(ldap_exop)
 
 		/* Reverse -> fall through */
 		switch (myargcount) {
-			case 5:
+			case 7:
 				zval_dtor(retoid);
 				if (lretoid == NULL) {
 					ZVAL_EMPTY_STRING(retoid);
@@ -3382,7 +3385,7 @@ PHP_FUNCTION(ldap_exop)
 					ZVAL_STRING(retoid, lretoid);
 					ldap_memfree(lretoid);
 				}
-			case 4:
+			case 6:
 				/* use arg #4 as the data returned by the server */
 				zval_dtor(retdata);
 				if (lretdata == NULL) {
@@ -3835,10 +3838,12 @@ ZEND_END_ARG_INFO()
 #endif
 
 #ifdef HAVE_LDAP_EXTENDED_OPERATION_S
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop, 0, 0, 5)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop, 0, 0, 2)
 	ZEND_ARG_INFO(0, link)
 	ZEND_ARG_INFO(0, reqoid)
 	ZEND_ARG_INFO(0, reqdata)
+	ZEND_ARG_INFO(0, servercontrols)
+	ZEND_ARG_INFO(0, clientcontrols)
 	ZEND_ARG_INFO(1, retdata)
 	ZEND_ARG_INFO(1, retoid)
 ZEND_END_ARG_INFO()
diff --git a/ext/ldap/tests/ldap_exop.phpt b/ext/ldap/tests/ldap_exop.phpt
index cb1afbf934..a80372a555 100644
--- a/ext/ldap/tests/ldap_exop.phpt
+++ b/ext/ldap/tests/ldap_exop.phpt
@@ -36,10 +36,10 @@ function extract_genpw($retdata)
 
 $userAPassword = "oops";
 
-// ldap_exop(resource link, string reqoid [, string reqdata [, string retoid [, string retdata]]])
-// bool ldap_parse_exop(resource link, resource result [, string retoid [, string retdata]])
+// ldap_exop(resource link, string reqoid [, string reqdata [, array servercontrols [, array clientcontrols [, string &retdata [, string &retoid]]]]])
+// bool ldap_parse_exop(resource link, resource result [, string &retdata [, string &retoid]])
 var_dump(
-	ldap_exop($link, LDAP_EXOP_WHO_AM_I, NULL, $retdata, $retoid),
+	ldap_exop($link, LDAP_EXOP_WHO_AM_I, NULL, NULL, NULL, $retdata, $retoid),
 	$retdata,
 	$retoid,
 	$r = ldap_exop($link, LDAP_EXOP_WHO_AM_I),
-- 
2.11.0


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to