X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fldap-int.h;h=33ba74d2cb0907786451201a95ab92de6ec8cf91;hb=ac3e6c8dc52860c423e6acaadb154d14ede02e89;hp=7b196497abfe987cacdb19a030bf5bdc623bb109;hpb=d2b05a3858822df66785b4a0939204b10ac1c47f;p=openldap diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index 7b196497ab..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,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 */ @@ -139,37 +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 -#ifdef HAVE_CYRUS_SASL - struct sasl_security_properties ldo_sasl_secprops; -#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 */ @@ -179,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; @@ -206,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 */ @@ -236,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 */ @@ -263,24 +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; - 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; @@ -293,11 +294,6 @@ 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 */ @@ -307,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 @@ -337,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 @@ -375,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 )); /* @@ -416,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 ); @@ -434,10 +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, int proto, +#ifdef LDAP_PF_LOCAL +LDAP_F (int) ldap_connect_to_path( LDAP *ld, Sockbuf *sb, const char *path, int async ); -#endif /* LDAP_PF_UNIX */ +#endif /* LDAP_PF_LOCAL */ /* * in request.c @@ -454,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 ); /* @@ -516,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 )); @@ -530,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(( @@ -537,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, @@ -545,14 +557,25 @@ 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 *, LDAP_CONST char *, - const char *, LDAPControl **, LDAPControl **, - LDAP_SASL_INTERACT_PROC *interact )); + 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(( 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