- bv.bv_val = buf;
- bv.bv_len = strlen( bv.bv_val );
- m = (LDAPModList *) ch_calloc( 1, sizeof(LDAPModList) );
- m->ml_type = ch_strdup( "modifytimestamp" );
- m->ml_op = LDAP_MOD_REPLACE;
- m->ml_bvalues = (struct berval **) ch_calloc(2, sizeof(struct berval *));
- m->ml_bvalues[0] = ber_bvdup( &bv );
- m->ml_next = *modlist;
- *modlist = m;
+ if( op->o_dn == NULL || op->o_dn[0] == '\0' ) {
+ name.bv_val = SLAPD_ANONYMOUS;
+ name.bv_len = sizeof(SLAPD_ANONYMOUS)-1;
+ } else {
+ name.bv_val = op->o_dn;
+ name.bv_len = strlen( op->o_dn );
+ }
+
+ if( op->o_tag == LDAP_REQ_ADD ) {
+ mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
+ mod->sml_op = mop;
+ mod->sml_desc = ad_dup( 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;
+
+ *modtail = mod;
+ modtail = &mod->sml_next;
+
+ mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
+ mod->sml_op = mop;
+ mod->sml_desc = ad_dup( slap_schema.si_ad_createTimestamp );
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
+ mod->sml_bvalues[0] = ber_bvdup( ×tamp );
+ mod->sml_bvalues[1] = NULL;
+ *modtail = mod;
+ modtail = &mod->sml_next;
+ }
+
+ mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
+ mod->sml_op = mop;
+ mod->sml_desc = ad_dup( slap_schema.si_ad_modifiersName );
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
+ mod->sml_bvalues[0] = ber_bvdup( &name );
+ mod->sml_bvalues[1] = NULL;
+ *modtail = mod;
+ modtail = &mod->sml_next;
+
+ mod = (Modifications *) ch_calloc( 1, sizeof( Modifications ) );
+ mod->sml_op = mop;
+ mod->sml_desc = ad_dup( slap_schema.si_ad_modifyTimestamp );
+ mod->sml_bvalues = (struct berval **) malloc( 2 * sizeof( struct berval * ) );
+ mod->sml_bvalues[0] = ber_bvdup( ×tamp );
+ mod->sml_bvalues[1] = NULL;
+ *modtail = mod;
+ modtail = &mod->sml_next;