]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/config.c
URIs need to be between double quotes
[openldap] / servers / slapd / back-ldap / config.c
index 05846e015e68518f27d82b42f1a87a684fcc3c13..1bbcf7dacf6af575de4bb983cc0553ce6caa96cb 100644 (file)
@@ -295,8 +295,8 @@ static ConfigOCs ldapocs[] = {
                "NAME 'olcLDAPConfig' "
                "DESC 'LDAP backend configuration' "
                "SUP olcDatabaseConfig "
-               "MUST olcDbURI "
-               "MAY ( olcDbStartTLS "
+               "MAY ( olcDbURI "
+                       "$ olcDbStartTLS "
                        "$ olcDbACLAuthcDn "
                        "$ olcDbACLPasswd "
                        "$ olcDbACLBind "
@@ -351,11 +351,22 @@ static slap_verbmasks cancel_mode[] = {
        { BER_BVNULL,                   0 }
 };
 
+/* see enum in slap.h */
 static slap_cf_aux_table timeout_table[] = {
-       { BER_BVC("add="), 0 * sizeof( time_t ), 'u', 0, NULL },
-       { BER_BVC("delete="), 1 * sizeof( time_t ), 'u', 0, NULL },
-       { BER_BVC("modify="), 2 * sizeof( time_t ), 'u', 0, NULL },
-       { BER_BVC("modrdn="), 3 * sizeof( time_t ), 'u', 0, NULL },
+       { BER_BVC("bind="),     SLAP_OP_BIND * sizeof( time_t ),        'u', 0, NULL },
+       /* unbind makes no sense */
+       { BER_BVC("add="),      SLAP_OP_ADD * sizeof( time_t ),         'u', 0, NULL },
+       { BER_BVC("delete="),   SLAP_OP_DELETE * sizeof( time_t ),      'u', 0, NULL },
+       { BER_BVC("modrdn="),   SLAP_OP_MODRDN * sizeof( time_t ),      'u', 0, NULL },
+       { BER_BVC("modify="),   SLAP_OP_MODIFY * sizeof( time_t ),      'u', 0, NULL },
+       { BER_BVC("compare="),  SLAP_OP_COMPARE * sizeof( time_t ),     'u', 0, NULL },
+#if 0  /* uses timelimit instead */
+       { BER_BVC("search="),   SLAP_OP_SEARCH * sizeof( time_t ),      'u', 0, NULL },
+#endif
+       /* abandon makes little sense */
+#if 0  /* not implemented yet */
+       { BER_BVC("extended="), SLAP_OP_EXTENDED * sizeof( time_t ),    'u', 0, NULL },
+#endif
        { BER_BVNULL, 0, 0, 0, NULL }
 };
 
@@ -515,7 +526,6 @@ slap_retry_info_destroy(
 static int
 slap_idassert_authzfrom_parse( ConfigArgs *c, slap_idassert_t *si )
 {
-       ldapinfo_t      *li = ( ldapinfo_t * )c->be->be_private;
        struct berval   bv;
        struct berval   in;
        int             rc;
@@ -529,7 +539,7 @@ slap_idassert_authzfrom_parse( ConfigArgs *c, slap_idassert_t *si )
                Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->msg, 0 );
                return 1;
        }
-       ber_bvarray_add( &li->li_idassert_authz, &bv );
+       ber_bvarray_add( &si->si_authz, &bv );
 
        return 0;
 }
@@ -664,13 +674,14 @@ int
 slap_idassert_authzfrom_parse_cf( const char *fname, int lineno, const char *arg, slap_idassert_t *si )
 {
        ConfigArgs      c = { 0 };
-       char            *argv[ 2 ];
+       char            *argv[ 3 ];
 
        snprintf( c.log, sizeof( c.log ), "%s: line %d", fname, lineno );
        c.argc = 2;
        c.argv = argv;
-       argv[ 0 ] = arg;
-       argv[ 1 ] = NULL;
+       argv[ 0 ] = "idassert-authzFrom";
+       argv[ 1 ] = (char *)arg;
+       argv[ 2 ] = NULL;
 
        return slap_idassert_authzfrom_parse( &c, si );
 }
@@ -704,10 +715,14 @@ ldap_back_cf_gen( ConfigArgs *c )
                switch( c->type ) {
                case LDAP_BACK_CFG_URI:
                        if ( li->li_uri != NULL ) {
-                               struct berval   bv;
+                               struct berval   bv, bv2;
 
                                ber_str2bv( li->li_uri, 0, 0, &bv );
-                               value_add_one( &c->rvalue_vals, &bv );
+                               bv2.bv_len = bv.bv_len + STRLENOF( "\"\"" );
+                               bv2.bv_val = ch_malloc( bv2.bv_len + 1 );
+                               snprintf( bv2.bv_val, bv2.bv_len + 1,
+                                       "\"%s\"", bv.bv_val );
+                               ber_bvarray_add( &c->rvalue_vals, &bv2 );
 
                        } else {
                                rc = 1;
@@ -921,13 +936,13 @@ ldap_back_cf_gen( ConfigArgs *c )
                case LDAP_BACK_CFG_TIMEOUT:
                        BER_BVZERO( &bv );
 
-                       for ( i = 0; i < LDAP_BACK_OP_LAST; i++ ) {
+                       for ( i = 0; i < SLAP_OP_LAST; i++ ) {
                                if ( li->li_timeout[ i ] != 0 ) {
                                        break;
                                }
                        }
 
-                       if ( i == LDAP_BACK_OP_LAST ) {
+                       if ( i == SLAP_OP_LAST ) {
                                return 1;
                        }
 
@@ -1099,7 +1114,7 @@ ldap_back_cf_gen( ConfigArgs *c )
                        break;
 
                case LDAP_BACK_CFG_TIMEOUT:
-                       for ( i = 0; i < LDAP_BACK_OP_LAST; i++ ) {
+                       for ( i = 0; i < SLAP_OP_LAST; i++ ) {
                                li->li_timeout[ i ] = 0;
                        }
                        break;
@@ -1538,6 +1553,7 @@ done_url:;
                        && mask == LDAP_BACK_F_T_F_DISCOVER
                        && !LDAP_BACK_T_F( li ) )
                {
+                       slap_bindconf   sb = { 0 };
                        int             rc;
 
                        if ( li->li_uri == NULL ) {
@@ -1548,7 +1564,12 @@ done_url:;
                                return 1;
                        }
 
-                       rc = slap_discover_feature( li->li_uri, li->li_version,
+                       ber_str2bv( li->li_uri, 0, 0, &sb.sb_uri );
+                       sb.sb_version = li->li_version;
+                       sb.sb_method = LDAP_AUTH_SIMPLE;
+                       BER_BVSTR( &sb.sb_binddn, "" );
+
+                       rc = slap_discover_feature( &sb,
                                        slap_schema.si_ad_supportedFeatures->ad_cname.bv_val,
                                        LDAP_FEATURE_ABSOLUTE_FILTERS );
                        if ( rc == LDAP_COMPARE_TRUE ) {
@@ -1578,10 +1599,14 @@ done_url:;
                                unsigned        u;
 
                                if ( lutil_atoux( &u, c->argv[ i ], 0 ) != 0 ) {
+                                       snprintf( c->msg, sizeof( c->msg),
+                                               "unable to parse timeout \"%s\"",
+                                               c->argv[ i ] );
+                                       Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->msg, 0 );
                                        return 1;
                                }
 
-                               for ( j = 0; j < LDAP_BACK_OP_LAST; j++ ) {
+                               for ( j = 0; j < SLAP_OP_LAST; j++ ) {
                                        li->li_timeout[ j ] = u;
                                }
 
@@ -1589,6 +1614,10 @@ done_url:;
                        }
 
                        if ( slap_cf_aux_table_parse( c->argv[ i ], li->li_timeout, timeout_table, "slapd-ldap timeout" ) ) {
+                               snprintf( c->msg, sizeof( c->msg),
+                                       "unable to parse timeout \"%s\"",
+                                       c->argv[ i ] );
+                               Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->msg, 0 );
                                return 1;
                        }
                }
@@ -1669,6 +1698,7 @@ done_url:;
                        && mask == LDAP_BACK_F_CANCEL_EXOP_DISCOVER
                        && !LDAP_BACK_CANCEL( li ) )
                {
+                       slap_bindconf   sb = { 0 };
                        int             rc;
 
                        if ( li->li_uri == NULL ) {
@@ -1679,7 +1709,12 @@ done_url:;
                                return 1;
                        }
 
-                       rc = slap_discover_feature( li->li_uri, li->li_version,
+                       ber_str2bv( li->li_uri, 0, 0, &sb.sb_uri );
+                       sb.sb_version = li->li_version;
+                       sb.sb_method = LDAP_AUTH_SIMPLE;
+                       BER_BVSTR( &sb.sb_binddn, "" );
+
+                       rc = slap_discover_feature( &sb,
                                        slap_schema.si_ad_supportedExtension->ad_cname.bv_val,
                                        LDAP_EXOP_CANCEL );
                        if ( rc == LDAP_COMPARE_TRUE ) {