slap_graduate_commit_csn( op );
if ( modlist != NULL ) {
- slap_mods_free( modlist );
+ slap_mods_free( modlist, 0 );
}
+
if ( op->ora_e != NULL ) {
entry_free( op->ora_e );
}
#ifdef SLURPD_FRIENDLY
ber_len_t i,j;
+ if ( !initial ) {
+ /*
+ * This check allows overlays to override operational
+ * attributes by setting them directly in the entry.
+ * We assume slap_mods_no_user_mod_check() was called
+ * with the user modifications.
+ */
+ *text = NULL;
+ return LDAP_SUCCESS;
+ }
+
for( i=0; attr->a_vals[i].bv_val; i++ ) {
/* count them */
}
for ( j = 0; mods->sml_values[j].bv_val; j++ ) {
ber_dupbv( &attr->a_vals[i+j], &mods->sml_values[j] );
}
- BER_BVZERO( &attr->a_vals[i+j] );
+ BER_BVZERO( &attr->a_vals[i+j] );
+ j++;
} else {
AC_MEMCPY( &attr->a_vals[i], mods->sml_values,
sizeof( struct berval ) * j );
- ch_free( mods->sml_values );
- mods->sml_values = NULL;
}
if( mods->sml_nvalues ) {
} else {
AC_MEMCPY( &attr->a_nvals[i], mods->sml_nvalues,
sizeof( struct berval ) * j );
- ch_free( mods->sml_nvalues );
- mods->sml_nvalues = NULL;
}
} else {
attr->a_nvals = attr->a_vals;
/* move ad to attr structure */
attr->a_desc = mods->sml_desc;
- if ( !dup ) mods->sml_desc = NULL;
/* move values to attr structure */
/* should check for duplicates */
BER_BVZERO( &attr->a_vals[i] );
} else {
attr->a_vals = mods->sml_values;
- mods->sml_values = NULL;
}
if ( mods->sml_nvalues ) {
BER_BVZERO( &attr->a_nvals[i] );
} else {
attr->a_nvals = mods->sml_nvalues;
- mods->sml_nvalues = NULL;
}
} else {
attr->a_nvals = attr->a_vals;