/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1999-2007 The OpenLDAP Foundation.
+ * Copyright 1999-2009 The OpenLDAP Foundation.
* Portions Copyright 2001-2003 Pierangelo Masarati.
* Portions Copyright 1999-2003 Howard Chu.
* All rights reserved.
SLAP_BFLAG_DYNAMIC |
#endif /* LDAP_DYNAMIC_OBJECTS */
#endif
- 0;
+
+ /* back-meta recognizes RFC4525 increment;
+ * let the remote server complain, if needed (ITS#5912) */
+ SLAP_BFLAG_INCREMENT;
bi->bi_open = meta_back_open;
bi->bi_config = 0;
int
meta_back_db_init(
Backend *be,
- ConfigArgs *ca)
+ ConfigReply *cr)
{
metainfo_t *mi;
int i;
+ BackendInfo *bi;
+
+ bi = backend_info( "ldap" );
+ if ( !bi || !bi->bi_extra ) {
+ Debug( LDAP_DEBUG_ANY,
+ "meta_back_db_init: needs back-ldap\n",
+ 0, 0, 0 );
+ return 1;
+ }
mi = ch_calloc( 1, sizeof( metainfo_t ) );
if ( mi == NULL ) {
return -1;
}
+ /* set default flags */
+ mi->mi_flags =
+ META_BACK_F_DEFER_ROOTDN_BIND;
+
/*
* At present the default is no default target;
* this may change
}
mi->mi_conn_priv_max = LDAP_BACK_CONN_PRIV_DEFAULT;
+ mi->mi_ldap_extra = (ldap_extra_t *)bi->bi_extra;
+
be->be_private = mi;
return 0;
int
meta_back_db_open(
Backend *be,
- ConfigArgs *ca )
+ ConfigReply *cr )
{
metainfo_t *mi = (metainfo_t *)be->be_private;
slap_bindconf sb = { BER_BVNULL };
metatarget_t *mt = mi->mi_targets[ i ];
+ struct berval mapped;
+
ber_str2bv( mt->mt_uri, 0, 0, &sb.sb_uri );
sb.sb_version = mt->mt_version;
sb.sb_method = LDAP_AUTH_SIMPLE;
not_always_anon_non_prescriptive = 1;
}
}
+
+ BER_BVZERO( &mapped );
+ ldap_back_map( &mt->mt_rwmap.rwm_at,
+ &slap_schema.si_ad_entryDN->ad_cname, &mapped,
+ BACKLDAP_REMAP );
+ if ( BER_BVISNULL( &mapped ) || mapped.bv_val[0] == '\0' ) {
+ mt->mt_rep_flags |= REP_NO_ENTRYDN;
+ }
+
+ BER_BVZERO( &mapped );
+ ldap_back_map( &mt->mt_rwmap.rwm_at,
+ &slap_schema.si_ad_subschemaSubentry->ad_cname, &mapped,
+ BACKLDAP_REMAP );
+ if ( BER_BVISNULL( &mapped ) || mapped.bv_val[0] == '\0' ) {
+ mt->mt_rep_flags |= REP_NO_SUBSCHEMA;
+ }
}
if ( not_always == 0 ) {
int
meta_back_db_destroy(
Backend *be,
- ConfigArgs *ca )
+ ConfigReply *cr )
{
metainfo_t *mi;
if ( META_BACK_TGT_QUARANTINE( mt ) ) {
if ( mt->mt_quarantine.ri_num != mi->mi_quarantine.ri_num )
{
- slap_retry_info_destroy( &mt->mt_quarantine );
+ mi->mi_ldap_extra->retry_info_destroy( &mt->mt_quarantine );
}
ldap_pvt_thread_mutex_destroy( &mt->mt_quarantine_mutex );
}
if ( META_BACK_QUARANTINE( mi ) ) {
- slap_retry_info_destroy( &mi->mi_quarantine );
+ mi->mi_ldap_extra->retry_info_destroy( &mi->mi_quarantine );
}
}