X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fentry.c;h=67cc85833ec6445cc3ff83c174e4574833a25e5a;hb=a5e6fa0d1ce8a43ec96e88de73297ad2103eba2e;hp=c0474e20238eded3a92d3bce734e248856d8e924;hpb=c0f5c884297aac7b930afad98f601912c83e9e72;p=openldap diff --git a/servers/slapd/entry.c b/servers/slapd/entry.c index c0474e2023..67cc85833e 100644 --- a/servers/slapd/entry.c +++ b/servers/slapd/entry.c @@ -10,9 +10,6 @@ #include "slap.h" -void entry_free(); -char *entry2str(); - static unsigned char *ebuf; /* buf returned by entry2str */ static unsigned char *ecur; /* pointer to end of currently used ebuf */ static int emaxsize;/* max size of ebuf */ @@ -50,32 +47,34 @@ str2entry( char *s ) s ? s : "NULL", 0, 0 ); e = (Entry *) ch_calloc( 1, sizeof(Entry) ); - /* initialize reader/writer lock */ - entry_rdwr_init(e); /* check to see if there's an id included */ next = s; if ( isdigit( *s ) ) { e->e_id = atoi( s ); - if ( (s = str_getline( &next )) == NULL ) { + if ( (s = ldif_getline( &next )) == NULL ) { Debug( LDAP_DEBUG_TRACE, "<= str2entry NULL (missing newline after id)\n", 0, 0, 0 ); + free( e ); return( NULL ); } } + /* initialize reader/writer lock */ + entry_rdwr_init(e); + /* dn + attributes */ e->e_attrs = NULL; vals[0] = &bval; vals[1] = NULL; ptype[0] = '\0'; - while ( (s = str_getline( &next )) != NULL ) { + while ( (s = ldif_getline( &next )) != NULL ) { if ( *s == '\n' || *s == '\0' ) { break; } - if ( str_parse_line( s, &type, &value, &vlen ) != 0 ) { + if ( ldif_parse_line( s, &type, &value, &vlen ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "<= str2entry NULL (parse_line)\n", 0, 0, 0 ); continue; @@ -90,11 +89,11 @@ str2entry( char *s ) if ( strcasecmp( type, "dn" ) == 0 ) { if ( e->e_dn != NULL ) { Debug( LDAP_DEBUG_ANY, - "str2entry: entry %d has multiple dns \"%s\" and \"%s\" (second ignored)\n", + "str2entry: entry %lu has multiple dns \"%s\" and \"%s\" (second ignored)\n", e->e_id, e->e_dn, value ); continue; } - e->e_dn = strdup( value ); + e->e_dn = ch_strdup( value ); continue; } @@ -104,6 +103,7 @@ str2entry( char *s ) != 0 ) { Debug( LDAP_DEBUG_TRACE, "<= str2entry NULL (attr_merge)\n", 0, 0, 0 ); + entry_free( e ); return( NULL ); } nvals++; @@ -111,13 +111,13 @@ str2entry( char *s ) /* check to make sure there was a dn: line */ if ( e->e_dn == NULL ) { - Debug( LDAP_DEBUG_ANY, "str2entry: entry %d has no dn\n", + Debug( LDAP_DEBUG_ANY, "str2entry: entry %lu has no dn\n", e->e_id, 0, 0 ); entry_free( e ); return( NULL ); } - Debug( LDAP_DEBUG_TRACE, "<= str2entry 0x%x\n", e, 0, 0 ); + Debug(LDAP_DEBUG_TRACE, "<= str2entry 0x%lx\n", (unsigned long)e, 0,0); return( e ); } @@ -167,7 +167,7 @@ entry2str( /* put "dn: " */ tmplen = strlen( e->e_dn ); MAKE_SPACE( LDIF_SIZE_NEEDED( 2, tmplen )); - put_type_and_value( (char **) &ecur, "dn", e->e_dn, tmplen ); + ldif_put_type_and_value( (char **) &ecur, "dn", e->e_dn, tmplen ); } /* put the attributes */ @@ -177,7 +177,7 @@ entry2str( bv = a->a_vals[i]; tmplen = strlen( a->a_type ); MAKE_SPACE( LDIF_SIZE_NEEDED( tmplen, bv->bv_len )); - put_type_and_value( (char **) &ecur, a->a_type, + ldif_put_type_and_value( (char **) &ecur, a->a_type, bv->bv_val, bv->bv_len ); } } @@ -195,8 +195,10 @@ entry_free( Entry *e ) Attribute *a, *next; /* XXX check that no reader/writer locks exist */ +#ifdef LDAP_DEBUG assert( !pthread_rdwr_wchk_np(&e->e_rdwr) && !pthread_rdwr_rchk_np(&e->e_rdwr) ); +#endif if ( e->e_dn != NULL ) { free( e->e_dn ); @@ -259,4 +261,3 @@ entry_rdwr_init(Entry *e) { return pthread_rdwr_init_np(&e->e_rdwr, NULL); } -