]> git.sur5r.net Git - openldap/blob - libraries/libldap/ldap-int.h
f211429984cbafd6241171b49d2052f37f4b5f83
[openldap] / libraries / libldap / ldap-int.h
1 /*
2  *  Copyright (c) 1995 Regents of the University of Michigan.
3  *  All rights reserved.
4  *
5  *  ldap-int.h - defines & prototypes internal to the LDAP library
6  */
7
8
9 #include "../liblber/lber-int.h"
10 #include "ldap_log.h"
11 #include "ldap.h"
12
13 LDAP_BEGIN_DECL
14
15 #define LDAP_URL_PREFIX         "ldap://"
16 #define LDAP_URL_PREFIX_LEN     7
17 #define LDAP_URL_URLCOLON       "URL:"
18 #define LDAP_URL_URLCOLON_LEN   4
19
20 #ifdef LDAP_REFERRALS
21 #define LDAP_REF_STR            "Referral:\n"
22 #define LDAP_REF_STR_LEN        10
23 #define LDAP_LDAP_REF_STR       LDAP_URL_PREFIX
24 #define LDAP_LDAP_REF_STR_LEN   LDAP_URL_PREFIX_LEN
25 #ifdef LDAP_DNS
26 #define LDAP_DX_REF_STR         "dx://"
27 #define LDAP_DX_REF_STR_LEN     5
28 #endif /* LDAP_DNS */
29 #endif /* LDAP_REFERRALS */
30
31 /*
32  * This structure represents both ldap messages and ldap responses.
33  * These are really the same, except in the case of search responses,
34  * where a response has multiple messages.
35  */
36
37 typedef struct ldapmsg {
38         int             lm_msgid;       /* the message id */
39         int             lm_msgtype;     /* the message type */
40         BerElement      *lm_ber;        /* the ber encoded message contents */
41         struct ldapmsg  *lm_chain;      /* for search - next msg in the resp */
42         struct ldapmsg  *lm_next;       /* next response */
43         unsigned int    lm_time;        /* used to maintain cache */
44 } LDAPMessage;
45
46 /*
47  * structure representing an ldap connection
48  */
49
50 typedef struct ldap {
51         Sockbuf         ld_sb;          /* socket descriptor & buffer */
52         char            *ld_host;
53         int             ld_version;
54         char            ld_lberoptions;
55         int             ld_deref;
56         int             ld_timelimit;
57         int             ld_sizelimit;
58
59         LDAPFiltDesc    *ld_filtd;      /* from getfilter for ufn searches */
60         char            *ld_ufnprefix;  /* for incomplete ufn's */
61
62         int             ld_errno;
63         char            *ld_error;
64         char            *ld_matched;
65         int             ld_msgid;
66
67         /* do not mess with these */
68 #ifdef LDAP_REFERRALS
69         LDAPRequest     *ld_requests;   /* list of outstanding requests */
70 #else /* LDAP_REFERRALS */
71         LDAPMessage     *ld_requests;   /* list of outstanding requests */
72 #endif /* LDAP_REFERRALS */
73         LDAPMessage     *ld_responses;  /* list of outstanding responses */
74         int             *ld_abandoned;  /* array of abandoned requests */
75         char            ld_attrbuffer[LDAP_MAX_ATTR_LEN];
76         LDAPCache       *ld_cache;      /* non-null if cache is initialized */
77         char            *ld_cldapdn;    /* DN used in connectionless search */
78
79         /* it is OK to change these next four values directly */
80         int             ld_cldaptries;  /* connectionless search retry count */
81         int             ld_cldaptimeout;/* time between retries */
82         int             ld_refhoplimit; /* limit on referral nesting */
83         unsigned long   ld_options;     /* boolean options */
84
85         /* do not mess with the rest though */
86         char            *ld_defhost;    /* full name of default server */
87         int             ld_defport;     /* port of default server */
88         BERTranslateProc ld_lber_encode_translate_proc;
89         BERTranslateProc ld_lber_decode_translate_proc;
90 #ifdef LDAP_REFERRALS
91         LDAPConn        *ld_defconn;    /* default connection */
92         LDAPConn        *ld_conns;      /* list of server connections */
93         void            *ld_selectinfo; /* platform specifics for select */
94         int             (*ld_rebindproc)( struct ldap *ld, char **dnp,
95                                 char **passwdp, int *authmethodp, int freeit );
96                                 /* routine to get info needed for re-bind */
97 #endif /* LDAP_REFERRALS */
98 } LDAP;
99
100 /*
101  * in cache.c
102  */
103 void ldap_add_request_to_cache LDAP_P(( LDAP *ld, unsigned long msgtype,
104         BerElement *request ));
105 void ldap_add_result_to_cache LDAP_P(( LDAP *ld, LDAPMessage *result ));
106 int ldap_check_cache LDAP_P(( LDAP *ld, unsigned long msgtype, BerElement *request ));
107
108
109 #ifdef HAVE_KERBEROS
110 /*
111  * in kerberos.c
112  */
113 char *ldap_get_kerberosv4_credentials LDAP_P(( LDAP *ld, char *who, char *service,
114         int *len ));
115
116 #endif /* HAVE_KERBEROS */
117
118
119 /*
120  * in open.c
121  */
122 int open_ldap_connection( LDAP *ld, Sockbuf *sb, char *host, int defport,
123         char **krbinstancep, int async );
124
125
126 /*
127  * in os-ip.c
128  */
129 int ldap_connect_to_host( Sockbuf *sb, char *host, unsigned long address, int port,
130         int async );
131 void ldap_close_connection( Sockbuf *sb );
132
133 #ifdef HAVE_KERBEROS
134 char *ldap_host_connected_to( Sockbuf *sb );
135 #endif /* HAVE_KERBEROS */
136
137 #ifdef LDAP_REFERRALS
138 int do_ldap_select( LDAP *ld, struct timeval *timeout );
139 void *ldap_new_select_info( void );
140 void ldap_free_select_info( void *sip );
141 void ldap_mark_select_write( LDAP *ld, Sockbuf *sb );
142 void ldap_mark_select_read( LDAP *ld, Sockbuf *sb );
143 void ldap_mark_select_clear( LDAP *ld, Sockbuf *sb );
144 int ldap_is_read_ready( LDAP *ld, Sockbuf *sb );
145 int ldap_is_write_ready( LDAP *ld, Sockbuf *sb );
146 #endif /* LDAP_REFERRALS */
147
148
149 /*
150  * in request.c
151  */
152 int ldap_send_initial_request( LDAP *ld, unsigned long msgtype,
153         char *dn, BerElement *ber );
154 BerElement *ldap_alloc_ber_with_options( LDAP *ld );
155 void ldap_set_ber_options( LDAP *ld, BerElement *ber );
156
157 #if defined( LDAP_REFERRALS ) || defined( LDAP_DNS )
158 int ldap_send_server_request( LDAP *ld, BerElement *ber, int msgid,
159         LDAPRequest *parentreq, LDAPServer *srvlist, LDAPConn *lc,
160         int bind );
161 LDAPConn *ldap_new_connection( LDAP *ld, LDAPServer **srvlistp, int use_ldsb,
162         int connect, int bind );
163 LDAPRequest *ldap_find_request_by_msgid( LDAP *ld, int msgid );
164 void ldap_free_request( LDAP *ld, LDAPRequest *lr );
165 void ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind );
166 void ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all );
167 void ldap_dump_requests_and_responses( LDAP *ld );
168 #endif /* LDAP_REFERRALS || LDAP_DNS */
169
170 #ifdef LDAP_REFERRALS
171 int ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp );
172 int ldap_append_referral( LDAP *ld, char **referralsp, char *s );
173 #endif /* LDAP_REFERRALS */
174
175
176 /*
177  * in search.c
178  */
179 BerElement *ldap_build_search_req( LDAP *ld, char *base, int scope,
180         char *filter, char **attrs, int attrsonly );
181
182
183 /*
184  * in unbind.c
185  */
186 int ldap_ld_free( LDAP *ld, int close );
187 int ldap_send_unbind( LDAP *ld, Sockbuf *sb );
188
189 #ifdef LDAP_DNS
190 /*
191  * in getdxbyname.c
192  */
193 char **ldap_getdxbyname( char *domain );
194 #endif /* LDAP_DNS */
195
196 #if defined( STR_TRANSLATION ) && defined( LDAP_DEFAULT_CHARSET )
197 /*
198  * in charset.c
199  *
200  * added-in this stuff so that libldap.a would build, i.e. refs to 
201  * these routines from open.c would resolve. 
202  * hodges@stanford.edu 5-Feb-96
203  */
204 #if LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET
205 extern 
206 int ldap_t61_to_8859( char **bufp, unsigned long *buflenp, int free_input );
207 extern 
208 int ldap_8859_to_t61( char **bufp, unsigned long *buflenp, int free_input );
209 #endif /* LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET */
210
211 LDAP_END_DECL
212 #endif /* STR_TRANSLATION && LDAP_DEFAULT_CHARSET */