X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fentry.c;h=98f5842f8a45e66f9544ee3430d512900406c6dd;hb=d9e7a7190b5f9e84dc0dba80f5bf1af993190218;hp=9af12512dcbe2f0c717e11f515c09de764bad4ea;hpb=0e2af54a3ffdeebe3901370683be56fcc53023b0;p=openldap diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index 9af12512dc..98f5842f8a 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -24,7 +24,7 @@ static int emaxsize;/* max size of ebuf */ /* * Empty root entry */ -const Entry slap_entry_root = { NOID, { 0, "" }, { 0, "" }, NULL, NULL }; +const Entry slap_entry_root = { NOID, { 0, "" }, { 0, "" }, NULL, 0, { 0, "" }, NULL }; int entry_destroy(void) { @@ -63,20 +63,18 @@ str2entry( char *s ) */ #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "str2entry: \"%s\"\n", s ? s : "NULL" )); + LDAP_LOG( OPERATION, DETAIL1, "str2entry: \"%s\"\n", s ? s : "NULL", 0, 0 ); #else Debug( LDAP_DEBUG_TRACE, "=> str2entry\n", s ? s : "NULL", 0, 0 ); #endif /* initialize reader/writer lock */ - e = (Entry *) ch_malloc( sizeof(Entry) ); + e = (Entry *) ch_calloc( 1, sizeof(Entry) ); if( e == NULL ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_ERR, - "str2entry: entry allocation failed.\n" )); + LDAP_LOG( OPERATION, ERR, "str2entry: entry allocation failed.\n", 0, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "<= str2entry NULL (entry allocation failed)\n", @@ -87,12 +85,6 @@ str2entry( char *s ) /* initialize entry */ e->e_id = NOID; - e->e_name.bv_val = NULL; - e->e_name.bv_len = 0; - e->e_nname.bv_val = NULL; - e->e_nname.bv_len = 0; - e->e_attrs = NULL; - e->e_private = NULL; /* dn + attributes */ vals[1].bv_val = NULL; @@ -105,8 +97,7 @@ str2entry( char *s ) if ( ldif_parse_line( s, &type, &vals[0].bv_val, &vals[0].bv_len ) != 0 ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "str2entry: NULL (parse_line)\n" )); + LDAP_LOG( OPERATION, DETAIL1, "str2entry: NULL (parse_line)\n",0, 0, 0 ); #else Debug( LDAP_DEBUG_TRACE, "<= str2entry NULL (parse_line)\n", 0, 0, 0 ); @@ -115,16 +106,14 @@ str2entry( char *s ) } if ( strcasecmp( type, "dn" ) == 0 ) { - struct berval *pdn = NULL; - free( type ); if ( e->e_dn != NULL ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, "str2entry: " + LDAP_LOG( OPERATION, DETAIL1, "str2entry: " "entry %ld has multiple DNs \"%s\" and \"%s\"\n", (long) e->e_id, e->e_dn, - vals[0].bv_val != NULL ? vals[0].bv_val : "" )); + vals[0].bv_val != NULL ? vals[0].bv_val : "" ); #else Debug( LDAP_DEBUG_ANY, "str2entry: " "entry %ld has multiple DNs \"%s\" and \"%s\"\n", @@ -137,22 +126,21 @@ str2entry( char *s ) } rc = dnPrettyNormal( NULL, &vals[0], &e->e_name, &e->e_nname ); - free( vals[0].bv_val ); if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, "str2entry: " - "entry %ld has invalid DN \"%s\"\n", - (long) e->e_id, - pdn->bv_val ? pdn->bv_val : "" )); + LDAP_LOG( OPERATION, DETAIL1, + "str2entry: entry %ld has invalid DN \"%s\"\n", + (long) e->e_id, vals[0].bv_val, 0 ); #else Debug( LDAP_DEBUG_ANY, "str2entry: " "entry %ld has invalid DN \"%s\"\n", - (long) e->e_id, - pdn->bv_val ? pdn->bv_val : "", 0 ); + (long) e->e_id, vals[0].bv_val, 0 ); #endif entry_free( e ); + free( vals[0].bv_val ); return NULL; } + free( vals[0].bv_val ); continue; } @@ -161,8 +149,8 @@ str2entry( char *s ) if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "str2entry: str2ad(%s): %s\n", type, text )); + LDAP_LOG( OPERATION, DETAIL1, + "str2entry: str2ad(%s): %s\n", type, text, 0 ); #else Debug( slapMode & SLAP_TOOL_MODE ? LDAP_DEBUG_ANY : LDAP_DEBUG_TRACE, @@ -178,8 +166,8 @@ str2entry( char *s ) rc = slap_str2undef_ad( type, &ad, &text ); if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "str2entry: str2undef_ad(%s): %s\n", type, text )); + LDAP_LOG( OPERATION, DETAIL1, + "str2entry: str2undef_ad(%s): %s\n", type, text, 0 ); #else Debug( LDAP_DEBUG_ANY, "<= str2entry: str2undef_ad(%s): %s\n", @@ -211,9 +199,9 @@ str2entry( char *s ) } else { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_INFO, + LDAP_LOG( OPERATION, INFO, "str2entry: no validator for syntax %s\n", - ad->ad_type->sat_syntax->ssyn_oid )); + ad->ad_type->sat_syntax->ssyn_oid, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "str2entry: no validator for syntax %s\n", @@ -227,9 +215,9 @@ str2entry( char *s ) if( rc != 0 ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_ERR, + LDAP_LOG( OPERATION, ERR, "str2entry: invalid value for syntax %s\n", - ad->ad_type->sat_syntax->ssyn_oid )); + ad->ad_type->sat_syntax->ssyn_oid, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "str2entry: invalid value for syntax %s\n", @@ -250,8 +238,8 @@ str2entry( char *s ) rc = attr_merge( e, ad, vals ); if( rc != 0 ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "str2entry: NULL (attr_merge)\n" )); + LDAP_LOG( OPERATION, DETAIL1, + "str2entry: NULL (attr_merge)\n" , 0, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "<= str2entry NULL (attr_merge)\n", 0, 0, 0 ); @@ -269,9 +257,8 @@ str2entry( char *s ) /* check to make sure there was a dn: line */ if ( e->e_dn == NULL ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_INFO, - "str2entry: entry %ld has no dn.\n", - (long) e->e_id )); + LDAP_LOG( OPERATION, INFO, + "str2entry: entry %ld has no dn.\n", (long) e->e_id, 0, 0 ); #else Debug( LDAP_DEBUG_ANY, "str2entry: entry %ld has no dn\n", (long) e->e_id, 0, 0 ); @@ -281,8 +268,8 @@ str2entry( char *s ) } #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL2, - "str2entry(%s) -> 0x%lx\n", e->e_dn, (unsigned long)e )); + LDAP_LOG( OPERATION, DETAIL2, + "str2entry(%s) -> 0x%lx\n", e->e_dn, (unsigned long)e, 0 ); #else Debug(LDAP_DEBUG_TRACE, "<= str2entry(%s) -> 0x%lx\n", e->e_dn, (unsigned long) e, 0 ); @@ -314,6 +301,8 @@ entry2str( int i; ber_len_t tmplen; + assert( e != NULL ); + /* * In string format, an entry looks like this: * dn: \n @@ -369,6 +358,11 @@ entry_free( Entry *e ) e->e_ndn = NULL; } + if ( e->e_bv.bv_val != NULL ) { + free( e->e_bv.bv_val ); + e->e_bv.bv_val = NULL; + } + /* free attributes */ attrs_free( e->e_attrs ); e->e_attrs = NULL; @@ -479,9 +473,8 @@ int entry_encode(Entry *e, struct berval *bv) unsigned char *ptr; #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "entry_encode: id: 0x%08lx \"%s\"\n", - (long) e->e_id, e->e_dn )); + LDAP_LOG( OPERATION, DETAIL1, "entry_encode: id: 0x%08lx \"%s\"\n", + (long) e->e_id, e->e_dn, 0 ); #else Debug( LDAP_DEBUG_TRACE, "=> entry_encode(0x%08lx): %s\n", (long) e->e_id, e->e_dn, 0 ); @@ -561,10 +554,10 @@ int entry_decode(struct berval *bv, Entry **e) const char *text; AttributeDescription *ad; unsigned char *ptr = (unsigned char *)bv->bv_val; - BVarray bptr; + BerVarray bptr; i = entry_getlen(&ptr); - x = ch_malloc(i); + x = ch_calloc(1, i); i = entry_getlen(&ptr); x->e_name.bv_val = ptr; x->e_name.bv_len = i; @@ -574,24 +567,25 @@ int entry_decode(struct berval *bv, Entry **e) x->e_nname.bv_len = i; ptr += i+1; #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL2, - "entry_decode: \"%s\"\n", x->e_dn )); + LDAP_LOG( OPERATION, DETAIL2, "entry_decode: \"%s\"\n", x->e_dn, 0, 0 ); #else Debug( LDAP_DEBUG_TRACE, "entry_decode: \"%s\"\n", x->e_dn, 0, 0 ); #endif - x->e_private = bv->bv_val; + x->e_bv = *bv; /* A valid entry must have at least one attr, so this * pointer can never be NULL */ x->e_attrs = (Attribute *)(x+1); - bptr = (BVarray)x->e_attrs; + bptr = (BerVarray)x->e_attrs; a = NULL; - while (i = entry_getlen(&ptr)) { - struct berval bv = { i, ptr }; + while ((i = entry_getlen(&ptr))) { + struct berval bv; + bv.bv_len = i; + bv.bv_val = ptr; if (a) { a->a_next = (Attribute *)bptr; } @@ -601,8 +595,8 @@ int entry_decode(struct berval *bv, Entry **e) if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_INFO, - "entry_decode: str2ad(%s): %s\n", ptr, text )); + LDAP_LOG( OPERATION, INFO, + "entry_decode: str2ad(%s): %s\n", ptr, text, 0 ); #else Debug( LDAP_DEBUG_TRACE, "<= entry_decode: str2ad(%s): %s\n", ptr, text, 0 ); @@ -611,8 +605,8 @@ int entry_decode(struct berval *bv, Entry **e) if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_INFO, - "entry_decode: str2undef_ad(%s): %s\n", ptr, text)); + LDAP_LOG( OPERATION, INFO, + "entry_decode: str2undef_ad(%s): %s\n", ptr, text, 0 ); #else Debug( LDAP_DEBUG_ANY, "<= entry_decode: str2undef_ad(%s): %s\n", @@ -623,8 +617,9 @@ int entry_decode(struct berval *bv, Entry **e) } ptr += i + 1; a->a_desc = ad; - bptr = (BVarray)(a+1); + bptr = (BerVarray)(a+1); a->a_vals = bptr; + a->a_flags = 0; j = entry_getlen(&ptr); while (j) { @@ -642,8 +637,7 @@ int entry_decode(struct berval *bv, Entry **e) if (a) a->a_next = NULL; #ifdef NEW_LOGGING - LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1, - "entry_decode: %s\n", x->e_dn )); + LDAP_LOG( OPERATION, DETAIL1, "entry_decode: %s\n", x->e_dn, 0, 0 ); #else Debug(LDAP_DEBUG_TRACE, "<= entry_decode(%s)\n", x->e_dn, 0, 0 );