]> granicus.if.org Git - php/commitdiff
Added support of LDAP_OPT_TIMEOUT, fixes #69574
authorCôme Bernigaud <mcmic@php.net>
Wed, 9 Sep 2015 16:02:10 +0000 (18:02 +0200)
committerCôme Bernigaud <mcmic@php.net>
Wed, 9 Sep 2015 16:02:10 +0000 (18:02 +0200)
ext/ldap/ldap.c
ext/ldap/tests/ldap_get_option_variation.phpt

index bc7601fcc413eacb47de9e29d646d02576ec6cbd..ab663b156be320c3bba8a7267187105adc47361a 100644 (file)
@@ -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:
index da71d89036ff1d7284a2c544f7ccd815785ae020..f83c505571ed53e5d3f39714af429a620fc8f57b 100644 (file)
@@ -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)