X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fldap-int.h;h=97e62695924b78a820267d2620cb15d9627c6d0c;hb=fd3000d5dcfd59d581a16a823a855dedd0453a17;hp=e841a35b5bbadfbe86c2ff40bf338e51cfaee824;hpb=29eda9c7997e57c4907534e817850389e966c23a;p=openldap diff --git a/libraries/libldap/ldap-int.h b/libraries/libldap/ldap-int.h index e841a35b5b..97e6269592 100644 --- a/libraries/libldap/ldap-int.h +++ b/libraries/libldap/ldap-int.h @@ -5,86 +5,183 @@ * ldap-int.h - defines & prototypes internal to the LDAP library */ +#ifndef _LDAP_INT_H +#define _LDAP_INT_H 1 + +#include "../liblber/lber-int.h" +#include "ldap_log.h" +#include "ldap.h" + +LDAP_BEGIN_DECL #define LDAP_URL_PREFIX "ldap://" #define LDAP_URL_PREFIX_LEN 7 #define LDAP_URL_URLCOLON "URL:" #define LDAP_URL_URLCOLON_LEN 4 -#ifdef LDAP_REFERRALS +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS #define LDAP_REF_STR "Referral:\n" #define LDAP_REF_STR_LEN 10 #define LDAP_LDAP_REF_STR LDAP_URL_PREFIX #define LDAP_LDAP_REF_STR_LEN LDAP_URL_PREFIX_LEN -#ifdef LDAP_DNS +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS #define LDAP_DX_REF_STR "dx://" #define LDAP_DX_REF_STR_LEN 5 -#endif /* LDAP_DNS */ -#endif /* LDAP_REFERRALS */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */ + +#define LDAP_BOOL_REFERRALS 0 +#define LDAP_BOOL_RESTART 1 +#define LDAP_BOOL_DNS 2 + +#define LDAP_BOOLEANS unsigned long +#define LDAP_BOOL(n) (1 << (n)) +#define LDAP_BOOL_GET(lo, bool) ((lo)->ldo_booleans & LDAP_BOOL(bool) \ + ? LDAP_OPT_ON : LDAP_OPT_OFF) +#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) + +/* + * This structure represents both ldap messages and ldap responses. + * These are really the same, except in the case of search responses, + * where a response has multiple messages. + */ + +struct ldapmsg { + int lm_msgid; /* the message id */ + int lm_msgtype; /* the message type */ + BerElement *lm_ber; /* the ber encoded message contents */ + struct ldapmsg *lm_chain; /* for search - next msg in the resp */ + struct ldapmsg *lm_next; /* next response */ + unsigned int lm_time; /* used to maintain cache */ +}; + +/* + * structure representing get/set'able options + * which have global defaults. + */ +struct ldapoptions { + int ldo_version; /* version to connect at */ + int ldo_deref; + int ldo_timelimit; + int ldo_sizelimit; + + char* ldo_defhost; + int ldo_defport; + + int ldo_cldaptries; /* connectionless search retry count */ + int ldo_cldaptimeout;/* time between retries */ + int ldo_refhoplimit; /* limit on referral nesting */ + + LDAP_BOOLEANS ldo_booleans; /* boolean options */ +}; + +/* + * structure representing an ldap connection + */ + +struct ldap { + Sockbuf ld_sb; /* socket descriptor & buffer */ + + struct ldapoptions ld_options; + +#define ld_deref ld_options.ldo_deref +#define ld_timelimit ld_options.ldo_timelimit +#define ld_sizelimit ld_options.ldo_sizelimit + +#define ld_cldaptries ld_options.ldo_cldaptries +#define ld_cldaptimeout ld_options.ldo_cldaptimeout +#define ld_refhoplimit ld_options.ldo_refhoplimit + + int ld_version; /* version connected at */ + char *ld_host; + int ld_port; + + char ld_lberoptions; + + LDAPFiltDesc *ld_filtd; /* from getfilter for ufn searches */ + char *ld_ufnprefix; /* for incomplete ufn's */ + + int ld_errno; + char *ld_error; + char *ld_matched; + int ld_msgid; + + /* do not mess with these */ +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS + LDAPRequest *ld_requests; /* list of outstanding requests */ +#else /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */ + LDAPMessage *ld_requests; /* list of outstanding requests */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */ + LDAPMessage *ld_responses; /* list of outstanding responses */ + int *ld_abandoned; /* array of abandoned requests */ + char ld_attrbuffer[LDAP_MAX_ATTR_LEN]; + LDAPCache *ld_cache; /* non-null if cache is initialized */ + char *ld_cldapdn; /* DN used in connectionless search */ + + /* do not mess with the rest though */ + char *ld_defhost; /* full name of default server */ + int ld_defport; /* port of default server */ + BERTranslateProc ld_lber_encode_translate_proc; + BERTranslateProc ld_lber_decode_translate_proc; + +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS + LDAPConn *ld_defconn; /* default connection */ + LDAPConn *ld_conns; /* list of server connections */ + void *ld_selectinfo; /* platform specifics for select */ + int (*ld_rebindproc)( struct ldap *ld, char **dnp, + char **passwdp, int *authmethodp, int freeit ); + /* routine to get info needed for re-bind */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */ +}; +/* + * in init.c + */ +extern int openldap_ldap_initialized; +extern struct ldapoptions openldap_ldap_global_options; +void openldap_ldap_initialize LDAP_P((void)); + /* * in cache.c */ -#ifdef NEEDPROTOS -void ldap_add_request_to_cache( LDAP *ld, unsigned long msgtype, - BerElement *request ); -void ldap_add_result_to_cache( LDAP *ld, LDAPMessage *result ); -int ldap_check_cache( LDAP *ld, unsigned long msgtype, BerElement *request ); -#else /* NEEDPROTOS */ -void ldap_add_request_to_cache(); -void ldap_add_result_to_cache(); -int ldap_check_cache(); -#endif /* NEEDPROTOS */ - - -#ifdef KERBEROS +void ldap_add_request_to_cache LDAP_P(( LDAP *ld, unsigned long msgtype, + BerElement *request )); +void ldap_add_result_to_cache LDAP_P(( LDAP *ld, LDAPMessage *result )); +int ldap_check_cache LDAP_P(( LDAP *ld, unsigned long msgtype, BerElement *request )); + + +#ifdef HAVE_KERBEROS /* * in kerberos.c */ -#ifdef NEEDPROTOS -char *ldap_get_kerberosv4_credentials( LDAP *ld, char *who, char *service, - int *len ); -#else /* NEEDPROTOS */ -char *ldap_get_kerberosv4_credentials(); -#endif /* NEEDPROTOS */ +char *ldap_get_kerberosv4_credentials LDAP_P(( LDAP *ld, char *who, char *service, + int *len )); -#endif /* KERBEROS */ +#endif /* HAVE_KERBEROS */ /* * in open.c */ -#ifdef NEEDPROTOS int open_ldap_connection( LDAP *ld, Sockbuf *sb, char *host, int defport, char **krbinstancep, int async ); -#else /* NEEDPROTOS */ -int open_ldap_connection(); -#endif /* NEEDPROTOS */ /* * in os-ip.c */ -#ifdef NEEDPROTOS int ldap_connect_to_host( Sockbuf *sb, char *host, unsigned long address, int port, int async ); void ldap_close_connection( Sockbuf *sb ); -#else /* NEEDPROTOS */ -int ldap_connect_to_host(); -void ldap_close_connection(); -#endif /* NEEDPROTOS */ -#ifdef KERBEROS -#ifdef NEEDPROTOS +#ifdef HAVE_KERBEROS char *ldap_host_connected_to( Sockbuf *sb ); -#else /* NEEDPROTOS */ -char *host_connected_to(); -#endif /* NEEDPROTOS */ -#endif /* KERBEROS */ +#endif /* HAVE_KERBEROS */ -#ifdef LDAP_REFERRALS -#ifdef NEEDPROTOS +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS int do_ldap_select( LDAP *ld, struct timeval *timeout ); void *ldap_new_select_info( void ); void ldap_free_select_info( void *sip ); @@ -93,35 +190,18 @@ void ldap_mark_select_read( LDAP *ld, Sockbuf *sb ); void ldap_mark_select_clear( LDAP *ld, Sockbuf *sb ); int ldap_is_read_ready( LDAP *ld, Sockbuf *sb ); int ldap_is_write_ready( LDAP *ld, Sockbuf *sb ); -#else /* NEEDPROTOS */ -int do_ldap_select(); -void *ldap_new_select_info(); -void ldap_free_select_info(); -void ldap_mark_select_write(); -void ldap_mark_select_read(); -void ldap_mark_select_clear(); -int ldap_is_read_ready(); -int ldap_is_write_ready(); -#endif /* NEEDPROTOS */ -#endif /* LDAP_REFERRALS */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */ /* * in request.c */ -#ifdef NEEDPROTOS int ldap_send_initial_request( LDAP *ld, unsigned long msgtype, char *dn, BerElement *ber ); BerElement *ldap_alloc_ber_with_options( LDAP *ld ); void ldap_set_ber_options( LDAP *ld, BerElement *ber ); -#else /* NEEDPROTOS */ -int ldap_send_initial_request(); -BerElement *ldap_alloc_ber_with_options(); -void ldap_set_ber_options(); -#endif /* NEEDPROTOS */ - -#if defined( LDAP_REFERRALS ) || defined( LDAP_DNS ) -#ifdef NEEDPROTOS + +#if defined( LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS ) || defined( LDAP_API_FEATURE_X_OPENLDAP_V2_DNS ) int ldap_send_server_request( LDAP *ld, BerElement *ber, int msgid, LDAPRequest *parentreq, LDAPServer *srvlist, LDAPConn *lc, int bind ); @@ -132,61 +212,33 @@ void ldap_free_request( LDAP *ld, LDAPRequest *lr ); void ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ); void ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all ); void ldap_dump_requests_and_responses( LDAP *ld ); -#else /* NEEDPROTOS */ -int ldap_send_server_request(); -LDAPConn *ldap_new_connection(); -LDAPRequest *ldap_find_request_by_msgid(); -void ldap_free_request(); -void ldap_free_connection(); -void ldap_dump_connection(); -void ldap_dump_requests_and_responses(); -#endif /* NEEDPROTOS */ -#endif /* LDAP_REFERRALS || LDAP_DNS */ - -#ifdef LDAP_REFERRALS -#ifdef NEEDPROTOS +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS || LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ + +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS int ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ); int ldap_append_referral( LDAP *ld, char **referralsp, char *s ); -#else /* NEEDPROTOS */ -int ldap_chase_referrals(); -int ldap_append_referral(); -#endif /* NEEDPROTOS */ -#endif /* LDAP_REFERRALS */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS */ /* * in search.c */ -#ifdef NEEDPROTOS BerElement *ldap_build_search_req( LDAP *ld, char *base, int scope, char *filter, char **attrs, int attrsonly ); -#else /* NEEDPROTOS */ -BerElement *ldap_build_search_req(); -#endif /* NEEDPROTOS */ /* * in unbind.c */ -#ifdef NEEDPROTOS int ldap_ld_free( LDAP *ld, int close ); int ldap_send_unbind( LDAP *ld, Sockbuf *sb ); -#else /* NEEDPROTOS */ -int ldap_ld_free(); -int ldap_send_unbind(); -#endif /* NEEDPROTOS */ - -#ifdef LDAP_DNS +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS /* * in getdxbyname.c */ -#ifdef NEEDPROTOS char **ldap_getdxbyname( char *domain ); -#else /* NEEDPROTOS */ -char **ldap_getdxbyname(); -#endif /* NEEDPROTOS */ -#endif /* LDAP_DNS */ +#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ #if defined( STR_TRANSLATION ) && defined( LDAP_DEFAULT_CHARSET ) /* @@ -197,16 +249,13 @@ char **ldap_getdxbyname(); * hodges@stanford.edu 5-Feb-96 */ #if LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET -#ifdef NEEDPROTOS extern int ldap_t61_to_8859( char **bufp, unsigned long *buflenp, int free_input ); extern int ldap_8859_to_t61( char **bufp, unsigned long *buflenp, int free_input ); -#else /* NEEDPROTOS */ -extern -int ldap_t61_to_8859(); -extern -int ldap_8859_to_t61(); -#endif /* NEEDPROTOS */ #endif /* LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET */ + +LDAP_END_DECL #endif /* STR_TRANSLATION && LDAP_DEFAULT_CHARSET */ + +#endif /* _LDAP_INT_H */