X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=libraries%2Flibldap%2Fldap-int.h;h=02523bf0b74e6be0029bf53fb6e6d415de36c1f8;hb=4d29df5bd1fabcdc50975651c746365686b62b53;hp=80a66c5ae9f98295c06ae75085448ad7acc81f82;hpb=05960887bb0701d43f9639c28f9d0397090a6b11;p=openldap diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index 80a66c5ae9..02523bf0b7 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h @@ -1,11 +1,19 @@ /* 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 . + * + * 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 + * . */ -/* Portions - * Copyright (c) 1995 Regents of the University of Michigan. +/* Portions Copyright (c) 1995 Regents of the University of Michigan. * All rights reserved. */ @@ -18,9 +26,17 @@ #include "../liblber/lber-int.h" +#ifdef LDAP_R_COMPILE +#include +#endif + #ifdef HAVE_CYRUS_SASL /* the need for this should be removed */ +#ifdef HAVE_SASL_SASL_H +#include +#else #include +#endif #define SASL_MAX_BUFF_SIZE 65536 #define SASL_MIN_BUFF_SIZE 4096 @@ -40,7 +56,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 @@ -50,12 +66,25 @@ #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" @@ -68,6 +97,10 @@ LDAP_BEGIN_DECL #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) @@ -114,8 +147,14 @@ 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* */ + 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; @@ -168,7 +207,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 */ @@ -184,7 +224,7 @@ typedef struct ldap_conn { #endif BerElement *lconn_ber; /* ber receiving on this conn. */ - struct ldap_conn *lconn_next; + struct ldap_conn *lconn_next; } LDAPConn; @@ -209,6 +249,7 @@ typedef struct ldapreq { 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 */ @@ -274,12 +315,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 */ @@ -293,17 +340,22 @@ struct ldap { #define LDAP_VALID(ld) ( (ld)->ld_valid == LDAP_VALID_SESSION ) #ifdef LDAP_R_COMPILE -#include - -#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 */ @@ -316,19 +368,26 @@ LDAP_F ( void ) ldap_int_initialize_global_options LDAP_P(( /* 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 @@ -352,16 +411,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, @@ -399,20 +448,21 @@ LDAP_F (int) ldap_int_open_connection( LDAP *ld, /* * 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 ); @@ -433,7 +483,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 ); @@ -449,6 +499,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: @@ -468,12 +519,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)); -/* - * in string.c - */ - /* see */ /* * in unbind.c @@ -503,6 +551,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, @@ -525,11 +578,12 @@ 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(( - 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 )); @@ -549,6 +603,11 @@ LDAP_F (int) ldap_int_sasl_bind LDAP_P(( 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 @@ -559,6 +618,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 */