/* ldap-int.h - defines & prototypes internal to the LDAP library */
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2000 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-2003 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.
*/
#include "../liblber/lber-int.h"
+#ifdef LDAP_R_COMPILE
+#include <ldap_pvt_thread.h>
+#endif
+
#ifdef HAVE_CYRUS_SASL
/* the need for this should be removed */
+#ifdef HAVE_SASL_SASL_H
+#include <sasl/sasl.h>
+#else
#include <sasl.h>
+#endif
#define SASL_MAX_BUFF_SIZE 65536
#define SASL_MIN_BUFF_SIZE 4096
* 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
#include "ldap_log.h"
#undef Debug
+
+#ifdef LDAP_DEBUG
+
#define Debug( level, fmt, arg1, arg2, arg3 ) \
- ldap_log_printf( NULL, (level), (fmt), (arg1), (arg2), (arg3) )
+ do { if ( ldap_debug & level ) \
+ ldap_log_printf( NULL, (level), (fmt), (arg1), (arg2), (arg3) ); \
+ } while ( 0 )
#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"
#define LDAPS_URL_PREFIX_LEN (sizeof(LDAPS_URL_PREFIX)-1)
#define LDAPI_URL_PREFIX "ldapi://"
#define LDAPI_URL_PREFIX_LEN (sizeof(LDAPI_URL_PREFIX)-1)
+#ifdef LDAP_CONNECTIONLESS
+#define LDAPC_URL_PREFIX "cldap://"
+#define LDAPC_URL_PREFIX_LEN (sizeof(LDAPC_URL_PREFIX)-1)
+#endif
#define LDAP_URL_URLCOLON "URL:"
#define LDAP_URL_URLCOLON_LEN (sizeof(LDAP_URL_URLCOLON)-1)
#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* */
+ char* ldo_cldapdn;
+ int ldo_is_udp;
+#endif
- int ldo_debug;
/* per API call timeout */
struct timeval *ldo_tm_api;
struct timeval *ldo_tm_net;
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 */
#endif
BerElement *lconn_ber; /* ber receiving on this conn. */
- struct ldap_conn *lconn_next;
+ struct ldap_conn *lconn_next;
} LDAPConn;
BerElement *lr_ber; /* ber encoded request contents */
LDAPConn *lr_conn; /* connection used to send request */
struct ldapreq *lr_parent; /* request that spawned this referral */
+ struct ldapreq *lr_child; /* first child request */
struct ldapreq *lr_refnext; /* next referral spawned */
struct ldapreq *lr_prev; /* previous request */
struct ldapreq *lr_next; /* next request */
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 */
#define LDAP_VALID(ld) ( (ld)->ld_valid == LDAP_VALID_SESSION )
#ifdef LDAP_R_COMPILE
-#include <ldap_pvt_thread.h>
-
-#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
*/
/* memory.c */
/* simple macros to realloc for now */
-#define LDAP_INT_MALLOC(s) (LBER_MALLOC((s)))
-#define LDAP_INT_CALLOC(n,s) (LBER_CALLOC((n),(s)))
-#define LDAP_INT_REALLOC(p,s) (LBER_REALLOC((p),(s)))
-#define LDAP_INT_FREE(p) (LBER_FREE((p)))
-#define LDAP_INT_VFREE(v) (LBER_VFREE((void **)(v)))
-#define LDAP_INT_STRDUP(s) (LBER_STRDUP((s)))
-
-#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_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
+ */
+LDAP_F (void) ldap_int_error_init( void );
/*
* in unit-int.c
/*
* 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,
/*
* in os-ip.c
*/
-LDAP_F (int) ldap_int_tblsize;
-LDAP_F (int) ldap_int_timeval_dup( struct timeval **dest, const struct timeval *tm );
+LDAP_V (int) ldap_int_tblsize;
+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) do_ldap_select( LDAP *ld, struct timeval *timeout );
+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 );
LDAP_F (void) ldap_mark_select_write( 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 );
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:
LDAPControl **sctrls,
LDAPControl **cctrls,
ber_int_t timelimit,
- ber_int_t sizelimit ));
+ ber_int_t sizelimit,
+ ber_int_t *msgidp));
-/*
- * in string.c
- */
- /* see <ac/string.h> */
/*
* in unbind.c
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,
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((
- LDAP *ld, const char* authid, ber_len_t ssf ));
+ LDAP *ld, LDAPConn *conn,
+ const char* authid, ber_len_t ssf ));
LDAP_F (int) ldap_int_sasl_get_option LDAP_P(( LDAP *ld,
int option, void *arg ));
LDAP_SASL_INTERACT_PROC *interact,
void *defaults ));
+/* in schema.c */
+LDAP_F (char *) ldap_int_parse_numericoid LDAP_P((
+ const char **sp,
+ int *code,
+ const int flags ));
/*
* in tls.c
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 */