X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fldap-int.h;h=14152a939f722b7e609236488e9c17d3f343a6c5;hb=005a2f7aec9a9b8bde4c461ad45c9889eb0e9d18;hp=dc75c231a1a22dd99d4fa7739885c0b262252ac6;hpb=22b8b60e49ab05c473395d1d7a588d0bdd8b06e8;p=openldap diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index dc75c231a1..14152a939f 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,7 +18,31 @@ #include "../liblber/lber-int.h" -#define ldap_debug (ldap_int_global_options.ldo_debug) +#ifdef HAVE_CYRUS_SASL + /* the need for this should be removed */ +#include +#endif + +/* + * Support needed if the library is running in the kernel + */ +#if LDAP_INT_IN_KERNEL + /* + * Platform specific function to return a pointer to the + * process-specific global options. + * + * This function should perform the following functions: + * Allocate and initialize a global options struct on a per process basis + * Use callers process identifier to return its global options struct + * Note: Deallocate structure when the process exits + */ +# define LDAP_INT_GLOBAL_OPT() ldap_int_global_opt() + struct ldapoptions *ldap_int_global_opt(void); +#else +# define LDAP_INT_GLOBAL_OPT() (&ldap_int_global_options) +#endif + +#define ldap_debug ((LDAP_INT_GLOBAL_OPT())->ldo_debug) #include "ldap_log.h" @@ -39,17 +62,16 @@ 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) #define LDAP_URL_URLCOLON "URL:" #define LDAP_URL_URLCOLON_LEN (sizeof(LDAP_URL_URLCOLON)-1) -#define NULLLDAPURLDESC ((LDAPURLDesc *)NULL) + +#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 -#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 @@ -59,8 +81,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) @@ -103,11 +125,16 @@ struct ldapoptions { 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 */ @@ -115,18 +142,14 @@ struct ldapoptions { /* LDAPv3 server and client controls */ LDAPControl **ldo_sctrls; LDAPControl **ldo_cctrls; - /* LDAPV3 rebind callback function - */ + + /* LDAP 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_BOOLEANS ldo_booleans; /* boolean options */ }; @@ -139,7 +162,6 @@ 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; @@ -148,7 +170,8 @@ typedef struct ldap_server { * structure for representing an LDAP server connection */ typedef struct ldap_conn { - Sockbuf *lconn_sb; + Sockbuf *lconn_sb; + void *lconn_sasl_ctx; int lconn_refcnt; time_t lconn_lastused; /* time */ int lconn_rebind_inprogress; /* set if rebind in progress */ @@ -158,7 +181,9 @@ 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 struct ldap_conn *lconn_next; BerElement *lconn_ber;/* ber receiving on this conn. */ } LDAPConn; @@ -215,12 +240,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 */ @@ -242,15 +261,14 @@ 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_version ld_options.ldo_version +#define ld_version ld_options.ldo_version + char *ld_host; int ld_port; @@ -271,34 +289,29 @@ 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) #include -extern ldap_pvt_thread_mutex_t ldap_int_resolv_mutex; +LDAP_V ( ldap_pvt_thread_mutex_t ) ldap_int_resolv_mutex; #endif /* HAVE_RES_QUERY && LDAP_R_COMPILE */ /* * in init.c */ -LIBLDAP_F ( struct ldapoptions ) ldap_int_global_options; -LIBLDAP_F ( void ) ldap_int_initialize LDAP_P((int *)); +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 *)); /* memory.c */ /* simple macros to realloc for now */ @@ -319,57 +332,51 @@ LIBLDAP_F ( void ) ldap_int_initialize LDAP_P((int *)); /* * in unit-int.c */ -LIBLDAP_F (void) ldap_int_utils_init LDAP_P(( void )); +LDAP_F (void) ldap_int_utils_init LDAP_P(( void )); /* * in print.c */ -LIBLDAP_F (int) ldap_log_printf LDAP_P((LDAP *ld, int level, const char *fmt, ...)) LDAP_GCCATTR((format(printf, 3, 4))); +LDAP_F (int) ldap_log_printf LDAP_P((LDAP *ld, int level, const char *fmt, ...)) LDAP_GCCATTR((format(printf, 3, 4))); /* * in cache.c */ -LIBLDAP_F (void) ldap_add_request_to_cache LDAP_P(( LDAP *ld, ber_tag_t msgtype, +LDAP_F (void) ldap_add_request_to_cache LDAP_P(( LDAP *ld, ber_tag_t msgtype, BerElement *request )); -LIBLDAP_F (void) ldap_add_result_to_cache LDAP_P(( LDAP *ld, LDAPMessage *result )); -LIBLDAP_F (int) ldap_check_cache LDAP_P(( LDAP *ld, ber_tag_t msgtype, BerElement *request )); +LDAP_F (void) ldap_add_result_to_cache LDAP_P(( LDAP *ld, LDAPMessage *result )); +LDAP_F (int) ldap_check_cache LDAP_P(( LDAP *ld, ber_tag_t msgtype, BerElement *request )); /* * in controls.c */ -LIBLDAP_F (LDAPControl *) ldap_control_dup LDAP_P(( +LDAP_F (LDAPControl *) ldap_control_dup LDAP_P(( const LDAPControl *ctrl )); -LIBLDAP_F (LDAPControl **) ldap_controls_dup LDAP_P(( +LDAP_F (LDAPControl **) ldap_controls_dup LDAP_P(( LDAPControl *const *ctrls )); -LIBLDAP_F (int) ldap_int_get_controls LDAP_P(( +LDAP_F (int) ldap_int_get_controls LDAP_P(( BerElement *be, LDAPControl ***ctrlsp)); -LIBLDAP_F (int) ldap_int_put_controls LDAP_P(( +LDAP_F (int) ldap_int_put_controls LDAP_P(( LDAP *ld, LDAPControl *const *ctrls, BerElement *ber )); -LIBLDAP_F( int ) -ldap_int_create_control LDAP_P(( - const char *requestOID, - BerElement *ber, - int iscritical, - LDAPControl **ctrlp )); /* * in dsparse.c */ -LIBLDAP_F (int) ldap_int_next_line_tokens LDAP_P(( char **bufp, ber_len_t *blenp, char ***toksp )); +LDAP_F (int) ldap_int_next_line_tokens LDAP_P(( char **bufp, ber_len_t *blenp, char ***toksp )); #ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND /* * in kerberos.c */ -LIBLDAP_F (char *) ldap_get_kerberosv4_credentials LDAP_P(( +LDAP_F (char *) ldap_get_kerberosv4_credentials LDAP_P(( LDAP *ld, LDAP_CONST char *who, LDAP_CONST char *service, @@ -381,67 +388,70 @@ LIBLDAP_F (char *) ldap_get_kerberosv4_credentials LDAP_P(( /* * in open.c */ -LIBLDAP_F (int) ldap_open_defconn( LDAP *ld ); -LIBLDAP_F (int) open_ldap_connection( LDAP *ld, Sockbuf *sb, LDAPURLDesc *srvlist, char **krbinstancep, int async ); +LDAP_F (int) ldap_open_defconn( LDAP *ld ); +LDAP_F (int) ldap_int_open_connection( LDAP *ld, + LDAPConn *conn, LDAPURLDesc *srvlist, int async ); /* * in os-ip.c */ -LIBLDAP_F (int) ldap_int_tblsize; -LIBLDAP_F (int) ldap_int_timeval_dup( struct timeval **dest, const struct timeval *tm ); -LIBLDAP_F (int) ldap_connect_to_host( LDAP *ld, Sockbuf *sb, const char *host, unsigned long address, int port, int async ); +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, + 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) -LIBLDAP_F (char *) ldap_host_connected_to( Sockbuf *sb ); +LDAP_V (char *) ldap_int_hostname; +LDAP_F (char *) ldap_host_connected_to( Sockbuf *sb ); #endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND */ -LIBLDAP_F (void) ldap_int_ip_init( void ); -LIBLDAP_F (int) do_ldap_select( LDAP *ld, struct timeval *timeout ); -LIBLDAP_F (void *) ldap_new_select_info( void ); -LIBLDAP_F (void) ldap_free_select_info( void *sip ); -LIBLDAP_F (void) ldap_mark_select_write( LDAP *ld, Sockbuf *sb ); -LIBLDAP_F (void) ldap_mark_select_read( LDAP *ld, Sockbuf *sb ); -LIBLDAP_F (void) ldap_mark_select_clear( LDAP *ld, Sockbuf *sb ); -LIBLDAP_F (int) ldap_is_read_ready( LDAP *ld, Sockbuf *sb ); -LIBLDAP_F (int) ldap_is_write_ready( LDAP *ld, Sockbuf *sb ); - -#ifdef LDAP_PF_LOCAL +LDAP_F (void) ldap_int_ip_init( void ); +LDAP_F (int) do_ldap_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 ); +LDAP_F (void) ldap_mark_select_read( LDAP *ld, Sockbuf *sb ); +LDAP_F (void) ldap_mark_select_clear( LDAP *ld, Sockbuf *sb ); +LDAP_F (int) ldap_is_read_ready( LDAP *ld, Sockbuf *sb ); +LDAP_F (int) ldap_is_write_ready( LDAP *ld, Sockbuf *sb ); + /* * in os-local.c */ -LIBLDAP_F (int) ldap_connect_to_path( LDAP *ld, Sockbuf *sb, const char *path, int async ); +#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 */ -LIBLDAP_F (ber_int_t) ldap_send_initial_request( LDAP *ld, ber_tag_t msgtype, +LDAP_F (ber_int_t) ldap_send_initial_request( LDAP *ld, ber_tag_t msgtype, const char *dn, BerElement *ber ); -LIBLDAP_F (BerElement *) ldap_alloc_ber_with_options( LDAP *ld ); -LIBLDAP_F (void) ldap_set_ber_options( LDAP *ld, BerElement *ber ); - -LIBLDAP_F (int) ldap_send_server_request( LDAP *ld, BerElement *ber, ber_int_t msgid, LDAPRequest *parentreq, LDAPURLDesc *srvlist, LDAPConn *lc, LDAPreqinfo *bind ); -LIBLDAP_F (LDAPConn *) ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb, int connect, LDAPreqinfo *bind ); -LIBLDAP_F (LDAPRequest *) ldap_find_request_by_msgid( LDAP *ld, ber_int_t msgid ); -LIBLDAP_F (void) ldap_free_request( LDAP *ld, LDAPRequest *lr ); -LIBLDAP_F (void) ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ); -LIBLDAP_F (void) ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all ); -LIBLDAP_F (void) ldap_dump_requests_and_responses( LDAP *ld ); -LIBLDAP_F (int) ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ); -LIBLDAP_F (int) ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **referralsp, int *hadrefp ); -LIBLDAP_F (int) ldap_append_referral( LDAP *ld, char **referralsp, char *s ); +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_send_server_request( LDAP *ld, BerElement *ber, ber_int_t msgid, LDAPRequest *parentreq, LDAPURLDesc *srvlist, LDAPConn *lc, LDAPreqinfo *bind ); +LDAP_F (LDAPConn *) ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb, int connect, LDAPreqinfo *bind ); +LDAP_F (LDAPRequest *) ldap_find_request_by_msgid( LDAP *ld, ber_int_t msgid ); +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_append_referral( LDAP *ld, char **referralsp, char *s ); /* * in result.c: */ -#ifdef LDAP_CONNECTIONLESS -LIBLDAP_F (int) cldap_getmsg( LDAP *ld, struct timeval *timeout, BerElement *ber ); -#endif +LDAP_F (char *) ldap_int_msgtype2str( ber_tag_t tag ); /* * in search.c */ -LIBLDAP_F (BerElement *) ldap_build_search_req LDAP_P(( +LDAP_F (BerElement *) ldap_build_search_req LDAP_P(( LDAP *ld, const char *base, ber_int_t scope, @@ -461,13 +471,13 @@ LIBLDAP_F (BerElement *) ldap_build_search_req LDAP_P(( /* * in unbind.c */ -LIBLDAP_F (int) ldap_ld_free LDAP_P(( +LDAP_F (int) ldap_ld_free LDAP_P(( LDAP *ld, int close, LDAPControl **sctrls, LDAPControl **cctrls )); -LIBLDAP_F (int) ldap_send_unbind LDAP_P(( +LDAP_F (int) ldap_send_unbind LDAP_P(( LDAP *ld, Sockbuf *sb, LDAPControl **sctrls, @@ -476,29 +486,62 @@ LIBLDAP_F (int) ldap_send_unbind LDAP_P(( /* * in url.c */ -LIBLDAP_F (LDAPURLDesc *) ldap_url_dup LDAP_P(( +LDAP_F (LDAPURLDesc *) ldap_url_dup LDAP_P(( LDAPURLDesc *ludp )); -LIBLDAP_F (LDAPURLDesc *) ldap_url_duplist LDAP_P(( +LDAP_F (LDAPURLDesc *) ldap_url_duplist LDAP_P(( LDAPURLDesc *ludlist )); -LIBLDAP_F (int) ldap_url_parselist LDAP_P(( +LDAP_F (int) ldap_url_parselist LDAP_P(( LDAPURLDesc **ludlist, const char *url )); -LIBLDAP_F (int) ldap_url_parsehosts LDAP_P(( +LDAP_F (int) ldap_url_parsehosts LDAP_P(( LDAPURLDesc **ludlist, - const char *hosts )); + const char *hosts, + int port )); -LIBLDAP_F (char *) ldap_url_list2hosts LDAP_P(( +LDAP_F (char *) ldap_url_list2hosts LDAP_P(( LDAPURLDesc *ludlist )); -LIBLDAP_F (char *) ldap_url_list2urls LDAP_P(( +LDAP_F (char *) ldap_url_list2urls LDAP_P(( LDAPURLDesc *ludlist )); -LIBLDAP_F (void) ldap_free_urllist 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_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(( + struct 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_END_DECL