]> granicus.if.org Git - php/commitdiff
Added controls parameters to ldap_exop so that control support can be added later
authorCôme Chilliet <mcmic@php.net>
Thu, 27 Jul 2017 07:45:37 +0000 (09:45 +0200)
committerCôme Chilliet <mcmic@php.net>
Fri, 4 Aug 2017 16:10:49 +0000 (18:10 +0200)
ext/ldap/ldap.c
ext/ldap/tests/ldap_exop.phpt

index a710025af09b24c9d06c4e7addbb401c23779f60..511db374342b60de2afaca507802b7d29e2ba1b3 100644 (file)
@@ -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;
@@ -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;
        }
 
@@ -3343,6 +3344,8 @@ PHP_FUNCTION(ldap_exop)
        }
 
        switch (myargcount) {
+       case 7:
+       case 6:
        case 5:
        case 4:
        case 3:
@@ -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);
@@ -3370,7 +3373,7 @@ PHP_FUNCTION(ldap_exop)
 
                /* Reverse -> fall through */
                switch (myargcount) {
-                       case 5:
+                       case 7:
                                zval_dtor(retoid);
                                if (lretoid == NULL) {
                                        ZVAL_EMPTY_STRING(retoid);
@@ -3378,7 +3381,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) {
@@ -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()
index cb1afbf9344db826061bcf4622e7d1d57285dba2..a80372a5557f47bb4165d3e8fefb94c54237b24a 100644 (file)
@@ -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),