]> git.sur5r.net Git - openldap/blobdiff - include/rewrite.h
import fix to ITS#5172
[openldap] / include / rewrite.h
index 1c74f073e4afd31178a127f8a5f35f07c24a3b5f..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,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,6 +103,8 @@ struct rewrite_info;
 
 struct berval; /* avoid include */
 
+LDAP_BEGIN_DECL
+
 /*
  * Inits the info
  */
@@ -96,7 +118,7 @@ rewrite_info_init(
  */
 LDAP_REWRITE_F (int)
 rewrite_info_delete(
-                struct rewrite_info *info
+                struct rewrite_info **info
 );
 
 
@@ -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,8 +161,8 @@ 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.
  */
@@ -168,13 +199,18 @@ rewrite_session_init(
  * Defines and inits a variable with session scope
  */
 LDAP_REWRITE_F (int)
-rewrite_session_var_set(
+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
  */
@@ -209,7 +245,7 @@ rewrite_param_get(
                 struct berval *value
 );
 
-/* 
+/*
  * Destroys the parameter tree
  */
 LDAP_REWRITE_F (int)