diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index ef05fd77aaeb8..15920db49edb7 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -2984,16 +2984,22 @@ PHP_FUNCTION(ldap_compare) /* {{{ Get the current value of various session-wide parameters */ PHP_FUNCTION(ldap_get_option) { - zval *link, *retval; + zval *link = NULL, *retval; ldap_linkdata *ld; zend_long option; + LDAP *ldap; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olz", &link, ldap_link_ce, &option, &retval) != SUCCESS) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O!lz", &link, ldap_link_ce, &option, &retval) != SUCCESS) { RETURN_THROWS(); } - ld = Z_LDAP_LINK_P(link); - VERIFY_LDAP_LINK_CONNECTED(ld); + if (!link) { + ldap = NULL; + } else { + ld = Z_LDAP_LINK_P(link); + VERIFY_LDAP_LINK_CONNECTED(ld); + ldap = ld->link; + } switch (option) { /* options with int value */ @@ -3029,7 +3035,7 @@ PHP_FUNCTION(ldap_get_option) { int val; - if (ldap_get_option(ld->link, option, &val)) { + if (ldap_get_option(ldap, option, &val)) { RETURN_FALSE; } ZEND_TRY_ASSIGN_REF_LONG(retval, val); @@ -3039,7 +3045,7 @@ PHP_FUNCTION(ldap_get_option) { struct timeval *timeout = NULL; - if (ldap_get_option(ld->link, LDAP_OPT_NETWORK_TIMEOUT, (void *) &timeout)) { + if (ldap_get_option(ldap, LDAP_OPT_NETWORK_TIMEOUT, (void *) &timeout)) { if (timeout) { ldap_memfree(timeout); } @@ -3056,7 +3062,7 @@ PHP_FUNCTION(ldap_get_option) { int timeout; - if (ldap_get_option(ld->link, LDAP_X_OPT_CONNECT_TIMEOUT, &timeout)) { + if (ldap_get_option(ldap, LDAP_X_OPT_CONNECT_TIMEOUT, &timeout)) { RETURN_FALSE; } ZEND_TRY_ASSIGN_REF_LONG(retval, (timeout / 1000)); @@ -3067,7 +3073,7 @@ PHP_FUNCTION(ldap_get_option) { struct timeval *timeout = NULL; - if (ldap_get_option(ld->link, LDAP_OPT_TIMEOUT, (void *) &timeout)) { + if (ldap_get_option(ldap, LDAP_OPT_TIMEOUT, (void *) &timeout)) { if (timeout) { ldap_memfree(timeout); } @@ -3117,7 +3123,7 @@ PHP_FUNCTION(ldap_get_option) { char *val = NULL; - if (ldap_get_option(ld->link, option, &val) || val == NULL || *val == '\0') { + if (ldap_get_option(ldap, option, &val) || val == NULL || *val == '\0') { if (val) { ldap_memfree(val); } @@ -3131,13 +3137,13 @@ PHP_FUNCTION(ldap_get_option) { LDAPControl **ctrls = NULL; - if (ldap_get_option(ld->link, option, &ctrls) || ctrls == NULL) { + if (ldap_get_option(ldap, option, &ctrls) || ctrls == NULL) { if (ctrls) { ldap_memfree(ctrls); } RETURN_FALSE; } - _php_ldap_controls_to_array(ld->link, ctrls, retval, 1); + _php_ldap_controls_to_array(ldap, ctrls, retval, 1); } break; /* options not implemented case LDAP_OPT_API_INFO: diff --git a/ext/ldap/ldap.stub.php b/ext/ldap/ldap.stub.php index f3615e4d42cc0..f9f2aab85c40b 100644 --- a/ext/ldap/ldap.stub.php +++ b/ext/ldap/ldap.stub.php @@ -740,7 +740,7 @@ function ldap_rename(LDAP\Connection $ldap, string $dn, string $new_rdn, string function ldap_rename_ext(LDAP\Connection $ldap, string $dn, string $new_rdn, string $new_parent, bool $delete_old_rdn, ?array $controls = null): LDAP\Result|false {} /** @param array|string|int $value */ - function ldap_get_option(LDAP\Connection $ldap, int $option, &$value = null): bool {} + function ldap_get_option(?LDAP\Connection $ldap, int $option, &$value = null): bool {} /** @param array|string|int|bool $value */ function ldap_set_option(?LDAP\Connection $ldap, int $option, $value): bool {} diff --git a/ext/ldap/ldap_arginfo.h b/ext/ldap/ldap_arginfo.h index 01e08540142b4..984a4bab9a69f 100644 --- a/ext/ldap/ldap_arginfo.h +++ b/ext/ldap/ldap_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 7415695a7ae90e6abd45617baf8a9ecf9232b801 */ + * Stub hash: edd31d6c19c01bee6ddb04c747640c97f0bacba6 */ #if defined(HAVE_ORALDAP) ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_ldap_connect, 0, 0, LDAP\\Connection, MAY_BE_FALSE) @@ -217,7 +217,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_ldap_rename_ext, 0, 5, LDAP\ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ldap_get_option, 0, 2, _IS_BOOL, 0) - ZEND_ARG_OBJ_INFO(0, ldap, LDAP\\Connection, 0) + ZEND_ARG_OBJ_INFO(0, ldap, LDAP\\Connection, 1) ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0) ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, value, "null") ZEND_END_ARG_INFO() diff --git a/ext/ldap/tests/ldap_get_option_package_basic.phpt b/ext/ldap/tests/ldap_get_option_package_basic.phpt index 9135ea233701d..680c32490c153 100644 --- a/ext/ldap/tests/ldap_get_option_package_basic.phpt +++ b/ext/ldap/tests/ldap_get_option_package_basic.phpt @@ -7,6 +7,10 @@ ldap --FILE-- --EXPECT-- bool(true) +bool(true) diff --git a/ext/ldap/tests/ldap_start_tls_basic2.phpt b/ext/ldap/tests/ldap_start_tls_basic2.phpt new file mode 100644 index 0000000000000..56d8c980b6ffe --- /dev/null +++ b/ext/ldap/tests/ldap_start_tls_basic2.phpt @@ -0,0 +1,36 @@ +--TEST-- +ldap_start_tls() - Basic ldap_start_tls test with TLS_CACERTFILE +--EXTENSIONS-- +ldap +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +bool(true) diff --git a/ext/ldap/tests/ldaps_basic2.phpt b/ext/ldap/tests/ldaps_basic2.phpt new file mode 100644 index 0000000000000..e464b09beba1e --- /dev/null +++ b/ext/ldap/tests/ldaps_basic2.phpt @@ -0,0 +1,56 @@ +--TEST-- +ldap_connect() - Basic ldaps test with TLS_CACERTFILE +--EXTENSIONS-- +ldap +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(true) +bool(true)