X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fldap-int.h;h=33ba74d2cb0907786451201a95ab92de6ec8cf91;hb=ac3e6c8dc52860c423e6acaadb154d14ede02e89;hp=14152a939f722b7e609236488e9c17d3f343a6c5;hpb=b2866ff162d17e4f78718a681963885af9364fe2;p=openldap diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index 14152a939f..33ba74d2cb 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h @@ -21,6 +21,9 @@ #ifdef HAVE_CYRUS_SASL /* the need for this should be removed */ #include + +#define SASL_MAX_BUFF_SIZE 65536 +#define SASL_MIN_BUFF_SIZE 4096 #endif /* @@ -50,6 +53,9 @@ #define Debug( level, fmt, arg1, arg2, arg3 ) \ 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) ) + #include "ldap.h" #include "ldap_pvt.h" @@ -62,12 +68,13 @@ 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) -#define CLDAP_URL_PREFIX "cldap://" -#define CLDAP_URL_PREFIX_LEN (sizeof(CLDAP_URL_PREFIX)-1) - #define LDAP_REF_STR "Referral:\n" #define LDAP_REF_STR_LEN (sizeof(LDAP_REF_STR)-1) #define LDAP_LDAP_REF_STR LDAP_URL_PREFIX @@ -111,6 +118,12 @@ struct ldapoptions { #define LDAP_UNINITIALIZED 0x0 #define LDAP_INITIALIZED 0x1 #define LDAP_VALID_SESSION 0x2 +#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 */ @@ -122,6 +135,10 @@ struct ldapoptions { ber_int_t ldo_timelimit; ber_int_t ldo_sizelimit; +#ifdef HAVE_TLS + int ldo_tls_mode; +#endif + LDAPURLDesc *ldo_defludp; int ldo_defport; char* ldo_defbase; @@ -144,34 +161,25 @@ struct ldapoptions { LDAPControl **ldo_cctrls; /* LDAP rebind callback function */ - LDAP_REBIND_PROC *ldo_rebindproc; + LDAP_REBIND_PROC *ldo_rebind_proc; + void *ldo_rebind_params; -#ifdef HAVE_TLS - /* tls context */ - void *ldo_tls_ctx; - int ldo_tls_mode; -#endif LDAP_BOOLEANS ldo_booleans; /* boolean options */ }; -/* - * structure for tracking LDAP server host, ports, DNs, etc. - */ -typedef struct ldap_server { - char *lsrv_host; - char *lsrv_dn; /* if NULL, use default */ - int lsrv_port; - struct ldap_server *lsrv_next; -} LDAPServer; - - /* * structure for representing an LDAP server connection */ typedef struct ldap_conn { Sockbuf *lconn_sb; +#ifdef HAVE_TLS + /* tls context */ + void *lconn_tls_ctx; +#endif +#ifdef HAVE_CYRUS_SASL void *lconn_sasl_ctx; +#endif int lconn_refcnt; time_t lconn_lastused; /* time */ int lconn_rebind_inprogress; /* set if rebind in progress */ @@ -184,8 +192,9 @@ typedef struct ldap_conn { #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND char *lconn_krbinstance; #endif + BerElement *lconn_ber; /* ber receiving on this conn. */ + struct ldap_conn *lconn_next; - BerElement *lconn_ber;/* ber receiving on this conn. */ } LDAPConn; @@ -210,6 +219,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 */ @@ -265,18 +275,13 @@ struct ldap { #define ld_sctrls ld_options.ldo_sctrls #define ld_cctrls ld_options.ldo_cctrls -#define ld_rebindproc ld_options.ldo_rebindproc +#define ld_rebind_proc ld_options.ldo_rebind_proc +#define ld_rebind_params ld_options.ldo_rebind_params #define ld_version ld_options.ldo_version - char *ld_host; - int ld_port; - unsigned short ld_lberoptions; - LDAPFiltDesc *ld_filtd; /* from getfilter for ufn searches */ - char *ld_ufnprefix; /* for incomplete ufn's */ - ber_int_t ld_errno; char *ld_error; char *ld_matched; @@ -298,10 +303,17 @@ struct ldap { }; #define LDAP_VALID(ld) ( (ld)->ld_valid == LDAP_VALID_SESSION ) -#if defined(HAVE_RES_QUERY) && defined(LDAP_R_COMPILE) +#ifdef LDAP_R_COMPILE #include + +#ifdef HAVE_RES_QUERY LDAP_V ( ldap_pvt_thread_mutex_t ) ldap_int_resolv_mutex; -#endif /* HAVE_RES_QUERY && LDAP_R_COMPILE */ +#endif + +#ifdef HAVE_CYRUS_SASL +LDAP_V( ldap_pvt_thread_mutex_t ) ldap_int_sasl_mutex; +#endif +#endif /* * in init.c @@ -328,6 +340,12 @@ LDAP_F ( void ) ldap_int_initialize_global_options LDAP_P(( #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))) + +/* + * in error.c + */ +void ldap_int_error_init( void ); /* * in unit-int.c @@ -366,6 +384,9 @@ LDAP_F (int) ldap_int_put_controls LDAP_P(( LDAPControl *const *ctrls, BerElement *ber )); +LDAP_F (int) ldap_int_client_controls LDAP_P(( + LDAP *ld, + LDAPControl **ctrlp )); /* * in dsparse.c @@ -401,10 +422,11 @@ LDAP_F (int) ldap_connect_to_host( LDAP *ld, Sockbuf *sb, int proto, const char *host, unsigned long address, int port, int async ); -#if defined(LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND) || defined(HAVE_TLS) || defined(HAVE_CYRUS_SASL) +#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 ); -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND */ +#endif LDAP_F (void) ldap_int_ip_init( void ); LDAP_F (int) do_ldap_select( LDAP *ld, struct timeval *timeout ); @@ -439,8 +461,10 @@ LDAP_F (void) ldap_free_request( LDAP *ld, LDAPRequest *lr ); LDAP_F (void) ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ); LDAP_F (void) ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all ); LDAP_F (void) ldap_dump_requests_and_responses( LDAP *ld ); -LDAP_F (int) ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ); -LDAP_F (int) ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **referralsp, int *hadrefp ); +LDAP_F (int) ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, + char **errstrp, int sref, int *hadrefp ); +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 ); /* @@ -513,6 +537,7 @@ LDAP_F (void) ldap_free_urllist LDAP_P(( /* * in cyrus.c */ + LDAP_F (int) ldap_int_sasl_init LDAP_P(( void )); LDAP_F (int) ldap_int_sasl_open LDAP_P(( @@ -520,6 +545,10 @@ LDAP_F (int) ldap_int_sasl_open LDAP_P(( const char* host, ber_len_t ssf )); LDAP_F (int) ldap_int_sasl_close LDAP_P(( LDAP *ld, LDAPConn *conn )); +LDAP_F (int) ldap_int_sasl_external LDAP_P(( + 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_F (int) ldap_int_sasl_set_option LDAP_P(( LDAP *ld, @@ -528,7 +557,7 @@ LDAP_F (int) ldap_int_sasl_config LDAP_P(( struct ldapoptions *lo, int option, const char *arg )); LDAP_F (int) ldap_int_sasl_bind LDAP_P(( - struct ldap *ld, + LDAP *ld, const char *, const char *, LDAPControl **, LDAPControl **, @@ -538,10 +567,15 @@ LDAP_F (int) ldap_int_sasl_bind LDAP_P(( LDAP_SASL_INTERACT_PROC *interact, void *defaults )); + /* * in tls.c */ -LDAP_F (int) ldap_int_tls_config LDAP_P(( struct ldapoptions *lo, int option, const char *arg )); +LDAP_F (int) ldap_int_tls_config LDAP_P(( LDAP *ld, + int option, const char *arg )); + +LDAP_F (int) ldap_int_tls_start LDAP_P(( LDAP *ld, + LDAPConn *conn, LDAPURLDesc *srv )); LDAP_END_DECL