summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCôme Bernigaud <mcmic@php.net>2015-09-09 18:02:10 +0200
committerCôme Bernigaud <mcmic@php.net>2015-09-09 18:02:10 +0200
commit059dd18c37d7814da4d496be0c9ab75121536c4b (patch)
tree4bdf55d96f0daa2a2ded9c22b9df124978c10709
parent43f6099ce41c0f022e5fae4876927592568c94ed (diff)
downloadphp-git-059dd18c37d7814da4d496be0c9ab75121536c4b.tar.gz
Added support of LDAP_OPT_TIMEOUT, fixes #69574
-rw-r--r--ext/ldap/ldap.c35
-rw-r--r--ext/ldap/tests/ldap_get_option_variation.phpt5
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)