--- ldap.c-orig 2006-09-13 16:03:14.000000000 +0200 +++ ldap.c 2006-09-14 17:11:39.000000000 +0200 @@ -65,6 +65,10 @@ #include #endif +#ifdef LDAP_OPT_NETWORK_TIMEOUT +#include +#endif + typedef struct { LDAP *link; #if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC) @@ -282,6 +286,10 @@ REGISTER_LONG_CONSTANT("GSLC_SSL_TWOWAY_AUTH", GSLC_SSL_TWOWAY_AUTH, CONST_PERSISTENT | CONST_CS); #endif +#ifdef LDAP_OPT_NETWORK_TIMEOUT + REGISTER_LONG_CONSTANT("LDAP_OPT_NETWORK_TIMEOUT", LDAP_OPT_NETWORK_TIMEOUT, CONST_PERSISTENT | CONST_CS); +#endif + le_result = zend_register_list_destructors_ex(_free_ldap_result, NULL, "ldap result", module_number); le_link = zend_register_list_destructors_ex(_close_ldap_link, NULL, "ldap link", module_number); le_result_entry = zend_register_list_destructors_ex(_free_ldap_result_entry, NULL, "ldap result entry", module_number); @@ -1825,6 +1833,26 @@ RETURN_FALSE; } } break; +#ifdef LDAP_OPT_NETWORK_TIMEOUT + case LDAP_OPT_NETWORK_TIMEOUT : + { + struct timeval mytime; + int timems; + + convert_to_long_ex(newval); + + timems = Z_LVAL_PP(newval); + + if (timems < 250) { // Avoid ridiculous timeouts + timems = 250; + } + mytime.tv_sec = timems ? timems / 1000 : 0; + mytime.tv_usec = timems ? (timems % 1000 ) * 1000 : 0; + if (ldap_set_option(ldap, opt, &mytime)) { + RETURN_FALSE; + } + } break; +#endif /* options with string value */ case LDAP_OPT_ERROR_STRING: #ifdef LDAP_OPT_HOST_NAME