Skip to content

Commit

Permalink
Added controls parameters to ldap_exop so that control support can be…
Browse files Browse the repository at this point in the history
… added later
  • Loading branch information
Côme Chilliet committed Aug 4, 2017
1 parent 17bb8d5 commit aa0e402
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
19 changes: 12 additions & 7 deletions ext/ldap/ldap.c
Original file line number Diff line number Diff line change
Expand Up @@ -3322,10 +3322,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;
Expand All @@ -3334,7 +3335,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;
}

Expand All @@ -3343,6 +3344,8 @@ PHP_FUNCTION(ldap_exop)
}

switch (myargcount) {
case 7:
case 6:
case 5:
case 4:
case 3:
Expand All @@ -3355,13 +3358,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);
Expand All @@ -3370,15 +3373,15 @@ PHP_FUNCTION(ldap_exop)

/* Reverse -> fall through */
switch (myargcount) {
case 5:
case 7:
zval_dtor(retoid);
if (lretoid == NULL) {
ZVAL_EMPTY_STRING(retoid);
} else {
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) {
Expand Down Expand Up @@ -3794,10 +3797,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()
Expand Down
6 changes: 3 additions & 3 deletions ext/ldap/tests/ldap_exop.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down

0 comments on commit aa0e402

Please sign in to comment.