Diff for /servers/slapd/back-meta/back-meta.h between versions 1.23 and 1.23.2.23

version 1.23, 2004/11/13 13:45:18 version 1.23.2.23, 2008/02/11 23:24:21
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.23.2.22 2007/01/27 23:56:43 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-2008 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 33 Line 33
 #include "rewrite.h"  #include "rewrite.h"
 LDAP_BEGIN_DECL  LDAP_BEGIN_DECL
   
   /*
    * Set META_BACK_PRINT_CONNTREE larger than 0 to dump the connection tree (debug only)
    */
   #ifndef META_BACK_PRINT_CONNTREE
   #define META_BACK_PRINT_CONNTREE 0
   #endif /* !META_BACK_PRINT_CONNTREE */
   
 struct slap_conn;  struct slap_conn;
 struct slap_op;  struct slap_op;
   
Line 70  struct ldaprwmap { Line 77  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 );  
 struct ldapconn *ldap_back_getconn(struct slap_op *op, struct slap_rep *rs);  
 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 101  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 {  /*
         int                     candidate;   * A metasingleconn_t can be in the following, mutually exclusive states:
 #define META_NOT_CANDIDATE      0   *
 #define META_CANDIDATE          1   *      - none                  (0x0U)
 #define META_LAST_CONN          -1   *      - creating              META_BACK_FCONN_CREATING
            *      - initialized           META_BACK_FCONN_INITED
         LDAP                    *ld;   *      - binding               LDAP_BACK_FCONN_BINDING
         struct berval           bound_dn;   *      - bound/anonymous       LDAP_BACK_FCONN_ISBOUND/LDAP_BACK_FCONN_ISANON
         struct berval           cred;   *
         int                     bound;   * possible modifiers are:
 #define META_UNBOUND            0   *
 #define META_BOUND              1   *      - privileged            LDAP_BACK_FCONN_ISPRIV
 #define META_ANONYMOUS          2   *      - privileged, TLS       LDAP_BACK_FCONN_ISTLS
 };   *      - subjected to idassert LDAP_BACK_FCONN_ISIDASR
    *      - tainted               LDAP_BACK_FCONN_TAINTED
    */
   
   #define META_BACK_FCONN_INITED          (0x00100000U)
   #define META_BACK_FCONN_CREATING        (0x00200000U)
   
 #define META_LAST(lsc)          ((lsc)->candidate == META_LAST_CONN)  #define META_BACK_CONN_INITED(lc)               LDAP_BACK_CONN_ISSET((lc), META_BACK_FCONN_INITED)
   #define META_BACK_CONN_INITED_SET(lc)           LDAP_BACK_CONN_SET((lc), META_BACK_FCONN_INITED)
   #define META_BACK_CONN_INITED_CLEAR(lc)         LDAP_BACK_CONN_CLEAR((lc), META_BACK_FCONN_INITED)
   #define META_BACK_CONN_INITED_CPY(lc, mlc)      LDAP_BACK_CONN_CPY((lc), META_BACK_FCONN_INITED, (mlc))
   #define META_BACK_CONN_CREATING(lc)             LDAP_BACK_CONN_ISSET((lc), META_BACK_FCONN_CREATING)
   #define META_BACK_CONN_CREATING_SET(lc)         LDAP_BACK_CONN_SET((lc), META_BACK_FCONN_CREATING)
   #define META_BACK_CONN_CREATING_CLEAR(lc)       LDAP_BACK_CONN_CLEAR((lc), META_BACK_FCONN_CREATING)
   #define META_BACK_CONN_CREATING_CPY(lc, mlc)    LDAP_BACK_CONN_CPY((lc), META_BACK_FCONN_CREATING, (mlc))
   
   struct metainfo_t;
   
   #define META_NOT_CANDIDATE              ((ber_tag_t)0x0)
   #define META_CANDIDATE                  ((ber_tag_t)0x1)
   #define META_BINDING                    ((ber_tag_t)0x2)
   #define META_RETRYING                   ((ber_tag_t)0x4)
   
   typedef struct metasingleconn_t {
   #define META_CND_ISSET(rs,f)            ( ( (rs)->sr_tag & (f) ) == (f) )
   #define META_CND_SET(rs,f)              ( (rs)->sr_tag |= (f) )
   #define META_CND_CLEAR(rs,f)            ( (rs)->sr_tag &= ~(f) )
   
   #define META_CANDIDATE_RESET(rs)        ( (rs)->sr_tag = 0 )
   #define META_IS_CANDIDATE(rs)           META_CND_ISSET( (rs), META_CANDIDATE )
   #define META_CANDIDATE_SET(rs)          META_CND_SET( (rs), META_CANDIDATE )
   #define META_CANDIDATE_CLEAR(rs)        META_CND_CLEAR( (rs), META_CANDIDATE )
   #define META_IS_BINDING(rs)             META_CND_ISSET( (rs), META_BINDING )
   #define META_BINDING_SET(rs)            META_CND_SET( (rs), META_BINDING )
   #define META_BINDING_CLEAR(rs)          META_CND_CLEAR( (rs), META_BINDING )
   #define META_IS_RETRYING(rs)            META_CND_ISSET( (rs), META_RETRYING )
   #define META_RETRYING_SET(rs)           META_CND_SET( (rs), META_RETRYING )
   #define META_RETRYING_CLEAR(rs)         META_CND_CLEAR( (rs), META_RETRYING )
           
           LDAP                    *msc_ld;
           time_t                  msc_time;
           struct berval           msc_bound_ndn;
           struct berval           msc_cred;
           unsigned                msc_mscflags;
           /* NOTE: lc_lcflags is redefined to msc_mscflags to reuse the macros
            * defined for back-ldap */
   #define lc_lcflags              msc_mscflags
   } metasingleconn_t;
   
   typedef struct metaconn_t {
           struct slap_conn        *mc_conn;
   #define lc_conn                 mc_conn
           unsigned                mc_refcnt;
   
 struct metaconn {          time_t                  mc_create_time;
         struct slap_conn        *conn;          time_t                  mc_time;
         struct rewrite_info     *rwinfo;  
                   
           struct berval           mc_local_ndn;
           /* NOTE: msc_mscflags is used to recycle the #define
            * in metasingleconn_t */
           unsigned                msc_mscflags;
   
         /*          /*
          * 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_authz_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 */  
         struct metasingleconn *conns;  
 };  
   
 struct metatarget {          struct metainfo_t       *mc_info;
         char                    *uri;  
         struct berval           psuffix;        /* pretty suffix */  
         struct berval           suffix;         /* normalized suffix */  
         struct berval           binddn;  
         struct berval           bindpw;  
   
         struct berval           pseudorootdn;          LDAP_TAILQ_ENTRY(metaconn_t)    mc_q;
         struct berval           pseudorootpw;  
   
 #if 0          /* supersedes the connection stuff */
         struct rewrite_info     *rwinfo;          metasingleconn_t        mc_conns[ 1 ];
           /* NOTE: mc_conns must be last, because
         struct ldapmap          oc_map;           * the required number of conns is malloc'ed
         struct ldapmap          at_map;           * in one block with the metaconn_t structure */
 #endif  } metaconn_t;
         struct ldaprwmap        rwmap;  
 };  typedef struct metatarget_t {
           char                    *mt_uri;
           ldap_pvt_thread_mutex_t mt_uri_mutex;
   
           /* TODO: we might want to enable different strategies
            * for different targets */
           LDAP_REBIND_PROC        *mt_rebind_f;
           void                    *mt_urllist_p;
   
           BerVarray               mt_subtree_exclude;
           int                     mt_scope;
   
           struct berval           mt_psuffix;             /* pretty suffix */
           struct berval           mt_nsuffix;             /* normalized suffix */
   
           struct berval           mt_binddn;
           struct berval           mt_bindpw;
   
           slap_idassert_t         mt_idassert;
   #define mt_idassert_mode        mt_idassert.si_mode
   #define mt_idassert_authcID     mt_idassert.si_bc.sb_authcId
   #define mt_idassert_authcDN     mt_idassert.si_bc.sb_binddn
   #define mt_idassert_passwd      mt_idassert.si_bc.sb_cred
   #define mt_idassert_authzID     mt_idassert.si_bc.sb_authzId
   #define mt_idassert_authmethod  mt_idassert.si_bc.sb_method
   #define mt_idassert_sasl_mech   mt_idassert.si_bc.sb_saslmech
   #define mt_idassert_sasl_realm  mt_idassert.si_bc.sb_realm
   #define mt_idassert_secprops    mt_idassert.si_bc.sb_secprops
   #define mt_idassert_tls         mt_idassert.si_bc.sb_tls
   #define mt_idassert_flags       mt_idassert.si_flags
   #define mt_idassert_authz       mt_idassert.si_authz
   
           int                     mt_nretries;
   #define META_RETRY_UNDEFINED    (-2)
   #define META_RETRY_FOREVER      (-1)
   #define META_RETRY_NEVER        (0)
   #define META_RETRY_DEFAULT      (10)
   
           struct ldaprwmap        mt_rwmap;
   
           sig_atomic_t            mt_isquarantined;
           slap_retry_info_t       mt_quarantine;
           ldap_pvt_thread_mutex_t mt_quarantine_mutex;
   
           unsigned                mt_flags;
   #define META_BACK_TGT_ISSET(mt,f)               ( ( (mt)->mt_flags & (f) ) == (f) )
   #define META_BACK_TGT_ISMASK(mt,m,f)            ( ( (mt)->mt_flags & (m) ) == (f) )
   
   #define META_BACK_TGT_T_F(mt)                   META_BACK_TGT_ISMASK( (mt), LDAP_BACK_F_T_F_MASK, LDAP_BACK_F_T_F )
   #define META_BACK_TGT_T_F_DISCOVER(mt)          META_BACK_TGT_ISMASK( (mt), LDAP_BACK_F_T_F_MASK2, LDAP_BACK_F_T_F_DISCOVER )
   
   #define META_BACK_TGT_ABANDON(mt)               META_BACK_TGT_ISMASK( (mt), LDAP_BACK_F_CANCEL_MASK, LDAP_BACK_F_CANCEL_ABANDON )
   #define META_BACK_TGT_IGNORE(mt)                META_BACK_TGT_ISMASK( (mt), LDAP_BACK_F_CANCEL_MASK, LDAP_BACK_F_CANCEL_IGNORE )
   #define META_BACK_TGT_CANCEL(mt)                META_BACK_TGT_ISMASK( (mt), LDAP_BACK_F_CANCEL_MASK, LDAP_BACK_F_CANCEL_EXOP )
   #define META_BACK_TGT_CANCEL_DISCOVER(mt)       META_BACK_TGT_ISMASK( (mt), LDAP_BACK_F_CANCEL_MASK2, LDAP_BACK_F_CANCEL_EXOP_DISCOVER )
   #define META_BACK_TGT_QUARANTINE(mt)            META_BACK_TGT_ISSET( (mt), LDAP_BACK_F_QUARANTINE )
   
           int                     mt_version;
           time_t                  mt_network_timeout;
           struct timeval          mt_bind_timeout;
   #define META_BIND_TIMEOUT       LDAP_BACK_RESULT_UTIMEOUT
           time_t                  mt_timeout[ SLAP_OP_LAST ];
   } 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    ((time_t)(-1))
         long int                ttl;  /* seconds; 0: no cache, -1: no expiry */          time_t                  ttl;  /* seconds; 0: no cache, -1: no expiry */
 };  } metadncache_t;
   
   typedef struct metacandidates_t {
           int                     mc_ntargets;
           SlapReply               *mc_candidates;
   } metacandidates_t;
   
 struct metainfo {  /*
         int                     ntargets;   * Hook to allow mucking with metainfo_t/metatarget_t when quarantine is over
         int                     defaulttarget;   */
         int                     network_timeout;  typedef int (*meta_back_quarantine_f)( struct metainfo_t *, int target, void * );
 #define META_DEFAULT_TARGET_NONE        -1  
         struct metatarget       **targets;  typedef struct metainfo_t {
           int                     mi_ntargets;
           int                     mi_defaulttarget;
   #define META_DEFAULT_TARGET_NONE        (-1)
           int                     mi_nretries;
   
           metatarget_t            **mi_targets;
           metacandidates_t        *mi_candidates;
   
         struct rewrite_info     *rwinfo;          LDAP_REBIND_PROC        *mi_rebind_f;
         Backend                 *glue_be;   
   
         struct metadncache      cache;          metadncache_t           mi_cache;
                   
         ldap_pvt_thread_mutex_t conn_mutex;          /* cached connections; 
         Avlnode                 *conntree;           * special conns are in tailq rather than in tree */
           ldap_avl_info_t         mi_conninfo;
           struct {
                   int                                             mic_num;
                   LDAP_TAILQ_HEAD(mc_conn_priv_q, metaconn_t)     mic_priv;
           }                       mi_conn_priv[ LDAP_BACK_PCONN_LAST ];
           int                     mi_conn_priv_max;
   
           /* NOTE: quarantine uses the connection mutex */
           slap_retry_info_t       mi_quarantine;
           meta_back_quarantine_f  mi_quarantine_f;
           void                    *mi_quarantine_p;
   
           unsigned                mi_flags;
   #define li_flags                mi_flags
   /* uses flags as defined in <back-ldap/back-ldap.h> */
   #define META_BACK_F_ONERR_STOP          (0x00100000U)
   #define META_BACK_F_ONERR_REPORT        (0x00200000U)
   #define META_BACK_F_ONERR_MASK          (META_BACK_F_ONERR_STOP|META_BACK_F_ONERR_REPORT)
   #define META_BACK_F_DEFER_ROOTDN_BIND   (0x00400000U)
   #define META_BACK_F_PROXYAUTHZ_ALWAYS   (0x00800000U)   /* users always proxyauthz */
   #define META_BACK_F_PROXYAUTHZ_ANON     (0x01000000U)   /* anonymous always proxyauthz */
   #define META_BACK_F_PROXYAUTHZ_NOANON   (0x02000000U)   /* anonymous remains anonymous */
   
   #define META_BACK_ONERR_STOP(mi)        LDAP_BACK_ISSET( (mi), META_BACK_F_ONERR_STOP )
   #define META_BACK_ONERR_REPORT(mi)      LDAP_BACK_ISSET( (mi), META_BACK_F_ONERR_REPORT )
   #define META_BACK_ONERR_CONTINUE(mi)    ( !LDAP_BACK_ISSET( (mi), META_BACK_F_ONERR_MASK ) )
   
   #define META_BACK_DEFER_ROOTDN_BIND(mi) LDAP_BACK_ISSET( (mi), META_BACK_F_DEFER_ROOTDN_BIND )
   #define META_BACK_PROXYAUTHZ_ALWAYS(mi) LDAP_BACK_ISSET( (mi), META_BACK_F_PROXYAUTHZ_ALWAYS )
   #define META_BACK_PROXYAUTHZ_ANON(mi)   LDAP_BACK_ISSET( (mi), META_BACK_F_PROXYAUTHZ_ANON )
   #define META_BACK_PROXYAUTHZ_NOANON(mi) LDAP_BACK_ISSET( (mi), META_BACK_F_PROXYAUTHZ_NOANON )
   
   #define META_BACK_QUARANTINE(mi)        LDAP_BACK_ISSET( (mi), LDAP_BACK_F_QUARANTINE )
   
           int                     mi_version;
           time_t                  mi_network_timeout;
           time_t                  mi_conn_ttl;
           time_t                  mi_idle_timeout;
           struct timeval          mi_bind_timeout;
           time_t                  mi_timeout[ SLAP_OP_LAST ];
   } metainfo_t;
   
   typedef enum meta_op_type {
           META_OP_ALLOW_MULTIPLE = 0,
           META_OP_REQUIRE_SINGLE,
           META_OP_REQUIRE_ALL
   } meta_op_type;
   
         int                     savecred;  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_lock(
           metainfo_t              *mi,
           metaconn_t              *mc,
           int                     dolock );
   #define meta_back_release_conn(mi, mc)  meta_back_release_conn_lock( (mi), (mc), 1 )
   
 extern int  extern int
 meta_back_dobind(  meta_back_retry(
                 struct metaconn         *lc,          Operation               *op,
                 Operation               *op          SlapReply               *rs,
 );          metaconn_t              **mcp,
           int                     candidate,
           ldap_back_send_t        sendok );
   
   extern void
   meta_back_conn_free(
           void                    *v_mc );
   
   #if META_BACK_PRINT_CONNTREE > 0
   extern void
   meta_back_print_conntree(
           metainfo_t              *mi,
           char                    *msg );
   #endif
   
 extern int  extern int
 meta_back_is_valid(  meta_back_init_one_conn(
                 struct metaconn         *lc,           Operation               *op,
                 int                     candidate           SlapReply               *rs,
 );          metaconn_t              *mc,
           int                     candidate,
           int                     ispriv,
           ldap_back_send_t        sendok,
           int                     dolock );
   
   extern void
   meta_back_quarantine(
           Operation               *op,
           SlapReply               *rs,
           int                     candidate );
   
   extern int
   meta_back_dobind(
           Operation               *op,
           SlapReply               *rs,
           metaconn_t              *mc,
           ldap_back_send_t        sendok );
   
   extern int
   meta_back_single_dobind(
           Operation               *op,
           SlapReply               *rs,
           metaconn_t              **mcp,
           int                     candidate,
           ldap_back_send_t        sendok,
           int                     retries,
           int                     dolock );
   
   extern int
   meta_back_proxy_authz_cred(
           metaconn_t              *mc,
           int                     candidate,
           Operation               *op,
           SlapReply               *rs,
           ldap_back_send_t        sendok,
           struct berval           *binddn,
           struct berval           *bindcred,
           int                     *method );
   
   extern int
   meta_back_cancel(
           metaconn_t              *mc,
           Operation               *op,
           SlapReply               *rs,
           ber_int_t               msgid,
           int                     candidate,
           ldap_back_send_t        sendok );
   
 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,
           ber_int_t               msgid,
           time_t                  timeout,
           ldap_back_send_t        sendok );
   
 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
   meta_back_conndn_cmp(
           const void              *c1,
           const void              *c2 );
   
 extern int  extern int
 meta_back_conn_dup(  meta_back_conndn_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,          metatarget_t            *mt,
                 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,          Operation               *op,
                 int                     reallyclean          metaconn_t              *mc,
 );          int                     candidate );
   
 /*  /*
  * 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  
 );  extern LDAP_REBIND_PROC         meta_back_default_rebind;
   
 LDAP_END_DECL  LDAP_END_DECL
   

Removed from v.1.23  
changed lines
  Added in v.1.23.2.23


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org