Skip to content
Snippets Groups Projects
Commit 499b8fdc authored by Juan Gomez's avatar Juan Gomez
Browse files

Added index_delete_values() in preparation for changes that will keep

index files clean.
parent 24ec5ded
No related branches found
No related tags found
No related merge requests found
......@@ -69,13 +69,19 @@ index_add_mods(
LDAPMod *mod = &ml->ml_mod;
switch ( mod->mod_op & ~LDAP_MOD_BVALUES ) {
case LDAP_MOD_ADD:
case LDAP_MOD_REPLACE:
/* XXX: Delete old index data==>problem when this
* gets called we lost values already!
*/
case LDAP_MOD_ADD:
rc = index_add_values( be, mod->mod_type,
mod->mod_bvalues, id );
break;
case LDAP_MOD_SOFTADD: /* SOFTADD means index was there */
case LDAP_MOD_DELETE:
rc = index_delete_values( be, mod->mod_type,
mod->mod_bvalues, id );
break;
case LDAP_MOD_SOFTADD: /* SOFTADD means index was there */
rc = 0;
break;
}
......@@ -220,6 +226,21 @@ add_value(
return( rc );
}
/* Remove entries from index files */
int
index_delete_values(
Backend *be,
char *type,
struct berval **vals,
ID id
)
{
return 0;
}
int
index_add_values(
Backend *be,
......
......@@ -109,6 +109,7 @@ int ldbm_modify_internal(
int err;
LDAPMod *mod;
LDAPModList *ml;
Attribute *a;
if ( ((be->be_lastmod == ON)
|| ((be->be_lastmod == UNDEFINED)&&(global_lastmod == ON)))
......@@ -142,6 +143,17 @@ int ldbm_modify_internal(
break;
case LDAP_MOD_REPLACE:
/* Need to remove all values from indexes before they
* are lost.
*/
if( e->e_attrs
&& ((a = attr_find( e->e_attrs, mod->mod_type ))
!= NULL) ) {
(void) index_delete_values( be, mod->mod_type,
a->a_vals, e->e_id );
}
err = replace_values( e, mod, op->o_ndn );
break;
......@@ -339,6 +351,11 @@ replace_values(
char *dn
)
{
/* XXX: BEFORE YOU GET RID OF PREVIOUS VALUES REMOVE FROM INDEX
* FILES
*/
(void) attr_delete( &e->e_attrs, mod->mod_type );
if ( attr_merge( e, mod->mod_type, mod->mod_bvalues ) != 0 ) {
......
......@@ -130,6 +130,7 @@ int index_add_entry LDAP_P(( Backend *be, Entry *e ));
int index_add_mods LDAP_P(( Backend *be, LDAPModList *ml, ID id ));
ID_BLOCK * index_read LDAP_P(( Backend *be, char *type, int indextype, char *val ));
int index_add_values LDAP_P(( Backend *be, char *type, struct berval **vals, ID id ));
int index_delete_values LDAP_P(( Backend *be, char *type, struct berval **vals, ID id ));
/*
* kerberos.c
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment