/* {{{ Set a callback function to do re-binds on referral chasing. */
PHP_FUNCTION(ldap_set_rebind_proc)
{
- zval *link, *callback;
+ zval *link;
+ zend_fcall_info fci;
+ zend_fcall_info_cache fcc;
ldap_linkdata *ld;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "rz", &link, &callback) != SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "rf!", &link, &fci, &fcc) == FAILURE) {
RETURN_THROWS();
}
RETURN_THROWS();
}
- if (Z_TYPE_P(callback) == IS_NULL) {
+ if (!ZEND_FCI_INITIALIZED(fci)) {
/* unregister rebind procedure */
if (!Z_ISUNDEF(ld->rebindproc)) {
zval_ptr_dtor(&ld->rebindproc);
RETURN_TRUE;
}
- /* callable? */
- if (!zend_is_callable(callback, 0, NULL)) {
- zend_argument_type_error(2, "must be a valid callback or null, %s given", zend_zval_type_name(callback));
- RETURN_THROWS();
- }
-
/* register rebind procedure */
if (Z_ISUNDEF(ld->rebindproc)) {
ldap_set_rebind_proc(ld->link, _ldap_rebind_proc, (void *) link);
zval_ptr_dtor(&ld->rebindproc);
}
- ZVAL_COPY(&ld->rebindproc, callback);
+ ZVAL_COPY(&ld->rebindproc, &fci.function_name);
RETURN_TRUE;
}
/* }}} */
echo $error->getMessage(), "\n";
}
?>
---EXPECTF--
-ldap_set_rebind_proc(): Argument #2 ($callback) must be a valid callback or null, string given
+--EXPECT--
+ldap_set_rebind_proc(): Argument #2 ($callback) must be a valid callback or null, function "rebind_proc_inexistent" not found or invalid function name