]> git.sur5r.net Git - openldap/blobdiff - include/rewrite.h
import fix to ITS#5172
[openldap] / include / rewrite.h
index 58315bc84e133eea438c58357557c194809f4e47..ebd361700230116c3a203a4ba82f0d5a358cd62f 100644 (file)
@@ -1,32 +1,27 @@
-/******************************************************************************
+/* $OpenLDAP$
+ */
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
+ * Copyright 2000-2007 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
+ * <http://www.OpenLDAP.org/license.html>.
+ */
+/* 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,21 +65,50 @@ 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
  */
 struct rewrite_info;
-struct berval;
+
+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
 );
@@ -93,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
 );
 
 
@@ -110,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,
@@ -119,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.
@@ -129,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,
@@ -145,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,
@@ -157,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
@@ -166,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
@@ -191,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,
@@ -201,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
 );
@@ -219,4 +256,3 @@ rewrite_param_destroy(
 LDAP_END_DECL
 
 #endif /* REWRITE_H */
-