/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1999-2013 The OpenLDAP Foundation.
+ * Copyright 1999-2018 The OpenLDAP Foundation.
* Portions Copyright 2001-2003 Pierangelo Masarati.
* Portions Copyright 1999-2003 Howard Chu.
* All rights reserved.
#include "../back-ldap/back-ldap.h"
#include "back-meta.h"
+#ifdef LDAP_DEVEL
#define SLAP_AUTH_DN 1
+#endif
static ConfigDriver meta_back_cf_gen;
static ConfigLDAPadd meta_ldadd;
case LDAP_BACK_CFG_IDASSERT_AUTHZFROM: {
BerVarray *bvp;
- bvp = &mt->mt_idassert_authz; break;
+ bvp = &mt->mt_idassert_authz;
if ( c->valx < 0 ) {
if ( *bvp != NULL ) {
ber_bvarray_free( *bvp );
case LDAP_BACK_CFG_SUFFIXM: /* unused */
case LDAP_BACK_CFG_REWRITE:
- if ( mt->mt_rwmap.rwm_bva_rewrite ) {
- ber_bvarray_free( mt->mt_rwmap.rwm_bva_rewrite );
- mt->mt_rwmap.rwm_bva_rewrite = NULL;
- }
- if ( mt->mt_rwmap.rwm_rw )
+ {
+ if ( c->valx >= 0 ) {
+ int i;
+
+ for ( i = 0; !BER_BVISNULL( &mt->mt_rwmap.rwm_bva_rewrite[ i ] ); i++ );
+
+ if ( c->valx >= i ) {
+ rc = 1;
+ break;
+ }
+
+ ber_memfree( mt->mt_rwmap.rwm_bva_rewrite[ c->valx ].bv_val );
+ for ( i = c->valx; !BER_BVISNULL( &mt->mt_rwmap.rwm_bva_rewrite[ i + 1 ] ); i++ )
+ {
+ mt->mt_rwmap.rwm_bva_rewrite[ i ] = mt->mt_rwmap.rwm_bva_rewrite[ i + 1 ];
+ }
+ BER_BVZERO( &mt->mt_rwmap.rwm_bva_rewrite[ i ] );
+
rewrite_info_delete( &mt->mt_rwmap.rwm_rw );
- break;
+ assert( mt->mt_rwmap.rwm_rw == NULL );
+
+ rc = meta_rwi_init( &mt->mt_rwmap.rwm_rw );
+
+ for ( i = 0; !BER_BVISNULL( &mt->mt_rwmap.rwm_bva_rewrite[ i ] ); i++ )
+ {
+ ConfigArgs ca = { 0 };
+
+ ca.line = mt->mt_rwmap.rwm_bva_rewrite[ i ].bv_val;
+ init_config_argv( &ca );
+ config_parse_ldif( &ca );
+
+ if ( !strcasecmp( ca.argv[0], "suffixmassage" )) {
+ rc = meta_suffixm_config( &ca, ca.argc, ca.argv, mt );
+ } else {
+ rc = rewrite_parse( mt->mt_rwmap.rwm_rw,
+ c->fname, c->lineno, ca.argc, ca.argv );
+ }
+
+
+ ch_free( ca.tline );
+ ch_free( ca.argv );
+
+ assert( rc == 0 );
+ }
+
+ } else if ( mt->mt_rwmap.rwm_rw != NULL ) {
+ if ( mt->mt_rwmap.rwm_bva_rewrite ) {
+ ber_bvarray_free( mt->mt_rwmap.rwm_bva_rewrite );
+ mt->mt_rwmap.rwm_bva_rewrite = NULL;
+ }
+ if ( mt->mt_rwmap.rwm_rw )
+ rewrite_info_delete( &mt->mt_rwmap.rwm_rw );
+
+ meta_rwi_init( &mt->mt_rwmap.rwm_rw );
+ }
+ }
+ break;
case LDAP_BACK_CFG_MAP:
if ( mt->mt_rwmap.rwm_bva_map ) {
return 1;
}
mc->mc_flags &= ~LDAP_BACK_F_CANCEL_MASK2;
- mc->mc_flags |= t_f_mode[i].mask;
+ mc->mc_flags |= cancel_mode[i].mask;
break;
case LDAP_BACK_CFG_TIMEOUT:
/* re-parse all rewrite rules, up to the one
* that needs to be added */
+ ca.be = c->be;
ca.fname = c->fname;
ca.lineno = c->lineno;
for ( i = 0; i < ix; i++ ) {