X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fid2children.c;h=b325a7d021ea4fec7f66b1ece8ce785fd404aa3e;hb=1586a68219cf85e9caaafcf2259c9bc249358077;hp=d8e1db98865458584c138f1feb5b2a0f94e739d9;hpb=818bc5731935e0d4dad4cb4a248b5b2e0b0b08c4;p=openldap diff --git a/servers/slapd/back-ldbm/id2children.c b/servers/slapd/back-ldbm/id2children.c index d8e1db9886..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" @@ -11,125 +25,62 @@ #include "back-ldbm.h" int -id2children_add( +has_children( Backend *be, - Entry *p, - Entry *e + Entry *p ) { - struct dbcache *db; + DBCache *db; Datum key; - int len, rc; - IDList *idl; - char buf[20]; + int rc = 0; + ID_BLOCK *idl; ldbm_datum_init( key ); - 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 ); - } +#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 - 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, + 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, - "<= id2children_remove -1 could not open \"id2children%s\"\n", + "<= has_children -1 could not open \"dn2id%s\"\n", LDBM_SUFFIX, 0, 0 ); - return( -1 ); - } +#endif - ldbm_datum_init( 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_delete)\n", - 0, 0, 0 ); - ldbm_cache_close( be, db ); - return( -1 ); + return( 0 ); } - ldbm_cache_close( be, db ); - - Debug( LDAP_DEBUG_TRACE, "<= id2children_remove 0\n", 0, 0, 0 ); - return( 0 ); -} + key.dsize = strlen( p->e_ndn ) + 2; + key.dptr = ch_malloc( key.dsize ); + sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, p->e_ndn ); -int -has_children( - Backend *be, - Entry *p -) -{ - struct dbcache *db; - Datum key; - int rc; - IDList *idl; - char buf[20]; + idl = idl_fetch( be, db, key ); - ldbm_datum_init( key ); + free( key.dptr ); - Debug( LDAP_DEBUG_TRACE, "=> has_children( %lu )\n", p->e_id , 0, 0 ); + ldbm_cache_close( be, db ); - if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, - LDBM_WRCREAT )) == NULL ) { - Debug( LDAP_DEBUG_ANY, - "<= has_children -1 could not open \"id2children%s\"\n", - LDBM_SUFFIX, 0, 0 ); - return( 0 ); + if( idl != NULL ) { + idl_free( idl ); + rc = 1; } - sprintf( buf, "%c%ld", EQ_PREFIX, p->e_id ); - key.dptr = buf; - key.dsize = strlen( buf ) + 1; - - idl = idl_fetch( be, db, key ); - - ldbm_cache_close( be, db ); - rc = idl ? 1 : 0; - idl_free( idl ); +#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 - Debug( LDAP_DEBUG_TRACE, "<= has_children %d\n", rc, 0, 0 ); return( rc ); }