X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Frewrite.h;h=94a24e8f7013a94ce963e8ec79afd67ea6648ea0;hb=83967bcda297b65e6f500b9ad234db87dedfcfee;hp=08398420c05c4c0e3bdbfd950c31000605373a75;hpb=011b4763c53f3642b99ff75c2f5155246d201675;p=openldap diff --git a/include/rewrite.h b/include/rewrite.h index 08398420c0..94a24e8f70 100644 --- a/include/rewrite.h +++ b/include/rewrite.h @@ -1,26 +1,23 @@ -/****************************************************************************** +/* $OpenLDAP$ + */ +/* This work is part of OpenLDAP Software . * - * Copyright (C) 2000 Pierangelo Masarati, + * Copyright 2000-2009 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. - * - * 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. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. * - * 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 @@ -41,8 +38,7 @@ * 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 @@ -69,10 +65,36 @@ * 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 @@ -96,7 +118,7 @@ rewrite_info_init( */ LDAP_REWRITE_F (int) rewrite_info_delete( - struct rewrite_info *info + struct rewrite_info **info ); @@ -177,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 */ @@ -226,6 +253,46 @@ rewrite_param_destroy( struct rewrite_info *info ); +/* + * Mapping implementations + */ + +struct rewrite_mapper; + +typedef void * (rewrite_mapper_config)( + const char *fname, + int lineno, + int argc, + char **argv ); + +typedef int (rewrite_mapper_apply)( + void *ctx, + const char *arg, + struct berval *retval ); + +typedef int (rewrite_mapper_destroy)( + void *ctx ); + +typedef struct rewrite_mapper { + char *rm_name; + rewrite_mapper_config *rm_config; + rewrite_mapper_apply *rm_apply; + rewrite_mapper_destroy *rm_destroy; +} rewrite_mapper; + +/* For dynamic loading and unloading of mappers */ +LDAP_REWRITE_F (int) +rewrite_mapper_register( + const rewrite_mapper *map ); + +LDAP_REWRITE_F (int) +rewrite_mapper_unregister( + const rewrite_mapper *map ); + +LDAP_REWRITE_F (const rewrite_mapper *) +rewrite_mapper_find( + const char *name ); + LDAP_END_DECL #endif /* REWRITE_H */