]> git.sur5r.net Git - openldap/blob - servers/slapd/back-ldap/back-ldap.h
ITS#3172 connection retry from HEAD
[openldap] / servers / slapd / back-ldap / back-ldap.h
1 /* back-ldap.h - ldap backend header file */
2 /* $OpenLDAP$ */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4  *
5  * Copyright 1999-2004 The OpenLDAP Foundation.
6  * Portions Copyright 2000-2003 Pierangelo Masarati.
7  * Portions Copyright 1999-2003 Howard Chu.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted only as authorized by the OpenLDAP
12  * Public License.
13  *
14  * A copy of this license is available in the file LICENSE in the
15  * top-level directory of the distribution or, alternatively, at
16  * <http://www.OpenLDAP.org/license.html>.
17  */
18 /* ACKNOWLEDGEMENTS:
19  * This work was initially developed by the Howard Chu for inclusion
20  * in OpenLDAP Software and subsequently enhanced by Pierangelo
21  * Masarati.
22  */
23
24 #ifndef SLAPD_LDAP_H
25 #define SLAPD_LDAP_H
26
27 #include "external.h"
28
29 /* String rewrite library */
30 #ifdef ENABLE_REWRITE
31 #include "rewrite.h"
32 #endif /* ENABLE_REWRITE */
33
34 LDAP_BEGIN_DECL
35
36 struct slap_conn;
37 struct slap_op;
38
39 struct ldapconn {
40         struct slap_conn        *conn;
41         LDAP            *ld;
42         struct berval   cred;
43         struct berval   bound_dn;
44         struct berval   local_dn;
45         int             bound;
46         ldap_pvt_thread_mutex_t         lc_mutex;
47 };
48
49 struct ldapmap {
50         int drop_missing;
51
52         Avlnode *map;
53         Avlnode *remap;
54 };
55
56 struct ldapmapping {
57         struct berval src;
58         struct berval dst;
59 };
60
61 struct ldaprwmap {
62         /*
63          * DN rewriting
64          */
65 #ifdef ENABLE_REWRITE
66         struct rewrite_info *rwm_rw;
67 #else /* !ENABLE_REWRITE */
68         /* some time the suffix massaging without librewrite
69          * will be disabled */
70         BerVarray rwm_suffix_massage;
71 #endif /* !ENABLE_REWRITE */
72
73         /*
74          * Attribute/objectClass mapping
75          */
76         struct ldapmap rwm_oc;
77         struct ldapmap rwm_at;
78 };
79
80 struct ldapinfo {
81         char            *url;
82         LDAPURLDesc     *lud;
83         struct berval binddn;
84         struct berval bindpw;
85 #ifdef LDAP_BACK_PROXY_AUTHZ
86         struct berval proxyauthzdn;
87         struct berval proxyauthzpw;
88 #endif /* LDAP_BACK_PROXY_AUTHZ */
89         ldap_pvt_thread_mutex_t         conn_mutex;
90         int savecred;
91         Avlnode *conntree;
92
93 #if 0
94 #ifdef ENABLE_REWRITE
95         struct rewrite_info *rwinfo;
96 #else /* !ENABLE_REWRITE */
97         BerVarray suffix_massage;
98 #endif /* !ENABLE_REWRITE */
99
100         struct ldapmap oc_map;
101         struct ldapmap at_map;
102 #endif
103
104         struct ldaprwmap rwmap;
105 };
106
107 /* Whatever context ldap_back_dn_massage needs... */
108 typedef struct dncookie {
109         struct ldaprwmap *rwmap;
110
111 #ifdef ENABLE_REWRITE
112         Connection *conn;
113         char *ctx;
114         SlapReply *rs;
115 #else
116         int normalized;
117         int tofrom;
118 #endif
119 } dncookie;
120
121 int ldap_back_freeconn( Operation *op, struct ldapconn *lc );
122 struct ldapconn *ldap_back_getconn(struct slap_op *op, struct slap_rep *rs);
123 int ldap_back_dobind(struct ldapconn *lc, Operation *op, SlapReply *rs);
124 int ldap_back_retry(struct ldapconn *lc, Operation *op, SlapReply *rs);
125 int ldap_back_map_result(SlapReply *rs);
126 int ldap_back_op_result(struct ldapconn *lc, Operation *op, SlapReply *rs,
127         ber_int_t msgid, int sendok);
128 int     back_ldap_LTX_init_module(int argc, char *argv[]);
129
130 int ldap_back_dn_massage(dncookie *dc, struct berval *dn,
131         struct berval *res);
132
133 extern int ldap_back_conn_cmp( const void *c1, const void *c2);
134 extern int ldap_back_conn_dup( void *c1, void *c2 );
135 extern void ldap_back_conn_free( void *c );
136
137 /* attributeType/objectClass mapping */
138 int mapping_cmp (const void *, const void *);
139 int mapping_dup (void *, void *);
140
141 void ldap_back_map_init ( struct ldapmap *lm, struct ldapmapping ** );
142 void ldap_back_map ( struct ldapmap *map, struct berval *s, struct berval *m,
143         int remap );
144 #define BACKLDAP_MAP    0
145 #define BACKLDAP_REMAP  1
146 char *
147 ldap_back_map_filter(
148                 struct ldapmap *at_map,
149                 struct ldapmap *oc_map,
150                 struct berval *f,
151                 int remap
152 );
153
154 int
155 ldap_back_map_attrs(
156                 struct ldapmap *at_map,
157                 AttributeName *a,
158                 int remap,
159                 char ***mapped_attrs
160 );
161
162 extern void mapping_free ( void *mapping );
163
164 extern int ldap_back_map_config(
165                 struct ldapmap  *oc_map,
166                 struct ldapmap  *at_map,
167                 const char      *fname,
168                 int             lineno,
169                 int             argc,
170                 char            **argv );
171
172 extern int
173 ldap_back_filter_map_rewrite(
174                 dncookie                *dc,
175                 Filter                  *f,
176                 struct berval           *fstr,
177                 int                     remap );
178
179 /* suffix massaging by means of librewrite */
180 #ifdef ENABLE_REWRITE
181 extern int suffix_massage_config( struct rewrite_info *info,
182                 struct berval *pvnc, struct berval *nvnc,
183                 struct berval *prnc, struct berval *nrnc);
184 #endif /* ENABLE_REWRITE */
185 extern int ldap_dnattr_rewrite( dncookie *dc, BerVarray a_vals );
186 extern int ldap_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals );
187
188 extern int ldap_chain_setup();
189
190 #ifdef LDAP_BACK_PROXY_AUTHZ
191 extern int
192 ldap_back_proxy_authz_ctrl(
193                 struct ldapconn *lc,
194                 Operation       *op,
195                 SlapReply       *rs,
196                 LDAPControl     ***pctrls );
197 #endif /* LDAP_BACK_PROXY_AUTHZ */
198
199 LDAP_END_DECL
200
201 #endif /* SLAPD_LDAP_H */