]> granicus.if.org Git - php/commitdiff
Changed API to avoid using passing result by reference
authorCôme Chilliet <mcmic@php.net>
Tue, 4 Jul 2017 08:01:44 +0000 (10:01 +0200)
committerCôme Chilliet <mcmic@php.net>
Tue, 4 Jul 2017 08:03:27 +0000 (10:03 +0200)
See discussion on internals ML

ext/ldap/ldap.c
ext/ldap/tests/ldap_exop_passwd.phpt
ext/ldap/tests/ldap_exop_whoami.phpt

index b2d35148d9dcaaa73815e607a0b02379f2a36a58..8e0b908417dcf4fe9c228d101780c6cc87753927 100644 (file)
@@ -3314,16 +3314,16 @@ PHP_FUNCTION(ldap_exop)
 #endif
 
 #ifdef HAVE_LDAP_PASSWD_S
-/* {{{ proto bool ldap_exop_passwd(resource link [, string user [, string oldpw [, string newpw [, string genpasswd ]]]])
+/* {{{ proto bool|string ldap_exop_passwd(resource link [, string user [, string oldpw [, string newpw ]]])
    Passwd modify extended operation */
 PHP_FUNCTION(ldap_exop_passwd)
 {
-       zval *link, *user, *newpw, *oldpw, *newpasswd;
-       struct berval luser, loldpw, lnewpw, lnewpasswd;
+       zval *link, *user, *newpw, *oldpw;
+       struct berval luser, loldpw, lnewpw, lgenpasswd;
        ldap_linkdata *ld;
        int rc, myargcount = ZEND_NUM_ARGS();
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|zzzz/", &link, &user, &oldpw, &newpw, &newpasswd) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|zzz", &link, &user, &oldpw, &newpw) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
@@ -3336,7 +3336,6 @@ PHP_FUNCTION(ldap_exop_passwd)
        lnewpw.bv_len = 0;
 
        switch (myargcount) {
-               case 5:
                case 4:
                        convert_to_string_ex(newpw);
                        lnewpw.bv_val = Z_STRVAL_P(newpw);
@@ -3357,39 +3356,38 @@ PHP_FUNCTION(ldap_exop_passwd)
        rc = ldap_passwd_s(ld->link, &luser,
                loldpw.bv_len > 0 ? &loldpw : NULL,
                lnewpw.bv_len > 0 ? &lnewpw : NULL,
-               &lnewpasswd, NULL, NULL);
+               &lgenpasswd, NULL, NULL);
        if (rc != LDAP_SUCCESS ) {
                php_error_docref(NULL, E_WARNING, "Passwd modify extended operation failed: %s (%d)", ldap_err2string(rc), rc);
                RETURN_FALSE;
        }
 
-       if (myargcount > 4) {
-               zval_dtor(newpasswd);
-               if (lnewpasswd.bv_len == 0) {
-                       ZVAL_EMPTY_STRING(newpasswd);
+       if (lnewpw.bv_len == 0) {
+               if (lgenpasswd.bv_len == 0) {
+                       RETVAL_EMPTY_STRING();
                } else {
-                       ZVAL_STRINGL(newpasswd, lnewpasswd.bv_val, lnewpasswd.bv_len);
+                       RETVAL_STRINGL(lgenpasswd.bv_val, lgenpasswd.bv_len);
                }
+       } else {
+               RETURN_TRUE;
        }
 
-       ldap_memfree(lnewpasswd.bv_val);
-
-       RETURN_TRUE;
+       ldap_memfree(lgenpasswd.bv_val);
 }
 /* }}} */
 #endif
 
 #ifdef HAVE_LDAP_WHOAMI_S
-/* {{{ proto bool ldap_exop_whoami(resource link , string authzid)
+/* {{{ proto bool|string ldap_exop_whoami(resource link)
    Whoami extended operation */
 PHP_FUNCTION(ldap_exop_whoami)
 {
-       zval *link, *authzid;
+       zval *link;
        struct berval *lauthzid;
        ldap_linkdata *ld;
        int rc, myargcount = ZEND_NUM_ARGS();
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS(), "rz/", &link, &authzid) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &link) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
@@ -3404,16 +3402,13 @@ PHP_FUNCTION(ldap_exop_whoami)
                RETURN_FALSE;
        }
 
-       zval_dtor(authzid);
        if (lauthzid == NULL) {
-               ZVAL_EMPTY_STRING(authzid);
+               RETVAL_EMPTY_STRING();
        } else {
-               ZVAL_STRINGL(authzid, lauthzid->bv_val, lauthzid->bv_len);
+               RETVAL_STRINGL(lauthzid->bv_val, lauthzid->bv_len);
                ldap_memfree(lauthzid->bv_val);
                ldap_memfree(lauthzid);
        }
-
-       RETURN_TRUE;
 }
 /* }}} */
 #endif
@@ -3708,19 +3703,17 @@ ZEND_END_ARG_INFO()
 #endif
 
 #ifdef HAVE_LDAP_PASSWD_S
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop_passwd, 0, 0, 5)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop_passwd, 0, 0, 4)
        ZEND_ARG_INFO(0, link)
        ZEND_ARG_INFO(0, user)
        ZEND_ARG_INFO(0, oldpw)
        ZEND_ARG_INFO(0, newpw)
-       ZEND_ARG_INFO(1, newpasswd)
 ZEND_END_ARG_INFO()
 #endif
 
 #ifdef HAVE_LDAP_WHOAMI_S
-ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop_whoami, 0, 0, 2)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_exop_whoami, 0, 0, 1)
        ZEND_ARG_INFO(0, link)
-       ZEND_ARG_INFO(1, authzid)
 ZEND_END_ARG_INFO()
 #endif
 
index 5ab926eb4a31fc6fa7b979563d5dfdd546e75640..e282678c49ddc316c6a98be653f258d7e333502c 100644 (file)
@@ -16,8 +16,7 @@ insert_dummy_data($link, $base);
 // and optionally returns the NEW password if none was passed.
 // ldap_exop_passwd(resource link [, string user [, string oldpw [, string newpw [, string newpasswd ]]]])
 var_dump(
-  ldap_exop_passwd($link, "cn=userA,$base", "oops", "", $genpw),
-  $genpw,
+  $genpw = ldap_exop_passwd($link, "cn=userA,$base", "oops", ""),
   test_bind($host, $port, "cn=userA,$base", $genpw, $protocol_version),
   ldap_exop_passwd($link, "cn=userA,$base", $genpw, "newPassword"),
   test_bind($host, $port, "cn=userA,$base", "newPassword", $protocol_version)
@@ -33,7 +32,6 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
 remove_dummy_data($link, $base);
 ?>
 --EXPECTF--
-bool(true)
 string(%d) "%s"
 bool(true)
 bool(true)
index 4bccda34235574e81537b163ba97b41d262c7607..368038f3bd85cb7db6fc2495f506f65a3f0d3638 100644 (file)
@@ -14,8 +14,7 @@ insert_dummy_data($link, $base);
 
 // ldap_exop_whoami(resource link [, string authzid])
 var_dump(
-  ldap_exop_whoami($link, $authzid),
-  $authzid
+  ldap_exop_whoami($link)
 );
 ?>
 ===DONE===
@@ -28,6 +27,5 @@ $link = ldap_connect_and_bind($host, $port, $user, $passwd, $protocol_version);
 remove_dummy_data($link, $base);
 ?>
 --EXPECTF--
-bool(true)
 string(%d) "dn:%s"
 ===DONE===