X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fid2children.c;h=b325a7d021ea4fec7f66b1ece8ce785fd404aa3e;hb=593ce2def41f612c650be74cafde22be228330e8;hp=23e64f755946199124e05b0b2cccc2f84152502e;hpb=bbdac6ebcac9deaa18302f95fa96e585c8eb97d7;p=openldap diff --git a/servers/slapd/back-ldbm/id2children.c b/servers/slapd/back-ldbm/id2children.c index 23e64f7559..b325a7d021 100644 --- a/servers/slapd/back-ldbm/id2children.c +++ b/servers/slapd/back-ldbm/id2children.c @@ -1,4 +1,18 @@ /* id2children.c - routines to deal with the id2children index */ +/* $OpenLDAP$ */ +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ #include "portable.h" @@ -10,132 +24,63 @@ #include "slap.h" #include "back-ldbm.h" -int -id2children_add( - Backend *be, - Entry *p, - Entry *e -) -{ - struct dbcache *db; - Datum key; - int len, rc; - IDList *idl; - char buf[20]; - -#ifdef HAVE_BERKELEY_DB2 - Datum data; - memset( &key, 0, sizeof( key ) ); - memset( &data, 0, sizeof( data ) ); -#endif - - Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %lu, %lu )\n", - p ? p->e_id : 0, e->e_id, 0 ); - - if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, - LDBM_WRCREAT )) == NULL ) { - Debug( LDAP_DEBUG_ANY, - "<= id2children_add -1 could not open \"id2children%s\"\n", - LDBM_SUFFIX, 0, 0 ); - return( -1 ); - } - - sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 ); - key.dptr = buf; - key.dsize = strlen( buf ) + 1; - - if ( idl_insert_key( be, db, key, e->e_id ) != 0 ) { - Debug( LDAP_DEBUG_TRACE, "<= id2children_add -1 (idl_insert)\n", - 0, 0, 0 ); - ldbm_cache_close( be, db ); - return( -1 ); - } - - ldbm_cache_close( be, db ); - - Debug( LDAP_DEBUG_TRACE, "<= id2children_add 0\n", 0, 0, 0 ); - return( 0 ); -} - - -int -id2children_remove( - Backend *be, - Entry *p, - Entry *e -) -{ - struct dbcache *db; - Datum key; - int len, rc; - IDList *idl; - char buf[20]; - - Debug( LDAP_DEBUG_TRACE, "=> id2children_remove( %lu, %lu )\n", p ? p->e_id - : 0, e->e_id, 0 ); - - if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, - LDBM_WRCREAT )) == NULL ) { - Debug( LDAP_DEBUG_ANY, - "<= id2children_remove -1 could not open \"id2children%s\"\n", - LDBM_SUFFIX, 0, 0 ); - return( -1 ); - } - - memset( &key, 0, sizeof(key) ); - sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 ); - key.dptr = buf; - key.dsize = strlen( buf ) + 1; - - if ( idl_delete_key( be, db, key, e->e_id ) != 0 ) { - Debug( LDAP_DEBUG_TRACE, "<= id2children_remove -1 (idl_insert)\n", - 0, 0, 0 ); - ldbm_cache_close( be, db ); - return( -1 ); - } - - ldbm_cache_close( be, db ); - - Debug( LDAP_DEBUG_TRACE, "<= id2children_remove 0\n", 0, 0, 0 ); - return( 0 ); -} - int has_children( Backend *be, Entry *p ) { - struct dbcache *db; + DBCache *db; Datum key; - int rc; - IDList *idl; - char buf[20]; + int rc = 0; + ID_BLOCK *idl; + + ldbm_datum_init( key ); -#ifdef HAVE_BERKELEY_DB2 - memset( &key, 0, sizeof( key ) ); +#ifdef NEW_LOGGING + LDAP_LOG( INDEX, ENTRY, "has_children: enter %ld\n", p->e_id, 0, 0 ); +#else + Debug( LDAP_DEBUG_TRACE, "=> has_children( %ld )\n", p->e_id , 0, 0 ); #endif - Debug( LDAP_DEBUG_TRACE, "=> has_children( %lu )\n", p->e_id , 0, 0 ); - if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, + if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT )) == NULL ) { +#ifdef NEW_LOGGING + LDAP_LOG( INDEX, ERR, + "has_children: could not open \"dn2id%s\"\n", LDBM_SUFFIX, 0, 0 ); +#else Debug( LDAP_DEBUG_ANY, - "<= has_children -1 could not open \"id2children%s\"\n", + "<= has_children -1 could not open \"dn2id%s\"\n", LDBM_SUFFIX, 0, 0 ); +#endif + return( 0 ); } - sprintf( buf, "%c%ld", EQ_PREFIX, p->e_id ); - key.dptr = buf; - key.dsize = strlen( buf ) + 1; + key.dsize = strlen( p->e_ndn ) + 2; + key.dptr = ch_malloc( key.dsize ); + sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, p->e_ndn ); idl = idl_fetch( be, db, key ); + free( key.dptr ); + ldbm_cache_close( be, db ); - rc = idl ? 1 : 0; - idl_free( idl ); - Debug( LDAP_DEBUG_TRACE, "<= has_children %d\n", rc, 0, 0 ); + if( idl != NULL ) { + idl_free( idl ); + rc = 1; + } + +#ifdef NEW_LOGGING + LDAP_LOG( INDEX, ENTRY, + "has_children: id (%ld) %s children.\n", + p->e_id, rc ? "has" : "doesn't have", 0 ); +#else + Debug( LDAP_DEBUG_TRACE, "<= has_children( %ld ): %s\n", + p->e_id, rc ? "yes" : "no", 0 ); +#endif + return( rc ); }