cardoe Thu Mar 22 21:50:34 2007 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/ldap ldap.c
Log:
Replaced all instances of ldap_get_values() with ldap_get_values_len(), which
returns back the length of the data so on non-NULL terminated data we don't
crash in a strlen(). Removed the PHP function ldap_get_values() since it's the
same thing as ldap_get_values_len() now and made it alias
ldap_get_values_len(). This should fix some random PHP<->LDAP crashes
http://cvs.php.net/viewvc.cgi/php-src/ext/ldap/ldap.c?r1=1.161.2.3.2.3&r2=1.161.2.3.2.4&diff_format=u
Index: php-src/ext/ldap/ldap.c
diff -u php-src/ext/ldap/ldap.c:1.161.2.3.2.3
php-src/ext/ldap/ldap.c:1.161.2.3.2.4
--- php-src/ext/ldap/ldap.c:1.161.2.3.2.3 Fri Jan 5 15:06:55 2007
+++ php-src/ext/ldap/ldap.c Thu Mar 22 21:50:34 2007
@@ -18,11 +18,12 @@
| Gerrit Thomson <[EMAIL PROTECTED]> |
| Jani Taskinen <[EMAIL PROTECTED]> |
| Stig Venaas <[EMAIL PROTECTED]> |
+ | Doug Goldstein <[EMAIL PROTECTED]> |
| PHP 4.0 updates: Zeev Suraski <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: ldap.c,v 1.161.2.3.2.3 2007/01/05 15:06:55 iliaa Exp $ */
+/* $Id: ldap.c,v 1.161.2.3.2.4 2007/03/22 21:50:34 cardoe Exp $ */
#define IS_EXT_MODULE
#ifdef HAVE_CONFIG_H
@@ -117,7 +118,7 @@
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_FE(ldap_get_values,
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)
@@ -317,7 +318,7 @@
php_info_print_table_start();
php_info_print_table_row(2, "LDAP Support", "enabled");
- php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.3
2007/01/05 15:06:55 iliaa Exp $");
+ php_info_print_table_row(2, "RCS Version", "$Id: ldap.c,v 1.161.2.3.2.4
2007/03/22 21:50:34 cardoe Exp $");
if (LDAPG(max_links) == -1) {
snprintf(tmp, 31, "%ld/unlimited", LDAPG(num_links));
@@ -1036,7 +1037,7 @@
BerElement *ber;
char *attribute;
size_t attr_len;
- char **ldap_value;
+ struct berval **ldap_value;
char *dn;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &link, &result)
== FAILURE) {
@@ -1067,16 +1068,16 @@
attribute = ldap_first_attribute(ldap, ldap_result_entry, &ber);
while (attribute != NULL) {
- ldap_value = ldap_get_values(ldap, ldap_result_entry,
attribute);
- num_values = ldap_count_values(ldap_value);
+ ldap_value = ldap_get_values_len(ldap,
ldap_result_entry, attribute);
+ num_values = ldap_count_values_len(ldap_value);
MAKE_STD_ZVAL(tmp2);
array_init(tmp2);
add_assoc_long(tmp2, "count", num_values);
for (i = 0; i < num_values; i++) {
- add_index_string(tmp2, i, ldap_value[i], 1);
+ add_index_stringl(tmp2, i,
ldap_value[i]->bv_val, ldap_value[i]->bv_len, 1);
}
- ldap_value_free(ldap_value);
+ ldap_value_free_len(ldap_value);
attr_len = strlen(attribute);
zend_hash_update(Z_ARRVAL_P(tmp1),
php_strtolower(attribute, attr_len), attr_len+1, (void *) &tmp2, sizeof(zval
*), NULL);
@@ -1183,7 +1184,7 @@
ldap_linkdata *ld;
ldap_resultentry *resultentry;
char *attribute;
- char **ldap_value;
+ struct berval **ldap_value;
int i, num_values, num_attrib;
BerElement *ber;
@@ -1199,16 +1200,16 @@
attribute = ldap_first_attribute(ld->link, resultentry->data, &ber);
while (attribute != NULL) {
- ldap_value = ldap_get_values(ld->link, resultentry->data,
attribute);
- num_values = ldap_count_values(ldap_value);
+ ldap_value = ldap_get_values_len(ld->link, resultentry->data,
attribute);
+ num_values = ldap_count_values_len(ldap_value);
MAKE_STD_ZVAL(tmp);
array_init(tmp);
add_assoc_long(tmp, "count", num_values);
for (i = 0; i < num_values; i++) {
- add_index_string(tmp, i, ldap_value[i], 1);
+ add_index_stringl(tmp, i, ldap_value[i]->bv_val,
ldap_value[i]->bv_len, 1);
}
- ldap_value_free(ldap_value);
+ ldap_value_free_len(ldap_value);
zend_hash_update(Z_ARRVAL_P(return_value), attribute,
strlen(attribute)+1, (void *) &tmp, sizeof(zval *), NULL);
add_index_string(return_value, num_attrib, attribute, 1);
@@ -1229,46 +1230,6 @@
}
/* }}} */
-/* {{{ proto array ldap_get_values(resource link, resource result_entry,
string attribute)
- Get all values from a result entry */
-PHP_FUNCTION(ldap_get_values)
-{
- zval **link, **result_entry, **attr;
- ldap_linkdata *ld;
- ldap_resultentry *resultentry;
- char *attribute;
- char **ldap_value;
- int i, num_values;
-
- if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &link,
&result_entry, &attr) == FAILURE) {
- WRONG_PARAM_COUNT;
- }
-
- ZEND_FETCH_RESOURCE(ld, ldap_linkdata *, link, -1, "ldap link",
le_link);
- ZEND_FETCH_RESOURCE(resultentry, ldap_resultentry *, result_entry, -1,
"ldap result entry", le_result_entry);
-
- convert_to_string_ex(attr);
- attribute = Z_STRVAL_PP(attr);
-
- if ((ldap_value = ldap_get_values(ld->link, resultentry->data,
attribute)) == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot get the
value(s) of attribute %s", ldap_err2string(_get_lderrno(ld->link)));
- RETURN_FALSE;
- }
-
- num_values = ldap_count_values(ldap_value);
-
- array_init(return_value);
-
- for (i = 0; i<num_values; i++) {
- add_next_index_string(return_value, ldap_value[i], 1);
- }
-
- add_assoc_long(return_value, "count", num_values);
- ldap_value_free(ldap_value);
-
-}
-/* }}} */
-
/* {{{ proto array ldap_get_values_len(resource link, resource result_entry,
string attribute)
Get all values with lengths from a result entry */
PHP_FUNCTION(ldap_get_values_len)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php