#ifdef LDAP_DEBUG
#ifdef NEW_LOGGING
LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
- "do_modify: modifications:\n" ));
+ "do_modify: modifications:\n" ));
#else
Debug( LDAP_DEBUG_ARGS, "modifications:\n", 0, 0, 0 );
#endif
"\t%s: %s\n", tmp->ml_op == LDAP_MOD_ADD ?
"add" : (tmp->ml_op == LDAP_MOD_DELETE ?
"delete" : "replace"), tmp->ml_type ));
+
+ if ( tmp->ml_bvalues == NULL ) {
+ LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
+ "\t\tno values" ));
+ } else if ( tmp->ml_bvalues[0] == NULL ) {
+ LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
+ "\t\tzero values" ));
+ } else if ( tmp->ml_bvalues[1] == NULL ) {
+ LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
+ "\t\tone value" ));
+ } else {
+ LDAP_LOG(( "operation", LDAP_LEVEL_DETAIL1,
+ "\t\tmultiple values" ));
+ }
+
#else
Debug( LDAP_DEBUG_ARGS, "\t%s: %s\n",
tmp->ml_op == LDAP_MOD_ADD
? "add" : (tmp->ml_op == LDAP_MOD_DELETE
? "delete" : "replace"), tmp->ml_type, 0 );
-#endif
+ if ( tmp->ml_bvalues == NULL ) {
+ Debug( LDAP_DEBUG_ARGS, "%s\n",
+ "\t\tno values", NULL, NULL );
+ } else if ( tmp->ml_bvalues[0] == NULL ) {
+ Debug( LDAP_DEBUG_ARGS, "%s\n",
+ "\t\tzero values", NULL, NULL );
+ } else if ( tmp->ml_bvalues[1] == NULL ) {
+ Debug( LDAP_DEBUG_ARGS, "%s, length %ld\n",
+ "\t\tone value", (long) tmp->ml_bvalues[0]->bv_len, NULL );
+ } else {
+ Debug( LDAP_DEBUG_ARGS, "%s\n",
+ "\t\tmultiple values", NULL, NULL );
+ }
+#endif
}
#endif
ber_len_t nvals;
slap_syntax_validate_func *validate =
ad->ad_type->sat_syntax->ssyn_validate;
-
- if( !validate ) {
+ slap_syntax_transform_func *pretty =
+ ad->ad_type->sat_syntax->ssyn_pretty;
+
+ if( !pretty && !validate ) {
slap_mods_free( mod );
*text = "no validator for syntax";
snprintf( textbuf, textlen,
/*
* check that each value is valid per syntax
+ * and pretty if appropriate
*/
for( nvals = 0; ml->ml_bvalues[nvals]; nvals++ ) {
- rc = validate( ad->ad_type->sat_syntax, ml->ml_bvalues[nvals] );
+ struct berval *pval;
+ if( pretty ) {
+ rc = pretty( ad->ad_type->sat_syntax,
+ ml->ml_bvalues[nvals], &pval );
+ } else {
+ rc = validate( ad->ad_type->sat_syntax,
+ ml->ml_bvalues[nvals] );
+ }
if( rc != 0 ) {
slap_mods_free( mod );
*text = textbuf;
return LDAP_INVALID_SYNTAX;
}
+
+ if( pretty ) {
+ ber_memfree( ml->ml_bvalues[nvals]->bv_val );
+ *ml->ml_bvalues[nvals] = *pval;
+ free( pval );
+ }
}
/*
Modifications **modtail,
const char **text )
{
- struct berval name, timestamp;
+ struct berval name, timestamp, csn;
time_t now = slap_get_time();
char timebuf[22];
+ char csnbuf[64];
struct tm *ltm;
Modifications *mod;
ldap_pvt_thread_mutex_lock( &gmtime_mutex );
ltm = gmtime( &now );
strftime( timebuf, sizeof(timebuf), "%Y%m%d%H%M%SZ", ltm );
+
+ csn.bv_len = lutil_csnstr( csnbuf, sizeof( csnbuf ), 0, 0 );
ldap_pvt_thread_mutex_unlock( &gmtime_mutex );
+ csn.bv_val = csnbuf;
+
timestamp.bv_val = timebuf;
timestamp.bv_len = strlen(timebuf);
}
if( op->o_tag == LDAP_REQ_ADD ) {
+ struct berval uuid;
+ char uuidbuf[40];
+
+ uuid.bv_len = lutil_uuidstr( uuidbuf, sizeof( uuidbuf ) );
+ uuid.bv_val = uuidbuf;
+
+ mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
+ mod->sml_op = mop;
+ mod->sml_desc = slap_schema.si_ad_entryUUID;
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
+ mod->sml_bvalues[0] = ber_bvdup( &uuid );
+ mod->sml_bvalues[1] = NULL;
+ assert( mod->sml_bvalues[0] );
+ *modtail = mod;
+ modtail = &mod->sml_next;
+
mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
mod->sml_op = mop;
mod->sml_desc = slap_schema.si_ad_creatorsName;
mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
mod->sml_bvalues[0] = ber_bvdup( &name );
mod->sml_bvalues[1] = NULL;
-
+ assert( mod->sml_bvalues[0] );
*modtail = mod;
modtail = &mod->sml_next;
mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
mod->sml_bvalues[0] = ber_bvdup( ×tamp );
mod->sml_bvalues[1] = NULL;
+ assert( mod->sml_bvalues[0] );
*modtail = mod;
modtail = &mod->sml_next;
}
+ mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
+ mod->sml_op = mop;
+ mod->sml_desc = slap_schema.si_ad_entryCSN;
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof(struct berval *) );
+ mod->sml_bvalues[0] = ber_bvdup( &csn );
+ mod->sml_bvalues[1] = NULL;
+ assert( mod->sml_bvalues[0] );
+ *modtail = mod;
+ modtail = &mod->sml_next;
+
mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
mod->sml_op = mop;
mod->sml_desc = slap_schema.si_ad_modifiersName;
- mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof(struct berval *) );
mod->sml_bvalues[0] = ber_bvdup( &name );
mod->sml_bvalues[1] = NULL;
+ assert( mod->sml_bvalues[0] );
*modtail = mod;
modtail = &mod->sml_next;
mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
mod->sml_op = mop;
mod->sml_desc = slap_schema.si_ad_modifyTimestamp;
- mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof(struct berval *) );
mod->sml_bvalues[0] = ber_bvdup( ×tamp );
mod->sml_bvalues[1] = NULL;
+ assert( mod->sml_bvalues[0] );
*modtail = mod;
modtail = &mod->sml_next;