X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-meta%2Fback-meta.h;h=620bb93e14c96ef7976c3e43c5cb6adff728166e;hb=be53e8265065e7de61a0996e37732f44e22fdec7;hp=78ab9ffdf3ddbb466380625357697e3359589fc6;hpb=623615e2f10f9808ac8c58fda47192e7f39fd078;p=openldap diff --git a/servers/slapd/back-meta/back-meta.h b/servers/slapd/back-meta/back-meta.h index 78ab9ffdf3..620bb93e14 100644 --- a/servers/slapd/back-meta/back-meta.h +++ b/servers/slapd/back-meta/back-meta.h @@ -70,20 +70,20 @@ struct ldaprwmap { /* Whatever context ldap_back_dn_massage needs... */ typedef struct dncookie { - struct ldaprwmap *rwmap; + struct metatarget_t *target; #ifdef ENABLE_REWRITE - Connection *conn; - char *ctx; - SlapReply *rs; + Connection *conn; + char *ctx; + SlapReply *rs; #else - int normalized; - int tofrom; + int normalized; + int tofrom; #endif } dncookie; -#define META_BIND_NRETRIES 3 -#define META_BIND_TIMEOUT 1000 +/* TODO: allow to define it on a per-target basis */ +#define META_BIND_TIMEOUT 10000 int ldap_back_dn_massage(dncookie *dc, struct berval *dn, struct berval *res); @@ -105,52 +105,63 @@ void ldap_back_map ( struct ldapmap *map, struct berval *s, struct berval *m, #define BACKLDAP_REMAP 1 char * ldap_back_map_filter( - struct ldapmap *at_map, - struct ldapmap *oc_map, - struct berval *f, - int remap -); + struct ldapmap *at_map, + struct ldapmap *oc_map, + struct berval *f, + int remap ); int ldap_back_map_attrs( - struct ldapmap *at_map, - AttributeName *a, - int remap, - char ***mapped_attrs -); + struct ldapmap *at_map, + AttributeName *a, + int remap, + char ***mapped_attrs ); extern int ldap_back_map_config( - struct ldapmap *oc_map, - struct ldapmap *at_map, - const char *fname, - int lineno, - int argc, - char **argv ); + struct ldapmap *oc_map, + struct ldapmap *at_map, + const char *fname, + int lineno, + int argc, + char **argv ); extern int ldap_back_filter_map_rewrite( - dncookie *dc, - Filter *f, - struct berval *fstr, - int remap ); + dncookie *dc, + Filter *f, + struct berval *fstr, + int remap ); /* suffix massaging by means of librewrite */ #ifdef ENABLE_REWRITE -extern int suffix_massage_config( struct rewrite_info *info, - struct berval *pvnc, struct berval *nvnc, - struct berval *prnc, struct berval *nrnc); +extern int +suffix_massage_config( struct rewrite_info *info, + struct berval *pvnc, + struct berval *nvnc, + struct berval *prnc, + struct berval *nrnc ); #endif /* ENABLE_REWRITE */ -extern int 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 ); +extern int +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 */ -struct metasingleconn { +struct metainfo_t; + +typedef struct metasingleconn_t { int msc_candidate; -#define META_NOT_CANDIDATE ((char)0) -#define META_CANDIDATE ((char)1) -#define META_LAST_CONN ((char)(-1)) +#define META_NOT_CANDIDATE ((ber_tag_t)0) +#define META_CANDIDATE ((ber_tag_t)1) LDAP *msc_ld; struct berval msc_bound_ndn; @@ -159,55 +170,69 @@ struct metasingleconn { #define META_UNBOUND 0 #define META_BOUND 1 #define META_ANONYMOUS 2 -}; -#define META_LAST(lsc) ((lsc)->msc_candidate == META_LAST_CONN) + struct metainfo_t *msc_info; +} metasingleconn_t; -struct metaconn { +typedef struct metaconn_t { struct slap_conn *mc_conn; + ldap_pvt_thread_mutex_t mc_mutex; /* * means that the connection is bound; * of course only one target actually is ... */ - int mc_bound_target; + int mc_auth_target; #define META_BOUND_NONE (-1) #define META_BOUND_ALL (-2) /* supersedes the connection stuff */ - struct metasingleconn *mc_conns; -}; + metasingleconn_t *mc_conns; +} metaconn_t; -struct metatarget { +typedef struct metatarget_t { char *mt_uri; + struct berval mt_psuffix; /* pretty suffix */ struct berval mt_nsuffix; /* normalized suffix */ + struct berval mt_binddn; struct berval mt_bindpw; struct berval mt_pseudorootdn; struct berval mt_pseudorootpw; + 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; -}; -struct metadncache { + unsigned mt_flags; + int mt_version; +} metatarget_t; + +typedef struct metadncache_t { ldap_pvt_thread_mutex_t mutex; Avlnode *tree; #define META_DNCACHE_DISABLED (0) #define META_DNCACHE_FOREVER (-1) long int ttl; /* seconds; 0: no cache, -1: no expiry */ -}; +} metadncache_t; -struct metainfo { +typedef struct metainfo_t { int mi_ntargets; int mi_defaulttarget; int mi_network_timeout; #define META_DEFAULT_TARGET_NONE (-1) - struct metatarget **mi_targets; - char *mi_candidates; + int mi_nretries; + + metatarget_t *mi_targets; + SlapReply *mi_candidates; - struct metadncache mi_cache; + metadncache_t mi_cache; ldap_pvt_thread_mutex_t mi_conn_mutex; Avlnode *mi_conntree; @@ -218,10 +243,14 @@ struct metainfo { #define LDAP_BACK_F_NONE 0x00U #define LDAP_BACK_F_SAVECRED 0x01U #define LDAP_BACK_F_USE_TLS 0x02U -#define LDAP_BACK_F_TLS_CRITICAL ( 0x04U | LDAP_BACK_F_USE_TLS ) -#define LDAP_BACK_F_CHASE_REFERRALS 0x8U +#define LDAP_BACK_F_PROPAGATE_TLS 0x04U +#define LDAP_BACK_F_TLS_CRITICAL 0x08U +#define LDAP_BACK_F_TLS_MASK (LDAP_BACK_F_USE_TLS|LDAP_BACK_F_PROPAGATE_TLS|LDAP_BACK_F_TLS_CRITICAL) +#define LDAP_BACK_F_CHASE_REFERRALS 0x10U #endif -}; + + int mi_version; +} metainfo_t; typedef enum meta_op_type { META_OP_ALLOW_MULTIPLE = 0, @@ -229,123 +258,129 @@ typedef enum meta_op_type { META_OP_REQUIRE_ALL } meta_op_type; -char * +SlapReply * meta_back_candidates_get( Operation *op ); -extern struct metaconn * +extern metaconn_t * meta_back_getconn( - Operation *op, - SlapReply *rs, - int *candidate, - ldap_back_send_t sendok -); + Operation *op, + SlapReply *rs, + int *candidate, + ldap_back_send_t sendok ); extern int -meta_back_dobind( - struct metaconn *lc, - Operation *op, - ldap_back_send_t sendok -); +meta_back_retry( + 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 -meta_back_is_valid( - struct metaconn *lc, - int candidate -); +meta_back_dobind( + Operation *op, + 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 ); extern int meta_back_op_result( - struct metaconn *lc, - Operation *op, - SlapReply *rs, - int candidate -); + metaconn_t *mc, + Operation *op, + SlapReply *rs, + int candidate ); extern int back_meta_LTX_init_module( - int argc, - char *argv[] -); + int argc, + char *argv[] ); extern int meta_back_conn_cmp( - const void *c1, - const void *c2 -); + const void *c1, + const void *c2 ); extern int meta_back_conn_dup( - void *c1, - void *c2 -); + void *c1, + void *c2 ); /* * Candidate stuff */ extern int meta_back_is_candidate( - struct berval *nsuffix, - struct berval *ndn -); + struct berval *nsuffix, + struct berval *ndn, + int scope ); extern int meta_back_select_unique_candidate( - struct metainfo *li, - struct berval *ndn -); + metainfo_t *mi, + struct berval *ndn ); extern int meta_clear_unused_candidates( - Operation *op, - struct metaconn *lc, - int candidate -); + Operation *op, + int candidate ); extern int meta_clear_one_candidate( - struct metasingleconn *lc -); + metasingleconn_t *mc ); /* * Dn cache stuff (experimental) */ extern int meta_dncache_cmp( - const void *c1, - const void *c2 -); + const void *c1, + const void *c2 ); extern int meta_dncache_dup( - void *c1, - void *c2 -); + void *c1, + void *c2 ); #define META_TARGET_NONE (-1) #define META_TARGET_MULTIPLE (-2) extern int meta_dncache_get_target( - struct metadncache *cache, - struct berval *ndn -); + metadncache_t *cache, + struct berval *ndn ); extern int meta_dncache_update_entry( - struct metadncache *cache, - struct berval *ndn, - int target -); + metadncache_t *cache, + struct berval *ndn, + int target ); extern int meta_dncache_delete_entry( - struct metadncache *cache, - struct berval *ndn -); + metadncache_t *cache, + struct berval *ndn ); extern void -meta_dncache_free( - void *entry -); +meta_dncache_free( void *entry ); LDAP_END_DECL