]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/bconfig.c
ITS#4088 force cursors to use same locker
[openldap] / servers / slapd / bconfig.c
index 5718714c279cf0950d9881dcb17f32b55e3243d6..ea679bad6e82aae6400cb92eb9a533a4b139a368 100644 (file)
@@ -136,6 +136,7 @@ enum {
        CFG_TLS_CERT_KEY,
        CFG_TLS_CA_PATH,
        CFG_TLS_CA_FILE,
+       CFG_TLS_DH_DIR,
        CFG_TLS_VERIFY,
        CFG_TLS_CRLCHECK,
        CFG_CONCUR,
@@ -393,7 +394,7 @@ static ConfigTable config_back_cf_table[] = {
                        "SUP labeledURI SINGLE-VALUE )", NULL, NULL },
        { "replica", "host or uri", 2, 0, 0, ARG_DB|ARG_MAGIC,
                &config_replica, "( OLcfgDbAt:0.7 NAME 'olcReplica' "
-                       "SUP labeledURI )", NULL, NULL },
+                       "SUP labeledURI X-ORDERED 'VALUES' )", NULL, NULL },
        { "replica-argsfile", NULL, 0, 0, 0, ARG_STRING,
                &replica_argsFile, "( OLcfgGlAt:43 NAME 'olcReplicaArgsFile' "
                        "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
@@ -561,6 +562,14 @@ static ConfigTable config_back_cf_table[] = {
 #endif
                "( OLcfgGlAt:75 NAME 'olcTLSVerifyClient' "
                        "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
+       { "TLSDHParamDir", NULL, 0, 0, 0,
+#ifdef HAVE_TLS
+               CFG_TLS_DH_DIR|ARG_STRING|ARG_MAGIC, &config_tls_option,
+#else
+               ARG_IGNORED, NULL,
+#endif
+               "( OLcfgGlAt:77 NAME 'olcTLSDHParamDir' "
+                       "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
        { "ucdata-path", "path", 2, 2, 0, ARG_IGNORED,
                NULL, NULL, NULL, NULL },
        { "updatedn", "dn", 2, 2, 0, ARG_DB|ARG_DN|ARG_QUOTE|ARG_MAGIC,
@@ -618,7 +627,7 @@ static ConfigOCs cf_ocs[] = {
                 "olcThreads $ olcTimeLimit $ olcTLSCACertificateFile $ "
                 "olcTLSCACertificatePath $ olcTLSCertificateFile $ "
                 "olcTLSCertificateKeyFile $ olcTLSCipherSuite $ olcTLSCRLCheck $ "
-                "olcTLSRandFile $ olcTLSVerifyClient $ "
+                "olcTLSRandFile $ olcTLSVerifyClient $ olcTLSDHParamDir $ "
                 "olcObjectIdentifier $ olcAttributeTypes $ olcObjectClasses $ "
                 "olcDitContentRules ) )", Cft_Global },
        { "( OLcfgGlOc:2 "
@@ -1379,7 +1388,7 @@ config_passwd_hash(ConfigArgs *c) {
        }
        for(i = 1; i < c->argc; i++) {
                if(!lutil_passwd_scheme(c->argv[i])) {
-                       sprintf( c->msg, "<%s> schema not available", c->argv[0] );
+                       sprintf( c->msg, "<%s> scheme not available", c->argv[0] );
                        Debug(LDAP_DEBUG_ANY, "%s: %s (%s)\n",
                                c->log, c->msg, c->argv[i]);
                } else {
@@ -2013,6 +2022,38 @@ str2loglevel( const char *s, int *l )
        return 0;
 }
 
+const char *
+loglevel2str( int l )
+{
+       struct berval   bv = BER_BVNULL;
+
+       loglevel2bv( l, &bv );
+
+       return bv.bv_val;
+}
+
+int
+loglevel2bv( int l, struct berval *bv )
+{
+       if ( loglevel_ops == NULL ) {
+               loglevel_init();
+       }
+
+       BER_BVZERO( bv );
+
+       return enum_to_verb( loglevel_ops, l, bv ) == -1;
+}
+
+int
+loglevel2bvarray( int l, BerVarray *bva )
+{
+       if ( loglevel_ops == NULL ) {
+               loglevel_init();
+       }
+
+       return mask_to_verbs( loglevel_ops, l, bva );
+}
+
 static int config_syslog;
 
 static int
@@ -2028,7 +2069,8 @@ config_loglevel(ConfigArgs *c) {
                /* Get default or commandline slapd setting */
                if ( ldap_syslog && !config_syslog )
                        config_syslog = ldap_syslog;
-               return mask_to_verbs( loglevel_ops, config_syslog, &c->rvalue_vals );
+               return loglevel2bvarray( config_syslog, &c->rvalue_vals );
+
        } else if ( c->op == LDAP_MOD_DELETE ) {
                if ( !c->line ) {
                        config_syslog = 0;
@@ -2481,6 +2523,7 @@ config_tls_option(ConfigArgs *c) {
        case CFG_TLS_CERT_KEY:  flag = LDAP_OPT_X_TLS_KEYFILE;          break;
        case CFG_TLS_CA_PATH:   flag = LDAP_OPT_X_TLS_CACERTDIR;        break;
        case CFG_TLS_CA_FILE:   flag = LDAP_OPT_X_TLS_CACERTFILE;       break;
+       case CFG_TLS_DH_DIR:    flag = LDAP_OPT_X_TLS_DHPARAMDIR;       break;
        default:                Debug(LDAP_DEBUG_ANY, "%s: "
                                        "unknown tls_option <0x%x>\n",
                                        c->log, c->type, 0);
@@ -2613,7 +2656,7 @@ config_setup_ldif( BackendDB *be, const char *dir, int readit ) {
        setup_cookie sc;
        slap_callback cb = { NULL, config_ldif_resp, NULL, NULL };
        Connection conn = {0};
-       char opbuf[OPERATION_BUFFER_SIZE];
+       OperationBuffer opbuf;
        Operation *op;
        SlapReply rs = {REP_RESULT};
        Filter filter = { LDAP_FILTER_PRESENT };
@@ -2665,7 +2708,7 @@ config_setup_ldif( BackendDB *be, const char *dir, int readit ) {
        if ( readit ) {
                void *thrctx = ldap_pvt_thread_pool_context();
 
-               op = (Operation *)opbuf;
+               op = (Operation *) &opbuf;
                connection_fake_init( &conn, op, thrctx );
 
                filter.f_desc = slap_schema.si_ad_objectClass;
@@ -3427,6 +3470,11 @@ config_back_add( Operation *op, SlapReply *rs )
                BackendDB *be = op->o_bd;
                slap_callback sc = { NULL, slap_null_cb, NULL, NULL };
                op->o_bd = &cfb->cb_db;
+               /* FIXME: there must be a better way. */
+               if ( ber_bvcmp( &op->o_bd->be_rootndn, &be->be_rootndn )) {
+                       op->o_bd->be_rootdn = be->be_rootdn;
+                       op->o_bd->be_rootndn= be->be_rootndn;
+               }
                sc.sc_next = op->o_callback;
                op->o_callback = &sc;
                op->o_bd->be_add( op, rs );
@@ -3751,6 +3799,10 @@ config_back_modify( Operation *op, SlapReply *rs )
                BackendDB *be = op->o_bd;
                slap_callback sc = { NULL, slap_null_cb, NULL, NULL };
                op->o_bd = &cfb->cb_db;
+               if ( ber_bvcmp( &op->o_bd->be_rootndn, &be->be_rootndn )) {
+                       op->o_bd->be_rootdn = be->be_rootdn;
+                       op->o_bd->be_rootndn= be->be_rootndn;
+               }
                sc.sc_next = op->o_callback;
                op->o_callback = &sc;
                op->o_bd->be_modify( op, rs );
@@ -4044,7 +4096,7 @@ config_back_db_open( BackendDB *be )
        BackendInfo *bi;
        ConfigArgs c;
        Connection conn = {0};
-       char opbuf[OPERATION_BUFFER_SIZE];
+       OperationBuffer opbuf;
        Operation *op;
        slap_callback cb = { NULL, slap_null_cb, NULL, NULL };
        SlapReply rs = {REP_RESULT};
@@ -4056,7 +4108,7 @@ config_back_db_open( BackendDB *be )
 
        if ( cfb->cb_use_ldif ) {
                thrctx = ldap_pvt_thread_pool_context();
-               op = (Operation *)opbuf;
+               op = (Operation *) &opbuf;
                connection_fake_init( &conn, op, thrctx );
 
                op->o_dn = be->be_rootdn;