From 059dd18c37d7814da4d496be0c9ab75121536c4b Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=B4me=20Bernigaud?= Date: Wed, 9 Sep 2015 18:02:10 +0200 Subject: [PATCH] Added support of LDAP_OPT_TIMEOUT, fixes #69574 --- ext/ldap/ldap.c | 35 +++++++++++++++++++ ext/ldap/tests/ldap_get_option_variation.phpt | 5 +++ 2 files changed, 40 insertions(+) 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 @@ -190,6 +190,9 @@ PHP_MINIT_FUNCTION(ldap) REGISTER_LONG_CONSTANT("LDAP_OPT_NETWORK_TIMEOUT", LDAP_OPT_NETWORK_TIMEOUT, CONST_PERSISTENT | CONST_CS); #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); @@ -2066,6 +2069,25 @@ PHP_FUNCTION(ldap_get_option) zval_dtor(retval); 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: @@ -2169,6 +2191,19 @@ PHP_FUNCTION(ldap_set_option) RETURN_FALSE; } } 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: 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) -- 2.40.0