]> git.sur5r.net Git - openldap/blob - servers/slapd/back-ldap/back-ldap.h
overlays reworking
[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 struct slap_backend_db;
39
40 struct ldapconn {
41         struct slap_conn        *conn;
42         LDAP            *ld;
43         struct berval   cred;
44         struct berval   bound_dn;
45         struct berval   local_dn;
46         int             bound;
47         ldap_pvt_thread_mutex_t         lc_mutex;
48 };
49
50 struct ldapmap {
51         int drop_missing;
52
53         Avlnode *map;
54         Avlnode *remap;
55 };
56
57 struct ldapmapping {
58         struct berval src;
59         struct berval dst;
60 };
61
62 struct ldaprwmap {
63         /*
64          * DN rewriting
65          */
66 #ifdef ENABLE_REWRITE
67         struct rewrite_info *rwm_rw;
68 #else /* !ENABLE_REWRITE */
69         /* some time the suffix massaging without librewrite
70          * will be disabled */
71         BerVarray rwm_suffix_massage;
72 #endif /* !ENABLE_REWRITE */
73
74         /*
75          * Attribute/objectClass mapping
76          */
77         struct ldapmap rwm_oc;
78         struct ldapmap rwm_at;
79 };
80
81 struct ldapinfo {
82         struct slap_backend_db  *be;
83         char *url;
84         struct berval binddn;
85         struct berval bindpw;
86 #ifdef LDAP_BACK_PROXY_AUTHZ
87         struct berval proxyauthzdn;
88         struct berval proxyauthzpw;
89 #endif /* LDAP_BACK_PROXY_AUTHZ */
90         ldap_pvt_thread_mutex_t         conn_mutex;
91         int savecred;
92         Avlnode *conntree;
93
94 #if 0
95 #ifdef ENABLE_REWRITE
96         struct rewrite_info *rwinfo;
97 #else /* !ENABLE_REWRITE */
98         BerVarray suffix_massage;
99 #endif /* !ENABLE_REWRITE */
100
101         struct ldapmap oc_map;
102         struct ldapmap at_map;
103 #endif
104
105         struct ldaprwmap rwmap;
106 };
107
108 /* Whatever context ldap_back_dn_massage needs... */
109 typedef struct dncookie {
110         struct ldaprwmap *rwmap;
111
112 #ifdef ENABLE_REWRITE
113         Connection *conn;
114         char *ctx;
115         SlapReply *rs;
116 #else
117         int normalized;
118         int tofrom;
119 #endif
120 } dncookie;
121
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_map_result(SlapReply *rs);
125 int ldap_back_op_result(struct ldapconn *lc, Operation *op, SlapReply *rs,
126         ber_int_t msgid, int sendok);
127 int     back_ldap_LTX_init_module(int argc, char *argv[]);
128
129 int ldap_back_dn_massage(dncookie *dc, struct berval *dn,
130         struct berval *res);
131
132 extern int ldap_back_conn_cmp( const void *c1, const void *c2);
133 extern int ldap_back_conn_dup( void *c1, void *c2 );
134 extern void ldap_back_conn_free( void *c );
135
136 /* attributeType/objectClass mapping */
137 int mapping_cmp (const void *, const void *);
138 int mapping_dup (void *, void *);
139
140 void ldap_back_map_init ( struct ldapmap *lm, struct ldapmapping ** );
141 void ldap_back_map ( struct ldapmap *map, struct berval *s, struct berval *m,
142         int remap );
143 #define BACKLDAP_MAP    0
144 #define BACKLDAP_REMAP  1
145 char *
146 ldap_back_map_filter(
147                 struct ldapmap *at_map,
148                 struct ldapmap *oc_map,
149                 struct berval *f,
150                 int remap
151 );
152
153 int
154 ldap_back_map_attrs(
155                 struct ldapmap *at_map,
156                 AttributeName *a,
157                 int remap,
158                 char ***mapped_attrs
159 );
160
161 extern void mapping_free ( void *mapping );
162
163 extern int ldap_back_map_config(
164                 struct ldapmap  *oc_map,
165                 struct ldapmap  *at_map,
166                 const char      *fname,
167                 int             lineno,
168                 int             argc,
169                 char            **argv );
170
171 extern int
172 ldap_back_filter_map_rewrite(
173                 dncookie                *dc,
174                 Filter                  *f,
175                 struct berval           *fstr,
176                 int                     remap );
177
178 /* suffix massaging by means of librewrite */
179 #ifdef ENABLE_REWRITE
180 extern int suffix_massage_config( struct rewrite_info *info,
181                 struct berval *pvnc, struct berval *nvnc,
182                 struct berval *prnc, struct berval *nrnc);
183 #endif /* ENABLE_REWRITE */
184 extern int ldap_dnattr_rewrite( dncookie *dc, BerVarray a_vals );
185 extern int ldap_dnattr_result_rewrite( dncookie *dc, BerVarray a_vals );
186
187 #ifdef LDAP_BACK_PROXY_AUTHZ
188 extern int
189 ldap_back_proxy_authz_ctrl(
190                 struct ldapconn *lc,
191                 Operation       *op,
192                 SlapReply       *rs,
193                 LDAPControl     ***pctrls );
194 #endif /* LDAP_BACK_PROXY_AUTHZ */
195
196 LDAP_END_DECL
197
198 #endif /* SLAPD_LDAP_H */