]> git.sur5r.net Git - openldap/commitdiff
don't error out if replacing a non-existant attribute, create opattrs in
authorRalf Haferkamp <ralf@openldap.org>
Thu, 31 Jan 2008 18:12:00 +0000 (18:12 +0000)
committerRalf Haferkamp <ralf@openldap.org>
Thu, 31 Jan 2008 18:12:00 +0000 (18:12 +0000)
config_build_entry() to have them also when started with -f (ITS#5343)

servers/slapd/bconfig.c

index 7a15d421778339aba2a1cb31805f639bdeeb15d6..1a265594caec4cfa41f764be8212d0a5f388a41e 100644 (file)
@@ -4705,7 +4705,6 @@ config_modify_internal( CfEntryInfo *ce, Operation *op, SlapReply *rs,
                        rc = modify_delete_vindex(e, &ml->sml_mod,
                                get_permissiveModify(op),
                                &rs->sr_text, ca->cr_msg, sizeof(ca->cr_msg), idx );
-                       if ( rc ) goto out_noop;
                        if ( ml->sml_op == LDAP_MOD_REPLACE ) {
                                ml->sml_values = vals;
                                ml->sml_nvalues = nvals;
@@ -4776,8 +4775,9 @@ config_modify_internal( CfEntryInfo *ce, Operation *op, SlapReply *rs,
                /* check that the entry still obeys the schema */
                rc = entry_schema_check(op, e, NULL, 0, 0,
                        &rs->sr_text, ca->cr_msg, sizeof(ca->cr_msg) );
-               if ( rc ) goto out_noop;
        }
+       if ( rc ) goto out_noop;
+
        /* Basic syntax checks are OK. Do the actual settings. */
        for ( ml = op->orm_modlist; ml; ml = ml->sml_next ) {
                ct = config_find_table( colst, nocs, ml->sml_desc, ca );
@@ -5415,13 +5415,16 @@ config_build_entry( Operation *op, SlapReply *rs, CfEntryInfo *parent,
        rc = structural_class(oc_at->a_vals, &oc, NULL, &text, c->cr_msg,
                sizeof(c->cr_msg), op ? op->o_tmpmemctx : NULL );
        attr_merge_normalize_one(e, slap_schema.si_ad_structuralObjectClass, &oc->soc_cname, NULL );
-       if ( op && !op->o_noop ) {
+       if ( op ) {
                op->ora_e = e;
                op->ora_modlist = NULL;
-               op->o_bd->be_add( op, rs );
-               if ( ( rs->sr_err != LDAP_SUCCESS ) 
-                               && (rs->sr_err != LDAP_ALREADY_EXISTS) ) {
-                       return NULL;
+               slap_add_opattrs( op, NULL, NULL, 0, 0 );
+               if ( !op->o_noop ) {
+                       op->o_bd->be_add( op, rs );
+                       if ( ( rs->sr_err != LDAP_SUCCESS ) 
+                                       && (rs->sr_err != LDAP_ALREADY_EXISTS) ) {
+                               return NULL;
+                       }
                }
        }
        if ( ceprev ) {