/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1998-2006 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
}
- /* check for duplicate values */
+ /* check for unmodifiable attributes */
rs->sr_err = slap_mods_no_repl_user_mod_check( op,
modlist, &rs->sr_text, textbuf, textlen );
if ( rs->sr_err != LDAP_SUCCESS ) {
goto done;
}
+#if 0 /* This is a no-op since *modtail is NULL */
rs->sr_err = slap_mods2entry( *modtail, &op->ora_e,
0, 0, &rs->sr_text, textbuf, textlen );
if ( rs->sr_err != LDAP_SUCCESS ) {
send_ldap_result( op, rs );
goto done;
}
+#endif
}
#ifdef SLAPD_MULTIMASTER
attr->a_vals = ch_realloc( attr->a_vals,
sizeof( struct berval ) * (i+j) );
- /* should check for duplicates */
+ /* checked for duplicates in slap_mods_check */
if ( dup ) {
for ( j = 0; mods->sml_values[j].bv_val; j++ ) {
#endif
}
+#if 0 /* checked for duplicates in slap_mods_check */
if( mods->sml_values[1].bv_val != NULL ) {
/* check for duplicates */
int i, j, rc, match;
}
}
}
+#endif
attr = ch_calloc( 1, sizeof(Attribute) );
attr->a_desc = mods->sml_desc;
/* move values to attr structure */
- /* should check for duplicates */
if ( dup ) {
int i;
for ( i = 0; mods->sml_values[i].bv_val; i++ ) /* EMPTY */;
if ( SLAP_LASTMOD( op->o_bd ) ) {
char *ptr;
+ int gotcsn = 0;
timestamp.bv_val = timebuf;
+
+ a = attr_find( op->ora_e->e_attrs, slap_schema.si_ad_entryCSN );
+ if ( a ) {
+ gotcsn = 1;
+ csn = a->a_vals[0];
+ }
if ( BER_BVISEMPTY( &op->o_csn )) {
- if ( SLAP_SHADOW( op->o_bd ))
- manage_ctxcsn = 0;
- csn.bv_val = csnbuf;
- csn.bv_len = sizeof(csnbuf);
- slap_get_csn( op, &csn, manage_ctxcsn );
+ if ( !gotcsn ) {
+ csn.bv_val = csnbuf;
+ csn.bv_len = sizeof(csnbuf);
+ slap_get_csn( op, &csn, manage_ctxcsn );
+ } else {
+ if ( manage_ctxcsn )
+ slap_queue_csn( op, &csn );
+ }
} else {
csn = op->o_csn;
}
slap_schema.si_ad_createTimestamp, ×tamp, NULL );
}
- a = attr_find( op->ora_e->e_attrs,
- slap_schema.si_ad_entryCSN );
- if ( !a ) {
+ if ( !gotcsn ) {
attr_merge_one( op->ora_e,
slap_schema.si_ad_entryCSN, &csn, NULL );
}