From: Pierangelo Masarati Date: Sat, 12 Jan 2002 16:04:15 +0000 (+0000) Subject: cleanup and better dn handling X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~173 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=39a652d2deb04d92e73217105f4a0ee98164f50a;p=openldap cleanup and better dn handling --- diff --git a/servers/slapd/back-ldap/config.c b/servers/slapd/back-ldap/config.c index 7c3dc0bfd7..30d00755c6 100644 --- a/servers/slapd/back-ldap/config.c +++ b/servers/slapd/back-ldap/config.c @@ -146,7 +146,7 @@ ldap_back_db_config( return( 1 ); } tmp_be = select_backend( &ndn, 0, 0 ); - free( ndn.bv_val ); + ch_free( ndn.bv_val ); if ( tmp_be != NULL && tmp_be != be ) { fprintf( stderr, "%s: line %d: suffix already in use" " by another backend in" @@ -164,7 +164,7 @@ ldap_back_db_config( return( 1 ); } tmp_be = select_backend( &ndn, 0, 0 ); - free( ndn.bv_val ); + ch_free( ndn.bv_val ); if ( tmp_be != NULL ) { fprintf( stderr, "%s: line %d: massaged suffix" " already in use by another backend in" @@ -303,7 +303,7 @@ ldap_back_db_config( static char * suffix_massage_regexize( const char *s ) { - char *res, *p, *r; + char *res, *p, *r, *ptr; int i; for ( i = 0, p = ( char * )s; @@ -313,18 +313,18 @@ suffix_massage_regexize( const char *s ) res = ch_calloc( sizeof( char ), strlen( s ) + 4 + 4*i + 1 ); - strcpy( res, "(.*)" ); + ptr = slap_strcopy( res, "(.*)" ); for ( i = 0, p = ( char * )s; ( r = strchr( p, ',' ) ) != NULL; p = r + 1 , i++ ) { - strncat( res, p, r - p + 1 ); - strcat( res, "[ ]?" ); + ptr = slap_strncopy( ptr, p, r - p + 1 ); + ptr = slap_strcopy( ptr, "[ ]?" ); if ( r[ 1 ] == ' ' ) { r++; } } - strcat( res, p ); + slap_strcopy( ptr, p ); return res; } @@ -332,19 +332,33 @@ suffix_massage_regexize( const char *s ) static char * suffix_massage_patternize( const char *s, int normalize ) { - char *res; + struct berval dn = { 0, NULL }, odn = { 0, NULL }; + int rc; + char *res; - res = ch_calloc( sizeof( char ), strlen( s ) + sizeof("%1") ); - - sprintf( res, "%%1%s", s ); + dn.bv_val = ( char * )s; + dn.bv_len = strlen( s ); if ( normalize ) { - char *out = dn_normalize( res + (sizeof("%1")-1) ); - if ( out != res + 2 ) { - strcpy( res + 2, out ); - free( out ); - } + rc = dnNormalize2( NULL, &dn, &odn ); + } else { + rc = dnPretty2( NULL, &dn, &odn ); + } + + if ( rc != LDAP_SUCCESS ) { + return NULL; } + + res = ch_calloc( sizeof( char ), odn.bv_len + sizeof( "%1" ) ); + if ( res == NULL ) { + return NULL; + } + + strcpy( res, "%1" ); + strcpy( res + sizeof( "%1" ) - 1, odn.bv_val ); + + /* FIXME: what FREE should I use? */ + free( odn.bv_val ); return res; }