version 1.23, 2004/11/13 13:45:18
|
version 1.23.2.7, 2005/07/11 05:55:32
|
Line 1
|
Line 1
|
/* $OpenLDAP: pkg/ldap/servers/slapd/back-meta/back-meta.h,v 1.22 2004/11/10 23:40:51 ando Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/back-meta/back-meta.h,v 1.45 2005/07/04 20:41:54 ando Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 1999-2004 The OpenLDAP Foundation. |
* Copyright 1999-2005 The OpenLDAP Foundation. |
* Portions Copyright 2001-2003 Pierangelo Masarati. |
* Portions Copyright 2001-2003 Pierangelo Masarati. |
* Portions Copyright 1999-2003 Howard Chu. |
* Portions Copyright 1999-2003 Howard Chu. |
* All rights reserved. |
* All rights reserved. |
Line 70 struct ldaprwmap {
|
Line 70 struct ldaprwmap {
|
|
|
/* Whatever context ldap_back_dn_massage needs... */ |
/* Whatever context ldap_back_dn_massage needs... */ |
typedef struct dncookie { |
typedef struct dncookie { |
struct ldaprwmap *rwmap; |
struct metatarget_t *target; |
|
|
#ifdef ENABLE_REWRITE |
#ifdef ENABLE_REWRITE |
Connection *conn; |
Connection *conn; |
char *ctx; |
char *ctx; |
SlapReply *rs; |
SlapReply *rs; |
#else |
#else |
int normalized; |
int normalized; |
int tofrom; |
int tofrom; |
#endif |
#endif |
} dncookie; |
} dncookie; |
|
|
int ldap_back_freeconn( Operation *op, struct ldapconn *lc ); |
/* TODO: allow to define it on a per-target basis */ |
struct ldapconn *ldap_back_getconn(struct slap_op *op, struct slap_rep *rs); |
#define META_BIND_TIMEOUT 10000 |
int ldap_back_dobind(struct ldapconn *lc, Operation *op, SlapReply *rs); |
|
int ldap_back_retry(struct ldapconn *lc, Operation *op, SlapReply *rs); |
|
int ldap_back_map_result(SlapReply *rs); |
|
int ldap_back_op_result(struct ldapconn *lc, Operation *op, SlapReply *rs, |
|
ber_int_t msgid, int sendok); |
|
int back_ldap_LTX_init_module(int argc, char *argv[]); |
|
|
|
int ldap_back_dn_massage(dncookie *dc, struct berval *dn, |
int ldap_back_dn_massage(dncookie *dc, struct berval *dn, |
struct berval *res); |
struct berval *res); |
Line 103 int mapping_cmp (const void *, const voi
|
Line 97 int mapping_cmp (const void *, const voi
|
int mapping_dup (void *, void *); |
int mapping_dup (void *, void *); |
|
|
void ldap_back_map_init ( struct ldapmap *lm, struct ldapmapping ** ); |
void ldap_back_map_init ( struct ldapmap *lm, struct ldapmapping ** ); |
|
int ldap_back_mapping ( struct ldapmap *map, struct berval *s, |
|
struct ldapmapping **m, int remap ); |
void ldap_back_map ( struct ldapmap *map, struct berval *s, struct berval *m, |
void ldap_back_map ( struct ldapmap *map, struct berval *s, struct berval *m, |
int remap ); |
int remap ); |
#define BACKLDAP_MAP 0 |
#define BACKLDAP_MAP 0 |
#define BACKLDAP_REMAP 1 |
#define BACKLDAP_REMAP 1 |
char * |
char * |
ldap_back_map_filter( |
ldap_back_map_filter( |
struct ldapmap *at_map, |
struct ldapmap *at_map, |
struct ldapmap *oc_map, |
struct ldapmap *oc_map, |
struct berval *f, |
struct berval *f, |
int remap |
int remap ); |
); |
|
|
|
int |
int |
ldap_back_map_attrs( |
ldap_back_map_attrs( |
struct ldapmap *at_map, |
struct ldapmap *at_map, |
AttributeName *a, |
AttributeName *a, |
int remap, |
int remap, |
char ***mapped_attrs |
char ***mapped_attrs ); |
); |
|
|
|
extern int ldap_back_map_config( |
extern int ldap_back_map_config( |
struct ldapmap *oc_map, |
struct ldapmap *oc_map, |
struct ldapmap *at_map, |
struct ldapmap *at_map, |
const char *fname, |
const char *fname, |
int lineno, |
int lineno, |
int argc, |
int argc, |
char **argv ); |
char **argv ); |
|
|
extern int |
extern int |
ldap_back_filter_map_rewrite( |
ldap_back_filter_map_rewrite( |
dncookie *dc, |
dncookie *dc, |
Filter *f, |
Filter *f, |
struct berval *fstr, |
struct berval *fstr, |
int remap ); |
int remap ); |
|
|
/* suffix massaging by means of librewrite */ |
/* suffix massaging by means of librewrite */ |
#ifdef ENABLE_REWRITE |
#ifdef ENABLE_REWRITE |
extern int suffix_massage_config( struct rewrite_info *info, |
extern int |
struct berval *pvnc, struct berval *nvnc, |
suffix_massage_config( struct rewrite_info *info, |
struct berval *prnc, struct berval *nrnc); |
struct berval *pvnc, |
|
struct berval *nvnc, |
|
struct berval *prnc, |
|
struct berval *nrnc ); |
#endif /* ENABLE_REWRITE */ |
#endif /* ENABLE_REWRITE */ |
extern int ldap_dnattr_rewrite( dncookie *dc, BerVarray a_vals ); |
extern int |
extern int ldap_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals ); |
ldap_back_referral_result_rewrite( |
|
dncookie *dc, |
|
BerVarray a_vals ); |
|
extern int |
|
ldap_dnattr_rewrite( |
|
dncookie *dc, |
|
BerVarray a_vals ); |
|
extern int |
|
ldap_dnattr_result_rewrite( |
|
dncookie *dc, |
|
BerVarray a_vals ); |
|
|
/* (end of) from back-ldap.h before rwm removal */ |
/* (end of) from back-ldap.h before rwm removal */ |
|
|
struct metasingleconn { |
struct metainfo_t; |
int candidate; |
|
#define META_NOT_CANDIDATE 0 |
typedef struct metasingleconn_t { |
#define META_CANDIDATE 1 |
int msc_candidate; |
#define META_LAST_CONN -1 |
#define META_NOT_CANDIDATE ((ber_tag_t)0) |
|
#define META_CANDIDATE ((ber_tag_t)1) |
|
|
LDAP *ld; |
LDAP *msc_ld; |
struct berval bound_dn; |
struct berval msc_bound_ndn; |
struct berval cred; |
struct berval msc_cred; |
int bound; |
int msc_bound; |
#define META_UNBOUND 0 |
#define META_UNBOUND 0 |
#define META_BOUND 1 |
#define META_BOUND 1 |
#define META_ANONYMOUS 2 |
#define META_ANONYMOUS 2 |
}; |
|
|
|
#define META_LAST(lsc) ((lsc)->candidate == META_LAST_CONN) |
struct metainfo_t *msc_info; |
|
} metasingleconn_t; |
|
|
struct metaconn { |
typedef struct metaconn_t { |
struct slap_conn *conn; |
struct slap_conn *mc_conn; |
struct rewrite_info *rwinfo; |
ldap_pvt_thread_mutex_t mc_mutex; |
|
unsigned mc_refcnt; |
|
|
/* |
/* |
* means that the connection is bound; |
* means that the connection is bound; |
* of course only one target actually is ... |
* of course only one target actually is ... |
*/ |
*/ |
int bound_target; |
int mc_auth_target; |
#define META_BOUND_NONE -1 |
#define META_BOUND_NONE (-1) |
#define META_BOUND_ALL -2 |
#define META_BOUND_ALL (-2) |
/* supersedes the connection stuff */ |
/* supersedes the connection stuff */ |
struct metasingleconn *conns; |
metasingleconn_t mc_conns[ 1 ]; |
}; |
/* NOTE: mc_conns must be last, because |
|
* the required number of conns is malloc'ed |
|
* in one block with the metaconn_t structure */ |
|
} metaconn_t; |
|
|
struct metatarget { |
typedef struct metatarget_t { |
char *uri; |
char *mt_uri; |
struct berval psuffix; /* pretty suffix */ |
|
struct berval suffix; /* normalized suffix */ |
|
struct berval binddn; |
|
struct berval bindpw; |
|
|
|
struct berval pseudorootdn; |
struct berval mt_psuffix; /* pretty suffix */ |
struct berval pseudorootpw; |
struct berval mt_nsuffix; /* normalized suffix */ |
|
|
#if 0 |
struct berval mt_binddn; |
struct rewrite_info *rwinfo; |
struct berval mt_bindpw; |
|
|
struct ldapmap oc_map; |
struct berval mt_pseudorootdn; |
struct ldapmap at_map; |
struct berval mt_pseudorootpw; |
#endif |
|
struct ldaprwmap rwmap; |
int mt_nretries; |
}; |
#define META_RETRY_UNDEFINED (-2) |
|
#define META_RETRY_FOREVER (-1) |
|
#define META_RETRY_NEVER (0) |
|
#define META_RETRY_DEFAULT (3) |
|
|
|
struct ldaprwmap mt_rwmap; |
|
|
|
unsigned mt_flags; |
|
int mt_version; |
|
} metatarget_t; |
|
|
struct metadncache { |
typedef struct metadncache_t { |
ldap_pvt_thread_mutex_t mutex; |
ldap_pvt_thread_mutex_t mutex; |
Avlnode *tree; |
Avlnode *tree; |
|
|
#define META_DNCACHE_DISABLED 0 |
#define META_DNCACHE_DISABLED (0) |
#define META_DNCACHE_FOREVER -1 |
#define META_DNCACHE_FOREVER (-1) |
long int ttl; /* seconds; 0: no cache, -1: no expiry */ |
long int ttl; /* seconds; 0: no cache, -1: no expiry */ |
}; |
} metadncache_t; |
|
|
struct metainfo { |
typedef struct metacandidates_t { |
int ntargets; |
int mc_ntargets; |
int defaulttarget; |
SlapReply *mc_candidates; |
int network_timeout; |
} metacandidates_t; |
#define META_DEFAULT_TARGET_NONE -1 |
|
struct metatarget **targets; |
typedef struct metainfo_t { |
|
int mi_ntargets; |
|
int mi_defaulttarget; |
|
int mi_network_timeout; |
|
#define META_DEFAULT_TARGET_NONE (-1) |
|
int mi_nretries; |
|
|
struct rewrite_info *rwinfo; |
metatarget_t *mi_targets; |
Backend *glue_be; |
metacandidates_t *mi_candidates; |
|
|
struct metadncache cache; |
metadncache_t mi_cache; |
|
|
ldap_pvt_thread_mutex_t conn_mutex; |
ldap_pvt_thread_mutex_t mi_conn_mutex; |
Avlnode *conntree; |
Avlnode *mi_conntree; |
|
|
int savecred; |
unsigned flags; |
}; |
/* uses flags as defined in <back-ldap/back-ldap.h> */ |
|
#define META_BACK_F_ONERR_STOP 0x00010000U |
|
#define META_BACK_ONERR_STOP(mi) ( (mi)->flags & META_BACK_F_ONERR_STOP ) |
|
#define META_BACK_ONERR_CONTINUE(mi) ( !META_BACK_ONERR_CONTINUE( (mi) ) ) |
|
|
|
int mi_version; |
|
} metainfo_t; |
|
|
|
typedef enum meta_op_type { |
|
META_OP_ALLOW_MULTIPLE = 0, |
|
META_OP_REQUIRE_SINGLE, |
|
META_OP_REQUIRE_ALL |
|
} meta_op_type; |
|
|
|
SlapReply * |
|
meta_back_candidates_get( Operation *op ); |
|
|
#define META_OP_ALLOW_MULTIPLE 0x00 |
extern metaconn_t * |
#define META_OP_REQUIRE_SINGLE 0x01 |
|
#define META_OP_REQUIRE_ALL 0x02 |
|
extern struct metaconn * |
|
meta_back_getconn( |
meta_back_getconn( |
Operation *op, |
Operation *op, |
SlapReply *rs, |
SlapReply *rs, |
int op_type, |
int *candidate, |
struct berval *dn, |
ldap_back_send_t sendok ); |
int *candidate |
|
); |
extern void |
|
meta_back_release_conn( |
|
Operation *op, |
|
metaconn_t *mc ); |
|
|
extern int |
extern int |
meta_back_dobind( |
meta_back_retry( |
struct metaconn *lc, |
Operation *op, |
Operation *op |
SlapReply *rs, |
); |
metaconn_t *mc, |
|
int candidate, |
|
ldap_back_send_t sendok ); |
|
|
|
extern void |
|
meta_back_conn_free( |
|
metaconn_t *mc ); |
|
|
|
extern int |
|
meta_back_init_one_conn( |
|
Operation *op, |
|
SlapReply *rs, |
|
metatarget_t *mt, |
|
metasingleconn_t *msc, |
|
ldap_back_send_t sendok ); |
|
|
extern int |
extern int |
meta_back_is_valid( |
meta_back_dobind( |
struct metaconn *lc, |
Operation *op, |
int candidate |
SlapReply *rs, |
); |
metaconn_t *mc, |
|
ldap_back_send_t sendok ); |
|
|
|
int |
|
meta_back_single_dobind( |
|
Operation *op, |
|
SlapReply *rs, |
|
metaconn_t *msc, |
|
int candidate, |
|
ldap_back_send_t sendok, |
|
int retries, |
|
int dolock ); |
|
|
extern int |
extern int |
meta_back_op_result( |
meta_back_op_result( |
struct metaconn *lc, |
metaconn_t *mc, |
Operation *op, |
Operation *op, |
SlapReply *rs |
SlapReply *rs, |
); |
int candidate ); |
|
|
extern int |
extern int |
back_meta_LTX_init_module( |
back_meta_LTX_init_module( |
int argc, |
int argc, |
char *argv[] |
char *argv[] ); |
); |
|
|
|
extern int |
extern int |
meta_back_conn_cmp( |
meta_back_conn_cmp( |
const void *c1, |
const void *c1, |
const void *c2 |
const void *c2 ); |
); |
|
|
|
extern int |
extern int |
meta_back_conn_dup( |
meta_back_conn_dup( |
void *c1, |
void *c1, |
void *c2 |
void *c2 ); |
); |
|
|
|
/* |
/* |
* Candidate stuff |
* Candidate stuff |
*/ |
*/ |
extern int |
extern int |
meta_back_is_candidate( |
meta_back_is_candidate( |
struct berval *nsuffix, |
struct berval *nsuffix, |
struct berval *ndn |
struct berval *ndn, |
); |
int scope ); |
|
|
extern int |
|
meta_back_count_candidates( |
|
struct metainfo *li, |
|
struct berval *ndn |
|
); |
|
|
|
extern int |
|
meta_back_is_candidate_unique( |
|
struct metainfo *li, |
|
struct berval *ndn |
|
); |
|
|
|
extern int |
extern int |
meta_back_select_unique_candidate( |
meta_back_select_unique_candidate( |
struct metainfo *li, |
metainfo_t *mi, |
struct berval *ndn |
struct berval *ndn ); |
); |
|
|
|
extern int |
extern int |
meta_clear_unused_candidates( |
meta_clear_unused_candidates( |
struct metainfo *li, |
Operation *op, |
struct metaconn *lc, |
int candidate ); |
int candidate, |
|
int reallyclean |
|
); |
|
|
|
extern int |
extern int |
meta_clear_one_candidate( |
meta_clear_one_candidate( |
struct metasingleconn *lc, |
metasingleconn_t *mc ); |
int reallyclean |
|
); |
|
|
|
/* |
/* |
* Dn cache stuff (experimental) |
* Dn cache stuff (experimental) |
*/ |
*/ |
extern int |
extern int |
meta_dncache_cmp( |
meta_dncache_cmp( |
const void *c1, |
const void *c1, |
const void *c2 |
const void *c2 ); |
); |
|
|
|
extern int |
extern int |
meta_dncache_dup( |
meta_dncache_dup( |
void *c1, |
void *c1, |
void *c2 |
void *c2 ); |
); |
|
|
|
|
#define META_TARGET_NONE (-1) |
|
#define META_TARGET_MULTIPLE (-2) |
extern int |
extern int |
meta_dncache_get_target( |
meta_dncache_get_target( |
struct metadncache *cache, |
metadncache_t *cache, |
struct berval *ndn |
struct berval *ndn ); |
); |
|
|
|
extern int |
extern int |
meta_dncache_update_entry( |
meta_dncache_update_entry( |
struct metadncache *cache, |
metadncache_t *cache, |
struct berval *ndn, |
struct berval *ndn, |
int target |
int target ); |
); |
|
|
|
extern int |
extern int |
meta_dncache_delete_entry( |
meta_dncache_delete_entry( |
struct metadncache *cache, |
metadncache_t *cache, |
struct berval *ndn |
struct berval *ndn ); |
); |
|
|
|
extern void |
extern void |
meta_dncache_free( |
meta_dncache_free( void *entry ); |
void *entry |
|
); |
|
|
|
LDAP_END_DECL |
LDAP_END_DECL |
|
|