X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fattr.c;h=8a5f5358cb2f8d263937370fe0bdf455da94dbef;hb=403f4479bc9f9a864122d4aeecf7284408918302;hp=459ce3cccc6ecefa9b3869086819ea288a8826f5;hpb=9ec2849a6da0a75ef55fbff450609f89ba43e799;p=openldap diff --git a/servers/slapd/attr.c b/servers/slapd/attr.c index 459ce3cccc..8a5f5358cb 100644 --- a/servers/slapd/attr.c +++ b/servers/slapd/attr.c @@ -1,3 +1,8 @@ +/* $OpenLDAP$ */ +/* + * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * COPYING RESTRICTIONS APPLY, see COPYRIGHT file + */ /* attr.c - routines for dealing with attributes */ #include "portable.h" @@ -18,7 +23,7 @@ #include #endif -#include "ldap_defaults.h" +#include "ldap_pvt.h" #include "slap.h" #ifdef LDAP_DEBUG @@ -33,6 +38,71 @@ attr_free( Attribute *a ) free( a ); } +void +attrs_free( Attribute *a ) +{ + Attribute *next; + + for( ; a != NULL ; a = next ) { + next = a->a_next; + attr_free( a ); + } +} + +Attribute *attr_dup( Attribute *a ) +{ + Attribute *tmp; + + if( a == NULL) return NULL; + + tmp = ch_malloc( sizeof(Attribute) ); + + if( a->a_vals != NULL ) { + int i; + + for( i=0; a->a_vals[i] != NULL; i++ ) { + /* EMPTY */ ; + } + + tmp->a_vals = ch_malloc((i+1) * sizeof(struct berval*)); + + for( i=0; a->a_vals[i] != NULL; i++ ) { + tmp->a_vals[i] = ber_bvdup( a->a_vals[i] ); + + if( tmp->a_vals[i] == NULL ) break; + } + + tmp->a_vals[i] = NULL; + + } else { + tmp->a_vals = NULL; + } + + tmp->a_type = ch_strdup( a->a_type ); + tmp->a_syntax = a->a_syntax; + tmp->a_next = NULL; + + return tmp; +} + +Attribute *attrs_dup( Attribute *a ) +{ + Attribute *tmp, **next; + + if( a == NULL ) return NULL; + + tmp = NULL; + next = &tmp; + + for( ; a != NULL ; a = a->a_next ) { + *next = attr_dup( a ); + next = &((*next)->a_next); + } + *next = NULL; + + return tmp; +} + /* * attr_normalize - normalize an attribute name (make it all lowercase) */ @@ -40,15 +110,9 @@ attr_free( Attribute *a ) char * attr_normalize( char *s ) { - char *save; - assert( s != NULL ); - for ( save = s; *s; s++ ) { - *s = TOLOWER( (unsigned char) *s ); - } - - return( save ); + return( ldap_pvt_str2lower( s ) ); } /* @@ -130,7 +194,7 @@ attr_merge( Attribute * attr_find( Attribute *a, - char *type + const char *type ) { for ( ; a != NULL; a = a->a_next ) { @@ -152,7 +216,7 @@ attr_find( int attr_delete( Attribute **attrs, - char *type + const char *type ) { Attribute **a; @@ -200,7 +264,7 @@ attr_syntax( char *type ) void attr_syntax_config( - char *fname, + const char *fname, int lineno, int argc, char **argv @@ -267,7 +331,7 @@ attr_syntax_config( if ( code ) { fprintf( stderr, "%s: line %d: %s %s\n", fname, lineno, scherr2str(code), err); - exit( 1 ); + exit( EXIT_FAILURE ); } ldap_memfree(at); } @@ -571,6 +635,7 @@ at_add( if ( sat->sat_sup ) { if ( !sat->sat_syntax ) { sat->sat_syntax = sat->sat_sup->sat_syntax; + sat->sat_syntax_len = sat->sat_sup->sat_syntax_len; } if ( !sat->sat_equality ) { sat->sat_equality = sat->sat_sup->sat_equality; @@ -631,8 +696,8 @@ at_schema_info( Entry *e ) val.bv_val = ldap_attributetype2str( &at->sat_atype ); if ( val.bv_val ) { val.bv_len = strlen( val.bv_val ); - Debug( LDAP_DEBUG_TRACE, "Merging at [%d] %s\n", - val.bv_len, val.bv_val, 0 ); + Debug( LDAP_DEBUG_TRACE, "Merging at [%ld] %s\n", + (long) val.bv_len, val.bv_val, 0 ); attr_merge( e, "attributeTypes", vals ); ldap_memfree( val.bv_val ); } else {