]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/bconfig.c
Cleanup
[openldap] / servers / slapd / bconfig.c
index 8c3e2b9707a9d218ad649dfde79841b9b0f3ffc1..77cff39ea577a47df7885ec76203042ef97e3f36 100644 (file)
@@ -190,6 +190,7 @@ enum {
        CFG_IX_INTLEN,
        CFG_SYNTAX,
        CFG_ACL_ADD,
+       CFG_SYNC_SUBENTRY,
 
        CFG_LAST
 };
@@ -604,6 +605,10 @@ static ConfigTable config_back_cf_table[] = {
                &config_suffix, "( OLcfgDbAt:0.10 NAME 'olcSuffix' "
                        "EQUALITY distinguishedNameMatch "
                        "SYNTAX OMsDN )", NULL, NULL },
+       { "sync_use_subentry", NULL, 0, 0, 0, ARG_ON_OFF|ARG_DB|ARG_MAGIC|CFG_SYNC_SUBENTRY,
+               &config_generic, "( OLcfgDbAt:0.19 NAME 'olcSyncUseSubentry' "
+                       "DESC 'Store sync context in a subentry' "
+                       "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
        { "syncrepl", NULL, 0, 0, 0, ARG_DB|ARG_MAGIC,
                &syncrepl_config, "( OLcfgDbAt:0.11 NAME 'olcSyncrepl' "
                        "EQUALITY caseIgnoreMatch "
@@ -815,7 +820,7 @@ static ConfigOCs cf_ocs[] = {
                 "olcMaxDerefDepth $ olcPlugin $ olcReadOnly $ olcReplica $ "
                 "olcReplicaArgsFile $ olcReplicaPidFile $ olcReplicationInterval $ "
                 "olcReplogFile $ olcRequires $ olcRestrict $ olcRootDN $ olcRootPW $ "
-                "olcSchemaDN $ olcSecurity $ olcSizeLimit $ olcSyncrepl $ "
+                "olcSchemaDN $ olcSecurity $ olcSizeLimit $ olcSyncUseSubentry $ olcSyncrepl $ "
                 "olcTimeLimit $ olcUpdateDN $ olcUpdateRef $ olcMirrorMode $ "
                 "olcMonitoring ) )",
                        Cft_Database, NULL, cfAddDatabase },
@@ -1085,6 +1090,9 @@ config_generic(ConfigArgs *c) {
                case CFG_LASTMOD:
                        c->value_int = (SLAP_NOLASTMOD(c->be) == 0);
                        break;
+               case CFG_SYNC_SUBENTRY:
+                       c->value_int = (SLAP_SYNC_SUBENTRY(c->be) != 0);
+                       break;
                case CFG_MIRRORMODE:
                        if ( SLAP_SHADOW(c->be))
                                c->value_int = (SLAP_SINGLE_SHADOW(c->be) == 0);
@@ -1197,6 +1205,7 @@ config_generic(ConfigArgs *c) {
                case CFG_SSTR_IF_MAX:
                case CFG_SSTR_IF_MIN:
                case CFG_ACL_ADD:
+               case CFG_SYNC_SUBENTRY:
                        break;
 
                /* no-ops, requires slapd restart */
@@ -1901,6 +1910,13 @@ sortval_reject:
                                SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_HIDDEN;
                        break;
 
+               case CFG_SYNC_SUBENTRY:
+                       if (c->value_int)
+                               SLAP_DBFLAGS(c->be) |= SLAP_DBFLAG_SYNC_SUBENTRY;
+                       else
+                               SLAP_DBFLAGS(c->be) &= ~SLAP_DBFLAG_SYNC_SUBENTRY;
+                       break;
+
                case CFG_SSTR_IF_MAX:
                        if (c->value_uint < index_substr_if_minlen) {
                                snprintf( c->cr_msg, sizeof( c->cr_msg ), "<%s> invalid value", c->argv[0] );
@@ -4578,11 +4594,13 @@ schema_destroy_one( ConfigArgs *ca, ConfigOCs **colst, int nocs,
 
        ca->valx = -1;
        ca->line = NULL;
+       ca->argc = 1;
        if ( cfn->c_cr_head ) {
                struct berval bv = BER_BVC("olcDitContentRules");
                ad = NULL;
                slap_bv2ad( &bv, &ad, &text );
                ct = config_find_table( colst, nocs, ad, ca );
+               ca->argv[0] = ct->ad->ad_cname.bv_val;
                config_del_vals( ct, ca );
        }
        if ( cfn->c_oc_head ) {
@@ -4590,6 +4608,7 @@ schema_destroy_one( ConfigArgs *ca, ConfigOCs **colst, int nocs,
                ad = NULL;
                slap_bv2ad( &bv, &ad, &text );
                ct = config_find_table( colst, nocs, ad, ca );
+               ca->argv[0] = ct->ad->ad_cname.bv_val;
                config_del_vals( ct, ca );
        }
        if ( cfn->c_at_head ) {
@@ -4597,6 +4616,7 @@ schema_destroy_one( ConfigArgs *ca, ConfigOCs **colst, int nocs,
                ad = NULL;
                slap_bv2ad( &bv, &ad, &text );
                ct = config_find_table( colst, nocs, ad, ca );
+               ca->argv[0] = ct->ad->ad_cname.bv_val;
                config_del_vals( ct, ca );
        }
        if ( cfn->c_syn_head ) {
@@ -4604,6 +4624,7 @@ schema_destroy_one( ConfigArgs *ca, ConfigOCs **colst, int nocs,
                ad = NULL;
                slap_bv2ad( &bv, &ad, &text );
                ct = config_find_table( colst, nocs, ad, ca );
+               ca->argv[0] = ct->ad->ad_cname.bv_val;
                config_del_vals( ct, ca );
        }
        if ( cfn->c_om_head ) {
@@ -4611,6 +4632,7 @@ schema_destroy_one( ConfigArgs *ca, ConfigOCs **colst, int nocs,
                ad = NULL;
                slap_bv2ad( &bv, &ad, &text );
                ct = config_find_table( colst, nocs, ad, ca );
+               ca->argv[0] = ct->ad->ad_cname.bv_val;
                config_del_vals( ct, ca );
        }
        cfo = p->ce_private;
@@ -5393,6 +5415,7 @@ config_modify_internal( CfEntryInfo *ce, Operation *op, SlapReply *rs,
                                        }
                                        ca->line = bv.bv_val;
                                        ca->valx = d->idx[i];
+                                       config_parse_vals(ct, ca, d->idx[i] );
                                        rc = config_del_vals( ct, ca );
                                        if ( rc != LDAP_SUCCESS ) break;
                                        if ( s )
@@ -5404,6 +5427,8 @@ config_modify_internal( CfEntryInfo *ce, Operation *op, SlapReply *rs,
                        } else {
                                ca->valx = -1;
                                ca->line = NULL;
+                               ca->argc = 1;
+                               ca->argv[0] = ct->ad->ad_cname.bv_val;
                                rc = config_del_vals( ct, ca );
                                if ( rc ) rc = LDAP_OTHER;
                                if ( s )
@@ -5450,6 +5475,8 @@ out:
                                        a->a_flags &= ~(SLAP_ATTR_IXDEL|SLAP_ATTR_IXADD);
                                        ca->valx = -1;
                                        ca->line = NULL;
+                                       ca->argc = 1;
+                                       ca->argv[0] = ct->ad->ad_cname.bv_val;
                                        config_del_vals( ct, ca );
                                }
                                for ( i=0; !BER_BVISNULL( &s->a_vals[i] ); i++ ) {
@@ -5464,6 +5491,8 @@ out:
                                ct = config_find_table( colst, nocs, a->a_desc, ca );
                                ca->valx = -1;
                                ca->line = NULL;
+                               ca->argc = 1;
+                               ca->argv[0] = ct->ad->ad_cname.bv_val;
                                config_del_vals( ct, ca );
                                s = attr_find( save_attrs, a->a_desc );
                                if ( s ) {