2001-05-12 08:51:28 +08:00
|
|
|
/******************************************************************************
|
|
|
|
*
|
|
|
|
* Copyright (C) 2000 Pierangelo Masarati, <ando@sys-net.it>
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
* 4. This notice may not be removed or altered.
|
|
|
|
*
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
#ifndef REWRITE_H
|
|
|
|
#define REWRITE_H
|
|
|
|
|
|
|
|
LDAP_BEGIN_DECL
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Default rewrite context
|
|
|
|
*/
|
|
|
|
#define REWRITE_DEFAULT_CONTEXT "default"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Rewrite engine states
|
|
|
|
*/
|
|
|
|
#define REWRITE_OFF 0x0000
|
|
|
|
#define REWRITE_ON 0x0001
|
|
|
|
#define REWRITE_DEFAULT REWRITE_OFF
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Rewrite internal status returns
|
|
|
|
*/
|
|
|
|
#define REWRITE_SUCCESS LDAP_SUCCESS
|
|
|
|
#define REWRITE_ERR LDAP_OPERATIONS_ERROR
|
|
|
|
#define REWRITE_NO_SUCH_OBJECT LDAP_NO_SUCH_OBJECT
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
* REWRITE_MODE_USE_DEFAULT the default context is used.
|
|
|
|
*/
|
|
|
|
#define REWRITE_MODE_ERR 0x0010
|
|
|
|
#define REWRITE_MODE_OK 0x0011
|
|
|
|
#define REWRITE_MODE_COPY_INPUT 0x0012
|
|
|
|
#define REWRITE_MODE_USE_DEFAULT 0x0013
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Rewrite status returns
|
|
|
|
*
|
|
|
|
* REWRITE_REGEXEC_OK success (result may be empty in case
|
|
|
|
* of no match)
|
|
|
|
* REWRITE_REGEXEC_ERR error (internal error,
|
|
|
|
* misconfiguration, map not working ...)
|
|
|
|
* REWRITE_REGEXEC_STOP internal use; never returned
|
|
|
|
* 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
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Rewrite info
|
|
|
|
*/
|
|
|
|
struct rewrite_info;
|
2001-06-23 09:20:32 +08:00
|
|
|
|
|
|
|
struct berval; /* avoid include */
|
2001-05-12 08:51:28 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Inits the info
|
|
|
|
*/
|
|
|
|
extern struct rewrite_info *
|
|
|
|
rewrite_info_init(
|
|
|
|
int mode
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Cleans up the info structure
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_info_delete(
|
|
|
|
struct rewrite_info *info
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Parses a config line and takes actions to fit content in rewrite structure;
|
|
|
|
* lines handled are of the form:
|
|
|
|
*
|
|
|
|
* rewriteEngine {on|off}
|
|
|
|
* rewriteMaxPasses numPasses
|
|
|
|
* rewriteContext contextName [alias aliasedRewriteContex]
|
|
|
|
* rewriteRule pattern substPattern [ruleFlags]
|
|
|
|
* rewriteMap mapType mapName [mapArgs]
|
|
|
|
* rewriteParam paramName paramValue
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_parse(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const char *fname,
|
|
|
|
int lineno,
|
|
|
|
int argc,
|
|
|
|
char **argv
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Rewrites a string according to context.
|
|
|
|
* If the engine is off, OK is returned, but the return string will be NULL.
|
|
|
|
* In case of 'unwilling to perform', UNWILLING is returned, and the
|
|
|
|
* return string will also be null. The same in case of error.
|
|
|
|
* Otherwise, OK is returned, and result will hold a newly allocated string
|
|
|
|
* with the rewriting.
|
|
|
|
*
|
|
|
|
* What to do in case of non-existing rewrite context is still an issue.
|
|
|
|
* Four possibilities:
|
|
|
|
* - error,
|
|
|
|
* - ok with NULL result,
|
|
|
|
* - ok with copy of string as result,
|
|
|
|
* - use the default rewrite context.
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const char *rewriteContext,
|
|
|
|
const char *string,
|
|
|
|
char **result
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Same as above; the cookie relates the rewrite to a session
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_session(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const char *rewriteContext,
|
|
|
|
const char *string,
|
|
|
|
const void *cookie,
|
|
|
|
char **result
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Inits a session
|
|
|
|
*/
|
|
|
|
extern struct rewrite_session *
|
|
|
|
rewrite_session_init(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const void *cookie
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Defines and inits a variable with session scope
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_session_var_set(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const void *cookie,
|
|
|
|
const char *name,
|
|
|
|
const char *value
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Deletes a session
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_session_delete(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const void *cookie
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Params
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Defines and inits a variable with global scope
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_param_set(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const char *name,
|
|
|
|
const char *value
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Gets a var with global scope
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_param_get(
|
|
|
|
struct rewrite_info *info,
|
|
|
|
const char *name,
|
|
|
|
struct berval *value
|
|
|
|
);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Destroys the parameter tree
|
|
|
|
*/
|
|
|
|
extern int
|
|
|
|
rewrite_param_destroy(
|
|
|
|
struct rewrite_info *info
|
|
|
|
);
|
|
|
|
|
|
|
|
LDAP_END_DECL
|
|
|
|
|
|
|
|
#endif /* REWRITE_H */
|