]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/getvalues.c
Added LDAP_LOG messages
[openldap] / libraries / libldap / getvalues.c
index f593e045be148fd71be9e1fac19e1f775a41a455..954397e9d1ada3c0440f3675b40ccbb43e0d13a0 100644 (file)
@@ -1,5 +1,6 @@
+/* $OpenLDAP$ */
 /*
- * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 /*  Portions
@@ -12,7 +13,8 @@
 #include "portable.h"
 
 #include <stdio.h>
-#include <stdlib.h>
+
+#include <ac/stdlib.h>
 
 #include <ac/ctype.h>
 #include <ac/socket.h>
@@ -25,18 +27,21 @@ char **
 ldap_get_values( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 {
        BerElement      ber;
-       char            attr[LDAP_MAX_ATTR_LEN];
+       char            *attr;
        int             found = 0;
-       long            len;
        char            **vals;
 
+       assert( ld != NULL );
+       assert( LDAP_VALID( ld ) );
+       assert( entry != NULL );
+       assert( target != NULL );
+
        Debug( LDAP_DEBUG_TRACE, "ldap_get_values\n", 0, 0, 0 );
 
        ber = *entry->lm_ber;
 
        /* skip sequence, dn, sequence of, and snag the first attr */
-       len = sizeof(attr);
-       if ( ber_scanf( &ber, "{x{{s", attr, &len ) == LBER_ERROR ) {
+       if ( ber_scanf( &ber, "{x{{a" /*}}}*/, &attr ) == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
                return( NULL );
        }
@@ -46,16 +51,22 @@ ldap_get_values( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 
        /* break out on success, return out on error */
        while ( ! found ) {
-               len = sizeof(attr);
-               if ( ber_scanf( &ber, "x}{s", attr, &len ) == LBER_ERROR ) {
+               LDAP_FREE(attr);
+               attr = NULL;
+
+               if ( ber_scanf( &ber, /*{*/ "x}{a" /*}*/, &attr ) == LBER_ERROR ) {
                        ld->ld_errno = LDAP_DECODING_ERROR;
                        return( NULL );
                }
 
                if ( strcasecmp( target, attr ) == 0 )
                        break;
+
        }
 
+       LDAP_FREE(attr);
+       attr = NULL;
+
        /* 
         * if we get this far, we've found the attribute and are sitting
         * just before the set of values.
@@ -73,18 +84,21 @@ struct berval **
 ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 {
        BerElement      ber;
-       char            attr[LDAP_MAX_ATTR_LEN];
+       char            *attr;
        int             found = 0;
-       long            len;
        struct berval   **vals;
 
+       assert( ld != NULL );
+       assert( LDAP_VALID( ld ) );
+       assert( entry != NULL );
+       assert( target != NULL );
+
        Debug( LDAP_DEBUG_TRACE, "ldap_get_values_len\n", 0, 0, 0 );
 
        ber = *entry->lm_ber;
 
        /* skip sequence, dn, sequence of, and snag the first attr */
-       len = sizeof(attr);
-       if ( ber_scanf( &ber, "{x{{s", attr, &len ) == LBER_ERROR ) {
+       if ( ber_scanf( &ber, "{x{{a" /* }}} */, &attr ) == LBER_ERROR ) {
                ld->ld_errno = LDAP_DECODING_ERROR;
                return( NULL );
        }
@@ -94,8 +108,10 @@ ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
 
        /* break out on success, return out on error */
        while ( ! found ) {
-               len = sizeof(attr);
-               if ( ber_scanf( &ber, "x}{s", attr, &len ) == LBER_ERROR ) {
+               LDAP_FREE( attr );
+               attr = NULL;
+
+               if ( ber_scanf( &ber, /*{*/ "x}{a" /*}*/, &attr ) == LBER_ERROR ) {
                        ld->ld_errno = LDAP_DECODING_ERROR;
                        return( NULL );
                }
@@ -104,6 +120,9 @@ ldap_get_values_len( LDAP *ld, LDAPMessage *entry, LDAP_CONST char *target )
                        break;
        }
 
+       LDAP_FREE( attr );
+       attr = NULL;
+
        /* 
         * if we get this far, we've found the attribute and are sitting
         * just before the set of values.
@@ -140,25 +159,11 @@ ldap_count_values_len( struct berval **vals )
 void
 ldap_value_free( char **vals )
 {
-       int     i;
-
-       if ( vals == NULL )
-               return;
-       for ( i = 0; vals[i] != NULL; i++ )
-               free( vals[i] );
-       free( (char *) vals );
+       LDAP_VFREE( vals );
 }
 
 void
 ldap_value_free_len( struct berval **vals )
 {
-       int     i;
-
-       if ( vals == NULL )
-               return;
-       for ( i = 0; vals[i] != NULL; i++ ) {
-               free( vals[i]->bv_val );
-               free( vals[i] );
-       }
-       free( (char *) vals );
+       ber_bvecfree( vals );
 }