- free( bv.bv_val );
-
- /* add each attribute to the indexes */
- for ( ap = e->e_attrs; ap != NULL; ap = ap->a_next ) {
-#ifdef SLAPD_SCHEMA_NOT_COMPAT
- /* index_change_values( be, SLAP_INDEX_ADD_OP, e->e_id, ap ); */
-#else
- index_change_values( be, ap->a_type, ap->a_vals, e->e_id,
- SLAP_INDEX_ADD_OP );
-#endif
- }
-
- Debug( LDAP_DEBUG_TRACE, "<= index_add( %ld, \"%s\" ) 0\n", e->e_id,
- e->e_ndn, 0 );
- return( 0 );
-}
-
-int
-index_add_mods(
- Backend *be,
- LDAPModList *ml,
- ID id
-)
-{
- int rc;
-
- for ( ; ml != NULL; ml = ml->ml_next ) {
- LDAPMod *mod = &ml->ml_mod;
-
- switch ( mod->mod_op & ~LDAP_MOD_BVALUES ) {
- case LDAP_MOD_REPLACE:
- /* XXX: Delete old index data==>problem when this
- * gets called we lost values already!
- */
- case LDAP_MOD_ADD:
- rc = index_change_values( be,
- mod->mod_type,
- mod->mod_bvalues,
- id,
- SLAP_INDEX_ADD_OP );
- break;
- case LDAP_MOD_DELETE:
- rc = index_change_values( be,
- mod->mod_type,
- mod->mod_bvalues,
- id,
- SLAP_INDEX_DELETE_OP );
- break;
- case LDAP_MOD_SOFTADD: /* SOFTADD means index was there */
- rc = 0;
- break;
+ /* If there is a tagging option, did we ever index the base
+ * type? If so, check for mask, otherwise it's not there.
+ */
+ if( slap_ad_is_tagged( desc ) && desc != desc->ad_type->sat_ad ) {
+ /* has tagging option */
+ attr_mask( be->be_private, desc->ad_type->sat_ad, &mask );
+
+ if( mask && ( mask ^ SLAP_INDEX_NOTAGS ) ) {
+ *atname = desc->ad_type->sat_cname;
+ *dbname = desc->ad_type->sat_cname.bv_val;
+ return mask;