]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/ldap-int.h
Ready for release?
[openldap] / libraries / libldap / ldap-int.h
index 2b9df3da604843911f2099f515a15de50f210b9b..11100f21f71654a01f4ab5a5d92be6869344a9a3 100644 (file)
@@ -1,11 +1,19 @@
 /*  ldap-int.h - defines & prototypes internal to the LDAP library */
 /* $OpenLDAP$ */
-/*
- * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 1998-2005 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
-/*  Portions
- *  Copyright (c) 1995 Regents of the University of Michigan.
+/*  Portions Copyright (c) 1995 Regents of the University of Michigan.
  *  All rights reserved.
  */
 
@@ -34,6 +42,9 @@
 #define SASL_MIN_BUFF_SIZE     4096
 #endif
 
+#undef TV2MILLISEC
+#define TV2MILLISEC(tv) (((tv)->tv_sec * 1000) + ((tv)->tv_usec/1000))
+
 /* 
  * Support needed if the library is running in the kernel
  */
@@ -48,7 +59,7 @@
         *  Note: Deallocate structure when the process exits
         */
 #      define LDAP_INT_GLOBAL_OPT() ldap_int_global_opt()
-   struct ldapoptions *ldap_int_global_opt(void);
+       struct ldapoptions *ldap_int_global_opt(void);
 #else
 #      define LDAP_INT_GLOBAL_OPT() (&ldap_int_global_options)
 #endif
@@ -58,6 +69,9 @@
 #include "ldap_log.h"
 
 #undef Debug
+
+#ifdef LDAP_DEBUG
+
 #define Debug( level, fmt, arg1, arg2, arg3 ) \
        do { if ( ldap_debug & level ) \
        ldap_log_printf( NULL, (level), (fmt), (arg1), (arg2), (arg3) ); \
 #define LDAP_Debug( subsystem, level, fmt, arg1, arg2, arg3 )\
        ldap_log_printf( NULL, (level), (fmt), (arg1), (arg2), (arg3) )
 
+#else
+
+#define Debug( level, fmt, arg1, arg2, arg3 )                 ((void)0)
+#define LDAP_Debug( subsystem, level, fmt, arg1, arg2, arg3 ) ((void)0)
+
+#endif /* LDAP_DEBUG */
+
+#define LDAP_DEPRECATED 1
 #include "ldap.h"
 
 #include "ldap_pvt.h"
@@ -97,7 +119,7 @@ LDAP_BEGIN_DECL
 #define LDAP_BOOL_TLS                  3
 
 #define LDAP_BOOLEANS  unsigned long
-#define LDAP_BOOL(n)   (1 << (n))
+#define LDAP_BOOL(n)   ((LDAP_BOOLEANS)1 << (n))
 #define LDAP_BOOL_GET(lo, bool)        \
        ((lo)->ldo_booleans & LDAP_BOOL(bool) ? -1 : 0)
 #define LDAP_BOOL_SET(lo, bool) ((lo)->ldo_booleans |= LDAP_BOOL(bool))
@@ -115,6 +137,7 @@ struct ldapmsg {
        ber_tag_t               lm_msgtype;     /* the message type */
        BerElement      *lm_ber;        /* the ber encoded message contents */
        struct ldapmsg  *lm_chain;      /* for search - next msg in the resp */
+       struct ldapmsg  *lm_chain_tail;
        struct ldapmsg  *lm_next;       /* next response */
        time_t  lm_time;        /* used to maintain cache */
 };
@@ -128,6 +151,7 @@ struct ldapoptions {
 #define LDAP_UNINITIALIZED     0x0
 #define LDAP_INITIALIZED       0x1
 #define LDAP_VALID_SESSION     0x2
+       int   ldo_debug;
 #ifdef LDAP_CONNECTIONLESS
 #define        LDAP_IS_UDP(ld)         ((ld)->ld_options.ldo_is_udp)
        void*                   ldo_peer;       /* struct sockaddr* */
@@ -135,7 +159,6 @@ struct ldapoptions {
        int                     ldo_is_udp;
 #endif
 
-       int             ldo_debug;
        /* per API call timeout */
        struct timeval          *ldo_tm_api;
        struct timeval          *ldo_tm_net;
@@ -147,6 +170,8 @@ struct ldapoptions {
 
 #ifdef HAVE_TLS
        int                     ldo_tls_mode;
+       LDAP_TLS_CONNECT_CB     *ldo_tls_connect_cb;
+       void*                   ldo_tls_connect_arg;
 #endif
 
        LDAPURLDesc *ldo_defludp;
@@ -173,6 +198,8 @@ struct ldapoptions {
        /* LDAP rebind callback function */
        LDAP_REBIND_PROC *ldo_rebind_proc;
        void *ldo_rebind_params;
+       LDAP_NEXTREF_PROC *ldo_nextref_proc;
+       void *ldo_nextref_params;
 
        LDAP_BOOLEANS ldo_booleans;     /* boolean options */
 };
@@ -188,7 +215,8 @@ typedef struct ldap_conn {
        void            *lconn_tls_ctx;
 #endif
 #ifdef HAVE_CYRUS_SASL
-       void            *lconn_sasl_ctx;
+       void            *lconn_sasl_authctx;    /* context for bind */
+       void            *lconn_sasl_sockctx;    /* for security layer */
 #endif
        int                     lconn_refcnt;
        time_t          lconn_lastused; /* time */
@@ -285,8 +313,10 @@ struct ldap {
 
 #define ld_sctrls              ld_options.ldo_sctrls
 #define ld_cctrls              ld_options.ldo_cctrls
-#define ld_rebind_proc ld_options.ldo_rebind_proc
+#define ld_rebind_proc         ld_options.ldo_rebind_proc
 #define ld_rebind_params       ld_options.ldo_rebind_params
+#define ld_nextref_proc                ld_options.ldo_nextref_proc
+#define ld_nextref_params      ld_options.ldo_nextref_params
 
 #define ld_version             ld_options.ldo_version
 
@@ -295,12 +325,18 @@ struct ldap {
        ber_int_t       ld_errno;
        char    *ld_error;
        char    *ld_matched;
+       char    **ld_referrals;
        ber_len_t               ld_msgid;
 
        /* do not mess with these */
        LDAPRequest     *ld_requests;   /* list of outstanding requests */
        LDAPMessage     *ld_responses;  /* list of outstanding responses */
 
+#ifdef LDAP_R_COMPILE
+       ldap_pvt_thread_mutex_t ld_req_mutex;
+       ldap_pvt_thread_mutex_t ld_res_mutex;
+#endif
+
        ber_int_t               *ld_abandoned;  /* array of abandoned requests */
 
        LDAPCache       *ld_cache;      /* non-null if cache is initialized */
@@ -314,15 +350,22 @@ struct ldap {
 #define LDAP_VALID(ld) ( (ld)->ld_valid == LDAP_VALID_SESSION )
 
 #ifdef LDAP_R_COMPILE
-#ifdef HAVE_RES_QUERY
 LDAP_V ( ldap_pvt_thread_mutex_t ) ldap_int_resolv_mutex;
-#endif
 
 #ifdef HAVE_CYRUS_SASL
 LDAP_V( ldap_pvt_thread_mutex_t ) ldap_int_sasl_mutex;
 #endif
 #endif
 
+#ifdef LDAP_R_COMPILE
+#define        LDAP_NEXT_MSGID(ld, id) \
+       ldap_pvt_thread_mutex_lock( &(ld)->ld_req_mutex ); \
+       id = ++(ld)->ld_msgid; \
+       ldap_pvt_thread_mutex_unlock( &(ld)->ld_req_mutex )
+#else
+#define        LDAP_NEXT_MSGID(ld, id) id = ++(ld)->ld_msgid
+#endif
+
 /*
  * in init.c
  */
@@ -335,13 +378,21 @@ LDAP_F ( void ) ldap_int_initialize_global_options LDAP_P((
 
 /* memory.c */
        /* simple macros to realloc for now */
-#define LDAP_MALLOC(s)         (LBER_MALLOC((s)))
-#define LDAP_CALLOC(n,s)       (LBER_CALLOC((n),(s)))
-#define LDAP_REALLOC(p,s)      (LBER_REALLOC((p),(s)))
-#define LDAP_FREE(p)           (LBER_FREE((p)))
-#define LDAP_VFREE(v)          (LBER_VFREE((void **)(v)))
-#define LDAP_STRDUP(s)         (LBER_STRDUP((s)))
-#define LDAP_STRNDUP(s,l)      (LBER_STRNDUP((s),(l)))
+#define LDAP_MALLOC(s)         (ber_memalloc_x((s),NULL))
+#define LDAP_CALLOC(n,s)       (ber_memcalloc_x((n),(s),NULL))
+#define LDAP_REALLOC(p,s)      (ber_memrealloc_x((p),(s),NULL))
+#define LDAP_FREE(p)           (ber_memfree_x((p),NULL))
+#define LDAP_VFREE(v)          (ber_memvfree_x((void **)(v),NULL))
+#define LDAP_STRDUP(s)         (ber_strdup_x((s),NULL))
+#define LDAP_STRNDUP(s,l)      (ber_strndup_x((s),(l),NULL))
+
+#define LDAP_MALLOCX(s,x)      (ber_memalloc_x((s),(x)))
+#define LDAP_CALLOCX(n,s,x)    (ber_memcalloc_x((n),(s),(x)))
+#define LDAP_REALLOCX(p,s,x)   (ber_memrealloc_x((p),(s),(x)))
+#define LDAP_FREEX(p,x)                (ber_memfree_x((p),(x)))
+#define LDAP_VFREEX(v,x)       (ber_memvfree_x((void **)(v),(x)))
+#define LDAP_STRDUPX(s,x)      (ber_strdup_x((s),(x)))
+#define LDAP_STRNDUPX(s,l,x)   (ber_strndup_x((s),(l),(x)))
 
 /*
  * in error.c
@@ -370,16 +421,6 @@ LDAP_F (int) ldap_check_cache LDAP_P(( LDAP *ld, ber_tag_t msgtype, BerElement *
 /*
  * in controls.c
  */
-LDAP_F (LDAPControl *) ldap_control_dup LDAP_P((
-       const LDAPControl *ctrl ));
-
-LDAP_F (LDAPControl **) ldap_controls_dup LDAP_P((
-       LDAPControl *const *ctrls ));
-
-LDAP_F (int) ldap_int_get_controls LDAP_P((
-       BerElement *be,
-       LDAPControl ***ctrlsp));
-
 LDAP_F (int) ldap_int_put_controls LDAP_P((
        LDAP *ld,
        LDAPControl *const *ctrls,
@@ -417,19 +458,23 @@ LDAP_F (int) ldap_int_open_connection( LDAP *ld,
 /*
  * in os-ip.c
  */
+#ifndef HAVE_POLL
 LDAP_V (int) ldap_int_tblsize;
-LDAP_F (int) ldap_int_timeval_dup( struct timeval **dest, const struct timeval *tm );
+LDAP_F (void) ldap_int_ip_init( void );
+#endif
+
+LDAP_F (int) ldap_int_timeval_dup( struct timeval **dest,
+       const struct timeval *tm );
 LDAP_F (int) ldap_connect_to_host( LDAP *ld, Sockbuf *sb,
-       int proto, const char *host, unsigned long address, int port,
-       int async );
+       int proto, const char *host, int port, int async );
 
 #if defined(LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND) || \
        defined(HAVE_TLS) || defined(HAVE_CYRUS_SASL)
 LDAP_V (char *) ldap_int_hostname;
-LDAP_F (char *) ldap_host_connected_to( Sockbuf *sb );
+LDAP_F (char *) ldap_host_connected_to( Sockbuf *sb,
+       const char *host );
 #endif
 
-LDAP_F (void) ldap_int_ip_init( void );
 LDAP_F (int) ldap_int_select( LDAP *ld, struct timeval *timeout );
 LDAP_F (void *) ldap_new_select_info( void );
 LDAP_F (void) ldap_free_select_info( void *sip );
@@ -451,7 +496,7 @@ LDAP_F (int) ldap_connect_to_path( LDAP *ld, Sockbuf *sb,
  * in request.c
  */
 LDAP_F (ber_int_t) ldap_send_initial_request( LDAP *ld, ber_tag_t msgtype,
-       const char *dn, BerElement *ber );
+       const char *dn, BerElement *ber, ber_int_t msgid );
 LDAP_F (BerElement *) ldap_alloc_ber_with_options( LDAP *ld );
 LDAP_F (void) ldap_set_ber_options( LDAP *ld, BerElement *ber );
 
@@ -467,6 +512,7 @@ LDAP_F (int) ldap_chase_referrals( LDAP *ld, LDAPRequest *lr,
 LDAP_F (int) ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr,
        char **refs, int sref, char **referralsp, int *hadrefp );
 LDAP_F (int) ldap_append_referral( LDAP *ld, char **referralsp, char *s );
+LDAP_F (int) ldap_int_flush_request( LDAP *ld, LDAPRequest *lr );
 
 /*
  * in result.c:
@@ -486,11 +532,9 @@ LDAP_F (BerElement *) ldap_build_search_req LDAP_P((
        LDAPControl **sctrls,
        LDAPControl **cctrls,
        ber_int_t timelimit,
-       ber_int_t sizelimit ));
+       ber_int_t sizelimit,
+       ber_int_t *msgidp));
 
-LDAP_F( int ) ldap_int_put_filter LDAP_P((
-       BerElement *ber,
-       const char *str ));
 
 /*
  * in unbind.c
@@ -520,6 +564,11 @@ LDAP_F (int) ldap_url_parselist LDAP_P((
        LDAPURLDesc **ludlist,
        const char *url ));
 
+LDAP_F (int) ldap_url_parselist_ext LDAP_P((
+       LDAPURLDesc **ludlist,
+       const char *url,
+       const char *sep ));
+
 LDAP_F (int) ldap_url_parsehosts LDAP_P((
        LDAPURLDesc **ludlist,
        const char *hosts,
@@ -542,7 +591,7 @@ LDAP_F (int) ldap_int_sasl_init LDAP_P(( void ));
 
 LDAP_F (int) ldap_int_sasl_open LDAP_P((
        LDAP *ld, LDAPConn *conn,
-       const char* host, ber_len_t ssf ));
+       const char* host ));
 LDAP_F (int) ldap_int_sasl_close LDAP_P(( LDAP *ld, LDAPConn *conn ));
 
 LDAP_F (int) ldap_int_sasl_external LDAP_P((
@@ -582,6 +631,12 @@ LDAP_F (int) ldap_int_tls_config LDAP_P(( LDAP *ld,
 LDAP_F (int) ldap_int_tls_start LDAP_P(( LDAP *ld,
        LDAPConn *conn, LDAPURLDesc *srv ));
 
+/*
+ *     in getvalues.c
+ */
+LDAP_F (char **) ldap_value_dup LDAP_P((
+       char *const *vals ));
+
 LDAP_END_DECL
 
 #endif /* _LDAP_INT_H */