Diff for /servers/slapd/back-bdb/dn2id.c between versions 1.65 and 1.66

version 1.65, 2003/01/31 18:44:52 version 1.66, 2003/04/16 14:23:36
Line 1 Line 1
 /* dn2id.c - routines to deal with the dn2id index */  /* dn2id.c - routines to deal with the dn2id index */
 /* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.64 2003/01/31 18:43:14 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/dn2id.c,v 1.65 2003/01/31 18:44:52 hyc Exp $ */
 /*  /*
  * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.   * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file   * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
Line 299  bdb_dn2id( Line 299  bdb_dn2id(
         DB_TXN *txn,          DB_TXN *txn,
         struct berval   *dn,          struct berval   *dn,
         ID *id,          ID *id,
         int flags )          void *ctx )
 {  {
         int             rc;          int             rc;
         DBT             key, data;          DBT             key, data;
Line 314  bdb_dn2id( Line 314  bdb_dn2id(
   
         assert (id);          assert (id);
     
         *id = bdb_cache_find_entry_ndn2id(be, &bdb->bi_cache, dn);  
         if (*id != NOID) {  
                 return 0;  
         }  
   
         DBTzero( &key );          DBTzero( &key );
         key.size = dn->bv_len + 2;          key.size = dn->bv_len + 2;
         key.data = ch_malloc( key.size );          key.data = sl_malloc( key.size, ctx );
         ((char *)key.data)[0] = DN_BASE_PREFIX;          ((char *)key.data)[0] = DN_BASE_PREFIX;
         AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );          AC_MEMCPY( &((char *)key.data)[1], dn->bv_val, key.size - 1 );
   
Line 332  bdb_dn2id( Line 327  bdb_dn2id(
         data.flags = DB_DBT_USERMEM;          data.flags = DB_DBT_USERMEM;
   
         /* fetch it */          /* fetch it */
         rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags | flags);          rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );
   
         if( rc != 0 ) {          if( rc != 0 ) {
 #ifdef NEW_LOGGING  #ifdef NEW_LOGGING
Line 352  bdb_dn2id( Line 347  bdb_dn2id(
 #endif  #endif
         }          }
   
         ch_free( key.data );          sl_free( key.data, ctx );
         return rc;  
 }  
   
 int  
 bdb_dn2id_matched(  
         BackendDB       *be,  
         DB_TXN *txn,  
         struct berval   *in,  
         ID *id,  
         ID *id2,  
         int flags )  
 {  
         int             rc;  
         DBT             key, data;  
         struct bdb_info *bdb = (struct bdb_info *) be->be_private;  
         DB *db = bdb->bi_dn2id->bdi_db;  
         char            *buf;  
         struct  berval dn;  
         ID              cached_id;  
   
 #ifdef NEW_LOGGING  
         LDAP_LOG ( INDEX, ARGS,   
                 "=> bdb_dn2id_matched( \"%s\" )\n", in->bv_val, 0, 0 );  
 #else  
         Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id_matched( \"%s\" )\n", in->bv_val, 0, 0 );  
 #endif  
   
         DBTzero( &key );  
         key.size = in->bv_len + 2;  
         buf = ch_malloc( key.size );  
         key.data = buf;  
         dn.bv_val = buf+1;  
         dn.bv_len = key.size - 2;  
         AC_MEMCPY( dn.bv_val, in->bv_val, key.size - 1 );  
   
         /* store the ID */  
         DBTzero( &data );  
         data.data = id;  
         data.ulen = sizeof(ID);  
         data.flags = DB_DBT_USERMEM;  
   
         while(1) {  
                 dn.bv_val[-1] = DN_BASE_PREFIX;  
   
                 *id = NOID;  
   
                 /* lookup cache */  
                 cached_id = bdb_cache_find_entry_ndn2id(be, &bdb->bi_cache, &dn);  
    
                 if (cached_id != NOID) {  
                         rc = 0;  
                         *id = cached_id;  
                         if ( dn.bv_val != buf+1 ) {  
                                 *id2 = *id;  
                         }  
                         break;  
                 } else {  
                         /* fetch it */  
                         rc = db->get(db, txn, &key, &data, bdb->bi_db_opflags | flags );  
                 }  
   
                 if( rc == DB_NOTFOUND ) {  
                         struct berval   pdn;  
   
                         if ( ! be_issuffix( be, &dn ) ) {  
                                 dnParent( &dn, &pdn );  
                         } else {  
 #ifdef NEW_LOGGING  
                                 LDAP_LOG ( INDEX, DETAIL1,   
                                         "<= bdb_dn2id_matched: no match\n", 0, 0, 0 );  
 #else  
                                 Debug( LDAP_DEBUG_TRACE,  
                                         "<= bdb_dn2id_matched: no match\n",  
                                         0, 0, 0 );  
 #endif  
                                 break;  
                         }  
   
                         key.size = pdn.bv_len + 2;  
                         dn = pdn;  
                         key.data = pdn.bv_val - 1;  
   
                 } else if ( rc == 0 ) {  
                         if( data.size != sizeof( ID ) ) {  
 #ifdef NEW_LOGGING  
                                 LDAP_LOG ( INDEX, DETAIL1,   
                                         "<= bdb_dn2id_matched: get size mismatch:"  
                                         "expected %ld, got %ld\n",  
                                         (long) sizeof(ID), (long) data.size, 0 );  
 #else  
                                 Debug( LDAP_DEBUG_ANY,  
                                         "<= bdb_dn2id_matched: get size mismatch: "  
                                         "expected %ld, got %ld\n",  
                                         (long) sizeof(ID), (long) data.size, 0 );  
 #endif  
                         }  
   
                         if( dn.bv_val != buf+1 ) {  
                                 *id2 = *id;  
                         }  
   
 #ifdef NEW_LOGGING  
                         LDAP_LOG ( INDEX, DETAIL1,   
                                 "<= bdb_dn2id_matched: id=0x%08lx: %s %s\n",  
                                 (long) *id, *id2 == 0 ? "entry" : "matched", dn.bv_val );  
 #else  
                         Debug( LDAP_DEBUG_TRACE,  
                                 "<= bdb_dn2id_matched: id=0x%08lx: %s %s\n",  
                                 (long) *id, *id2 == 0 ? "entry" : "matched", dn.bv_val );  
 #endif  
                         break;  
   
                 } else {  
 #ifdef NEW_LOGGING  
                         LDAP_LOG ( INDEX, ERR,   
                                 "<= bdb_dn2id_matched: get failed: %s (%d)\n",  
                                 db_strerror(rc), rc, 0 );  
 #else  
                         Debug( LDAP_DEBUG_ANY,  
                                 "<= bdb_dn2id_matched: get failed: %s (%d)\n",  
                                 db_strerror(rc), rc, 0 );  
 #endif  
                         break;  
                 }  
         }  
   
         ch_free( buf );  
         return rc;          return rc;
 }  }
   
Line 523  bdb_dn2id_children( Line 391  bdb_dn2id_children(
   
 #ifdef NEW_LOGGING  #ifdef NEW_LOGGING
         LDAP_LOG ( INDEX, DETAIL1,           LDAP_LOG ( INDEX, DETAIL1, 
                 "<= bdb_dn2id_children( %s ): %schildren (%d)\n",                   "<= bdb_dn2id_children( %s ): %s (%d)\n", 
                 dn->bv_val, rc == 0 ? "" : ( rc == DB_NOTFOUND ? "no " :                  dn->bv_val, rc == 0 ? "" : ( rc == DB_NOTFOUND ? "no " :
                 db_strerror(rc)), rc );                  db_strerror(rc)), rc );
 #else  #else
         Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_children( %s ): %schildren (%d)\n",          Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_children( %s ): %s (%d)\n",
                 dn->bv_val,                  dn->bv_val,
                 rc == 0 ? "" : ( rc == DB_NOTFOUND ? "no " :                  rc == 0 ? "" : ( rc == DB_NOTFOUND ? "no " :
                         db_strerror(rc) ), rc );                          db_strerror(rc) ), rc );

Removed from v.1.65  
changed lines
  Added in v.1.66


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org