Skip to content

Commit 059dd18

Browse files
author
Côme Bernigaud
committed
Added support of LDAP_OPT_TIMEOUT, fixes #69574
1 parent 43f6099 commit 059dd18

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

ext/ldap/ldap.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ PHP_MINIT_FUNCTION(ldap)
190190
REGISTER_LONG_CONSTANT("LDAP_OPT_NETWORK_TIMEOUT", LDAP_OPT_NETWORK_TIMEOUT, CONST_PERSISTENT | CONST_CS);
191191
#elif defined (LDAP_X_OPT_CONNECT_TIMEOUT)
192192
REGISTER_LONG_CONSTANT("LDAP_OPT_NETWORK_TIMEOUT", LDAP_X_OPT_CONNECT_TIMEOUT, CONST_PERSISTENT | CONST_CS);
193+
#endif
194+
#ifdef LDAP_OPT_TIMEOUT
195+
REGISTER_LONG_CONSTANT("LDAP_OPT_TIMEOUT", LDAP_OPT_TIMEOUT, CONST_PERSISTENT | CONST_CS);
193196
#endif
194197
REGISTER_LONG_CONSTANT("LDAP_OPT_PROTOCOL_VERSION", LDAP_OPT_PROTOCOL_VERSION, CONST_PERSISTENT | CONST_CS);
195198
REGISTER_LONG_CONSTANT("LDAP_OPT_ERROR_NUMBER", LDAP_OPT_ERROR_NUMBER, CONST_PERSISTENT | CONST_CS);
@@ -2066,6 +2069,25 @@ PHP_FUNCTION(ldap_get_option)
20662069
zval_dtor(retval);
20672070
ZVAL_LONG(retval, (timeout / 1000));
20682071
} break;
2072+
#endif
2073+
#ifdef LDAP_OPT_TIMEOUT
2074+
case LDAP_OPT_TIMEOUT:
2075+
{
2076+
struct timeval *timeout = NULL;
2077+
2078+
if (ldap_get_option(ld->link, LDAP_OPT_TIMEOUT, (void *) &timeout)) {
2079+
if (timeout) {
2080+
ldap_memfree(timeout);
2081+
}
2082+
RETURN_FALSE;
2083+
}
2084+
if (!timeout) {
2085+
RETURN_FALSE;
2086+
}
2087+
zval_dtor(retval);
2088+
ZVAL_LONG(retval, timeout->tv_sec);
2089+
ldap_memfree(timeout);
2090+
} break;
20692091
#endif
20702092
/* options with string value */
20712093
case LDAP_OPT_ERROR_STRING:
@@ -2169,6 +2191,19 @@ PHP_FUNCTION(ldap_set_option)
21692191
RETURN_FALSE;
21702192
}
21712193
} break;
2194+
#endif
2195+
#ifdef LDAP_OPT_TIMEOUT
2196+
case LDAP_OPT_TIMEOUT:
2197+
{
2198+
struct timeval timeout;
2199+
2200+
convert_to_long_ex(newval);
2201+
timeout.tv_sec = Z_LVAL_PP(newval);
2202+
timeout.tv_usec = 0;
2203+
if (ldap_set_option(ldap, LDAP_OPT_TIMEOUT, (void *) &timeout)) {
2204+
RETURN_FALSE;
2205+
}
2206+
} break;
21722207
#endif
21732208
/* options with string value */
21742209
case LDAP_OPT_ERROR_STRING:

ext/ldap/tests/ldap_get_option_variation.phpt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ ldap_set_option($link, LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
2121
ldap_set_option($link, LDAP_OPT_SIZELIMIT, 123);
2222
ldap_set_option($link, LDAP_OPT_TIMELIMIT, 33);
2323
ldap_set_option($link, LDAP_OPT_NETWORK_TIMEOUT, 44);
24+
ldap_set_option($link, LDAP_OPT_TIMEOUT, 55);
2425
ldap_set_option($link, LDAP_OPT_REFERRALS, false);
2526
ldap_set_option($link, LDAP_OPT_SERVER_CONTROLS, $controls);
2627
ldap_set_option($link, LDAP_OPT_CLIENT_CONTROLS, $controls);
@@ -35,6 +36,8 @@ var_dump(
3536
$option,
3637
ldap_get_option($link, LDAP_OPT_NETWORK_TIMEOUT, $option),
3738
$option,
39+
ldap_get_option($link, LDAP_OPT_TIMEOUT, $option),
40+
$option,
3841
ldap_get_option($link, LDAP_OPT_REFERRALS, $option),
3942
$option,
4043
ldap_get_option($link, LDAP_OPT_RESTART, $option),
@@ -56,6 +59,8 @@ int(33)
5659
bool(true)
5760
int(44)
5861
bool(true)
62+
int(55)
63+
bool(true)
5964
int(0)
6065
bool(true)
6166
int(0)

0 commit comments

Comments
 (0)