mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-23 08:09:34 -05:00
fix back-config handling of slapo-rwm
This commit is contained in:
parent
988fb232d2
commit
bf261acda7
1 changed files with 22 additions and 36 deletions
|
|
@ -1830,7 +1830,6 @@ rwm_db_config(
|
||||||
enum {
|
enum {
|
||||||
/* rewrite */
|
/* rewrite */
|
||||||
RWM_CF_REWRITE = 1,
|
RWM_CF_REWRITE = 1,
|
||||||
RWM_CF_SUFFIXMASSAGE,
|
|
||||||
|
|
||||||
/* map */
|
/* map */
|
||||||
RWM_CF_MAP,
|
RWM_CF_MAP,
|
||||||
|
|
@ -1841,8 +1840,10 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
static slap_verbmasks t_f_mode[] = {
|
static slap_verbmasks t_f_mode[] = {
|
||||||
|
{ BER_BVC( "true" ), RWM_F_SUPPORT_T_F },
|
||||||
{ BER_BVC( "yes" ), RWM_F_SUPPORT_T_F },
|
{ BER_BVC( "yes" ), RWM_F_SUPPORT_T_F },
|
||||||
{ BER_BVC( "discover" ), RWM_F_SUPPORT_T_F_DISCOVER },
|
{ BER_BVC( "discover" ), RWM_F_SUPPORT_T_F_DISCOVER },
|
||||||
|
{ BER_BVC( "false" ), RWM_F_NONE },
|
||||||
{ BER_BVC( "no" ), RWM_F_NONE },
|
{ BER_BVC( "no" ), RWM_F_NONE },
|
||||||
{ BER_BVNULL, 0 }
|
{ BER_BVNULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
@ -1852,7 +1853,7 @@ static ConfigDriver rwm_cf_gen;
|
||||||
static ConfigTable rwmcfg[] = {
|
static ConfigTable rwmcfg[] = {
|
||||||
{ "rwm-rewrite", "rewrite",
|
{ "rwm-rewrite", "rewrite",
|
||||||
2, 0, STRLENOF("rwm-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' "
|
"( OLcfgOvAt:16.1 NAME 'olcRwmRewrite' "
|
||||||
"DESC 'Rewrites strings' "
|
"DESC 'Rewrites strings' "
|
||||||
"EQUALITY caseIgnoreMatch "
|
"EQUALITY caseIgnoreMatch "
|
||||||
|
|
@ -1861,7 +1862,7 @@ static ConfigTable rwmcfg[] = {
|
||||||
NULL, NULL },
|
NULL, NULL },
|
||||||
|
|
||||||
{ "rwm-suffixmassage", "[virtual]> <real",
|
{ "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 },
|
NULL, NULL, NULL },
|
||||||
|
|
||||||
{ "rwm-t-f-support", "true|false|discover",
|
{ "rwm-t-f-support", "true|false|discover",
|
||||||
|
|
@ -1955,6 +1956,7 @@ rwm_cf_gen( ConfigArgs *c )
|
||||||
|
|
||||||
BackendDB db;
|
BackendDB db;
|
||||||
char *argv0;
|
char *argv0;
|
||||||
|
int idx0 = 0;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
db = *c->be;
|
db = *c->be;
|
||||||
|
|
@ -2059,37 +2061,26 @@ rwm_cf_gen( ConfigArgs *c )
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( strncasecmp( c->argv[ 0 ], "olcRwm", STRLENOF( "olcRwm" ) ) == 0 ) {
|
||||||
|
idx0 = 1;
|
||||||
|
}
|
||||||
|
|
||||||
switch ( c->type ) {
|
switch ( c->type ) {
|
||||||
case RWM_CF_REWRITE:
|
case RWM_CF_REWRITE:
|
||||||
argv0 = c->argv[ 0 ];
|
argv0 = c->argv[ idx0 ];
|
||||||
c->argv[ 0 ] += STRLENOF( "rwm-" );
|
if ( strncasecmp( argv0, "rwm-", STRLENOF( "rwm-" ) ) != 0 ) {
|
||||||
rc = rwm_rw_config( &db, c->fname, c->lineno, c->argc, c->argv );
|
|
||||||
c->argv[ 0 ] = argv0;
|
|
||||||
if ( rc ) {
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
} 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 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
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 ] );
|
||||||
|
|
||||||
case RWM_CF_SUFFIXMASSAGE:
|
} else {
|
||||||
argv0 = c->argv[ 0 ];
|
rc = rwm_rw_config( &db, c->fname, c->lineno,
|
||||||
c->argv[ 0 ] += STRLENOF( "rwm-" );
|
c->argc - idx0, &c->argv[ idx0 ] );
|
||||||
rc = rwm_suffixmassage_config( &db, c->fname, c->lineno, c->argc, c->argv );
|
}
|
||||||
c->argv[ 0 ] = argv0;
|
c->argv[ idx0 ] = argv0;
|
||||||
if ( rc ) {
|
if ( rc ) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
|
@ -2097,14 +2088,9 @@ rwm_cf_gen( ConfigArgs *c )
|
||||||
char *line;
|
char *line;
|
||||||
struct berval bv;
|
struct berval bv;
|
||||||
|
|
||||||
/* FIXME: not optimal; in fact, this keeps track
|
line = ldap_charray2str( &c->argv[ idx0 ], "\" \"" );
|
||||||
* 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, "\" \"" );
|
|
||||||
if ( line != NULL ) {
|
if ( line != NULL ) {
|
||||||
int len = strlen( c->argv[ 0 ] );
|
int len = strlen( c->argv[ idx0 ] );
|
||||||
|
|
||||||
ber_str2bv( line, 0, 0, &bv );
|
ber_str2bv( line, 0, 0, &bv );
|
||||||
AC_MEMCPY( &bv.bv_val[ len ], &bv.bv_val[ len + 1 ],
|
AC_MEMCPY( &bv.bv_val[ len ], &bv.bv_val[ len + 1 ],
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue