/* modify.c - ldap backend modify function */
/* $OpenLDAP$ */
/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
/* This is an altered version */
LDAPMod **modv = NULL;
LDAPMod *mods;
Modifications *ml;
- int i, j;
+ int i, j, rc;
struct berval mapped;
struct berval mdn = { 0, NULL };
+ ber_int_t msgid;
lc = ldap_back_getconn(li, conn, op);
- if ( !lc || !ldap_back_dobind( lc, op ) ) {
+ if ( !lc || !ldap_back_dobind( li, lc, conn, op ) ) {
return( -1 );
}
mods = (LDAPMod *)ch_malloc(i*sizeof(LDAPMod));
if (mods == NULL) {
+ rc = LDAP_NO_MEMORY;
goto cleanup;
}
modv = (LDAPMod **)ch_malloc((i+1)*sizeof(LDAPMod *));
if (modv == NULL) {
+ rc = LDAP_NO_MEMORY;
goto cleanup;
}
continue;
}
- ldap_back_map(&li->at_map, &ml->sml_desc->ad_cname, &mapped, 0);
- if (mapped.bv_val == NULL) {
+ ldap_back_map(&li->at_map, &ml->sml_desc->ad_cname, &mapped,
+ BACKLDAP_MAP);
+ if (mapped.bv_val == NULL || mapped.bv_val[0] == '\0') {
continue;
}
}
modv[i] = 0;
- ldap_modify_s( lc->ld, mdn.bv_val, modv );
+ rc = ldap_modify_ext( lc->ld, mdn.bv_val, modv, op->o_ctrls, NULL, &msgid );
cleanup:;
-#ifdef ENABLE_REWRITE
if ( mdn.bv_val != dn->bv_val ) {
-#endif /* ENABLE_REWRITE */
free( mdn.bv_val );
-#ifdef ENABLE_REWRITE
}
-#endif /* ENABLE_REWRITE */
- for (i=0; modv[i]; i++)
+ for (i=0; modv[i]; i++) {
ch_free(modv[i]->mod_bvalues);
- ch_free(mods);
- ch_free(modv);
- return( ldap_back_op_result( lc, op ));
+ }
+ ch_free( mods );
+ ch_free( modv );
+
+ return ldap_back_op_result( li, lc, conn, op, msgid, rc, 1 );
}