X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=libraries%2Flibldap%2Fldap-int.h;h=33ba74d2cb0907786451201a95ab92de6ec8cf91;hb=ac3e6c8dc52860c423e6acaadb154d14ede02e89;hp=c477d1fb8189f795d21c14355255db412ee81c22;hpb=49f414738569096eae2c94a4f05f0f3f2636b8b7;p=openldap diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index c477d1fb81..33ba74d2cb 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h @@ -1,3 +1,4 @@ +/* ldap-int.h - defines & prototypes internal to the LDAP library */ /* $OpenLDAP$ */ /* * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. @@ -6,8 +7,6 @@ /* Portions * Copyright (c) 1995 Regents of the University of Michigan. * All rights reserved. - * - * ldap-int.h - defines & prototypes internal to the LDAP library */ #ifndef _LDAP_INT_H @@ -19,6 +18,14 @@ #include "../liblber/lber-int.h" +#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 + /* * Support needed if the library is running in the kernel */ @@ -46,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" @@ -58,17 +68,17 @@ 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) -#define LDAPIS_URL_PREFIX "ldapis://" -#define LDAPIS_URL_PREFIX_LEN (sizeof(LDAPIS_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 NULLLDAPURLDESC ((LDAPURLDesc *)NULL) #define LDAP_REF_STR "Referral:\n" #define LDAP_REF_STR_LEN (sizeof(LDAP_REF_STR)-1) #define LDAP_LDAP_REF_STR LDAP_URL_PREFIX -#define LDAP_LDAP_REF_STR_LEN (sizeof(LDAP_LDAP_REF_STR)-1) - +#define LDAP_LDAP_REF_STR_LEN LDAP_URL_PREFIX_LEN #define LDAP_DEFAULT_REFHOPLIMIT 5 @@ -78,8 +88,8 @@ LDAP_BEGIN_DECL #define LDAP_BOOLEANS unsigned long #define LDAP_BOOL(n) (1 << (n)) -#define LDAP_BOOL_GET(lo, bool) ((lo)->ldo_booleans & LDAP_BOOL(bool) \ - ? -1 : 0) +#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)) #define LDAP_BOOL_CLR(lo, bool) ((lo)->ldo_booleans &= ~LDAP_BOOL(bool)) #define LDAP_BOOL_ZERO(lo) ((lo)->ldo_booleans = 0) @@ -108,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 */ @@ -119,14 +135,23 @@ 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; - char* ldo_defbinddn; /* simple bind dn */ + char* ldo_defbinddn; /* bind dn */ -#ifdef LDAP_CONNECTIONLESS - int ldo_cldaptries; /* connectionless search retry count */ - int ldo_cldaptimeout;/* time between retries */ +#ifdef HAVE_CYRUS_SASL + char* ldo_def_sasl_mech; /* SASL Mechanism(s) */ + char* ldo_def_sasl_realm; /* SASL realm */ + char* ldo_def_sasl_authcid; /* SASL authentication identity */ + char* ldo_def_sasl_authzid; /* SASL authorization identity */ + + /* SASL Security Properties */ + struct sasl_security_properties ldo_sasl_secprops; #endif int ldo_refhoplimit; /* limit on referral nesting */ @@ -134,40 +159,27 @@ struct ldapoptions { /* LDAPv3 server and client controls */ LDAPControl **ldo_sctrls; LDAPControl **ldo_cctrls; - /* LDAPV3 rebind callback function - */ - LDAP_REBIND_PROC *ldo_rebindproc; -#ifdef HAVE_TLS - /* tls context */ - void *ldo_tls_ctx; - int ldo_tls_mode; -#endif -#ifdef HAVE_CYRUS_SASL - sasl_ssf_t ldo_sasl_minssf; - sasl_ssf_t ldo_sasl_maxssf; -#endif + /* LDAP rebind callback function */ + LDAP_REBIND_PROC *ldo_rebind_proc; + void *ldo_rebind_params; + 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; -/* int lsrv_protocol; */ - struct ldap_server *lsrv_next; -} LDAPServer; - - /* * structure for representing an LDAP server connection */ typedef struct ldap_conn { - Sockbuf *lconn_sb; + 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 */ @@ -177,9 +189,12 @@ typedef struct ldap_conn { #define LDAP_CONNST_CONNECTING 2 #define LDAP_CONNST_CONNECTED 3 LDAPURLDesc *lconn_server; +#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; @@ -204,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 */ @@ -234,12 +250,6 @@ typedef struct ldapreqinfo { char *ri_url; } LDAPreqinfo; -/* - * handy macro for checking if handle is connectionless - */ - -#define LDAP_IS_CLDAP(ld) ((ld)->ld_cldapnaddr>0) - /* * structure representing an ldap connection */ @@ -261,23 +271,17 @@ struct ldap { #define ld_defhost ld_options.ldo_defhost #define ld_defport ld_options.ldo_defport -#define ld_cldaptries ld_options.ldo_cldaptries -#define ld_cldaptimeout ld_options.ldo_cldaptimeout #define ld_refhoplimit ld_options.ldo_refhoplimit #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; +#define ld_version ld_options.ldo_version 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; @@ -290,33 +294,33 @@ struct ldap { ber_int_t *ld_abandoned; /* array of abandoned requests */ LDAPCache *ld_cache; /* non-null if cache is initialized */ - /* stuff used by connectionless searches. */ - - char *ld_cldapdn; /* DN used in connectionless search */ - int ld_cldapnaddr; /* number of addresses */ - void **ld_cldapaddrs;/* addresses to send request to */ /* do not mess with the rest though */ LDAPConn *ld_defconn; /* default connection */ LDAPConn *ld_conns; /* list of server connections */ void *ld_selectinfo; /* platform specifics for select */ -#ifdef HAVE_CYRUS_SASL - sasl_conn_t *ld_sasl_context; -#endif /* HAVE_CYRUS_SASL */ }; #define LDAP_VALID(ld) ( (ld)->ld_valid == LDAP_VALID_SESSION ) -#if defined(HAVE_RES_QUERY) && defined(LDAP_R_COMPILE) +#ifdef LDAP_R_COMPILE #include -extern ldap_pvt_thread_mutex_t ldap_int_resolv_mutex; -#endif /* HAVE_RES_QUERY && 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 /* * in init.c */ -LDAP_F ( struct ldapoptions ) ldap_int_global_options; +LDAP_V ( struct ldapoptions ) ldap_int_global_options; + LDAP_F ( void ) ldap_int_initialize LDAP_P((struct ldapoptions *, int *)); LDAP_F ( void ) ldap_int_initialize_global_options LDAP_P(( struct ldapoptions *, int *)); @@ -336,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 @@ -374,11 +384,8 @@ LDAP_F (int) ldap_int_put_controls LDAP_P(( LDAPControl *const *ctrls, BerElement *ber )); -LDAP_F( int ) -ldap_int_create_control LDAP_P(( - const char *requestOID, - BerElement *ber, - int iscritical, +LDAP_F (int) ldap_int_client_controls LDAP_P(( + LDAP *ld, LDAPControl **ctrlp )); /* @@ -403,18 +410,23 @@ LDAP_F (char *) ldap_get_kerberosv4_credentials LDAP_P(( * in open.c */ LDAP_F (int) ldap_open_defconn( LDAP *ld ); -LDAP_F (int) open_ldap_connection( LDAP *ld, Sockbuf *sb, LDAPURLDesc *srvlist, char **krbinstancep, int async ); +LDAP_F (int) ldap_int_open_connection( LDAP *ld, + LDAPConn *conn, LDAPURLDesc *srvlist, int async ); /* * 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_F (int) ldap_connect_to_host( LDAP *ld, Sockbuf *sb, const char *host, unsigned long address, int port, int async ); +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 ); @@ -429,9 +441,10 @@ LDAP_F (int) ldap_is_write_ready( LDAP *ld, Sockbuf *sb ); /* * in os-local.c */ -#ifdef LDAP_PF_UNIX -LDAP_F (int) ldap_connect_to_path( LDAP *ld, Sockbuf *sb, const char *path, int async ); -#endif /* LDAP_PF_UNIX */ +#ifdef LDAP_PF_LOCAL +LDAP_F (int) ldap_connect_to_path( LDAP *ld, Sockbuf *sb, + const char *path, int async ); +#endif /* LDAP_PF_LOCAL */ /* * in request.c @@ -448,16 +461,15 @@ 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 ); /* * in result.c: */ -#ifdef LDAP_CONNECTIONLESS -LDAP_F (int) cldap_getmsg( LDAP *ld, struct timeval *timeout, BerElement *ber ); -#endif LDAP_F (char *) ldap_int_msgtype2str( ber_tag_t tag ); /* @@ -510,7 +522,8 @@ LDAP_F (int) ldap_url_parselist LDAP_P(( LDAP_F (int) ldap_url_parsehosts LDAP_P(( LDAPURLDesc **ludlist, - const char *hosts )); + const char *hosts, + int port )); LDAP_F (char *) ldap_url_list2hosts LDAP_P(( LDAPURLDesc *ludlist )); @@ -521,6 +534,48 @@ LDAP_F (char *) ldap_url_list2urls LDAP_P(( LDAP_F (void) ldap_free_urllist LDAP_P(( LDAPURLDesc *ludlist )); +/* + * in cyrus.c + */ + +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 )); +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, + int option, void *arg )); +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(( + LDAP *ld, + const char *, + const char *, + LDAPControl **, LDAPControl **, + + /* should be passed in client controls */ + unsigned flags, + LDAP_SASL_INTERACT_PROC *interact, + void *defaults )); + + +/* + * in tls.c + */ +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