diff options
| -rw-r--r-- | ext/ldap/ldap.c | 385 | 
1 files changed, 329 insertions, 56 deletions
diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 66d2a33584..b5db5c97e7 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -82,16 +82,6 @@ typedef struct {  ZEND_DECLARE_MODULE_GLOBALS(ldap)  static PHP_GINIT_FUNCTION(ldap); -static -	ZEND_BEGIN_ARG_INFO(arg3to6of6_force_ref, 0) -		ZEND_ARG_PASS_INFO(0) -		ZEND_ARG_PASS_INFO(0) -		ZEND_ARG_PASS_INFO(1) -		ZEND_ARG_PASS_INFO(1) -		ZEND_ARG_PASS_INFO(1) -		ZEND_ARG_PASS_INFO(1) -	ZEND_END_ARG_INFO(); -  static int le_link, le_result, le_result_entry;  #ifdef COMPILE_DL_LDAP @@ -605,8 +595,9 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope)  	int i, errno;  	int myargcount = ZEND_NUM_ARGS(); -	if (myargcount < 3 || myargcount > 8 || zend_get_parameters_ex(myargcount, &link, &base_dn, &filter, &attrs, &attrsonly, &sizelimit, &timelimit, &deref) != SUCCESS) { -		WRONG_PARAM_COUNT; +	if (zend_parse_parameters(myargcount TSRMLS_CC, "ZZZ|ZZZZZ", &link, &base_dn, &filter, &attrs, &attrsonly,  +		&sizelimit, &timelimit, &deref) == FAILURE) { +		return;  	}  	/* Reverse -> fall through */ @@ -2215,6 +2206,288 @@ PHP_FUNCTION(ldap_8859_to_t61)  /* }}} */  #endif +/* {{{ arginfo */ +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_connect, 0, 0, 0) +	ZEND_ARG_INFO(0, hostname) +	ZEND_ARG_INFO(0, port) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_resource, 0, 0, 1) +	ZEND_ARG_INFO(0, link_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_bind, 0, 0, 1) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, bind_rdn) +	ZEND_ARG_INFO(0, bind_password) +ZEND_END_ARG_INFO() + +#ifdef HAVE_LDAP_SASL +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_sasl_bind, 0, 0, 1) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, binddn) +	ZEND_ARG_INFO(0, password) +	ZEND_ARG_INFO(0, sasl_mech) +	ZEND_ARG_INFO(0, sasl_realm) +	ZEND_ARG_INFO(0, sasl_authz_id) +	ZEND_ARG_INFO(0, props) +ZEND_END_ARG_INFO() +#endif + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_read, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, base_dn) +	ZEND_ARG_INFO(0, filter) +	ZEND_ARG_INFO(0, attributes) +	ZEND_ARG_INFO(0, attrsonly) +	ZEND_ARG_INFO(0, sizelimit) +	ZEND_ARG_INFO(0, timelimit) +	ZEND_ARG_INFO(0, deref) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_list, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, base_dn) +	ZEND_ARG_INFO(0, filter) +	ZEND_ARG_INFO(0, attributes) +	ZEND_ARG_INFO(0, attrsonly) +	ZEND_ARG_INFO(0, sizelimit) +	ZEND_ARG_INFO(0, timelimit) +	ZEND_ARG_INFO(0, deref) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_search, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, base_dn) +	ZEND_ARG_INFO(0, filter) +	ZEND_ARG_INFO(0, attributes) +	ZEND_ARG_INFO(0, attrsonly) +	ZEND_ARG_INFO(0, sizelimit) +	ZEND_ARG_INFO(0, timelimit) +	ZEND_ARG_INFO(0, deref) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_count_entries, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_first_entry, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_next_entry, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_get_entries, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_first_attribute, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_entry_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_next_attribute, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_entry_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_get_attributes, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_entry_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_get_values, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_entry_identifier) +	ZEND_ARG_INFO(0, attribute) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_get_values_len, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_entry_identifier) +	ZEND_ARG_INFO(0, attribute) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_get_dn, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, result_entry_identifier) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_explode_dn, 0, 0, 2) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, with_attrib) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_dn2ufn, 0, 0, 1) +	ZEND_ARG_INFO(0, dn) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_add, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, entry) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_delete, 0, 0, 2) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_modify, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, entry) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_mod_add, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, entry) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_mod_replace, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, entry) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_mod_del, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, entry) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_err2str, 0, 0, 1) +	ZEND_ARG_INFO(0, errno) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_compare, 0, 0, 4) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, attribute) +	ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_sort, 0, 0, 3) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, result) +	ZEND_ARG_INFO(0, sortfilter) +ZEND_END_ARG_INFO() + +#if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_rename, 0, 0, 5) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, dn) +	ZEND_ARG_INFO(0, newrdn) +	ZEND_ARG_INFO(0, newparent) +	ZEND_ARG_INFO(0, deleteoldrdn) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_get_option, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, option) +	ZEND_ARG_INFO(1, retval) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_set_option, 0, 0, 3) +	ZEND_ARG_INFO(0, link_identifier) +	ZEND_ARG_INFO(0, option) +	ZEND_ARG_INFO(1, newval) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_first_reference, 0, 0, 2) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, result) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_next_reference, 0, 0, 2) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, entry) +ZEND_END_ARG_INFO() + +#ifdef HAVE_LDAP_PARSE_REFERENCE +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_parse_reference, 0, 0, 3) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, entry) +	ZEND_ARG_INFO(1, referrals) +ZEND_END_ARG_INFO() +#endif + + +#ifdef HAVE_LDAP_PARSE_RESULT +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_parse_result, 0, 0, 3) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, result) +	ZEND_ARG_INFO(1, errcode) +	ZEND_ARG_INFO(1, matcheddn) +	ZEND_ARG_INFO(1, errmsg) +	ZEND_ARG_INFO(1, referrals) +ZEND_END_ARG_INFO() +#endif +#endif + +#if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC) +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_set_rebind_proc, 0, 0, 2) +	ZEND_ARG_INFO(0, link) +	ZEND_ARG_INFO(0, callback) +ZEND_END_ARG_INFO() +#endif + +#ifdef STR_TRANSLATION +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_t61_to_8859, 0, 0, 1) +	ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() + +static +ZEND_BEGIN_ARG_INFO_EX(arginfo_ldap_8859_to_t61, 0, 0, 1) +	ZEND_ARG_INFO(0, value) +ZEND_END_ARG_INFO() +#endif +/* }}} */ +	  /*  	This is just a small subset of the functionality provided by the LDAP library. All the   	operations are synchronous. Referrals are not handled automatically. @@ -2222,69 +2495,69 @@ PHP_FUNCTION(ldap_8859_to_t61)  /* {{{ ldap_functions[]   */  const zend_function_entry ldap_functions[] = { -	PHP_FE(ldap_connect,								NULL) -	PHP_FALIAS(ldap_close,		ldap_unbind,			NULL) -	PHP_FE(ldap_bind,									NULL) +	PHP_FE(ldap_connect,								arginfo_ldap_connect) +	PHP_FALIAS(ldap_close,		ldap_unbind,			arginfo_ldap_resource) +	PHP_FE(ldap_bind,									arginfo_ldap_bind)  #ifdef HAVE_LDAP_SASL -	PHP_FE(ldap_sasl_bind,								NULL) -#endif -	PHP_FE(ldap_unbind,									NULL) -	PHP_FE(ldap_read,									NULL) -	PHP_FE(ldap_list,									NULL) -	PHP_FE(ldap_search,									NULL) -	PHP_FE(ldap_free_result,							NULL) -	PHP_FE(ldap_count_entries,							NULL) -	PHP_FE(ldap_first_entry,							NULL) -	PHP_FE(ldap_next_entry,								NULL) -	PHP_FE(ldap_get_entries,							NULL) -	PHP_FE(ldap_first_attribute,	third_arg_force_ref) -	PHP_FE(ldap_next_attribute,		third_arg_force_ref) -	PHP_FE(ldap_get_attributes,							NULL) -	PHP_FALIAS(ldap_get_values,	ldap_get_values_len,				NULL) -	PHP_FE(ldap_get_values_len,							NULL) -	PHP_FE(ldap_get_dn,									NULL) -	PHP_FE(ldap_explode_dn,								NULL) -	PHP_FE(ldap_dn2ufn,									NULL) -	PHP_FE(ldap_add,									NULL) -	PHP_FE(ldap_delete,									NULL) -	PHP_FALIAS(ldap_modify,		ldap_mod_replace,		NULL) +	PHP_FE(ldap_sasl_bind,								arginfo_ldap_sasl_bind) +#endif +	PHP_FE(ldap_unbind,									arginfo_ldap_resource) +	PHP_FE(ldap_read,									arginfo_ldap_read) +	PHP_FE(ldap_list,									arginfo_ldap_list) +	PHP_FE(ldap_search,									arginfo_ldap_search) +	PHP_FE(ldap_free_result,							arginfo_ldap_resource) +	PHP_FE(ldap_count_entries,							arginfo_ldap_count_entries) +	PHP_FE(ldap_first_entry,							arginfo_ldap_first_entry) +	PHP_FE(ldap_next_entry,								arginfo_ldap_next_entry) +	PHP_FE(ldap_get_entries,							arginfo_ldap_get_entries) +	PHP_FE(ldap_first_attribute,						arginfo_ldap_first_attribute) +	PHP_FE(ldap_next_attribute,							arginfo_ldap_next_attribute) +	PHP_FE(ldap_get_attributes,							arginfo_ldap_get_attributes) +	PHP_FALIAS(ldap_get_values,	ldap_get_values_len,	arginfo_ldap_get_values) +	PHP_FE(ldap_get_values_len,							arginfo_ldap_get_values_len) +	PHP_FE(ldap_get_dn,									arginfo_ldap_get_dn) +	PHP_FE(ldap_explode_dn,								arginfo_ldap_explode_dn) +	PHP_FE(ldap_dn2ufn,									arginfo_ldap_dn2ufn) +	PHP_FE(ldap_add,									arginfo_ldap_add) +	PHP_FE(ldap_delete,									arginfo_ldap_delete) +	PHP_FALIAS(ldap_modify,		ldap_mod_replace,		arginfo_ldap_modify)  /* additional functions for attribute based modifications, Gerrit Thomson */ -	PHP_FE(ldap_mod_add,								NULL) -	PHP_FE(ldap_mod_replace,							NULL) -	PHP_FE(ldap_mod_del,								NULL) +	PHP_FE(ldap_mod_add,								arginfo_ldap_mod_add) +	PHP_FE(ldap_mod_replace,							arginfo_ldap_mod_replace) +	PHP_FE(ldap_mod_del,								arginfo_ldap_mod_del)  /* end gjt mod */ -	PHP_FE(ldap_errno,									NULL) -	PHP_FE(ldap_err2str,								NULL) -	PHP_FE(ldap_error,									NULL) -	PHP_FE(ldap_compare,								NULL) -	PHP_FE(ldap_sort,									NULL) +	PHP_FE(ldap_errno,									arginfo_ldap_resource) +	PHP_FE(ldap_err2str,								arginfo_ldap_err2str) +	PHP_FE(ldap_error,									arginfo_ldap_resource) +	PHP_FE(ldap_compare,								arginfo_ldap_compare) +	PHP_FE(ldap_sort,									arginfo_ldap_sort)  #if (LDAP_API_VERSION > 2000) || HAVE_NSLDAP || HAVE_ORALDAP_10 -	PHP_FE(ldap_rename,									NULL) -	PHP_FE(ldap_get_option,			third_arg_force_ref) -	PHP_FE(ldap_set_option,								NULL) -	PHP_FE(ldap_first_reference,						NULL) -	PHP_FE(ldap_next_reference,							NULL) +	PHP_FE(ldap_rename,									arginfo_ldap_rename) +	PHP_FE(ldap_get_option,								arginfo_ldap_get_option) +	PHP_FE(ldap_set_option,								arginfo_ldap_set_option) +	PHP_FE(ldap_first_reference,						arginfo_ldap_first_reference) +	PHP_FE(ldap_next_reference,							arginfo_ldap_next_reference)  #ifdef HAVE_LDAP_PARSE_REFERENCE -	PHP_FE(ldap_parse_reference,	third_arg_force_ref) +	PHP_FE(ldap_parse_reference,						arginfo_ldap_parse_reference)  #endif  #ifdef HAVE_LDAP_PARSE_RESULT -	PHP_FE(ldap_parse_result,			arg3to6of6_force_ref) +	PHP_FE(ldap_parse_result,							arginfo_ldap_parse_result)  #endif  #ifdef HAVE_LDAP_START_TLS_S -	PHP_FE(ldap_start_tls,								NULL) +	PHP_FE(ldap_start_tls,								arginfo_ldap_resource)  #endif  #endif  #if defined(LDAP_API_FEATURE_X_OPENLDAP) && defined(HAVE_3ARG_SETREBINDPROC) -	PHP_FE(ldap_set_rebind_proc,						NULL) +	PHP_FE(ldap_set_rebind_proc,						arginfo_ldap_set_rebind_proc)  #endif  #ifdef STR_TRANSLATION -	PHP_FE(ldap_t61_to_8859,							NULL) -	PHP_FE(ldap_8859_to_t61,							NULL) +	PHP_FE(ldap_t61_to_8859,							arginfo_ldap_t61_to_8859) +	PHP_FE(ldap_8859_to_t61,							arginfo_ldap_8859_to_t61)  #endif  	{NULL, NULL, NULL}  | 
