mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-29 11:16:33 +03:00
Moved api examples to "ext" dir and hooked them into autotools for building with "--enable-extentions".
Upgraded to autoconf 2.65.
This commit is contained in:
89
ext/mod_tfn_reverse.c
Normal file
89
ext/mod_tfn_reverse.c
Normal file
@@ -0,0 +1,89 @@
|
||||
|
||||
#include "httpd.h"
|
||||
#include "http_core.h"
|
||||
#include "http_config.h"
|
||||
#include "http_log.h"
|
||||
#include "http_protocol.h"
|
||||
#include "ap_config.h"
|
||||
#include "apr_optional.h"
|
||||
|
||||
#include "modsecurity.h"
|
||||
|
||||
/**
|
||||
* This function will be invoked by
|
||||
* ModSecurity to transform input.
|
||||
*/
|
||||
static int reverse(apr_pool_t *mptmp, unsigned char *input,
|
||||
long int input_len, char **rval, long int *rval_len)
|
||||
{
|
||||
/* Transformation functions can choose to do their
|
||||
* thing in-place, overwriting the existing content. This
|
||||
* is normally possible only if the transformed content
|
||||
* is of equal length or shorter.
|
||||
*
|
||||
* If you need to expand the content use the temporary
|
||||
* memory pool mptmp to allocate the space.
|
||||
*/
|
||||
|
||||
/* Reverse the string in place, but only if it's long enough. */
|
||||
if (input_len > 1) {
|
||||
long int i = 0;
|
||||
long int j = input_len - 1;
|
||||
while(i < j) {
|
||||
char c = input[i];
|
||||
input[i] = input[j];
|
||||
input[j] = c;
|
||||
i++;
|
||||
j--;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tell ModSecurity about the content
|
||||
* we have generated. In this case we
|
||||
* merely point back to the input buffer.
|
||||
*/
|
||||
*rval = (char *)input;
|
||||
*rval_len = input_len;
|
||||
|
||||
/* Must return 1 if the content was
|
||||
* changed, or 0 otherwise.
|
||||
*/
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int hook_pre_config(apr_pool_t *mp, apr_pool_t *mp_log, apr_pool_t *mp_temp) {
|
||||
void (*fn)(const char *name, void *fn);
|
||||
|
||||
/* Look for the registration function
|
||||
* exported by ModSecurity.
|
||||
*/
|
||||
fn = APR_RETRIEVE_OPTIONAL_FN(modsec_register_tfn);
|
||||
if (fn) {
|
||||
/* Use it to register our new
|
||||
* transformation function under the
|
||||
* name "reverse".
|
||||
*/
|
||||
fn("reverse", (void *)reverse);
|
||||
} else {
|
||||
ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, NULL,
|
||||
"mod_tfn_reverse: Unable to find modsec_register_tfn.");
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
static void register_hooks(apr_pool_t *p) {
|
||||
ap_hook_pre_config(hook_pre_config, NULL, NULL, APR_HOOK_LAST);
|
||||
}
|
||||
|
||||
/* Dispatch list for API hooks */
|
||||
module AP_MODULE_DECLARE_DATA tfn_reverse_module = {
|
||||
STANDARD20_MODULE_STUFF,
|
||||
NULL, /* create per-dir config structures */
|
||||
NULL, /* merge per-dir config structures */
|
||||
NULL, /* create per-server config structures */
|
||||
NULL, /* merge per-server config structures */
|
||||
NULL, /* table of config file commands */
|
||||
register_hooks /* register hooks */
|
||||
};
|
||||
|
Reference in New Issue
Block a user