diff --git a/CHANGES b/CHANGES index 94fab916101e95df64f1d5eec95fc69a7c920242..9f6ca4fa6838e2860290e7f93a539eb99fec6f73 100644 --- a/CHANGES +++ b/CHANGES @@ -31,6 +31,7 @@ OpenLDAP 2.4.14 Engineering Fixed slapd-meta double response sending (ITS#5854) Fixed slapd-meta alias deref for retry (ITS#5889) Fixed slapo-ppolicy to not be global (ITS#5858) + Fixed slapo-rwm with back-config (ITS#5906) Updated contrib/addpartial module (ITS#5764) Added contrib/cloak module (ITS#5872) Build Environment diff --git a/servers/slapd/overlays/rwm.c b/servers/slapd/overlays/rwm.c index b0e51d6f82f329353be1a0f51d634b3c30e45ab6..66844b388e0aca1d9a318748db437dd42207c38d 100644 --- a/servers/slapd/overlays/rwm.c +++ b/servers/slapd/overlays/rwm.c @@ -1830,7 +1830,6 @@ rwm_db_config( enum { /* rewrite */ RWM_CF_REWRITE = 1, - RWM_CF_SUFFIXMASSAGE, /* map */ RWM_CF_MAP, @@ -1841,8 +1840,10 @@ enum { }; static slap_verbmasks t_f_mode[] = { + { BER_BVC( "true" ), RWM_F_SUPPORT_T_F }, { BER_BVC( "yes" ), RWM_F_SUPPORT_T_F }, { BER_BVC( "discover" ), RWM_F_SUPPORT_T_F_DISCOVER }, + { BER_BVC( "false" ), RWM_F_NONE }, { BER_BVC( "no" ), RWM_F_NONE }, { BER_BVNULL, 0 } }; @@ -1852,7 +1853,7 @@ static ConfigDriver rwm_cf_gen; static ConfigTable rwmcfg[] = { { "rwm-rewrite", "rewrite", 2, 0, STRLENOF("rwm-rewrite"), - ARG_MAGIC|ARG_QUOTE|RWM_CF_REWRITE, rwm_cf_gen, + ARG_MAGIC|RWM_CF_REWRITE, rwm_cf_gen, "( OLcfgOvAt:16.1 NAME 'olcRwmRewrite' " "DESC 'Rewrites strings' " "EQUALITY caseIgnoreMatch " @@ -1861,7 +1862,7 @@ static ConfigTable rwmcfg[] = { NULL, NULL }, { "rwm-suffixmassage", "[virtual]> <real", - 2, 3, 0, ARG_MAGIC|RWM_CF_SUFFIXMASSAGE, rwm_cf_gen, + 2, 3, 0, ARG_MAGIC|RWM_CF_REWRITE, rwm_cf_gen, NULL, NULL, NULL }, { "rwm-t-f-support", "true|false|discover", @@ -1955,6 +1956,7 @@ rwm_cf_gen( ConfigArgs *c ) BackendDB db; char *argv0; + int idx0 = 0; int rc = 0; db = *c->be; @@ -2059,37 +2061,26 @@ rwm_cf_gen( ConfigArgs *c ) return rc; } + if ( strncasecmp( c->argv[ 0 ], "olcRwm", STRLENOF( "olcRwm" ) ) == 0 ) { + idx0 = 1; + } + switch ( c->type ) { case RWM_CF_REWRITE: - argv0 = c->argv[ 0 ]; - c->argv[ 0 ] += STRLENOF( "rwm-" ); - rc = rwm_rw_config( &db, c->fname, c->lineno, c->argc, c->argv ); - c->argv[ 0 ] = argv0; - if ( rc ) { + argv0 = c->argv[ idx0 ]; + if ( strncasecmp( argv0, "rwm-", STRLENOF( "rwm-" ) ) != 0 ) { return 1; + } + c->argv[ idx0 ] += STRLENOF( "rwm-" ); + if ( strcasecmp( c->argv[ idx0 ], "suffixmassage" ) == 0 ) { + rc = rwm_suffixmassage_config( &db, c->fname, c->lineno, + c->argc - idx0, &c->argv[ idx0 ] ); } else { - char *line; - struct berval bv; - - line = ldap_charray2str( c->argv, "\" \"" ); - if ( line != NULL ) { - int len = strlen( c->argv[ 0 ] ); - - ber_str2bv( line, 0, 0, &bv ); - AC_MEMCPY( &bv.bv_val[ len ], &bv.bv_val[ len + 1 ], - bv.bv_len - ( len + 1 ) ); - bv.bv_val[ bv.bv_len - 1 ] = '"'; - ber_bvarray_add( &rwmap->rwm_bva_rewrite, &bv ); - } + rc = rwm_rw_config( &db, c->fname, c->lineno, + c->argc - idx0, &c->argv[ idx0 ] ); } - break; - - case RWM_CF_SUFFIXMASSAGE: - argv0 = c->argv[ 0 ]; - c->argv[ 0 ] += STRLENOF( "rwm-" ); - rc = rwm_suffixmassage_config( &db, c->fname, c->lineno, c->argc, c->argv ); - c->argv[ 0 ] = argv0; + c->argv[ idx0 ] = argv0; if ( rc ) { return 1; @@ -2097,14 +2088,9 @@ rwm_cf_gen( ConfigArgs *c ) char *line; struct berval bv; - /* FIXME: not optimal; in fact, this keeps track - * of the fact that a set of rules was added - * using the rwm-suffixmassage shortcut, but the - * rules are not clarified */ - - line = ldap_charray2str( c->argv, "\" \"" ); + line = ldap_charray2str( &c->argv[ idx0 ], "\" \"" ); if ( line != NULL ) { - int len = strlen( c->argv[ 0 ] ); + int len = strlen( c->argv[ idx0 ] ); ber_str2bv( line, 0, 0, &bv ); AC_MEMCPY( &bv.bv_val[ len ], &bv.bv_val[ len + 1 ],