]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/index.c
Added bdb_attribute and bdb_group ACL support routines
[openldap] / servers / slapd / back-bdb / index.c
index eb259c5efdf29af02b23f5a92ea487d6fe5184f6..aea035d4313b07a10dd9eba8673118cc5ee4cccd 100644 (file)
@@ -24,14 +24,11 @@ static slap_mask_t index_mask(
        AttributeType *at;
        slap_mask_t mask = 0;
 
-       /* we do not support indexing of binary attributes */
-       if( slap_ad_is_binary( desc ) ) return 0;
-
-       bdb_attr_mask( be->be_private, desc->ad_cname->bv_val, &mask );
+       bdb_attr_mask( be->be_private, desc->ad_cname.bv_val, &mask );
 
        if( mask ) {
-               *atname = desc->ad_cname->bv_val;
-               *dbname = desc->ad_cname->bv_val;
+               *atname = desc->ad_cname.bv_val;
+               *dbname = desc->ad_cname.bv_val;
                return mask;
        }
 
@@ -40,7 +37,7 @@ static slap_mask_t index_mask(
                bdb_attr_mask( be->be_private, desc->ad_type->sat_cname, &mask );
 
                if( mask & SLAP_INDEX_AUTO_LANG ) {
-                       *atname = desc->ad_cname->bv_val;
+                       *atname = desc->ad_cname.bv_val;
                        *dbname = desc->ad_type->sat_cname;
                        return mask;
                }
@@ -248,7 +245,6 @@ static int indexer(
        }
 
 done:
-       ad_free( ad, 1 );
        return rc;
 }
 
@@ -256,7 +252,7 @@ static int index_at_values(
        Backend *be,
        DB_TXN *txn,
        AttributeType *type,
-       const char *lang,
+       struct berval *lang,
        struct berval **vals,
        ID id,
        int op,
@@ -295,13 +291,13 @@ static int index_at_values(
                if( rc ) return rc;
        }
 
-       if( lang ) {
+       if( lang->bv_len ) {
                char *dbname = NULL;
                size_t tlen = strlen( type->sat_cname );
-               size_t llen = strlen( lang );
+               size_t llen = lang->bv_len;
                char *lname = ch_malloc( tlen + llen + sizeof(";") );
 
-               sprintf( lname, "%s;%s", type->sat_cname, lang );
+               sprintf( lname, "%s;%s", type->sat_cname, lang->bv_val );
 
                bdb_attr_mask( be->be_private, lname, &tmpmask );
 
@@ -341,13 +337,8 @@ int bdb_index_values(
        char *dbname = NULL;
        slap_mask_t mask;
 
-       if( slap_ad_is_binary( desc ) ) {
-               /* binary attributes have no index capabilities */
-               return LDAP_SUCCESS;
-       }
-
        rc = index_at_values( be, txn,
-               desc->ad_type, desc->ad_lang,
+               desc->ad_type, &desc->ad_lang,
                vals, id, op,
                &dbname, &mask );