+ did = "replace"; break;
+
+ case LDAP_MOD_INCREMENT:
+ did = "increment"; break;
+ }
+ if ( ri && ri->ri_attrs ) {
+ int is_in = ad_inlist( ml->sml_desc, ri->ri_attrs );
+
+ if ( ( !is_in && !ri->ri_exclude )
+ || ( is_in && ri->ri_exclude ) )
+ {
+ continue;
+ }
+ /* If this is objectClass, see if the value is included
+ * in any subset, otherwise drop it.
+ */
+ if ( ocs && ml->sml_desc == slap_schema.si_ad_objectClass
+ && ml->sml_values )
+ {
+ int i, first = 1;
+
+ if ( ocs == -1 ) ocs = 0;
+
+ for ( i=0; ml->sml_values[i].bv_val; i++ ) {
+ int match = 0;
+ for ( an = ri->ri_attrs; an->an_name.bv_val; an++ ) {
+ if ( an->an_oc ) {
+ ocs = 1;
+ match |= an->an_oc_exclude;
+ if ( ml->sml_values[i].bv_len == an->an_name.bv_len
+ && !strcasecmp(ml->sml_values[i].bv_val,
+ an->an_name.bv_val ) ) {
+ match = !an->an_oc_exclude;
+ break;
+ }
+ }
+ }
+ /* Objectclasses need no special treatment, drop into
+ * regular processing
+ */
+ if ( !ocs ) break;
+
+ match ^= ri->ri_exclude;
+ /* Found a match, log it */
+ if ( match ) {
+ if ( dohdr ) {
+ rephdr( ri, op, fp, now );
+ fprintf( fp, "changetype: modify\n" );
+ dohdr = 0;
+ }
+ if ( first ) {
+ fprintf( fp, "%s: %s\n", did, type );
+ first = 0;
+ }
+ vals[0] = an->an_name;
+ print_vals( fp, &ml->sml_desc->ad_cname, vals );
+ ocs = 2;
+ }
+
+ }
+ /* Explicit objectclasses have been handled already */
+ if ( ocs ) {
+ if ( ocs == 2 ) {
+ fprintf( fp, "-\n" );
+ }
+ continue;
+ }
+ }
+ }
+ if ( dohdr ) {
+ rephdr( ri, op, fp, now );
+ fprintf( fp, "changetype: modify\n" );
+ dohdr = 0;
+ }
+ fprintf( fp, "%s: %s\n", did, type );
+ if ( ml->sml_values ) {
+ print_vals( fp, &ml->sml_desc->ad_cname, ml->sml_values );