X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Frewrite.h;h=155f5044524ba08a642d9f920371e1204ba61c18;hb=2ba90833c762a73af7c77392f9bbdf5c2bba881e;hp=9c61ba942d35e6ad3a101a64b364f2fc7ec6520f;hpb=fdbe100e5f134aead3920c882573eb30057e5054;p=openldap
diff --git a/include/rewrite.h b/include/rewrite.h
index 9c61ba942d..155f504452 100644
--- a/include/rewrite.h
+++ b/include/rewrite.h
@@ -1,32 +1,27 @@
-/******************************************************************************
+/* $OpenLDAP$
+ */
+/* This work is part of OpenLDAP Software .
*
- * Copyright (C) 2000 Pierangelo Masarati,
+ * Copyright 2000-2005 The OpenLDAP Foundation.
+ * Portions Copyright 2000-2003 Pierangelo Masarati.
* All rights reserved.
*
- * Permission is granted to anyone to use this software for any purpose
- * on any computer system, and to alter it and redistribute it, subject
- * to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of this
- * software, no matter how awful, even if they arise from flaws in it.
- *
- * 2. The origin of this software must not be misrepresented, either by
- * explicit claim or by omission. Since few users ever read sources,
- * credits should appear in the documentation.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
*
- * 3. Altered versions must be plainly marked as such, and must not be
- * misrepresented as being the original software. Since few users
- * ever read sources, credits should appear in the documentation.
- *
- * 4. This notice may not be removed or altered.
- *
- ******************************************************************************/
+ * A copy of this license is available in file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * .
+ */
+/* ACKNOWLEDGEMENT:
+ * This work was initially developed by Pierangelo Masarati for
+ * inclusion in OpenLDAP Software.
+ */
#ifndef REWRITE_H
#define REWRITE_H
-LDAP_BEGIN_DECL
-
/*
* Default rewrite context
*/
@@ -43,13 +38,12 @@ LDAP_BEGIN_DECL
* Rewrite internal status returns
*/
#define REWRITE_SUCCESS LDAP_SUCCESS
-#define REWRITE_ERR LDAP_OPERATIONS_ERROR
-#define REWRITE_NO_SUCH_OBJECT LDAP_NO_SUCH_OBJECT
+#define REWRITE_ERR LDAP_OTHER
/*
* Rewrite modes (input values for rewrite_info_init); determine the
* behavior in case a null or non existent context is required:
- *
+ *
* REWRITE_MODE_ERR error
* REWRITE_MODE_OK no error but no rewrite
* REWRITE_MODE_COPY_INPUT a copy of the input is returned
@@ -62,7 +56,7 @@ LDAP_BEGIN_DECL
/*
* Rewrite status returns
- *
+ *
* REWRITE_REGEXEC_OK success (result may be empty in case
* of no match)
* REWRITE_REGEXEC_ERR error (internal error,
@@ -71,10 +65,36 @@ LDAP_BEGIN_DECL
* REWRITE_REGEXEC_UNWILLING the server should issue an 'unwilling
* to perform' error
*/
-#define REWRITE_REGEXEC_OK 0x0000
-#define REWRITE_REGEXEC_ERR 0x0001
-#define REWRITE_REGEXEC_STOP 0x0002
-#define REWRITE_REGEXEC_UNWILLING 0x0004
+#define REWRITE_REGEXEC_OK (0)
+#define REWRITE_REGEXEC_ERR (-1)
+#define REWRITE_REGEXEC_STOP (-2)
+#define REWRITE_REGEXEC_UNWILLING (-3)
+#define REWRITE_REGEXEC_USER (1) /* and above: LDAP errors */
+
+/*
+ * Rewrite variable flags
+ * REWRITE_VAR_INSERT insert mode (default) when adding
+ * a variable; if not set during value
+ * update, the variable is not inserted
+ * if not present
+ * REWRITE_VAR_UPDATE update mode (default) when updating
+ * a variable; if not set during insert,
+ * the value is not updated if the
+ * variable already exists
+ * REWRITE_VAR_COPY_NAME copy the variable name; if not set,
+ * the name is not copied; be sure the
+ * referenced string is available for
+ * the entire life scope of the variable.
+ * REWRITE_VAR_COPY_VALUE copy the variable value; if not set,
+ * the value is not copied; be sure the
+ * referenced string is available for
+ * the entire life scope of the variable.
+ */
+#define REWRITE_VAR_NONE 0x0000
+#define REWRITE_VAR_INSERT 0x0001
+#define REWRITE_VAR_UPDATE 0x0002
+#define REWRITE_VAR_COPY_NAME 0x0004
+#define REWRITE_VAR_COPY_VALUE 0x0008
/*
* Rewrite info
@@ -83,10 +103,12 @@ struct rewrite_info;
struct berval; /* avoid include */
+LDAP_BEGIN_DECL
+
/*
* Inits the info
*/
-extern struct rewrite_info *
+LDAP_REWRITE_F (struct rewrite_info *)
rewrite_info_init(
int mode
);
@@ -94,9 +116,9 @@ rewrite_info_init(
/*
* Cleans up the info structure
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_info_delete(
- struct rewrite_info *info
+ struct rewrite_info **info
);
@@ -111,7 +133,7 @@ rewrite_info_delete(
* rewriteMap mapType mapName [mapArgs]
* rewriteParam paramName paramValue
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_parse(
struct rewrite_info *info,
const char *fname,
@@ -120,6 +142,15 @@ rewrite_parse(
char **argv
);
+/*
+ * process a config file that was already opened. Uses rewrite_parse.
+ */
+LDAP_REWRITE_F (int)
+rewrite_read(
+ FILE *fin,
+ struct rewrite_info *info
+);
+
/*
* Rewrites a string according to context.
* If the engine is off, OK is returned, but the return string will be NULL.
@@ -130,12 +161,12 @@ rewrite_parse(
*
* What to do in case of non-existing rewrite context is still an issue.
* Four possibilities:
- * - error,
- * - ok with NULL result,
+ * - error,
+ * - ok with NULL result,
* - ok with copy of string as result,
* - use the default rewrite context.
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite(
struct rewrite_info *info,
const char *rewriteContext,
@@ -146,7 +177,7 @@ rewrite(
/*
* Same as above; the cookie relates the rewrite to a session
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_session(
struct rewrite_info *info,
const char *rewriteContext,
@@ -158,7 +189,7 @@ rewrite_session(
/*
* Inits a session
*/
-extern struct rewrite_session *
+LDAP_REWRITE_F (struct rewrite_session *)
rewrite_session_init(
struct rewrite_info *info,
const void *cookie
@@ -167,18 +198,23 @@ rewrite_session_init(
/*
* Defines and inits a variable with session scope
*/
-extern int
-rewrite_session_var_set(
+LDAP_REWRITE_F (int)
+rewrite_session_var_set_f(
struct rewrite_info *info,
const void *cookie,
const char *name,
- const char *value
+ const char *value,
+ int flags
);
+#define rewrite_session_var_set(info, cookie, name, value) \
+ rewrite_session_var_set_f((info), (cookie), (name), (value), \
+ REWRITE_VAR_INSERT|REWRITE_VAR_UPDATE|REWRITE_VAR_COPY_NAME|REWRITE_VAR_COPY_VALUE)
+
/*
* Deletes a session
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_session_delete(
struct rewrite_info *info,
const void *cookie
@@ -192,7 +228,7 @@ rewrite_session_delete(
/*
* Defines and inits a variable with global scope
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_param_set(
struct rewrite_info *info,
const char *name,
@@ -202,17 +238,17 @@ rewrite_param_set(
/*
* Gets a var with global scope
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_param_get(
struct rewrite_info *info,
const char *name,
struct berval *value
);
-/*
+/*
* Destroys the parameter tree
*/
-extern int
+LDAP_REWRITE_F (int)
rewrite_param_destroy(
struct rewrite_info *info
);