diff options
author | Côme Bernigaud <mcmic@php.net> | 2015-09-09 18:02:10 +0200 |
---|---|---|
committer | Côme Bernigaud <mcmic@php.net> | 2015-09-09 18:02:10 +0200 |
commit | 059dd18c37d7814da4d496be0c9ab75121536c4b (patch) | |
tree | 4bdf55d96f0daa2a2ded9c22b9df124978c10709 | |
parent | 43f6099ce41c0f022e5fae4876927592568c94ed (diff) | |
download | php-git-059dd18c37d7814da4d496be0c9ab75121536c4b.tar.gz |
Added support of LDAP_OPT_TIMEOUT, fixes #69574
-rw-r--r-- | ext/ldap/ldap.c | 35 | ||||
-rw-r--r-- | ext/ldap/tests/ldap_get_option_variation.phpt | 5 |
2 files changed, 40 insertions, 0 deletions
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index bc7601fcc4..ab663b156b 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -191,6 +191,9 @@ PHP_MINIT_FUNCTION(ldap) #elif defined (LDAP_X_OPT_CONNECT_TIMEOUT) REGISTER_LONG_CONSTANT("LDAP_OPT_NETWORK_TIMEOUT", LDAP_X_OPT_CONNECT_TIMEOUT, CONST_PERSISTENT | CONST_CS); #endif +#ifdef LDAP_OPT_TIMEOUT + REGISTER_LONG_CONSTANT("LDAP_OPT_TIMEOUT", LDAP_OPT_TIMEOUT, CONST_PERSISTENT | CONST_CS); +#endif REGISTER_LONG_CONSTANT("LDAP_OPT_PROTOCOL_VERSION", LDAP_OPT_PROTOCOL_VERSION, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("LDAP_OPT_ERROR_NUMBER", LDAP_OPT_ERROR_NUMBER, CONST_PERSISTENT | CONST_CS); REGISTER_LONG_CONSTANT("LDAP_OPT_REFERRALS", LDAP_OPT_REFERRALS, CONST_PERSISTENT | CONST_CS); @@ -2067,6 +2070,25 @@ PHP_FUNCTION(ldap_get_option) ZVAL_LONG(retval, (timeout / 1000)); } break; #endif +#ifdef LDAP_OPT_TIMEOUT + case LDAP_OPT_TIMEOUT: + { + struct timeval *timeout = NULL; + + if (ldap_get_option(ld->link, LDAP_OPT_TIMEOUT, (void *) &timeout)) { + if (timeout) { + ldap_memfree(timeout); + } + RETURN_FALSE; + } + if (!timeout) { + RETURN_FALSE; + } + zval_dtor(retval); + ZVAL_LONG(retval, timeout->tv_sec); + ldap_memfree(timeout); + } break; +#endif /* options with string value */ case LDAP_OPT_ERROR_STRING: #ifdef LDAP_OPT_HOST_NAME @@ -2170,6 +2192,19 @@ PHP_FUNCTION(ldap_set_option) } } break; #endif +#ifdef LDAP_OPT_TIMEOUT + case LDAP_OPT_TIMEOUT: + { + struct timeval timeout; + + convert_to_long_ex(newval); + timeout.tv_sec = Z_LVAL_PP(newval); + timeout.tv_usec = 0; + if (ldap_set_option(ldap, LDAP_OPT_TIMEOUT, (void *) &timeout)) { + RETURN_FALSE; + } + } break; +#endif /* options with string value */ case LDAP_OPT_ERROR_STRING: #ifdef LDAP_OPT_HOST_NAME diff --git a/ext/ldap/tests/ldap_get_option_variation.phpt b/ext/ldap/tests/ldap_get_option_variation.phpt index da71d89036..f83c505571 100644 --- a/ext/ldap/tests/ldap_get_option_variation.phpt +++ b/ext/ldap/tests/ldap_get_option_variation.phpt @@ -21,6 +21,7 @@ ldap_set_option($link, LDAP_OPT_DEREF, LDAP_DEREF_NEVER); ldap_set_option($link, LDAP_OPT_SIZELIMIT, 123); ldap_set_option($link, LDAP_OPT_TIMELIMIT, 33); ldap_set_option($link, LDAP_OPT_NETWORK_TIMEOUT, 44); +ldap_set_option($link, LDAP_OPT_TIMEOUT, 55); ldap_set_option($link, LDAP_OPT_REFERRALS, false); ldap_set_option($link, LDAP_OPT_SERVER_CONTROLS, $controls); ldap_set_option($link, LDAP_OPT_CLIENT_CONTROLS, $controls); @@ -35,6 +36,8 @@ var_dump( $option, ldap_get_option($link, LDAP_OPT_NETWORK_TIMEOUT, $option), $option, + ldap_get_option($link, LDAP_OPT_TIMEOUT, $option), + $option, ldap_get_option($link, LDAP_OPT_REFERRALS, $option), $option, ldap_get_option($link, LDAP_OPT_RESTART, $option), @@ -56,6 +59,8 @@ int(33) bool(true) int(44) bool(true) +int(55) +bool(true) int(0) bool(true) int(0) |