Skip to content

Commit 1e6909d

Browse files
committed
allow ldap_get_option to retrieve global option
1 parent 00f0175 commit 1e6909d

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

ext/ldap/ldap.c

+17-11
Original file line numberDiff line numberDiff line change
@@ -2984,16 +2984,22 @@ PHP_FUNCTION(ldap_compare)
29842984
/* {{{ Get the current value of various session-wide parameters */
29852985
PHP_FUNCTION(ldap_get_option)
29862986
{
2987-
zval *link, *retval;
2987+
zval *link = NULL, *retval;
29882988
ldap_linkdata *ld;
29892989
zend_long option;
2990+
LDAP *ldap;
29902991

2991-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "Olz", &link, ldap_link_ce, &option, &retval) != SUCCESS) {
2992+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O!lz", &link, ldap_link_ce, &option, &retval) != SUCCESS) {
29922993
RETURN_THROWS();
29932994
}
29942995

2995-
ld = Z_LDAP_LINK_P(link);
2996-
VERIFY_LDAP_LINK_CONNECTED(ld);
2996+
if (!link) {
2997+
ldap = NULL;
2998+
} else {
2999+
ld = Z_LDAP_LINK_P(link);
3000+
VERIFY_LDAP_LINK_CONNECTED(ld);
3001+
ldap = ld->link;
3002+
}
29973003

29983004
switch (option) {
29993005
/* options with int value */
@@ -3029,7 +3035,7 @@ PHP_FUNCTION(ldap_get_option)
30293035
{
30303036
int val;
30313037

3032-
if (ldap_get_option(ld->link, option, &val)) {
3038+
if (ldap_get_option(ldap, option, &val)) {
30333039
RETURN_FALSE;
30343040
}
30353041
ZEND_TRY_ASSIGN_REF_LONG(retval, val);
@@ -3039,7 +3045,7 @@ PHP_FUNCTION(ldap_get_option)
30393045
{
30403046
struct timeval *timeout = NULL;
30413047

3042-
if (ldap_get_option(ld->link, LDAP_OPT_NETWORK_TIMEOUT, (void *) &timeout)) {
3048+
if (ldap_get_option(ldap, LDAP_OPT_NETWORK_TIMEOUT, (void *) &timeout)) {
30433049
if (timeout) {
30443050
ldap_memfree(timeout);
30453051
}
@@ -3056,7 +3062,7 @@ PHP_FUNCTION(ldap_get_option)
30563062
{
30573063
int timeout;
30583064

3059-
if (ldap_get_option(ld->link, LDAP_X_OPT_CONNECT_TIMEOUT, &timeout)) {
3065+
if (ldap_get_option(ldap, LDAP_X_OPT_CONNECT_TIMEOUT, &timeout)) {
30603066
RETURN_FALSE;
30613067
}
30623068
ZEND_TRY_ASSIGN_REF_LONG(retval, (timeout / 1000));
@@ -3067,7 +3073,7 @@ PHP_FUNCTION(ldap_get_option)
30673073
{
30683074
struct timeval *timeout = NULL;
30693075

3070-
if (ldap_get_option(ld->link, LDAP_OPT_TIMEOUT, (void *) &timeout)) {
3076+
if (ldap_get_option(ldap, LDAP_OPT_TIMEOUT, (void *) &timeout)) {
30713077
if (timeout) {
30723078
ldap_memfree(timeout);
30733079
}
@@ -3117,7 +3123,7 @@ PHP_FUNCTION(ldap_get_option)
31173123
{
31183124
char *val = NULL;
31193125

3120-
if (ldap_get_option(ld->link, option, &val) || val == NULL || *val == '\0') {
3126+
if (ldap_get_option(ldap, option, &val) || val == NULL || *val == '\0') {
31213127
if (val) {
31223128
ldap_memfree(val);
31233129
}
@@ -3131,13 +3137,13 @@ PHP_FUNCTION(ldap_get_option)
31313137
{
31323138
LDAPControl **ctrls = NULL;
31333139

3134-
if (ldap_get_option(ld->link, option, &ctrls) || ctrls == NULL) {
3140+
if (ldap_get_option(ldap, option, &ctrls) || ctrls == NULL) {
31353141
if (ctrls) {
31363142
ldap_memfree(ctrls);
31373143
}
31383144
RETURN_FALSE;
31393145
}
3140-
_php_ldap_controls_to_array(ld->link, ctrls, retval, 1);
3146+
_php_ldap_controls_to_array(ldap, ctrls, retval, 1);
31413147
} break;
31423148
/* options not implemented
31433149
case LDAP_OPT_API_INFO:

ext/ldap/ldap.stub.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ function ldap_rename(LDAP\Connection $ldap, string $dn, string $new_rdn, string
740740
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 {}
741741

742742
/** @param array|string|int $value */
743-
function ldap_get_option(LDAP\Connection $ldap, int $option, &$value = null): bool {}
743+
function ldap_get_option(?LDAP\Connection $ldap, int $option, &$value = null): bool {}
744744

745745
/** @param array|string|int|bool $value */
746746
function ldap_set_option(?LDAP\Connection $ldap, int $option, $value): bool {}

ext/ldap/ldap_arginfo.h

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/ldap/tests/ldap_get_option_package_basic.phpt

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ ldap
77
--FILE--
88
<?php
99
require "connect.inc";
10+
11+
$result = ldap_get_option(NULL, LDAP_OPT_X_TLS_PACKAGE, $optionval);
12+
var_dump(in_array($optionval, ['GnuTLS', 'OpenSSL', 'MozNSS']));
13+
1014
$link = ldap_connect($uri);
1115

1216
$result = ldap_get_option($link, LDAP_OPT_X_TLS_PACKAGE, $optionval);
@@ -15,3 +19,4 @@ var_dump(in_array($optionval, ['GnuTLS', 'OpenSSL', 'MozNSS']));
1519
?>
1620
--EXPECT--
1721
bool(true)
22+
bool(true)

0 commit comments

Comments
 (0)