From 3207747b9e03442fd43913f84cdd599ac244dfe8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=B4me=20Chilliet?= Date: Tue, 4 Jul 2017 10:01:44 +0200 Subject: [PATCH] Changed API to avoid using passing result by reference See discussion on internals ML --- ext/ldap/ldap.c | 45 ++++++++++++---------------- ext/ldap/tests/ldap_exop_passwd.phpt | 4 +-- ext/ldap/tests/ldap_exop_whoami.phpt | 4 +-- 3 files changed, 21 insertions(+), 32 deletions(-) diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index b2d35148d9..8e0b908417 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -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 diff --git a/ext/ldap/tests/ldap_exop_passwd.phpt b/ext/ldap/tests/ldap_exop_passwd.phpt index 5ab926eb4a..e282678c49 100644 --- a/ext/ldap/tests/ldap_exop_passwd.phpt +++ b/ext/ldap/tests/ldap_exop_passwd.phpt @@ -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) diff --git a/ext/ldap/tests/ldap_exop_whoami.phpt b/ext/ldap/tests/ldap_exop_whoami.phpt index 4bccda3423..368038f3bd 100644 --- a/ext/ldap/tests/ldap_exop_whoami.phpt +++ b/ext/ldap/tests/ldap_exop_whoami.phpt @@ -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=== -- 2.40.0