]> git.sur5r.net Git - openldap/blob - include/rewrite.h
Some minor bugs for dntest ""
[openldap] / include / rewrite.h
1 /******************************************************************************
2  *
3  * Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
4  * All rights reserved.
5  *
6  * Permission is granted to anyone to use this software for any purpose
7  * on any computer system, and to alter it and redistribute it, subject
8  * to the following restrictions:
9  *
10  * 1. The author is not responsible for the consequences of use of this
11  * software, no matter how awful, even if they arise from flaws in it.
12  *
13  * 2. The origin of this software must not be misrepresented, either by
14  * explicit claim or by omission.  Since few users ever read sources,
15  * credits should appear in the documentation.
16  *
17  * 3. Altered versions must be plainly marked as such, and must not be
18  * misrepresented as being the original software.  Since few users
19  * ever read sources, credits should appear in the documentation.
20  *
21  * 4. This notice may not be removed or altered.
22  *
23  ******************************************************************************/
24
25 #ifndef REWRITE_H
26 #define REWRITE_H
27
28 LDAP_BEGIN_DECL
29
30 /*
31  * Default rewrite context
32  */
33 #define REWRITE_DEFAULT_CONTEXT         "default"
34
35 /*
36  * Rewrite engine states
37  */
38 #define REWRITE_OFF                     0x0000
39 #define REWRITE_ON                      0x0001
40 #define REWRITE_DEFAULT                 REWRITE_OFF
41
42 /*
43  * Rewrite internal status returns
44  */
45 #define REWRITE_SUCCESS                 LDAP_SUCCESS
46 #define REWRITE_ERR                     LDAP_OPERATIONS_ERROR
47 #define REWRITE_NO_SUCH_OBJECT          LDAP_NO_SUCH_OBJECT
48
49 /*
50  * Rewrite modes (input values for rewrite_info_init); determine the
51  * behavior in case a null or non existent context is required:
52  *
53  *      REWRITE_MODE_ERR                error
54  *      REWRITE_MODE_OK                 no error but no rewrite
55  *      REWRITE_MODE_COPY_INPUT         a copy of the input is returned
56  *      REWRITE_MODE_USE_DEFAULT        the default context is used.
57  */
58 #define REWRITE_MODE_ERR                0x0010
59 #define REWRITE_MODE_OK                 0x0011
60 #define REWRITE_MODE_COPY_INPUT         0x0012
61 #define REWRITE_MODE_USE_DEFAULT        0x0013
62
63 /*
64  * Rewrite status returns
65  *
66  *      REWRITE_REGEXEC_OK              success (result may be empty in case
67  *                                      of no match)
68  *      REWRITE_REGEXEC_ERR             error (internal error,
69  *                                      misconfiguration, map not working ...)
70  *      REWRITE_REGEXEC_STOP            internal use; never returned
71  *      REWRITE_REGEXEC_UNWILLING       the server should issue an 'unwilling
72  *                                      to perform' error
73  */
74 #define REWRITE_REGEXEC_OK              0x0000
75 #define REWRITE_REGEXEC_ERR             0x0001
76 #define REWRITE_REGEXEC_STOP            0x0002
77 #define REWRITE_REGEXEC_UNWILLING       0x0004
78
79 /*
80  * Rewrite info
81  */
82 struct rewrite_info;
83
84 struct berval; /* avoid include */
85
86 /*
87  * Inits the info
88  */
89 LDAP_REWRITE_F (struct rewrite_info *)
90 rewrite_info_init(
91                 int mode
92 );
93
94 /*
95  * Cleans up the info structure
96  */
97 LDAP_REWRITE_F (int)
98 rewrite_info_delete(
99                 struct rewrite_info *info
100 );
101
102
103 /*
104  * Parses a config line and takes actions to fit content in rewrite structure;
105  * lines handled are of the form:
106  *
107  *      rewriteEngine           {on|off}
108  *      rewriteMaxPasses        numPasses
109  *      rewriteContext          contextName [alias aliasedRewriteContex]
110  *      rewriteRule             pattern substPattern [ruleFlags]
111  *      rewriteMap              mapType mapName [mapArgs]
112  *      rewriteParam            paramName paramValue
113  */
114 LDAP_REWRITE_F (int)
115 rewrite_parse(
116                 struct rewrite_info *info,
117                 const char *fname,
118                 int lineno,
119                 int argc,
120                 char **argv
121 );
122
123 /*
124  * Rewrites a string according to context.
125  * If the engine is off, OK is returned, but the return string will be NULL.
126  * In case of 'unwilling to perform', UNWILLING is returned, and the
127  * return string will also be null. The same in case of error.
128  * Otherwise, OK is returned, and result will hold a newly allocated string
129  * with the rewriting.
130  *
131  * What to do in case of non-existing rewrite context is still an issue.
132  * Four possibilities:
133  *      - error,
134  *      - ok with NULL result,
135  *      - ok with copy of string as result,
136  *      - use the default rewrite context.
137  */
138 LDAP_REWRITE_F (int)
139 rewrite(
140                 struct rewrite_info *info,
141                 const char *rewriteContext,
142                 const char *string,
143                 char **result
144 );
145
146 /*
147  * Same as above; the cookie relates the rewrite to a session
148  */
149 LDAP_REWRITE_F (int)
150 rewrite_session(
151                 struct rewrite_info *info,
152                 const char *rewriteContext,
153                 const char *string,
154                 const void *cookie,
155                 char **result
156 );
157
158 /*
159  * Inits a session
160  */
161 LDAP_REWRITE_F (struct rewrite_session *)
162 rewrite_session_init(
163                 struct rewrite_info *info,
164                 const void *cookie
165 );
166
167 /*
168  * Defines and inits a variable with session scope
169  */
170 LDAP_REWRITE_F (int)
171 rewrite_session_var_set(
172                 struct rewrite_info *info,
173                 const void *cookie,
174                 const char *name,
175                 const char *value
176 );
177
178 /*
179  * Deletes a session
180  */
181 LDAP_REWRITE_F (int)
182 rewrite_session_delete(
183                 struct rewrite_info *info,
184                 const void *cookie
185 );
186
187
188 /*
189  * Params
190  */
191
192 /*
193  * Defines and inits a variable with global scope
194  */
195 LDAP_REWRITE_F (int)
196 rewrite_param_set(
197                 struct rewrite_info *info,
198                 const char *name,
199                 const char *value
200 );
201
202 /*
203  * Gets a var with global scope
204  */
205 LDAP_REWRITE_F (int)
206 rewrite_param_get(
207                 struct rewrite_info *info,
208                 const char *name,
209                 struct berval *value
210 );
211
212 /*
213  * Destroys the parameter tree
214  */
215 LDAP_REWRITE_F (int)
216 rewrite_param_destroy(
217                 struct rewrite_info *info
218 );
219
220 LDAP_END_DECL
221
222 #endif /* REWRITE_H */