X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fid2children.c;h=b325a7d021ea4fec7f66b1ece8ce785fd404aa3e;hb=1586a68219cf85e9caaafcf2259c9bc249358077;hp=636832f1fd061c587bbacf6ad3bd60a7e5a98178;hpb=af26f023e73bfe362725f05ba72c20311966e19f;p=openldap diff --git a/servers/slapd/back-ldbm/id2children.c b/servers/slapd/back-ldbm/id2children.c index 636832f1fd..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,125 +24,48 @@ #include "slap.h" #include "back-ldbm.h" -int -id2children_add( - Backend *be, - Entry *p, - Entry *e -) -{ - struct dbcache *db; - Datum key; - char buf[20]; - - ldbm_datum_init( key ); - - Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %ld, %ld )\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; - char buf[20]; - - Debug( LDAP_DEBUG_TRACE, "=> id2children_remove( %ld, %ld )\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 ); - } - - 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 ) { -#if 0 - Debug( LDAP_DEBUG_ANY, - "<= id2children_remove: idl_delete_key failure\n", - 0, 0, 0 ); - ldbm_cache_close( be, db ); - return( -1 ); -#else - Debug( LDAP_DEBUG_ANY, - "<= id2children_remove: ignoring idl_delete_key failure\n", - 0, 0, 0 ); -#endif - } - - 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 = 0; ID_BLOCK *idl; - char buf[20]; ldbm_datum_init( 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 + - 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 ); if( idl != NULL ) { @@ -136,7 +73,14 @@ has_children( 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 ); }