[-]
[+]
|
Changed |
mod_security-ix.changes
|
|
[-]
[+]
|
Changed |
mod_security-ix.spec
^
|
|
[-]
[+]
|
Deleted |
CVE-2013-2765.patch
^
|
@@ -1,10 +0,0 @@
---- modsecurity-apache_2.6.8/apache2/msc_reqbody.c.orig 2013-06-29 18:56:31.446864803 +0200
-+++ modsecurity-apache_2.6.8/apache2/msc_reqbody.c 2013-06-29 18:56:45.354863561 +0200
-@@ -170,6 +170,7 @@
-
- /* Would storing this chunk mean going over the limit? */
- if ((msr->msc_reqbody_spilltodisk)
-+ && (msr->txcfg->reqbody_buffering != REQUEST_BODY_FORCEBUF_ON)
- && (msr->msc_reqbody_length + length > (apr_size_t)msr->txcfg->reqbody_inmemory_limit))
- {
- msc_data_chunk **chunks;
|
[-]
[+]
|
Deleted |
mlogc-disable-force-sslv3.patch
^
|
@@ -1,11 +0,0 @@
---- mlogc/mlogc.c.orig 2012-03-05 17:20:00.254555490 +0100
-+++ mlogc/mlogc.c 2012-03-05 17:20:10.430753985 +0100
-@@ -1214,7 +1214,7 @@
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);
- /* SSLv3 works better overall as some servers have issues with TLS */
-- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
-+ /* curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3); */
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 15);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE);
- curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
|
[-]
[+]
|
Deleted |
modsecurity-2.9.1_curl-lower_7.34.patch
^
|
@@ -1,60 +0,0 @@
---- mlogc/mlogc.c.orig 2016-06-02 09:15:03.283648355 +0200
-+++ mlogc/mlogc.c 2016-06-02 10:59:44.378377602 +0200
-@@ -1270,33 +1270,36 @@
- }
-
-
-- /* Seems like CURL_SSLVERSION_TLSv1_2 is not supported on libcurl
-- * < v7.34.0
-- *
-- * version_num is a 24 bit number created like this:
-- * <8 bits major number> | <8 bits minor number> | <8 bits patch number>.
-- */
-- switch (tlsprotocol) {
-- case 0:
-- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);
-- break;
-- case 1:
-- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
-- break;
-- case 2:
-- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
-- break;
-- default:
-- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
-- break;
-- }
- cmaj = curlversion->version_num >> 16;
- cmin = (curlversion->version_num & 0x00ff00) >> 8;
- cpat = (curlversion->version_num & 0x0000ff);
- /* If cURL version < v7.34.0, use TLS v1.x */
- if (cmaj <= 7 && cmin < 34) {
- curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
-- }
-+#ifdef CURL_SSLVERSION_TLSv1_0
-+ } else {
-+ /* Seems like CURL_SSLVERSION_TLSv1_2 is not supported on libcurl
-+ * < v7.34.0
-+ *
-+ * version_num is a 24 bit number created like this:
-+ * <8 bits major number> | <8 bits minor number> | <8 bits patch number>.
-+ */
-+ switch (tlsprotocol) {
-+ case 0:
-+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0);
-+ break;
-+ case 1:
-+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
-+ break;
-+ case 2:
-+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
-+ break;
-+ default:
-+ curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
-+ break;
-+ }
-+#endif
-+ }
-
- curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 15);
- curl_easy_setopt(curl, CURLOPT_NOSIGNAL, TRUE);
|
[-]
[+]
|
Added |
mod_security-ix.spec2513
^
|
@@ -0,0 +1,110 @@
+Summary: Security module for the Apache HTTP Server
+Name: mod_security
+Version: 2.6.1
+Release: 23
+License: GPLv2
+URL: http://www.modsecurity.org/
+Group: System Environment/Daemons
+Source: http://www.modsecurity.org/download/modsecurity-apache_%{version}.tar.bz2
+Source1: 00_mod_security.conf
+Source2: modsecurity_crs_10_config-default.conf
+Source3: zzz_asl_custom_exclude.conf
+Source4: zzz_asl_custom_local_exclude.conf
+Patch1: waf-label.patch
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Requires: httpd httpd-mmn = %([ -a %{_includedir}/httpd/.mmn ] && cat %{_includedir}/httpd/.mmn || echo missing)
+BuildRequires: httpd-devel libxml2-devel pcre-devel libtool pkgconfig curl-devel
+BuildRequires: curl
+BuildRequires: lua-devel
+
+Requires: libxml2 pcre lua
+Provides: ix-mod_security = %{version}
+
+%description
+ModSecurity is an open source intrusion detection and prevention engine
+for web applications. It operates embedded into the web server, acting
+as a powerful umbrella - shielding web applications from attacks.
+
+%prep
+%setup -n modsecurity-apache_%{version}
+%patch1 -p1
+
+%build
+CFLAGS="%{optflags}"
+export CFLAGS
+
+cd apache2
+%configure \
+ --disable-pcre-match-limit \
+ --disable-pcre-match-limit-recursion
+
+# Legacy from LoadFile
+#perl -pi.orig -e 's|LIBDIR|%{_libdir}|;' %{SOURCE1}
+
+make %{_smp_mflags}
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/%{_sysconfdir}/httpd/modsecurity.d/
+mkdir -p %{buildroot}/%{_sysconfdir}/httpd/conf.d/
+mkdir -p %{buildroot}/var/asl/data/suspicious
+mkdir -p %{buildroot}/var/asl/data/msa
+mkdir -p %{buildroot}/var/asl/data/audit
+install -D -m755 apache2/.libs/mod_security2.so %{buildroot}/%{_libdir}/httpd/modules/mod_security2.so
+install -D -m644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/httpd/conf.d/00_mod_security.conf
+install -D -m644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/httpd/modsecurity.d/modsecurity_crs_10_config.conf
+install -D -m644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/httpd/modsec/zzz_asl_custom_exclude.conf
+install -D -m644 %{SOURCE4} %{buildroot}/%{_sysconfdir}/httpd/modsec/zzz_asl_custom_local_exclude.conf
+install -D -m755 rules/util/modsec-clamscan.pl %{buildroot}%{_bindir}/modsec-clamscan.pl
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr (-,root,root)
+%doc CHANGES LICENSE README.* modsecurity* doc
+%{_libdir}/httpd/modules/mod_security2.so
+%{_bindir}/modsec-clamscan.pl
+%config %{_sysconfdir}/httpd/conf.d/00_mod_security.conf
+%dir %{_sysconfdir}/httpd/modsecurity.d
+%config(noreplace) %{_sysconfdir}/httpd/modsecurity.d/modsecurity_crs_10_config.conf
+%config %{_sysconfdir}/httpd/modsec/zzz_asl_custom_exclude.conf
+%config(noreplace) %{_sysconfdir}/httpd/modsec/zzz_asl_custom_local_exclude.conf
+
+%defattr(-,apache,apache)
+%dir /var/asl
+%dir /var/asl/data
+%dir /var/asl/data/suspicious
+%dir /var/asl/data/msa
+%dir /var/asl/data/audit
+
+%changelog
+* Mon Jun 27 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-23
+- rename 999_asl_custom_exclude.conf to zzz_asl_custom_exclude.conf
+- rename 999_asl_custom_local_exclude.conf to zzz_asl_custom_local_exclude.conf
+
+
+* Mon Jun 06 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-21
+- added 999_asl_custom_local_exclude.conf with noreplace
+- set 999_asl_custom_exclude.conf to replace
+
+* Mon Jun 06 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-20
+- added rules to excludelist:
+ - 350147
+ - 350148
+ - 340162
+
+* Fri May 06 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-19
+- rename exclude config file from 00_asl_custom_exclude.conf to 999_asl_custom_exclude.conf
+
+* Thu May 05 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-18
+- disable clamav check rule 351000 by default
+
+* Tue May 03 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-17
+- add 00_asl_custom_exclude.conf and disable RBL rule 350000 by default
+
+* Fri Apr 01 2011 Carsten Schoene <cs@linux-administrator.com> - 2.5.13-16
+- update to release 2.5.13
+
+* Wed Nov 24 2010 Carsten Schoene <cs@linux-administrator.com> - 2.5.12-15
+- initial InterNetX GmbH specific mod_security build
|
[-]
[+]
|
Changed |
modsec-clamscan.pl
^
|
@@ -27,7 +27,7 @@
my ($FILE) = @ARGV;
-$cmd = "$CLAMSCAN --stdout --no-summary $FILE";
+$cmd = "$CLAMSCAN --stdout --disable-summary $FILE";
$input = `$cmd`;
$input =~ m/^(.+)/;
$error_message = $1;
|
[-]
[+]
|
Deleted |
modsec-clean_var-asl-data-audit
^
|
@@ -1,5 +0,0 @@
-#!/bin/bash
-nice -n 19 find /var/asl/data/audit -type d -mindepth 1 -cmin +30 -print0 | xargs -r -0 rm -rf
-mkdir -p /var/asl/data/audit
-chown -R %APAUSR%:%APAGRP% /var/asl/data/audit
-[ -x /usr/local/bin/modsec-permissions ] && /usr/local/bin/modsec-permissions || :
|
|
Deleted |
modsecurity-2.8.0.tar.bz2
^
|
|
Deleted |
modsecurity-2.9.0.tar.bz2
^
|
|
Deleted |
modsecurity-2.9.2.tar.bz2
^
|
|
Deleted |
modsecurity-2.9.3.tar.bz2
^
|
|
Deleted |
modsecurity-2.9.4.tar.bz2
^
|
|
Deleted |
modsecurity-2.9.5.tar.bz2
^
|
|
Deleted |
modsecurity-2.9.7.tar.bz2
^
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/CHANGES
^
|
@@ -1,83 +1,3 @@
-25 Sep 2012 - 2.6.8
--------------------
-
- * Fixed ctl:ruleRemoveTargetByID order issue (MODSEC-333). Thanks to Armadillo Dasypodidae.
-
- * Fixed variable HIGHEST_SEVERITY incorrectly gets reset in a chain rule (MODSEC-315). Thanks to Valery Reznic.
-
-23 Jul 2012 - 2.6.7
--------------------
-
- * Fixed explicit target replacement using SecUpdateTargetById was broken.
-
- * The ctl:ruleUpdateTargetById is deprecated and will be removed for future versions since
- there is no safe way to use it per-request.
-
- * Added ctl:ruleRemoveTargetById that can be used to exclude targets to be processed per-request.
-
-08 Jun 2012 - 2.6.6
--------------------
-
- * Added build system support for KfreeBSD and HURD.
-
- * Fixed a multipart bypass issue related to quote parsing
- Credits to Qualys Vulnerability & Malware Research Labs (VMRL).
-
-20 Mar 2012 - 2.6.5
--------------------
-
- * Fixed increased a specific message debug level in SBDM code (MODSEC-293).
-
- * Cleanup build system.
-
-09 Mar 2012 - 2.6.4
--------------------
-
- * Fixed Mlogc 100% CPU consume (Thanks Klaubert Herr and Ebrahim Khalilzadeh).
-
- * Fixed ModSecurity cannot load session and user sdbm data.
-
- * Fixed updateTargetById was creating rule unparsed content making apache memory grow.
-
- * Code cleanup.
-
-23 Feb 2012 - 2.6.4-rc1
--------------------
-
- * Fixed @rsub adding garbage data into stream variables.
-
- * Fixed regex for section A into mlogc-batch-load.pl (Thanks Ebrahim Khalilzadeh).
-
- * Fixed logdata cuts message without closing it with final chars.
-
- * Added sanitizeMatchedBytes support to verifyCPF, verifyCC and verifySSN.
-
-23 Dec 2011 - 2.6.3
--------------------
-
-* Fixed conn_rec apache API changes in httpd trunk (Thanks Steffen Land).
-
-* Fixed Error log Hook apache API changes in httpd trunk (Thanks Steffen Land).
-
-* Updated doc/ Reference_Manual
-
-06 Dec 2011 - 2.6.3-rc1
--------------------
-
-* Fixed MATCHED_VARS does not correctly handle multiple VARS with the same name.
-
-* Fixed SDBM garbage collection was not working as expected, increasing the size of files.
-
-* Fixed wrong timestamp calculation for some time zones in log files.
-
-* Fixed SecUpdateTargetById failed to load multiple VARS (MODSEC-270).
-
-* Fixed Reverted hexDecode for hexEncode compatibility reason.
-
-* Added SecCollectionTimeout to set collection timeout, default is 3600.
-
-* Added sqlHexDecode transformation to decode sql hex data. Thanks Marc Stern.
-
30 Sep 2011 - 2.6.2
-------------------
@@ -299,7 +219,7 @@
importantly, override server configuration in <Location> and others.
(MODSEC-98) [Ivan Ristic]
- * Renamed the sanitise family of actions to sanitize. Kept the old variants
+ * Renamed the sanitise family of actiont to sanitize. Kept the old variants
for backward compatibility. (MODSEC-95) [Ivan Ristic]
* Improve the logging of the ctl action. (MODSEC-99) [Ivan Ristic]
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/apache2_config.c
^
|
@@ -125,9 +125,6 @@
dcfg->request_encoding = NOT_SET_P;
dcfg->disable_backend_compression = NOT_SET;
- /* Collection timeout */
- dcfg->col_timeout = NOT_SET;
-
return dcfg;
}
@@ -515,9 +512,6 @@
merged->disable_backend_compression = (child->disable_backend_compression == NOT_SET
? parent->disable_backend_compression : child->disable_backend_compression);
- merged->col_timeout = (child->col_timeout == NOT_SET
- ? parent->col_timeout : child->col_timeout);
-
return merged;
}
@@ -613,8 +607,6 @@
if (dcfg->request_encoding == NOT_SET_P) dcfg->request_encoding = NULL;
if (dcfg->disable_backend_compression == NOT_SET) dcfg->disable_backend_compression = 0;
-
- if (dcfg->col_timeout == NOT_SET) dcfg->col_timeout = 3600;
}
/**
@@ -1257,18 +1249,6 @@
return NULL;
}
-static const char *cmd_collection_timeout(cmd_parms *cmd, void *_dcfg,
- const char *p1)
-{
- directory_config *dcfg = (directory_config *)_dcfg;
-
- dcfg->col_timeout = atoi(p1);
- /* max 30 days */
- if ((dcfg->col_timeout >= 0)&&(dcfg->col_timeout <= 2592000)) return NULL;
-
- return apr_psprintf(cmd->pool, "ModSecurity: Invalid value for SecCollectionTimeout: %s", p1);
-}
-
static const char *cmd_debug_log_level(cmd_parms *cmd, void *_dcfg,
const char *p1)
{
@@ -2353,14 +2333,6 @@
),
AP_INIT_TAKE1 (
- "SecCollectionTimeout",
- cmd_collection_timeout,
- NULL,
- CMD_SCOPE_ANY,
- "set default collections timeout. default it 3600"
- ),
-
- AP_INIT_TAKE1 (
"SecDefaultAction",
cmd_default_action,
NULL,
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/apache2_io.c
^
|
@@ -119,13 +119,6 @@
bucket = apr_bucket_heap_create(msr->stream_input_data, msr->stream_input_length, NULL,
f->r->connection->bucket_alloc);
- if (msr->txcfg->stream_inbody_inspection) {
- if(msr->stream_input_data != NULL) {
- free(msr->stream_input_data);
- msr->stream_input_data = NULL;
- }
- }
-
if (bucket == NULL) return APR_EGENERAL;
APR_BRIGADE_INSERT_TAIL(bb_out, bucket);
@@ -569,6 +562,24 @@
if (msr->txcfg->stream_outbody_inspection) {
+ char *stream_output_body = NULL;
+
+ if(msr->stream_output_data == NULL)
+ msr->stream_output_data = (char *)malloc(msr->resbody_length+1);
+ else {
+ stream_output_body = (char *)realloc(msr->stream_output_data, msr->resbody_length+1);
+
+ if(stream_output_body == NULL) {
+ free(msr->stream_output_data);
+ msr->stream_output_data = NULL;
+ msr_log(msr, 1, "Output filter: Stream Response body data memory allocation failed. Asked for: %" APR_SIZE_T_FMT,
+ msr->stream_output_length + 1);
+ return -1;
+ }
+
+ msr->stream_output_data = (char *)stream_output_body;
+ }
+
msr->stream_output_length = msr->resbody_length;
if (msr->stream_output_data == NULL) {
@@ -814,24 +825,7 @@
/* Do we need to process a partial response? */
if (start_skipping) {
-
- if (msr->txcfg->stream_outbody_inspection) {
- if(msr->stream_output_data != NULL) {
- free(msr->stream_output_data);
- msr->stream_output_data = NULL;
- }
-
- msr->stream_output_data = (char *)malloc(msr->resbody_length+1);
- }
-
if (flatten_response_body(msr) < 0) {
- if (msr->txcfg->stream_outbody_inspection) {
- if(msr->stream_output_data != NULL) {
- free(msr->stream_output_data);
- msr->stream_output_data = NULL;
- }
- }
-
ap_remove_output_filter(f);
return send_error_bucket(msr, f, HTTP_INTERNAL_SERVER_ERROR);
}
@@ -891,24 +885,7 @@
* only if it hasn't been processed already.
*/
if (msr->phase < PHASE_RESPONSE_BODY) {
-
- if (msr->txcfg->stream_outbody_inspection) {
- if(msr->stream_output_data != NULL) {
- free(msr->stream_output_data);
- msr->stream_output_data = NULL;
- }
-
- msr->stream_output_data = (char *)malloc(msr->resbody_length+1);
- }
-
if (flatten_response_body(msr) < 0) {
- if (msr->txcfg->stream_outbody_inspection) {
- if(msr->stream_output_data != NULL) {
- free(msr->stream_output_data);
- msr->stream_output_data = NULL;
- }
- }
-
ap_remove_output_filter(f);
return send_error_bucket(msr, f, HTTP_INTERNAL_SERVER_ERROR);
}
@@ -935,14 +912,6 @@
inject_content_to_of_brigade(msr,f);
msr->of_stream_changed = 0;
}
-
- if (msr->txcfg->stream_outbody_inspection) {
- if(msr->stream_output_data != NULL) {
- free(msr->stream_output_data);
- msr->stream_output_data = NULL;
- }
- }
-
prepend_content_to_of_brigade(msr, f);
/* Inject content into response (append & buffering). */
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/apache2_util.c
^
|
@@ -263,15 +263,9 @@
}
else hostname = "";
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r->server,
- "[client %s] ModSecurity: %s%s [uri \"%s\"]%s", r->connection->client_ip, str1,
- hostname, log_escape(msr->mp, r->uri), unique_id);
-#else
ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO, 0, r->server,
"[client %s] ModSecurity: %s%s [uri \"%s\"]%s", r->connection->remote_ip, str1,
hostname, log_escape(msr->mp, r->uri), unique_id);
-#endif
/* Add this message to the list. */
if (msr != NULL) {
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/mod_security2.c
^
|
@@ -84,7 +84,7 @@
ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Loaded APR do not match with compiled!");
}
- pcre_vrs = apr_psprintf(mp,"%d.%d ", PCRE_MAJOR, PCRE_MINOR);
+ pcre_vrs = apr_psprintf(mp,"%d.%d", PCRE_MAJOR, PCRE_MINOR);
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
"ModSecurity: PCRE compiled version=\"%s\"; "
@@ -409,13 +409,8 @@
msr->local_addr = r->connection->local_ip;
msr->local_port = r->connection->local_addr->port;
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- msr->remote_addr = r->connection->client_ip;
- msr->remote_port = r->connection->client_addr->port;
-#else
msr->remote_addr = r->connection->remote_ip;
msr->remote_port = r->connection->remote_addr->port;
-#endif
msr->request_line = r->the_request;
msr->request_uri = r->uri;
@@ -886,7 +881,8 @@
* Invoked every time Apache has something to write to the error log.
*/
#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
-static void hook_error_log(const ap_errorlog_info *info, const char *errstr)
+static void hook_error_log(const char *file, int line, int module_index, int level, apr_status_t status,
+ const server_rec *s, const request_rec *r, apr_pool_t *mp, const char *fmt)
#else
static void hook_error_log(const char *file, int line, int level, apr_status_t status,
const server_rec *s, const request_rec *r, apr_pool_t *mp, const char *fmt)
@@ -895,35 +891,15 @@
modsec_rec *msr = NULL;
error_message *em = NULL;
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- if (info == NULL) return;
- if (info->r == NULL) return;
-#else
if (r == NULL) return;
-#endif
-
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- msr = retrieve_tx_context((request_rec *)info->r);
-#else
msr = retrieve_tx_context((request_rec *)r);
-#endif
/* Create a context for requests we never had the chance to process */
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- if ((msr == NULL)
- && ((info->level & APLOG_LEVELMASK) < APLOG_DEBUG)
- && apr_table_get(info->r->subprocess_env, "UNIQUE_ID"))
-#else
if ((msr == NULL)
&& ((level & APLOG_LEVELMASK) < APLOG_DEBUG)
&& apr_table_get(r->subprocess_env, "UNIQUE_ID"))
-#endif
{
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- msr = create_tx_context((request_rec *)info->r);
-#else
msr = create_tx_context((request_rec *)r);
-#endif
if (msr->txcfg->debuglog_level >= 9) {
if (msr == NULL) {
msr_log(msr, 9, "Failed to create context after request failure.");
@@ -940,19 +916,11 @@
em = (error_message *)apr_pcalloc(msr->mp, sizeof(error_message));
if (em == NULL) return;
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- if (info->file != NULL) em->file = apr_pstrdup(msr->mp, info->file);
- em->line = info->line;
- em->level = info->level;
- em->status = info->status;
- if (info->format != NULL) em->message = apr_pstrdup(msr->mp, info->format);
-#else
if (file != NULL) em->file = apr_pstrdup(msr->mp, file);
em->line = line;
em->level = level;
em->status = status;
if (fmt != NULL) em->message = apr_pstrdup(msr->mp, fmt);
-#endif
/* Remove \n from the end of the message */
if (em->message != NULL) {
@@ -1236,7 +1204,7 @@
int i, j;
unsigned long int ip_count = 0, ip_count_w = 0;
worker_score *ws_record = NULL;
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
+#if AP_SERVER_MINORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
ap_sb_handle_t *sbh = NULL;
#endif
@@ -1246,15 +1214,11 @@
if(ws_record == NULL)
return DECLINED;
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- apr_cpystrn(ws_record->client, conn->client_ip, sizeof(ws_record->client));
-#else
apr_cpystrn(ws_record->client, conn->remote_ip, sizeof(ws_record->client));
-#endif
for (i = 0; i < server_limit; ++i) {
for (j = 0; j < thread_limit; ++j) {
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
+#if AP_SERVER_MINORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
sbh = conn->sbh;
if (sbh == NULL) {
return DECLINED;
@@ -1270,22 +1234,12 @@
switch (ws_record->status) {
case SERVER_BUSY_READ:
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- if (strcmp(conn->client_ip, ws_record->client) == 0)
- ip_count++;
-#else
if (strcmp(conn->remote_ip, ws_record->client) == 0)
ip_count++;
-#endif
break;
case SERVER_BUSY_WRITE:
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- if (strcmp(conn->client_ip, ws_record->client) == 0)
- ip_count_w++;
-#else
if (strcmp(conn->remote_ip, ws_record->client) == 0)
ip_count_w++;
-#endif
break;
default:
break;
@@ -1294,18 +1248,10 @@
}
if ((conn_read_state_limit > 0) && (ip_count > conn_read_state_limit)) {
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in READ state from %s - Possible DoS Consumption Attack [Rejected]", ip_count,conn_read_state_limit,conn->client_ip);
-#else
ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in READ state from %s - Possible DoS Consumption Attack [Rejected]", ip_count,conn_read_state_limit,conn->remote_ip);
-#endif
return OK;
} else if ((conn_write_state_limit > 0) && (ip_count_w > conn_write_state_limit)) {
-#if AP_SERVER_MAJORVERSION_NUMBER > 1 && AP_SERVER_MINORVERSION_NUMBER > 2
- ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in WRITE state from %s - Possible DoS Consumption Attack [Rejected]", ip_count_w,conn_write_state_limit,conn->client_ip);
-#else
ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, "ModSecurity: Access denied with code 400. Too many threads [%ld] of %ld allowed in WRITE state from %s - Possible DoS Consumption Attack [Rejected]", ip_count_w,conn_write_state_limit,conn->remote_ip);
-#endif
return OK;
} else {
return DECLINED;
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/modsecurity.c
^
|
@@ -212,30 +212,28 @@
}
time_after = apr_time_now();
-
+
msr->time_storage_write += time_after - time_before;
-
+
if (msr->txcfg->debuglog_level >= 4) {
msr_log(msr, 4, "Recording persistent data took %" APR_TIME_T_FMT
" microseconds.", msr->time_gc);
- }
-
+ }
+
/* Remove stale collections. */
- srand(time(NULL));
-
if (rand() < RAND_MAX/100) {
arr = apr_table_elts(msr->collections);
te = (apr_table_entry_t *)arr->elts;
for (i = 0; i < arr->nelts; i++) {
collections_remove_stale(msr, te[i].key);
}
-
+
msr->time_gc = apr_time_now() - time_after;
-
+
if (msr->txcfg->debuglog_level >= 4) {
msr_log(msr, 4, "Garbage collection took %" APR_TIME_T_FMT
" microseconds.", msr->time_gc);
- }
+ }
}
}
@@ -368,8 +366,6 @@
if (msr->response_headers_to_sanitize == NULL) return -1;
msr->pattern_to_sanitize = apr_table_make(msr->mp, 32);
if (msr->pattern_to_sanitize == NULL) return -1;
- msr->removed_targets = apr_table_make(msr->mp, 16);
- if (msr->removed_targets == NULL) return -1;
/* Initialise cookies */
msr->request_cookies = apr_table_make(msr->mp, 16);
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/modsecurity.h
^
|
@@ -280,7 +280,6 @@
apr_table_t *response_headers_to_sanitize;
apr_table_t *request_cookies;
apr_table_t *pattern_to_sanitize;
- apr_table_t *removed_targets;
unsigned int urlencoded_error;
unsigned int inbound_error;
@@ -518,11 +517,8 @@
/* Request character encoding. */
const char *request_encoding;
-
+
int disable_backend_compression;
-
- /* Collection timeout */
- int col_timeout;
};
struct error_message {
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/msc_multipart.c
^
|
@@ -20,32 +20,6 @@
#include "msc_util.h"
#include "msc_parsers.h"
-void validate_quotes(modsec_rec *msr, unsigned char *data) {
- int i, len;
-
- if(msr == NULL)
- return;
-
- if(msr->mpd == NULL)
- return;
-
- if(data == NULL)
- return;
-
- len = strlen(data);
-
- for(i = 0; i < len; i++) {
-
- if(data[i] == '\'') {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "Multipart: Invalid quoting detected: %s length %d bytes",
- log_escape_nq(msr->mp, data), len);
- }
- msr->mpd->flag_invalid_quoting = 1;
- }
- }
-}
-
#if 0
static char *multipart_construct_filename(modsec_rec *msr) {
@@ -181,9 +155,6 @@
/* evaluate part */
if (strcmp(name, "name") == 0) {
-
- validate_quotes(msr, value);
-
if (msr->mpd->mpp->name != NULL) {
msr_log(msr, 4, "Multipart: Warning: Duplicate Content-Disposition name: %s",
log_escape_nq(msr->mp, value));
@@ -198,9 +169,6 @@
}
else
if (strcmp(name, "filename") == 0) {
-
- validate_quotes(msr, value);
-
if (msr->mpd->mpp->filename != NULL) {
msr_log(msr, 4, "Multipart: Warning: Duplicate Content-Disposition filename: %s",
log_escape_nq(msr->mp, value));
@@ -219,18 +187,7 @@
while((*p == '\t') || (*p == ' ')) p++;
/* the next character must be a zero or a semi-colon */
if (*p == '\0') return 1; /* this is OK */
- if (*p != ';') {
- p--;
- if(*p == '\'' || *p == '\"') {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "Multipart: Invalid quoting detected: %s length %d bytes",
- log_escape_nq(msr->mp, p), strlen(p));
- }
- msr->mpd->flag_invalid_quoting = 1;
- }
- p++;
- return -12;
- }
+ if (*p != ';') return -12;
p++; /* move over the semi-colon */
}
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/msc_release.h
^
|
@@ -38,7 +38,7 @@
#define MODSEC_VERSION_MAJOR "2"
#define MODSEC_VERSION_MINOR "6"
-#define MODSEC_VERSION_MAINT "8"
+#define MODSEC_VERSION_MAINT "2"
#define MODSEC_VERSION_TYPE ""
#define MODSEC_VERSION_RELEASE ""
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/msc_reqbody.c
^
|
@@ -400,6 +400,11 @@
stream_input_body = (char *)realloc(msr->stream_input_data, msr->stream_input_length + 1);
+ if(stream_input_body == NULL) {
+ free(msr->stream_input_data);
+ msr->stream_input_data = NULL;
+ }
+
msr->stream_input_data = (char *)stream_input_body;
}
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/msc_util.c
^
|
@@ -121,9 +121,9 @@
* \retval 0 On failure
* \retval string length On Success
*/
-int decode_base64_ext(char *plain_text, const unsigned char *input, int input_len)
+int decode_base64_ext(char *plain_text, const char *input, int input_len)
{
- const unsigned char *encoded = input;
+ const char *encoded = input;
int i = 0, j = 0, k = 0;
int ch = 0;
@@ -183,7 +183,8 @@
*
* \retval n The converted number
*/
-int convert_to_int(const char c) {
+int convert_to_int(const char c)
+{
int n;
if ((c>='0') && (c<='9'))
n = c - '0';
@@ -223,6 +224,14 @@
msr_log(msr, 9, "Added phrase match to TX.%d: %s",
tx_n, log_escape_nq_ex(msr->mp, s->value, s->value_len));
}
+
+ /*
+ for(i = 0; i <= 9; i++) {
+ char buf[2];
+ apr_snprintf(buf, sizeof(buf), "%d", i);
+ apr_table_unset(msr->tx_vars, buf);
+ }
+ */
}
return 0;
@@ -410,48 +419,28 @@
/**
*
*/
-int sql_hex2bytes_inplace(unsigned char *data, int len) {
- unsigned char *d, *begin = data;
-
- if ((data == NULL)||(len == 0)) return 0;
-
- for( d = data; *data; *d++ = *data++) {
- if ( *data != '0' ) continue;
- if ( tolower(*++data) != 'x' ) {
- data--;
- continue;
- }
-
- data++;
-
- // Do we need to keep "0x" if no hexa after?
- if ( !VALID_HEX(data[0]) || !VALID_HEX(data[1]) ) {
- data-=2;
- continue;
- }
-
- while ( VALID_HEX(data[0]) && VALID_HEX(data[1]) ) {
- *d++ = x2c(data);
- data += 2;
- }
- }
-
- *d = '\0';
- return strlen((char *)begin);
-}
-
-/**
- *
- *
- */
int hex2bytes_inplace(unsigned char *data, int len) {
unsigned char *d = data;
+ char print = 0;
int i, count = 0;
if ((data == NULL)||(len == 0)) return 0;
- for(i = 0; i <= len - 2; i += 2) {
- *d++ = x2c(&data[i]);
+ for(i = 0; i <= len - 1; i++) {
+ if(VALID_HEX(data[i]) && VALID_HEX(data[i+1])) {
+ print = data[i];
+ if(print > 0x31 && print < 0x38) {
+ *d++ = x2c(&data[i]);
+ i++;
+ } else {
+ *d++ = data[i];
+ *d++ = data[i+1];
+ i++;
+ count++;
+ }
+ } else {
+ *d++ = data[i];
+ }
count++;
}
*d = '\0';
@@ -611,7 +600,7 @@
apr_strftime(tstr, &len, 80, "%d/%b/%Y:%H:%M:%S ", &t);
apr_snprintf(tstr + strlen(tstr), 80 - strlen(tstr), "%c%.2d%.2d",
t.tm_gmtoff < 0 ? '-' : '+',
- t.tm_gmtoff / (60 * 60), (t.tm_gmtoff / 60) % 60);
+ t.tm_gmtoff / (60 * 60), t.tm_gmtoff % (60 * 60));
return apr_pstrdup(mp, tstr);
}
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/msc_util.h
^
|
@@ -43,8 +43,6 @@
char DSOLOCAL *file_basename(apr_pool_t *p, const char *filename);
-int DSOLOCAL sql_hex2bytes_inplace(unsigned char *data, int len);
-
int DSOLOCAL hex2bytes_inplace(unsigned char *data, int len);
char DSOLOCAL *bytes2hex(apr_pool_t *pool, unsigned char *data, int len);
@@ -81,7 +79,7 @@
char DSOLOCAL *log_escape_nul(apr_pool_t *mp, const unsigned char *text, unsigned long int text_length);
-int DSOLOCAL decode_base64_ext(char *plain_text, const unsigned char *input, int input_len);
+int DSOLOCAL decode_base64_ext(char *plain_text, const char *input, int input_len);
int DSOLOCAL convert_to_int(const char c);
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/persist_dbm.c
^
|
@@ -110,11 +110,6 @@
dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", col_name, NULL);
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "collection_retrieve_ex: Retrieving collection (name \"%s\", filename \"%s\")",log_escape(msr->mp, col_name),
- log_escape(msr->mp, dbm_filename));
- }
-
key.dptr = (char *)col_key;
key.dsize = col_key_len + 1;
@@ -355,11 +350,6 @@
// ENH: lowercase the var name in the filename
dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", var_name->value, NULL);
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "collection_store: Retrieving collection (name \"%s\", filename \"%s\")",log_escape(msr->mp, var_name->value),
- log_escape(msr->mp, dbm_filename));
- }
-
/* Delete IS_NEW on store. */
apr_table_unset(col, "IS_NEW");
@@ -586,21 +576,13 @@
goto error;
}
- if(strstr(col_name,"USER") || strstr(col_name,"SESSION"))
- dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", msr->txcfg->webappid, "_", col_name, NULL);
- else
- dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", col_name, NULL);
-
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 1, "collections_remove_stale: Retrieving collection (name \"%s\", filename \"%s\")",log_escape(msr->mp, col_name),
- log_escape(msr->mp, dbm_filename));
- }
+ dbm_filename = apr_pstrcat(msr->mp, msr->txcfg->data_dir, "/", col_name, NULL);
rc = apr_sdbm_open(&dbm, dbm_filename, APR_CREATE | APR_WRITE | APR_SHARELOCK,
- CREATEMODE, msr->mp);
+ CREATEMODE, msr->mp);
if (rc != APR_SUCCESS) {
msr_log(msr, 1, "Failed to access DBM file \"%s\": %s", log_escape(msr->mp, dbm_filename),
- get_apr_error(msr->mp, rc));
+ get_apr_error(msr->mp, rc));
dbm = NULL;
goto error;
}
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/re.c
^
|
@@ -32,7 +32,6 @@
NULL,
};
-static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *var);
static apr_status_t msre_parse_targets(msre_ruleset *ruleset, const char *text,
apr_array_header_t *arr, char **error_msg);
static char *msre_generate_target_string(apr_pool_t *pool, msre_rule *rule);
@@ -44,117 +43,6 @@
/* -- Actions, variables, functions and operator functions ----------------- */
-static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *var) {
- const char *targets = NULL, *exceptions = NULL;
- char *savedptr = NULL, *target = NULL, *value = NULL;
- char *c = NULL, *name = NULL, *id = NULL;
- char *variable = NULL, *myvar = NULL;
- char *myvalue = NULL, *myname = NULL;
- const apr_array_header_t *tarr = NULL;
- const apr_table_entry_t *telts = NULL;
- int i, match = 0;
-
- if(msr == NULL)
- return 0;
-
- if(var == NULL)
- return 0;
-
- if(rule == NULL)
- return 0;
-
- if(rule->actionset == NULL)
- return 0;
-
- if(rule->actionset->id !=NULL) {
-
- myvar = apr_pstrdup(msr->mp, var->name);
-
- c = strchr(myvar,':');
-
- if(c != NULL) {
- myname = apr_strtok(myvar,":",&myvalue);
- } else {
- myname = myvar;
- }
-
- tarr = apr_table_elts(msr->removed_targets);
- telts = (const apr_table_entry_t*)tarr->elts;
-
- match = 0;
- for (i = 0; i < tarr->nelts; i++) {
- id = (char *)telts[i].key;
-
- if(strcasecmp(id, rule->actionset->id) == 0) {
- exceptions = (char *)telts[i].val;
-
- targets = apr_pstrdup(msr->mp, exceptions);
-
- if(targets != NULL) {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "fetch_target_exception: Found exception target list [%s] for rule id %s", targets, rule->actionset->id);
- }
-
- target = apr_strtok((char *)targets, ",", &savedptr);
-
- while(target != NULL) {
-
- variable = apr_pstrdup(msr->mp, target);
-
- c = strchr(variable,':');
-
- if(c != NULL) {
- name = apr_strtok(variable,":",&value);
- } else {
- name = variable;
- value = NULL;
- }
-
- if((strlen(myname) == strlen(name)) &&
- (strncasecmp(myname, name,strlen(myname)) == 0)) {
-
- if(value != NULL && myvalue != NULL) {
- if((strlen(myvalue) == strlen(value)) &&
- strncasecmp(myvalue,value,strlen(myvalue)) == 0) {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "fetch_target_exception: Target %s will not be processed.", target);
- }
- match = 1;
- }
- } else if (value == NULL && myvalue == NULL) {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "fetch_target_exception: Target %s will not be processed.", target);
- }
- match = 1;
- } else if (value == NULL && myvalue != NULL) {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "fetch_target_exception: Target %s will not be processed.", target);
- }
- match = 1;
- }
- }
-
- target = apr_strtok(NULL, ",", &savedptr);
- }
- } else {
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "fetch_target_exception: No exception target found for rule id %s.", rule->actionset->id);
-
- }
- }
-
- }
-
- }
-
- }
-
- if(match == 1)
- return 1;
-
- return 0;
-}
-
char *update_rule_target(cmd_parms *cmd, directory_config *dcfg,
msre_ruleset *rset, const char *p1, const char *p2, const char *p3)
{
@@ -169,7 +57,7 @@
int name_len = 0, value_len = 0;
char *name = NULL, *value = NULL;
char *opt = NULL, *param = NULL;
- int i, rc, match = 0, var_appended = 0;
+ int i, rc, match = 0;
int offset = 0;
if(p1 == NULL || p2 == NULL || (dcfg == NULL && rset == NULL)) {
@@ -225,6 +113,9 @@
if(opt != NULL) {
name = apr_strtok(param,":",&value);
+ if(strchr(value,':') != NULL) {
+ goto end;
+ }
} else {
name = param;
}
@@ -237,25 +128,19 @@
targets = (msre_var **)rule->targets->elts;
// TODO need a good way to remove the element from array, maybe change array by tables or rings
for (i = 0; i < rule->targets->nelts; i++) {
- if((strlen(targets[i]->name) == strlen(name)) &&
- (strncasecmp(targets[i]->name,name,strlen(targets[i]->name)) == 0) &&
+ if((strncasecmp(targets[i]->name,name,name_len) == 0) &&
(targets[i]->is_negated == is_negated) &&
(targets[i]->is_counting == is_counting)) {
if(value != NULL && targets[i]->param != NULL) {
- if((strlen(targets[i]->param) == strlen(value)) &&
- strncasecmp(targets[i]->param,value,strlen(targets[i]->param)) == 0) {
+ if(strncasecmp(targets[i]->param,value,value_len) == 0) {
memset(targets[i]->name,0,strlen(targets[i]->name));
memset(targets[i]->param,0,strlen(targets[i]->param));
match = 1;
- targets[i]->is_counting = 0;
- targets[i]->is_negated = 1;
}
} else if (value == NULL && targets[i]->param == NULL){
memset(targets[i]->name,0,strlen(targets[i]->name));
match = 1;
- targets[i]->is_counting = 0;
- targets[i]->is_negated = 1;
} else
continue;
@@ -273,7 +158,6 @@
if (rc < 0) {
goto end;
}
- var_appended = 1;
} else {
goto end;
}
@@ -306,6 +190,9 @@
if(opt != NULL) {
name = apr_strtok(param,":",&value);
+ if(strchr(value,':') != NULL) {
+ goto end;
+ }
} else {
name = param;
}
@@ -315,64 +202,49 @@
if(value != NULL)
value_len = strlen(value);
- match = 0;
-
targets = (msre_var **)rule->targets->elts;
for (i = 0; i < rule->targets->nelts; i++) {
- if((strlen(targets[i]->name) == strlen(name)) &&
- (strncasecmp(targets[i]->name,name,strlen(targets[i]->name)) == 0) &&
+ if((strncasecmp(targets[i]->name,name,name_len) == 0) &&
(targets[i]->is_negated == is_negated) &&
(targets[i]->is_counting == is_counting)) {
if(value != NULL && targets[i]->param != NULL) {
- if((strlen(targets[i]->param) == strlen(value)) &&
- strncasecmp(targets[i]->param,value,strlen(targets[i]->param)) == 0) {
- match = 1;
+ if(strncasecmp(targets[i]->param,value,value_len) == 0) {
+ goto end;
}
} else if (value == NULL && targets[i]->param == NULL){
- match = 1;
+ goto end;
} else
continue;
}
}
-
if(target != NULL) {
free(target);
target = NULL;
}
- if(match == 0 ) {
- rc = msre_parse_targets(ruleset, p, rule->targets, &my_error_msg);
- if (rc < 0) {
- goto end;
- }
- var_appended = 1;
+
+ rc = msre_parse_targets(ruleset, p, rule->targets, &my_error_msg);
+ if (rc < 0) {
+ goto end;
}
}
p = apr_strtok(NULL,",",&savedptr);
}
- if(var_appended == 1) {
- curr_targets = msre_generate_target_string(ruleset->mp, rule);
- rule->unparsed = msre_rule_generate_unparsed(ruleset->mp, rule, curr_targets, NULL, NULL);
- rule->p1 = apr_pstrdup(ruleset->mp, curr_targets);
- }
+ curr_targets = msre_generate_target_string(ruleset->mp, rule);
+
+ rule->unparsed = msre_rule_generate_unparsed(ruleset->mp, rule, curr_targets, NULL, NULL);
end:
- if(target_list != NULL) {
+ if(target_list != NULL)
free(target_list);
- target_list = NULL;
- }
- if(replace != NULL) {
+ if(replace != NULL)
free(replace);
- replace = NULL;
- }
- if(target != NULL) {
+ if(target != NULL)
free(target);
- target = NULL;
- }
return NULL;
}
@@ -410,13 +282,13 @@
for (i = 0; i < rule->targets->nelts; i++) {
if(targets[i]->name != NULL && strlen(targets[i]->name) > 0) {
- target_str = apr_pstrcat(pool,
- (target_str == NULL) ? "" : apr_psprintf(pool, "%s|", target_str),
- (targets[i]->is_negated == 0) ? "" : "!",
- (targets[i]->is_counting == 0) ? "" : "&",
- (targets[i]->name == NULL) ? "" : targets[i]->name,
- (targets[i]->param == NULL) ? "" : apr_psprintf(pool, ":%s", targets[i]->param),
- NULL);
+ target_str = apr_pstrcat(pool,
+ (target_str == NULL) ? "" : apr_psprintf(pool, "%s|", target_str),
+ (targets[i]->is_negated == 0) ? "" : "!",
+ (targets[i]->is_counting == 0) ? "" : "&",
+ (targets[i]->name == NULL) ? "" : targets[i]->name,
+ (targets[i]->param == NULL) ? "" : apr_psprintf(pool, ":%s", targets[i]->param),
+ NULL);
}
}
@@ -448,14 +320,14 @@
if (chain) {
/* Skip some actions that are not used in a chain. */
if ( (action->metadata->type == ACTION_DISRUPTIVE)
- || (action->metadata->type == ACTION_METADATA)
- || (strcmp("log", action->metadata->name) == 0)
- || (strcmp("auditlog", action->metadata->name) == 0)
- || (strcmp("nolog", action->metadata->name) == 0)
- || (strcmp("noauditlog", action->metadata->name) == 0)
- || (strcmp("severity", action->metadata->name) == 0)
- || (strcmp("tag", action->metadata->name) == 0)
- || (strcmp("phase", action->metadata->name) == 0))
+ || (action->metadata->type == ACTION_METADATA)
+ || (strcmp("log", action->metadata->name) == 0)
+ || (strcmp("auditlog", action->metadata->name) == 0)
+ || (strcmp("nolog", action->metadata->name) == 0)
+ || (strcmp("noauditlog", action->metadata->name) == 0)
+ || (strcmp("severity", action->metadata->name) == 0)
+ || (strcmp("tag", action->metadata->name) == 0)
+ || (strcmp("phase", action->metadata->name) == 0))
{
continue;
}
@@ -474,14 +346,14 @@
}
actions = apr_pstrcat(pool,
- (actions == NULL) ? "" : actions,
- (actions == NULL) ? "" : ",",
- action->metadata->name,
- (action->param == NULL) ? "" : ":",
- (use_quotes) ? "'" : "",
- (action->param == NULL) ? "" : action->param,
- (use_quotes) ? "'" : "",
- NULL);
+ (actions == NULL) ? "" : actions,
+ (actions == NULL) ? "" : ",",
+ action->metadata->name,
+ (action->param == NULL) ? "" : ":",
+ (use_quotes) ? "'" : "",
+ (action->param == NULL) ? "" : action->param,
+ (use_quotes) ? "'" : "",
+ NULL);
}
return actions;
@@ -525,7 +397,7 @@
* given text string and places them into the supplied table.
*/
static apr_status_t msre_parse_targets(msre_ruleset *ruleset, const char *text,
- apr_array_header_t *arr, char **error_msg)
+ apr_array_header_t *arr, char **error_msg)
{
const apr_array_header_t *tarr;
const apr_table_entry_t *telts;
@@ -561,7 +433,7 @@
* them into the supplied array.
*/
static apr_status_t msre_parse_actions(msre_engine *engine, msre_actionset *actionset,
- const char *text, char **error_msg)
+ const char *text, char **error_msg)
{
const apr_array_header_t *tarr;
const apr_table_entry_t *telts;
@@ -721,7 +593,7 @@
* Creates a new action instance given its name and an (optional) parameter.
*/
msre_action *msre_create_action(msre_engine *engine, const char *name, const char *param,
- char **error_msg)
+ char **error_msg)
{
msre_action *action = apr_pcalloc(engine->mp, sizeof(msre_action));
if (action == NULL) return NULL;
@@ -739,7 +611,7 @@
if (param == NULL) { /* Parameter not present */
if (action->metadata->argc_min > 0) {
*error_msg = apr_psprintf(engine->mp, "Missing mandatory parameter for action %s",
- name);
+ name);
return NULL;
}
} else { /* Parameter present */
@@ -754,7 +626,7 @@
if ((param[0] == '+')||(param[0] == '-')) {
if (action->metadata->allow_param_plusminus == 0) {
*error_msg = apr_psprintf(engine->mp,
- "Action %s does not allow +/- modificators.", name);
+ "Action %s does not allow +/- modificators.", name);
return NULL;
}
else { /* Modificators allowed. */
@@ -762,10 +634,10 @@
action->param = param + 1;
action->param_plusminus = POSITIVE_VALUE;
} else
- if (param[0] == '-') {
- action->param = param + 1;
- action->param_plusminus = NEGATIVE_VALUE;
- }
+ if (param[0] == '-') {
+ action->param = param + 1;
+ action->param_plusminus = NEGATIVE_VALUE;
+ }
}
} else {
action->param = param;
@@ -787,7 +659,7 @@
* them into the given table.
*/
int msre_parse_generic(apr_pool_t *mp, const char *text, apr_table_t *vartable,
- char **error_msg)
+ char **error_msg)
{
char *p = (char *)text;
int count = 0;
@@ -830,7 +702,7 @@
}
*error_msg = apr_psprintf(mp, "Unexpected character at position %d: %s",
- (int)(p - text), text);
+ (int)(p - text), text);
return -1;
}
@@ -865,28 +737,28 @@
for(;;) {
if (*p == '\0') {
*error_msg = apr_psprintf(mp, "Missing closing quote at position %d: %s",
- (int)(p - text), text);
+ (int)(p - text), text);
free(value);
return -1;
} else
- if (*p == '\\') {
- if ( (*(p + 1) == '\0') || ((*(p + 1) != '\'')&&(*(p + 1) != '\\')) ) {
- *error_msg = apr_psprintf(mp, "Invalid quoted pair at position %d: %s",
- (int)(p - text), text);
- free(value);
- return -1;
- }
- p++;
- *(d++) = *(p++);
- } else
- if (*p == '\'') {
- *d = '\0';
- p++;
- break;
- }
- else {
- *(d++) = *(p++);
- }
+ if (*p == '\\') {
+ if ( (*(p + 1) == '\0') || ((*(p + 1) != '\'')&&(*(p + 1) != '\\')) ) {
+ *error_msg = apr_psprintf(mp, "Invalid quoted pair at position %d: %s",
+ (int)(p - text), text);
+ free(value);
+ return -1;
+ }
+ p++;
+ *(d++) = *(p++);
+ } else
+ if (*p == '\'') {
+ *d = '\0';
+ p++;
+ break;
+ }
+ else {
+ *(d++) = *(p++);
+ }
}
d = value;
@@ -917,10 +789,10 @@
* parsing the given string which contains a list of actions.
*/
msre_actionset *msre_actionset_create(msre_engine *engine, const char *text,
- char **error_msg)
+ char **error_msg)
{
msre_actionset *actionset = (msre_actionset *)apr_pcalloc(engine->mp,
- sizeof(msre_actionset));
+ sizeof(msre_actionset));
if (actionset == NULL) return NULL;
actionset->actions = apr_table_make(engine->mp, 25);
@@ -983,7 +855,7 @@
* Merges two actionsets into one.
*/
msre_actionset *msre_actionset_merge(msre_engine *engine, msre_actionset *parent,
- msre_actionset *child, int inherit_by_default)
+ msre_actionset *child, int inherit_by_default)
{
msre_actionset *merged = NULL;
const apr_array_header_t *tarr;
@@ -1056,8 +928,8 @@
msre_actionset *msre_actionset_create_default(msre_engine *engine) {
char *my_error_msg = NULL;
return msre_actionset_create(engine,
- "phase:2,log,auditlog,pass",
- &my_error_msg);
+ "phase:2,log,auditlog,pass",
+ &my_error_msg);
}
/**
@@ -1191,10 +1063,10 @@
if (rule->placeholder == RULE_PH_MARKER) continue;
msr_log(msr, 1, "Rule %pp [id \"%s\"][file \"%s\"][line \"%d\"]: %u usec", rule,
- ((rule->actionset != NULL)&&(rule->actionset->id != NULL)) ? rule->actionset->id : "-",
- rule->filename != NULL ? rule->filename : "-",
- rule->line_num,
- (rule->execution_time / PERFORMANCE_MEASUREMENT_LOOP));
+ ((rule->actionset != NULL)&&(rule->actionset->id != NULL)) ? rule->actionset->id : "-",
+ rule->filename != NULL ? rule->filename : "-",
+ rule->line_num,
+ (rule->execution_time / PERFORMANCE_MEASUREMENT_LOOP));
}
return rc;
@@ -1202,151 +1074,151 @@
static apr_status_t msre_ruleset_process_phase_(msre_ruleset *ruleset, modsec_rec *msr) {
#else
- apr_status_t msre_ruleset_process_phase(msre_ruleset *ruleset, modsec_rec *msr) {
+apr_status_t msre_ruleset_process_phase(msre_ruleset *ruleset, modsec_rec *msr) {
#endif
- apr_array_header_t *arr = NULL;
- msre_rule **rules;
- apr_status_t rc;
- const char *skip_after = NULL;
- msre_rule *last_rule = NULL;
- msre_rule *rule_starter = NULL;
- int i, mode, skip, skipped, saw_starter;
-
- /* First determine which set of rules we need to use. */
- switch (msr->phase) {
- case PHASE_REQUEST_HEADERS :
- arr = ruleset->phase_request_headers;
- break;
- case PHASE_REQUEST_BODY :
- arr = ruleset->phase_request_body;
- break;
- case PHASE_RESPONSE_HEADERS :
- arr = ruleset->phase_response_headers;
- break;
- case PHASE_RESPONSE_BODY :
- arr = ruleset->phase_response_body;
- break;
- case PHASE_LOGGING :
- arr = ruleset->phase_logging;
- break;
- default :
- msr_log(msr, 1, "Internal Error: Invalid phase %d", msr->phase);
- return -1;
- }
+ apr_array_header_t *arr = NULL;
+ msre_rule **rules;
+ apr_status_t rc;
+ const char *skip_after = NULL;
+ msre_rule *last_rule = NULL;
+ msre_rule *rule_starter = NULL;
+ int i, mode, skip, skipped, saw_starter;
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "This phase consists of %d rule(s).", arr->nelts);
- }
+ /* First determine which set of rules we need to use. */
+ switch (msr->phase) {
+ case PHASE_REQUEST_HEADERS :
+ arr = ruleset->phase_request_headers;
+ break;
+ case PHASE_REQUEST_BODY :
+ arr = ruleset->phase_request_body;
+ break;
+ case PHASE_RESPONSE_HEADERS :
+ arr = ruleset->phase_response_headers;
+ break;
+ case PHASE_RESPONSE_BODY :
+ arr = ruleset->phase_response_body;
+ break;
+ case PHASE_LOGGING :
+ arr = ruleset->phase_logging;
+ break;
+ default :
+ msr_log(msr, 1, "Internal Error: Invalid phase %d", msr->phase);
+ return -1;
+ }
- apr_table_clear(msr->matched_vars);
+ if (msr->txcfg->debuglog_level >= 9) {
+ msr_log(msr, 9, "This phase consists of %d rule(s).", arr->nelts);
+ }
+
+ apr_table_clear(msr->matched_vars);
- /* Loop through the rules in the selected set. */
- skip = 0;
- skipped = 0;
- saw_starter = 0;
- mode = NEXT_RULE;
- rules = (msre_rule **)arr->elts;
- for (i = 0; i < arr->nelts; i++) {
- msre_rule *rule = rules[i];
+ /* Loop through the rules in the selected set. */
+ skip = 0;
+ skipped = 0;
+ saw_starter = 0;
+ mode = NEXT_RULE;
+ rules = (msre_rule **)arr->elts;
+ for (i = 0; i < arr->nelts; i++) {
+ msre_rule *rule = rules[i];
#if defined(PERFORMANCE_MEASUREMENT)
- apr_time_t time1 = 0;
+ apr_time_t time1 = 0;
#endif
- /* Reset the rule interception flag */
- msr->rule_was_intercepted = 0;
+ /* Reset the rule interception flag */
+ msr->rule_was_intercepted = 0;
- /* SKIP_RULES is used to skip all rules until we hit a placeholder
- * with the specified rule ID and then resume execution after that.
- */
- if (mode == SKIP_RULES) {
- /* Go to the next rule if we have not yet hit the skip_after ID */
+ /* SKIP_RULES is used to skip all rules until we hit a placeholder
+ * with the specified rule ID and then resume execution after that.
+ */
+ if (mode == SKIP_RULES) {
+ /* Go to the next rule if we have not yet hit the skip_after ID */
- if ((rule->placeholder == RULE_PH_NONE) || (rule->actionset->id == NULL) || (strcmp(skip_after, rule->actionset->id) != 0)) {
+ if ((rule->placeholder == RULE_PH_NONE) || (rule->actionset->id == NULL) || (strcmp(skip_after, rule->actionset->id) != 0)) {
- if(i-1 >=0)
- last_rule = rules[i-1];
- else
- last_rule = rules[0];
-
- if((last_rule != NULL) && (last_rule->actionset != NULL) && last_rule->actionset->is_chained && (saw_starter == 1)) {
- mode = NEXT_RULE;
- skipped = 1;
- --i;
- } else {
- mode = SKIP_RULES;
- skipped = 0;
- saw_starter = 0;
+ if(i-1 >=0)
+ last_rule = rules[i-1];
+ else
+ last_rule = rules[0];
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "Current rule is id=\"%s\" [chained %d] is trying to find the SecMarker=\"%s\" [stater %d]",rule->actionset->id,last_rule->actionset->is_chained,skip_after,saw_starter);
- }
+ if((last_rule != NULL) && (last_rule->actionset != NULL) && last_rule->actionset->is_chained && (saw_starter == 1)) {
+ mode = NEXT_RULE;
+ skipped = 1;
+ --i;
+ } else {
+ mode = SKIP_RULES;
+ skipped = 0;
+ saw_starter = 0;
+ if (msr->txcfg->debuglog_level >= 9) {
+ msr_log(msr, 9, "Current rule is id=\"%s\" [chained %d] is trying to find the SecMarker=\"%s\" [stater %d]",rule->actionset->id,last_rule->actionset->is_chained,skip_after,saw_starter);
}
- continue;
- }
-
- if (msr->txcfg->debuglog_level >= 9) {
- msr_log(msr, 9, "Found rule %pp id=\"%s\".", rule, skip_after);
- }
-
- /* Go to the rule *after* this one to continue execution. */
- if (msr->txcfg->debuglog_level >= 4) {
- msr_log(msr, 4, "Continuing execution after rule id=\"%s\".", skip_after);
}
- saw_starter = 0;
- skipped = 0;
- skip_after = NULL;
- mode = NEXT_RULE;
- apr_table_clear(msr->matched_vars);
continue;
}
- /* Skip any rule marked as a placeholder */
- if (rule->placeholder != RULE_PH_NONE) {
- continue;
+ if (msr->txcfg->debuglog_level >= 9) {
+ msr_log(msr, 9, "Found rule %pp id=\"%s\".", rule, skip_after);
}
- /* NEXT_CHAIN is used when one of the rules in a chain
- * fails to match and then we need to skip the remaining
- * rules in that chain in order to get to the next
- * rule that can execute.
- */
- if (mode == NEXT_CHAIN) {
- if (rule->actionset->is_chained == 0) {
- mode = NEXT_RULE;
- }
-
- /* Go to the next rule. */
- apr_table_clear(msr->matched_vars);
- continue;
+ /* Go to the rule *after* this one to continue execution. */
+ if (msr->txcfg->debuglog_level >= 4) {
+ msr_log(msr, 4, "Continuing execution after rule id=\"%s\".", skip_after);
}
- /* If we are here that means the mode is NEXT_RULE, which
- * then means we have done processing any chains. However,
- * if the "skip" parameter is set we need to skip over.
- */
- if ((mode == NEXT_RULE)&&(skip > 0)) {
- /* Decrement the skip counter by one. */
- skip--;
+ saw_starter = 0;
+ skipped = 0;
+ skip_after = NULL;
+ mode = NEXT_RULE;
+ apr_table_clear(msr->matched_vars);
+ continue;
+ }
- /* If the current rule is part of a chain then
- * we need to skip over the entire chain. Thus
- * we change the mode to NEXT_CHAIN. The skip
- * counter will not decrement as we are moving
- * over the rules belonging to the chain.
- */
- if (rule->actionset->is_chained) {
- mode = NEXT_CHAIN;
- }
+ /* Skip any rule marked as a placeholder */
+ if (rule->placeholder != RULE_PH_NONE) {
+ continue;
+ }
- /* Go to the next rule. */
- apr_table_clear(msr->matched_vars);
- continue;
+ /* NEXT_CHAIN is used when one of the rules in a chain
+ * fails to match and then we need to skip the remaining
+ * rules in that chain in order to get to the next
+ * rule that can execute.
+ */
+ if (mode == NEXT_CHAIN) {
+ if (rule->actionset->is_chained == 0) {
+ mode = NEXT_RULE;
}
- /* Check if this rule was removed at runtime */
+ /* Go to the next rule. */
+ apr_table_clear(msr->matched_vars);
+ continue;
+ }
+
+ /* If we are here that means the mode is NEXT_RULE, which
+ * then means we have done processing any chains. However,
+ * if the "skip" parameter is set we need to skip over.
+ */
+ if ((mode == NEXT_RULE)&&(skip > 0)) {
+ /* Decrement the skip counter by one. */
+ skip--;
+
+ /* If the current rule is part of a chain then
+ * we need to skip over the entire chain. Thus
+ * we change the mode to NEXT_CHAIN. The skip
+ * counter will not decrement as we are moving
+ * over the rules belonging to the chain.
+ */
+ if (rule->actionset->is_chained) {
+ mode = NEXT_CHAIN;
+ }
+
+ /* Go to the next rule. */
+ apr_table_clear(msr->matched_vars);
+ continue;
+ }
+
+ /* Check if this rule was removed at runtime */
if (((rule->actionset->id !=NULL) && !apr_is_empty_array(msr->removed_rules)) || (apr_is_empty_array(msr->removed_rules_tag)==0)) {
int j, act;
int do_process = 1;
@@ -1910,9 +1782,8 @@
var->value_len = strlen(actionset->logdata);
expand_macros(msr, var, NULL, msr->mp);
- logdata = apr_psprintf(msr->mp, " [data \"%s",
+ logdata = apr_psprintf(msr->mp, " [data \"%s\"]",
log_escape_hex(msr->mp, (unsigned char *)var->value, var->value_len));
- logdata = apr_pstrcat(msr->mp, logdata, "\"]", NULL);
/* If it is > 512 bytes, then truncate at 512 with ellipsis.
* NOTE: 512 actual data + 9 bytes of label = 521
@@ -2273,24 +2144,10 @@
full_varname = var->name;
}
- rc = fetch_target_exception(rule, msr, var);
-
- if(rc > 0) {
-
- if (msr->txcfg->debuglog_level >= 4) {
- msr_log(msr, 4, "Executing operator \"%s%s\" with param \"%s\" against %s skipped.",
- (rule->op_negated ? "!" : ""), rule->op_name,
- log_escape(msr->mp, rule->op_param), full_varname);
- }
-
- return RULE_NO_MATCH;
-
- }
-
if (msr->txcfg->debuglog_level >= 4) {
msr_log(msr, 4, "Executing operator \"%s%s\" with param \"%s\" against %s.",
- (rule->op_negated ? "!" : ""), rule->op_name,
- log_escape(msr->mp, rule->op_param), full_varname);
+ (rule->op_negated ? "!" : ""), rule->op_name,
+ log_escape(msr->mp, rule->op_param), full_varname);
}
if (msr->txcfg->debuglog_level >= 9) {
@@ -2369,7 +2226,8 @@
mvar->value = apr_pmemdup(msr->mp, var->value, var->value_len);
mvar->value_len = var->value_len;
- apr_table_addn(msr->matched_vars, parm, (void *)mvar);
+ apr_table_unset(msr->matched_vars, parm);
+ apr_table_setn(msr->matched_vars, parm, (void *)mvar);
} else {
@@ -2379,14 +2237,15 @@
mvar->value = apr_pmemdup(msr->mp, var->value, var->value_len);
mvar->value_len = var->value_len;
- apr_table_addn(msr->matched_vars, mvar->name, (void *)mvar);
+ apr_table_unset(msr->matched_vars, mvar->name);
+ apr_table_setn(msr->matched_vars, mvar->name, (void *)mvar);
}
}
/* Keep track of the highest severity matched so far */
- if ((acting_actionset->severity > 0) && (acting_actionset->severity < msr->highest_severity)
- && !rule->actionset->is_chained) {
+ if ((acting_actionset->severity > 0) && (acting_actionset->severity < msr->highest_severity))
+ {
msr->highest_severity = acting_actionset->severity;
}
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/re_actions.c
^
|
@@ -819,17 +819,6 @@
return NULL;
} else
- if (strcasecmp(name, "ruleRemoveTargetById") == 0) {
- char *parm = NULL;
- char *savedptr = NULL;
-
- parm = apr_strtok(value,";",&savedptr);
-
- if(parm == NULL && savedptr == NULL)
- return apr_psprintf(engine->mp, "ruleRemoveTargetById must has at least id;target1,targets2...targetN");
-
- return NULL;
- } else
if (strcasecmp(name, "ruleUpdateTargetById") == 0) {
char *parm = NULL;
char *savedptr = NULL;
@@ -1057,23 +1046,6 @@
return 1;
} else
- if (strcasecmp(name, "ruleRemoveTargetById") == 0) {
- msre_rule *updated_rule = NULL;
- char *p1 = NULL, *p2 = NULL;
- char *savedptr = NULL;
-
- p1 = apr_strtok(value,";",&savedptr);
-
- p2 = apr_strtok(NULL,";",&savedptr);
-
- if (msr->txcfg->debuglog_level >= 4) {
- msr_log(msr, 4, "Ctl: ruleRemoveTargetById id=%s targets=%s", p1, p2);
- }
-
- apr_table_addn(msr->removed_targets, p1, (const char *)apr_pstrdup(msr->mp, p2));
-
- return 1;
- } else
if (strcasecmp(name, "ruleUpdateTargetById") == 0) {
char *p1 = NULL, *p2 = NULL, *p3 = NULL;
char *savedptr = NULL;
@@ -1758,7 +1730,7 @@
if (table == NULL) {
/* Does not exist yet - create new. */
-
+
if (msr->txcfg->debuglog_level >= 4) {
msr_log(msr, 4, "Creating collection (name \"%s\", key \"%s\").",
real_col_name, col_key);
@@ -1769,15 +1741,11 @@
/* IMP1 Is the timeout hard-coded to 3600? */
- if(msr->txcfg->debuglog_level >= 4) {
- msr_log(msr, 4, "Setting default timeout collection value %d.",msr->txcfg->col_timeout);
- }
-
/* Add default timeout. */
var = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string));
var->name = "__expire_KEY";
var->name_len = strlen(var->name);
- var->value = apr_psprintf(msr->mp, "%" APR_TIME_T_FMT, (apr_time_t)(apr_time_sec(msr->request_time) + msr->txcfg->col_timeout));
+ var->value = apr_psprintf(msr->mp, "%" APR_TIME_T_FMT, (apr_time_t)(apr_time_sec(msr->request_time) + 3600));
var->value_len = strlen(var->value);
apr_table_setn(table, var->name, (void *)var);
@@ -1793,7 +1761,7 @@
var = apr_pcalloc(msr->mp, sizeof(msc_string));
var->name = "TIMEOUT";
var->name_len = strlen(var->name);
- var->value = apr_psprintf(msr->mp, "%d", msr->txcfg->col_timeout);
+ var->value = apr_psprintf(msr->mp, "%d", 3600);
var->value_len = strlen(var->value);
apr_table_setn(table, var->name, (void *)var);
@@ -1883,7 +1851,7 @@
/* IMP1 We have a function for this now, parse_name_eq_value? */
s = strstr(data, "=");
if (s == NULL) return 0;
- col_name = strtolower_inplace((unsigned char *)data);
+ col_name = strtolower_inplace(data);
col_key = s + 1;
*s = '\0';
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/re_operators.c
^
|
@@ -449,54 +449,42 @@
if(msr->stream_output_data != NULL && output_body == 1) {
- memset(msr->stream_output_data, 0x0, msr->stream_output_length);
- free(msr->stream_output_data);
- msr->stream_output_data = NULL;
- msr->stream_output_length = 0;
+ char *stream_output_data = NULL;
- msr->stream_output_data = (char *)malloc(size+1);
+ stream_output_data = (char *)realloc(msr->stream_output_data, size+1);
+ msr->stream_output_length = size;
- if(msr->stream_output_data == NULL) {
+ if(stream_output_data == NULL) {
+ free (msr->stream_output_data);
+ msr->stream_output_data = NULL;
return -1;
}
- msr->stream_output_length = size;
- memset(msr->stream_output_data, 0x0, size+1);
-
- msr->of_stream_changed = 1;
-
- strncpy(msr->stream_output_data, data, size);
- msr->stream_output_data[size] = '\0';
-
var->value_len = size;
- var->value = msr->stream_output_data;
+ msr->of_stream_changed = 1;
+ msr->stream_output_data = (char *)stream_output_data;
+ if(msr->stream_output_data != NULL)
+ apr_cpystrn(msr->stream_output_data, data, size);
}
if(msr->stream_input_data != NULL && input_body == 1) {
+ char *stream_input_data = NULL;
- memset(msr->stream_input_data, 0x0, msr->stream_input_length);
- free(msr->stream_input_data);
- msr->stream_input_data = NULL;
- msr->stream_input_length = 0;
-
- msr->stream_input_data = (char *)malloc(size+1);
+ stream_input_data = (char *)realloc(msr->stream_input_data, size+1);
+ msr->stream_input_length = size;
- if(msr->stream_input_data == NULL) {
+ if(stream_input_data == NULL) {
+ free (msr->stream_input_data);
+ msr->stream_input_data = NULL;
return -1;
}
- msr->stream_input_length = size;
- memset(msr->stream_input_data, 0x0, size+1);
-
- msr->if_stream_changed = 1;
-
- strncpy(msr->stream_input_data, data, size);
- msr->stream_input_data[size] = '\0';
-
var->value_len = size;
- var->value = msr->stream_input_data;
-
+ msr->stream_input_data = (char *)stream_input_data;
+ if(msr->stream_input_data != NULL)
+ apr_cpystrn(msr->stream_input_data, data, size);
+ msr->if_stream_changed = 1;
}
if (! *error_msg) {
@@ -604,12 +592,7 @@
/* Are we supposed to capture subexpressions? */
capture = apr_table_get(rule->actionset->actions, "capture") ? 1 : 0;
matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0;
- if(!matched_bytes)
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0;
-
matched = apr_table_get(rule->actionset->actions, "sanitizeMatched") ? 1 : 0;
- if(!matched)
- matched = apr_table_get(rule->actionset->actions, "sanitiseMatched") ? 1 : 0;
/* Show when the regex captures but "capture" is not set */
if (msr->txcfg->debuglog_level >= 6) {
@@ -2270,10 +2253,6 @@
int rc;
int is_cc = 0;
int offset;
- int matched_bytes = 0;
- char *qspos = NULL;
- const char *parm = NULL;
- msc_parm *mparm = NULL;
if (error_msg == NULL) return -1;
*error_msg = NULL;
@@ -2340,10 +2319,6 @@
* and we are done.
*/
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0;
- if(!matched_bytes)
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0;
-
if (apr_table_get(rule->actionset->actions, "capture")) {
for(; i < rc; i++) {
msc_string *s = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string));
@@ -2360,30 +2335,6 @@
msr_log(msr, 9, "Added regex subexpression to TX.%d: %s", i,
log_escape_nq_ex(msr->mp, s->value, s->value_len));
}
-
- if((matched_bytes == 1) && (var != NULL) && (var->name != NULL)) {
- qspos = apr_psprintf(msr->mp, "%s", var->name);
- parm = strstr(qspos, ":");
- if (parm != NULL) {
- parm++;
- mparm = apr_palloc(msr->mp, sizeof(msc_parm));
- if (mparm == NULL)
- continue;
-
- mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len);
- mparm->pad_1 = rule->actionset->arg_min;
- mparm->pad_2 = rule->actionset->arg_max;
- apr_table_addn(msr->pattern_to_sanitize, parm, (void *)mparm);
- } else {
- mparm = apr_palloc(msr->mp, sizeof(msc_parm));
- if (mparm == NULL)
- continue;
-
- mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len);
- apr_table_addn(msr->pattern_to_sanitize, qspos, (void *)mparm);
- }
- }
-
}
}
@@ -2551,11 +2502,6 @@
int rc;
int is_cpf = 0;
int offset;
- int matched_bytes = 0;
- char *qspos = NULL;
- const char *parm = NULL;
- msc_parm *mparm = NULL;
-
if (error_msg == NULL) return -1;
*error_msg = NULL;
@@ -2622,10 +2568,6 @@
* and we are done.
*/
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0;
- if(!matched_bytes)
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0;
-
if (apr_table_get(rule->actionset->actions, "capture")) {
for(; i < rc; i++) {
msc_string *s = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string));
@@ -2642,30 +2584,6 @@
msr_log(msr, 9, "Added regex subexpression to TX.%d: %s", i,
log_escape_nq_ex(msr->mp, s->value, s->value_len));
}
-
- if((matched_bytes == 1) && (var != NULL) && (var->name != NULL)) {
- qspos = apr_psprintf(msr->mp, "%s", var->name);
- parm = strstr(qspos, ":");
- if (parm != NULL) {
- parm++;
- mparm = apr_palloc(msr->mp, sizeof(msc_parm));
- if (mparm == NULL)
- continue;
-
- mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len);
- mparm->pad_1 = rule->actionset->arg_min;
- mparm->pad_2 = rule->actionset->arg_max;
- apr_table_addn(msr->pattern_to_sanitize, parm, (void *)mparm);
- } else {
- mparm = apr_palloc(msr->mp, sizeof(msc_parm));
- if (mparm == NULL)
- continue;
-
- mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len);
- apr_table_addn(msr->pattern_to_sanitize, qspos, (void *)mparm);
- }
- }
-
}
}
@@ -2823,10 +2741,6 @@
int rc;
int is_ssn = 0;
int offset;
- int matched_bytes = 0;
- char *qspos = NULL;
- const char *parm = NULL;
- msc_parm *mparm = NULL;
if (error_msg == NULL) return -1;
*error_msg = NULL;
@@ -2893,10 +2807,6 @@
* and we are done.
*/
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitizeMatchedBytes") ? 1 : 0;
- if(!matched_bytes)
- matched_bytes = apr_table_get(rule->actionset->actions, "sanitiseMatchedBytes") ? 1 : 0;
-
if (apr_table_get(rule->actionset->actions, "capture")) {
for(; i < rc; i++) {
msc_string *s = (msc_string *)apr_pcalloc(msr->mp, sizeof(msc_string));
@@ -2913,30 +2823,6 @@
msr_log(msr, 9, "Added regex subexpression to TX.%d: %s", i,
log_escape_nq_ex(msr->mp, s->value, s->value_len));
}
-
- if((matched_bytes == 1) && (var != NULL) && (var->name != NULL)) {
- qspos = apr_psprintf(msr->mp, "%s", var->name);
- parm = strstr(qspos, ":");
- if (parm != NULL) {
- parm++;
- mparm = apr_palloc(msr->mp, sizeof(msc_parm));
- if (mparm == NULL)
- continue;
-
- mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len);
- mparm->pad_1 = rule->actionset->arg_min;
- mparm->pad_2 = rule->actionset->arg_max;
- apr_table_addn(msr->pattern_to_sanitize, parm, (void *)mparm);
- } else {
- mparm = apr_palloc(msr->mp, sizeof(msc_parm));
- if (mparm == NULL)
- continue;
-
- mparm->value = apr_pstrmemdup(msr->mp,s->value,s->value_len);
- apr_table_addn(msr->pattern_to_sanitize, qspos, (void *)mparm);
- }
- }
-
}
}
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/re_tfns.c
^
|
@@ -337,15 +337,16 @@
changed = 1;
incomment = 1;
i += 2;
- } else if ((input[i] == '-')&&(i + 1 < input_len)&&(input[i + 1] == '-')
- && (incomment == 0)) {
+ } else if ((input[i] == '-')&&(i + 1 < input_len)&&(input[i + 1] == '-')) {
changed = 1;
input[i] = ' ';
break;
- } else if (input[i] == '#' && (incomment == 0)) {
+ i += 2;
+ } else if (input[i] == '#') {
changed = 1;
input[i] = ' ';
- break;
+ break;
+ i++;
} else {
input[j] = input[i];
i++;
@@ -543,17 +544,6 @@
return 1;
}
-/* sqlHexDecode */
-
-static int msre_fn_sqlHexDecode_execute(apr_pool_t *mptmp, unsigned char *input,
- long int input_len, char **rval, long int *rval_len)
-{
- *rval_len = sql_hex2bytes_inplace(input, input_len);
- *rval = (char *)input;
-
- return 1;
-}
-
/* hexDecode */
static int msre_fn_hexDecode_execute(apr_pool_t *mptmp, unsigned char *input,
@@ -735,7 +725,7 @@
{
*rval_len = input_len;
*rval = apr_palloc(mptmp, *rval_len);
- *rval_len = decode_base64_ext(*rval, (const unsigned char *)input, input_len);
+ *rval_len = decode_base64_ext(*rval, (const char *)input, input_len);
return *rval_len ? 1 : 0;
}
@@ -807,12 +797,6 @@
msre_fn_escapeSeqDecode_execute
);
- /* sqlHexDecode */
- msre_engine_tfn_register(engine,
- "sqlHexDecode",
- msre_fn_sqlHexDecode_execute
- );
-
/* hexDecode */
msre_engine_tfn_register(engine,
"hexDecode",
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/apache2/re_variables.c
^
|
@@ -1888,7 +1888,7 @@
else
rvar->is_negated = 1;
- apr_table_addn(vartab, rvar->name, (void *)rvar);
+ apr_table_setn(vartab, rvar->name, (void *)rvar);
if (msr->txcfg->debuglog_level >= 9) {
msr_log(msr, 9, "Set variable \"%s\" value \"%s\" size %d to collection.", rvar->name, rvar->value, rvar->value_len);
@@ -1948,7 +1948,7 @@
else
rvar->is_negated = 1;
- apr_table_addn(vartab, rvar->name, (void *)rvar);
+ apr_table_setn(vartab, rvar->name, (void *)rvar);
if (msr->txcfg->debuglog_level >= 9) {
msr_log(msr, 9, "Set variable \"%s\" value \"%s\" size %d to collection.", rvar->name, rvar->value, rvar->value_len);
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/configure
^
|
@@ -12294,21 +12294,13 @@
freebsdos=true
;;
*-*-netbsd*)
- echo "Checking plataform... Identified as NetBSD"
+ echo "Checking plataform... Identified as FreeBSD"
netbsdos=true
;;
*-*-openbsd*)
- echo "Checking plataform... Identified as OpenBSD"
+ echo "Checking plataform... Identified as FreeBSD"
openbsdos=true
;;
- *-*-kfreebsd*)
- echo "Checking plataform... Identified as kFreeBSD, treating as linux"
- linuxos=true
- ;;
- *-*-gnu*.*)
- echo "Checking plataform... Identified as HURD, treating as linux"
- linuxos=true
- ;;
*)
echo "Unknown CANONICAL_HOST $host"
exit
@@ -12897,7 +12889,7 @@
fi
fi
-MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api"
+#MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api"
APXS_WRAPPER=build/apxs-wrapper
APXS_EXTRA_CFLAGS=""
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/configure.ac
^
|
@@ -110,21 +110,13 @@
freebsdos=true
;;
*-*-netbsd*)
- echo "Checking plataform... Identified as NetBSD"
+ echo "Checking plataform... Identified as FreeBSD"
netbsdos=true
;;
*-*-openbsd*)
- echo "Checking plataform... Identified as OpenBSD"
+ echo "Checking plataform... Identified as FreeBSD"
openbsdos=true
;;
- *-*-kfreebsd*)
- echo "Checking plataform... Identified as kFreeBSD, treating as linux"
- linuxos=true
- ;;
- *-*-gnu*.*)
- echo "Checking plataform... Identified as HURD, treating as linux"
- linuxos=true
- ;;
*)
echo "Unknown CANONICAL_HOST $host"
exit
@@ -557,7 +549,7 @@
fi
fi
-MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api"
+#MODSEC_EXTRA_CFLAGS="$pcre_study $pcre_match_limit $pcre_match_limit_recursion $debug_conf $debug_cache $debug_acmp $debug_mem $perf_meas $modsec_api"
APXS_WRAPPER=build/apxs-wrapper
APXS_EXTRA_CFLAGS=""
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/doc/Reference_Manual.html
^
|
@@ -9,30 +9,26 @@
<meta name="generator" content="MediaWiki 1.15.1">
<meta name="robots" content="noindex,follow">
<meta name="keywords" content="Reference Manual">
- <link rel="alternate" type="application/x-wiki" title="Edit"
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit">
- <link rel="edit" title="Edit"
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit">
- <link rel="shortcut icon" href="https://sourceforge.net/favicon.ico">
+ <link rel="shortcut icon" href="http://sourceforge.net/favicon.ico">
<link rel="search" type="application/opensearchdescription+xml"
-href="https://sourceforge.net/apps/mediawiki/mod-security/opensearch_desc.php"
+href="http://sourceforge.net/apps/mediawiki/mod-security/opensearch_desc.php"
title="mod-security (en)">
<link rel="alternate" type="application/rss+xml" title="mod-security
RSS Feed"
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=rss">
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=rss">
<link rel="alternate" type="application/atom+xml" title="mod-security
Atom Feed"
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=atom">
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges&feed=atom">
<title>SourceForge.net: Reference Manual - mod-security</title>
<link rel="stylesheet" href="Reference_Manual_files/commonPrint.css"
type="text/css">
- <link rel="stylesheet" href="Reference_Manual_files/index_002.css"
+ <link rel="stylesheet" href="Reference_Manual_files/index_003.css"
type="text/css">
<link rel="stylesheet" href="Reference_Manual_files/index.css"
type="text/css">
<link rel="stylesheet" href="Reference_Manual_files/index_004.css"
type="text/css">
- <link rel="stylesheet" href="Reference_Manual_files/index_003.css"
+ <link rel="stylesheet" href="Reference_Manual_files/index_002.css"
type="text/css">
<!--[if lt IE 7]><script type="text/javascript" src="/apps/mediawiki/mod-security/skins/common/IEFixes.js?207"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
@@ -45,7 +41,7 @@
var wgScript = "/apps/mediawiki/mod-security/index.php";
var wgVariantArticlePath = false;
var wgActionPaths = {};
- var wgServer = "https://sourceforge.net";
+ var wgServer = "http://sourceforge.net";
var wgCanonicalNamespace = "";
var wgCanonicalSpecialPageName = false;
var wgNamespaceNumber = 0;
@@ -54,12 +50,12 @@
var wgAction = "view";
var wgArticleId = "12";
var wgIsArticle = true;
- var wgUserName = "Brenosilva";
- var wgUserGroups = ["admin", "editor", "*", "user", "autoconfirmed"];
+ var wgUserName = null;
+ var wgUserGroups = null;
var wgUserLanguage = "en";
var wgContentLanguage = "en";
var wgBreakFrames = false;
- var wgCurRevisionId = 507;
+ var wgCurRevisionId = 441;
var wgVersion = "1.15.1";
var wgEnableAPI = true;
var wgEnableWriteAPI = true;
@@ -67,13 +63,11 @@
var wgDigitTransformTable = ["", ""];
var wgRestrictionEdit = [];
var wgRestrictionMove = [];
- var wgAjaxWatch = {"watchMsg": "Watch", "unwatchMsg": "Unwatch", "watchingMsg": "Watching…", "unwatchingMsg": "Unwatching…"};
/*]]>*/</script>
<script type="text/javascript" src="Reference_Manual_files/wikibits.js"><!-- wikibits js --></script>
<!-- Head Scripts -->
<script type="text/javascript" src="Reference_Manual_files/ajax.js"></script>
- <script type="text/javascript" src="Reference_Manual_files/ajaxwatch.js"></script>
<script type="text/javascript" src="Reference_Manual_files/index.php"><!-- site js --></script>
@@ -100,9 +94,9 @@
class="tocnumber">1</span> <span class="toctext">ModSecurity® Reference
Manual</span></a>
<ul>
-<li class="toclevel-2"><a href="#Current_as_of_v2.5.13_v2.6_and_v2.7"><span
- class="tocnumber">1.1</span> <span class="toctext">Current as of
-v2.5.13 v2.6 and v2.7</span></a>
+<li class="toclevel-2"><a href="#Current_as_of_v2.5.13_and_v2.6"><span
+class="tocnumber">1.1</span> <span class="toctext">Current as of v2.5.13
+ and v2.6</span></a>
<ul>
<li class="toclevel-3"><a
href="#Copyright_.C2.A9_2004-2011_Trustwave_Holdings.2C_Inc."><span
@@ -250,116 +244,96 @@
class="tocnumber">6.20</span> <span class="toctext">SecDefaultAction</span></a></li>
<li class="toclevel-2"><a href="#SecDisableBackendCompression"><span
class="tocnumber">6.21</span> <span class="toctext">SecDisableBackendCompression</span></a></li>
-<li class="toclevel-2"><a href="#SecEncryptionEngine"><span
-class="tocnumber">6.22</span> <span class="toctext">SecEncryptionEngine</span></a></li>
-<li class="toclevel-2"><a href="#SecEncryptionKey"><span
-class="tocnumber">6.23</span> <span class="toctext">SecEncryptionKey</span></a></li>
-<li class="toclevel-2"><a href="#SecEncryptionParam"><span
-class="tocnumber">6.24</span> <span class="toctext">SecEncryptionParam</span></a></li>
-<li class="toclevel-2"><a href="#SecEncryptionMethodRx"><span
-class="tocnumber">6.25</span> <span class="toctext">SecEncryptionMethodRx</span></a></li>
-<li class="toclevel-2"><a href="#SecEncryptionMethodPm"><span
-class="tocnumber">6.26</span> <span class="toctext">SecEncryptionMethodPm</span></a></li>
-<li class="toclevel-2"><a href="#SecGeoLookupDb"><span class="tocnumber">6.27</span>
+<li class="toclevel-2"><a href="#SecGeoLookupDb"><span class="tocnumber">6.22</span>
<span class="toctext">SecGeoLookupDb</span></a></li>
-<li class="toclevel-2"><a href="#SecGsbLookupDb"><span class="tocnumber">6.28</span>
+<li class="toclevel-2"><a href="#SecGsbLookupDb"><span class="tocnumber">6.23</span>
<span class="toctext">SecGsbLookupDb</span></a></li>
-<li class="toclevel-2"><a href="#SecGuardianLog"><span class="tocnumber">6.29</span>
+<li class="toclevel-2"><a href="#SecGuardianLog"><span class="tocnumber">6.24</span>
<span class="toctext">SecGuardianLog</span></a></li>
-<li class="toclevel-2"><a href="#SecHttpBlKey"><span class="tocnumber">6.30</span>
+<li class="toclevel-2"><a href="#SecHttpBlKey"><span class="tocnumber">6.25</span>
<span class="toctext">SecHttpBlKey</span></a></li>
<li class="toclevel-2"><a href="#SecInterceptOnError"><span
-class="tocnumber">6.31</span> <span class="toctext">SecInterceptOnError</span></a></li>
-<li class="toclevel-2"><a href="#SecMarker"><span class="tocnumber">6.32</span>
+class="tocnumber">6.26</span> <span class="toctext">SecInterceptOnError</span></a></li>
+<li class="toclevel-2"><a href="#SecMarker"><span class="tocnumber">6.27</span>
<span class="toctext">SecMarker</span></a></li>
<li class="toclevel-2"><a href="#SecPcreMatchLimit"><span
-class="tocnumber">6.33</span> <span class="toctext">SecPcreMatchLimit</span></a></li>
+class="tocnumber">6.28</span> <span class="toctext">SecPcreMatchLimit</span></a></li>
<li class="toclevel-2"><a href="#SecPcreMatchLimitRecursion"><span
-class="tocnumber">6.34</span> <span class="toctext">SecPcreMatchLimitRecursion</span></a></li>
-<li class="toclevel-2"><a href="#SecPdfProtect"><span class="tocnumber">6.35</span>
+class="tocnumber">6.29</span> <span class="toctext">SecPcreMatchLimitRecursion</span></a></li>
+<li class="toclevel-2"><a href="#SecPdfProtect"><span class="tocnumber">6.30</span>
<span class="toctext">SecPdfProtect</span></a></li>
<li class="toclevel-2"><a href="#SecPdfProtectMethod"><span
-class="tocnumber">6.36</span> <span class="toctext">SecPdfProtectMethod</span></a></li>
+class="tocnumber">6.31</span> <span class="toctext">SecPdfProtectMethod</span></a></li>
<li class="toclevel-2"><a href="#SecPdfProtectSecret"><span
-class="tocnumber">6.37</span> <span class="toctext">SecPdfProtectSecret</span></a></li>
+class="tocnumber">6.32</span> <span class="toctext">SecPdfProtectSecret</span></a></li>
<li class="toclevel-2"><a href="#SecPdfProtectTimeout"><span
-class="tocnumber">6.38</span> <span class="toctext">SecPdfProtectTimeout</span></a></li>
+class="tocnumber">6.33</span> <span class="toctext">SecPdfProtectTimeout</span></a></li>
<li class="toclevel-2"><a href="#SecPdfProtectTokenName"><span
-class="tocnumber">6.39</span> <span class="toctext">SecPdfProtectTokenName</span></a></li>
+class="tocnumber">6.34</span> <span class="toctext">SecPdfProtectTokenName</span></a></li>
<li class="toclevel-2"><a href="#SecReadStateLimit"><span
-class="tocnumber">6.40</span> <span class="toctext">SecReadStateLimit</span></a></li>
-<li class="toclevel-2"><a href="#SecSensorId"><span class="tocnumber">6.41</span>
- <span class="toctext">SecSensorId</span></a></li>
+class="tocnumber">6.35</span> <span class="toctext">SecReadStateLimit</span></a></li>
<li class="toclevel-2"><a href="#SecWriteStateLimit"><span
-class="tocnumber">6.42</span> <span class="toctext">SecWriteStateLimit</span></a></li>
+class="tocnumber">6.36</span> <span class="toctext">SecWriteStateLimit</span></a></li>
<li class="toclevel-2"><a href="#SecRequestBodyAccess"><span
-class="tocnumber">6.43</span> <span class="toctext">SecRequestBodyAccess</span></a></li>
+class="tocnumber">6.37</span> <span class="toctext">SecRequestBodyAccess</span></a></li>
<li class="toclevel-2"><a href="#SecRequestBodyInMemoryLimit"><span
-class="tocnumber">6.44</span> <span class="toctext">SecRequestBodyInMemoryLimit</span></a></li>
+class="tocnumber">6.38</span> <span class="toctext">SecRequestBodyInMemoryLimit</span></a></li>
<li class="toclevel-2"><a href="#SecRequestBodyLimit"><span
-class="tocnumber">6.45</span> <span class="toctext">SecRequestBodyLimit</span></a></li>
+class="tocnumber">6.39</span> <span class="toctext">SecRequestBodyLimit</span></a></li>
<li class="toclevel-2"><a href="#SecRequestBodyNoFilesLimit"><span
-class="tocnumber">6.46</span> <span class="toctext">SecRequestBodyNoFilesLimit</span></a></li>
+class="tocnumber">6.40</span> <span class="toctext">SecRequestBodyNoFilesLimit</span></a></li>
<li class="toclevel-2"><a href="#SecRequestBodyLimitAction"><span
-class="tocnumber">6.47</span> <span class="toctext">SecRequestBodyLimitAction</span></a></li>
+class="tocnumber">6.41</span> <span class="toctext">SecRequestBodyLimitAction</span></a></li>
<li class="toclevel-2"><a href="#SecResponseBodyLimit"><span
-class="tocnumber">6.48</span> <span class="toctext">SecResponseBodyLimit</span></a></li>
+class="tocnumber">6.42</span> <span class="toctext">SecResponseBodyLimit</span></a></li>
<li class="toclevel-2"><a href="#SecResponseBodyLimitAction"><span
-class="tocnumber">6.49</span> <span class="toctext">SecResponseBodyLimitAction</span></a></li>
+class="tocnumber">6.43</span> <span class="toctext">SecResponseBodyLimitAction</span></a></li>
<li class="toclevel-2"><a href="#SecResponseBodyMimeType"><span
-class="tocnumber">6.50</span> <span class="toctext">SecResponseBodyMimeType</span></a></li>
+class="tocnumber">6.44</span> <span class="toctext">SecResponseBodyMimeType</span></a></li>
<li class="toclevel-2"><a href="#SecResponseBodyMimeTypesClear"><span
-class="tocnumber">6.51</span> <span class="toctext">SecResponseBodyMimeTypesClear</span></a></li>
+class="tocnumber">6.45</span> <span class="toctext">SecResponseBodyMimeTypesClear</span></a></li>
<li class="toclevel-2"><a href="#SecResponseBodyAccess"><span
-class="tocnumber">6.52</span> <span class="toctext">SecResponseBodyAccess</span></a></li>
-<li class="toclevel-2"><a href="#SecRule"><span class="tocnumber">6.53</span>
+class="tocnumber">6.46</span> <span class="toctext">SecResponseBodyAccess</span></a></li>
+<li class="toclevel-2"><a href="#SecRule"><span class="tocnumber">6.47</span>
<span class="toctext">SecRule</span></a></li>
<li class="toclevel-2"><a href="#SecRuleInheritance"><span
-class="tocnumber">6.54</span> <span class="toctext">SecRuleInheritance</span></a></li>
-<li class="toclevel-2"><a href="#SecRuleEngine"><span class="tocnumber">6.55</span>
+class="tocnumber">6.48</span> <span class="toctext">SecRuleInheritance</span></a></li>
+<li class="toclevel-2"><a href="#SecRuleEngine"><span class="tocnumber">6.49</span>
<span class="toctext">SecRuleEngine</span></a></li>
-<li class="toclevel-2"><a href="#SecRulePerfTime"><span
-class="tocnumber">6.56</span> <span class="toctext">SecRulePerfTime</span></a></li>
<li class="toclevel-2"><a href="#SecRuleRemoveById"><span
-class="tocnumber">6.57</span> <span class="toctext">SecRuleRemoveById</span></a></li>
+class="tocnumber">6.50</span> <span class="toctext">SecRuleRemoveById</span></a></li>
<li class="toclevel-2"><a href="#SecRuleRemoveByMsg"><span
-class="tocnumber">6.58</span> <span class="toctext">SecRuleRemoveByMsg</span></a></li>
+class="tocnumber">6.51</span> <span class="toctext">SecRuleRemoveByMsg</span></a></li>
<li class="toclevel-2"><a href="#SecRuleRemoveByTag"><span
-class="tocnumber">6.59</span> <span class="toctext">SecRuleRemoveByTag</span></a></li>
-<li class="toclevel-2"><a href="#SecRuleScript"><span class="tocnumber">6.60</span>
+class="tocnumber">6.52</span> <span class="toctext">SecRuleRemoveByTag</span></a></li>
+<li class="toclevel-2"><a href="#SecRuleScript"><span class="tocnumber">6.53</span>
<span class="toctext">SecRuleScript</span></a></li>
<li class="toclevel-2"><a href="#SecRuleUpdateActionById"><span
-class="tocnumber">6.61</span> <span class="toctext">SecRuleUpdateActionById</span></a></li>
+class="tocnumber">6.54</span> <span class="toctext">SecRuleUpdateActionById</span></a></li>
<li class="toclevel-2"><a href="#SecRuleUpdateTargetById"><span
-class="tocnumber">6.62</span> <span class="toctext">SecRuleUpdateTargetById</span></a></li>
-<li class="toclevel-2"><a href="#SecRuleUpdateTargetByMsg"><span
-class="tocnumber">6.63</span> <span class="toctext">SecRuleUpdateTargetByMsg</span></a></li>
-<li class="toclevel-2"><a href="#SecRuleUpdateTargetByTag"><span
-class="tocnumber">6.64</span> <span class="toctext">SecRuleUpdateTargetByTag</span></a></li>
+class="tocnumber">6.55</span> <span class="toctext">SecRuleUpdateTargetById</span></a></li>
<li class="toclevel-2"><a href="#SecServerSignature"><span
-class="tocnumber">6.65</span> <span class="toctext">SecServerSignature</span></a></li>
+class="tocnumber">6.56</span> <span class="toctext">SecServerSignature</span></a></li>
<li class="toclevel-2"><a href="#SecStreamInBodyInspection"><span
-class="tocnumber">6.66</span> <span class="toctext">SecStreamInBodyInspection</span></a></li>
+class="tocnumber">6.57</span> <span class="toctext">SecStreamInBodyInspection</span></a></li>
<li class="toclevel-2"><a href="#SecStreamOutBodyInspection"><span
-class="tocnumber">6.67</span> <span class="toctext">SecStreamOutBodyInspection</span></a></li>
-<li class="toclevel-2"><a href="#SecTmpDir"><span class="tocnumber">6.68</span>
+class="tocnumber">6.58</span> <span class="toctext">SecStreamOutBodyInspection</span></a></li>
+<li class="toclevel-2"><a href="#SecTmpDir"><span class="tocnumber">6.59</span>
<span class="toctext">SecTmpDir</span></a></li>
<li class="toclevel-2"><a href="#SecUnicodeMapFile"><span
-class="tocnumber">6.69</span> <span class="toctext">SecUnicodeMapFile</span></a></li>
+class="tocnumber">6.60</span> <span class="toctext">SecUnicodeMapFile</span></a></li>
<li class="toclevel-2"><a href="#SecUnicodeCodePage"><span
-class="tocnumber">6.70</span> <span class="toctext">SecUnicodeCodePage</span></a></li>
-<li class="toclevel-2"><a href="#SecUploadDir"><span class="tocnumber">6.71</span>
+class="tocnumber">6.61</span> <span class="toctext">SecUnicodeCodePage</span></a></li>
+<li class="toclevel-2"><a href="#SecUploadDir"><span class="tocnumber">6.62</span>
<span class="toctext">SecUploadDir</span></a></li>
<li class="toclevel-2"><a href="#SecUploadFileLimit"><span
-class="tocnumber">6.72</span> <span class="toctext">SecUploadFileLimit</span></a></li>
+class="tocnumber">6.63</span> <span class="toctext">SecUploadFileLimit</span></a></li>
<li class="toclevel-2"><a href="#SecUploadFileMode"><span
-class="tocnumber">6.73</span> <span class="toctext">SecUploadFileMode</span></a></li>
+class="tocnumber">6.64</span> <span class="toctext">SecUploadFileMode</span></a></li>
<li class="toclevel-2"><a href="#SecUploadKeepFiles"><span
-class="tocnumber">6.74</span> <span class="toctext">SecUploadKeepFiles</span></a></li>
-<li class="toclevel-2"><a href="#SecWebAppId"><span class="tocnumber">6.75</span>
+class="tocnumber">6.65</span> <span class="toctext">SecUploadKeepFiles</span></a></li>
+<li class="toclevel-2"><a href="#SecWebAppId"><span class="tocnumber">6.66</span>
<span class="toctext">SecWebAppId</span></a></li>
-<li class="toclevel-2"><a href="#SecCollectionTimeout"><span
-class="tocnumber">6.76</span> <span class="toctext">SecCollectionTimeout</span></a></li>
</ul>
</li>
<li class="toclevel-1"><a href="#Processing_Phases"><span
@@ -451,131 +425,127 @@
<span class="toctext">PERF_PHASE4</span></a></li>
<li class="toclevel-2"><a href="#PERF_PHASE5"><span class="tocnumber">8.35</span>
<span class="toctext">PERF_PHASE5</span></a></li>
-<li class="toclevel-2"><a href="#PERF_RULES"><span class="tocnumber">8.36</span>
- <span class="toctext">PERF_RULES</span></a></li>
-<li class="toclevel-2"><a href="#PERF_SREAD"><span class="tocnumber">8.37</span>
+<li class="toclevel-2"><a href="#PERF_SREAD"><span class="tocnumber">8.36</span>
<span class="toctext">PERF_SREAD</span></a></li>
-<li class="toclevel-2"><a href="#PERF_SWRITE"><span class="tocnumber">8.38</span>
+<li class="toclevel-2"><a href="#PERF_SWRITE"><span class="tocnumber">8.37</span>
<span class="toctext">PERF_SWRITE</span></a></li>
-<li class="toclevel-2"><a href="#QUERY_STRING"><span class="tocnumber">8.39</span>
+<li class="toclevel-2"><a href="#QUERY_STRING"><span class="tocnumber">8.38</span>
<span class="toctext">QUERY_STRING</span></a></li>
-<li class="toclevel-2"><a href="#REMOTE_ADDR"><span class="tocnumber">8.40</span>
+<li class="toclevel-2"><a href="#REMOTE_ADDR"><span class="tocnumber">8.39</span>
<span class="toctext">REMOTE_ADDR</span></a></li>
-<li class="toclevel-2"><a href="#REMOTE_HOST"><span class="tocnumber">8.41</span>
+<li class="toclevel-2"><a href="#REMOTE_HOST"><span class="tocnumber">8.40</span>
<span class="toctext">REMOTE_HOST</span></a></li>
-<li class="toclevel-2"><a href="#REMOTE_PORT"><span class="tocnumber">8.42</span>
+<li class="toclevel-2"><a href="#REMOTE_PORT"><span class="tocnumber">8.41</span>
<span class="toctext">REMOTE_PORT</span></a></li>
-<li class="toclevel-2"><a href="#REMOTE_USER"><span class="tocnumber">8.43</span>
+<li class="toclevel-2"><a href="#REMOTE_USER"><span class="tocnumber">8.42</span>
<span class="toctext">REMOTE_USER</span></a></li>
-<li class="toclevel-2"><a href="#REQBODY_ERROR"><span class="tocnumber">8.44</span>
+<li class="toclevel-2"><a href="#REQBODY_ERROR"><span class="tocnumber">8.43</span>
<span class="toctext">REQBODY_ERROR</span></a></li>
<li class="toclevel-2"><a href="#REQBODY_ERROR_MSG"><span
-class="tocnumber">8.45</span> <span class="toctext">REQBODY_ERROR_MSG</span></a></li>
+class="tocnumber">8.44</span> <span class="toctext">REQBODY_ERROR_MSG</span></a></li>
<li class="toclevel-2"><a href="#REQBODY_PROCESSOR"><span
-class="tocnumber">8.46</span> <span class="toctext">REQBODY_PROCESSOR</span></a></li>
+class="tocnumber">8.45</span> <span class="toctext">REQBODY_PROCESSOR</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_BASENAME"><span
-class="tocnumber">8.47</span> <span class="toctext">REQUEST_BASENAME</span></a></li>
-<li class="toclevel-2"><a href="#REQUEST_BODY"><span class="tocnumber">8.48</span>
+class="tocnumber">8.46</span> <span class="toctext">REQUEST_BASENAME</span></a></li>
+<li class="toclevel-2"><a href="#REQUEST_BODY"><span class="tocnumber">8.47</span>
<span class="toctext">REQUEST_BODY</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_BODY_LENGTH"><span
-class="tocnumber">8.49</span> <span class="toctext">REQUEST_BODY_LENGTH</span></a></li>
+class="tocnumber">8.48</span> <span class="toctext">REQUEST_BODY_LENGTH</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_COOKIES"><span
-class="tocnumber">8.50</span> <span class="toctext">REQUEST_COOKIES</span></a></li>
+class="tocnumber">8.49</span> <span class="toctext">REQUEST_COOKIES</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_COOKIES_NAMES"><span
-class="tocnumber">8.51</span> <span class="toctext">REQUEST_COOKIES_NAMES</span></a></li>
+class="tocnumber">8.50</span> <span class="toctext">REQUEST_COOKIES_NAMES</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_FILENAME"><span
-class="tocnumber">8.52</span> <span class="toctext">REQUEST_FILENAME</span></a></li>
+class="tocnumber">8.51</span> <span class="toctext">REQUEST_FILENAME</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_HEADERS"><span
-class="tocnumber">8.53</span> <span class="toctext">REQUEST_HEADERS</span></a></li>
+class="tocnumber">8.52</span> <span class="toctext">REQUEST_HEADERS</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_HEADERS_NAMES"><span
-class="tocnumber">8.54</span> <span class="toctext">REQUEST_HEADERS_NAMES</span></a></li>
-<li class="toclevel-2"><a href="#REQUEST_LINE"><span class="tocnumber">8.55</span>
+class="tocnumber">8.53</span> <span class="toctext">REQUEST_HEADERS_NAMES</span></a></li>
+<li class="toclevel-2"><a href="#REQUEST_LINE"><span class="tocnumber">8.54</span>
<span class="toctext">REQUEST_LINE</span></a></li>
-<li class="toclevel-2"><a href="#REQUEST_METHOD"><span class="tocnumber">8.56</span>
+<li class="toclevel-2"><a href="#REQUEST_METHOD"><span class="tocnumber">8.55</span>
<span class="toctext">REQUEST_METHOD</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_PROTOCOL"><span
-class="tocnumber">8.57</span> <span class="toctext">REQUEST_PROTOCOL</span></a></li>
-<li class="toclevel-2"><a href="#REQUEST_URI"><span class="tocnumber">8.58</span>
+class="tocnumber">8.56</span> <span class="toctext">REQUEST_PROTOCOL</span></a></li>
+<li class="toclevel-2"><a href="#REQUEST_URI"><span class="tocnumber">8.57</span>
<span class="toctext">REQUEST_URI</span></a></li>
<li class="toclevel-2"><a href="#REQUEST_URI_RAW"><span
-class="tocnumber">8.59</span> <span class="toctext">REQUEST_URI_RAW</span></a></li>
-<li class="toclevel-2"><a href="#RESPONSE_BODY"><span class="tocnumber">8.60</span>
+class="tocnumber">8.58</span> <span class="toctext">REQUEST_URI_RAW</span></a></li>
+<li class="toclevel-2"><a href="#RESPONSE_BODY"><span class="tocnumber">8.59</span>
<span class="toctext">RESPONSE_BODY</span></a></li>
<li class="toclevel-2"><a href="#RESPONSE_CONTENT_LENGTH"><span
-class="tocnumber">8.61</span> <span class="toctext">RESPONSE_CONTENT_LENGTH</span></a></li>
+class="tocnumber">8.60</span> <span class="toctext">RESPONSE_CONTENT_LENGTH</span></a></li>
<li class="toclevel-2"><a href="#RESPONSE_CONTENT_TYPE"><span
-class="tocnumber">8.62</span> <span class="toctext">RESPONSE_CONTENT_TYPE</span></a></li>
+class="tocnumber">8.61</span> <span class="toctext">RESPONSE_CONTENT_TYPE</span></a></li>
<li class="toclevel-2"><a href="#RESPONSE_HEADERS"><span
-class="tocnumber">8.63</span> <span class="toctext">RESPONSE_HEADERS</span></a></li>
+class="tocnumber">8.62</span> <span class="toctext">RESPONSE_HEADERS</span></a></li>
<li class="toclevel-2"><a href="#RESPONSE_HEADERS_NAMES"><span
-class="tocnumber">8.64</span> <span class="toctext">RESPONSE_HEADERS_NAMES</span></a></li>
+class="tocnumber">8.63</span> <span class="toctext">RESPONSE_HEADERS_NAMES</span></a></li>
<li class="toclevel-2"><a href="#RESPONSE_PROTOCOL"><span
-class="tocnumber">8.65</span> <span class="toctext">RESPONSE_PROTOCOL</span></a></li>
+class="tocnumber">8.64</span> <span class="toctext">RESPONSE_PROTOCOL</span></a></li>
<li class="toclevel-2"><a href="#RESPONSE_STATUS"><span
-class="tocnumber">8.66</span> <span class="toctext">RESPONSE_STATUS</span></a></li>
-<li class="toclevel-2"><a href="#RULE"><span class="tocnumber">8.67</span>
+class="tocnumber">8.65</span> <span class="toctext">RESPONSE_STATUS</span></a></li>
+<li class="toclevel-2"><a href="#RULE"><span class="tocnumber">8.66</span>
<span class="toctext">RULE</span></a></li>
<li class="toclevel-2"><a href="#SCRIPT_BASENAME"><span
-class="tocnumber">8.68</span> <span class="toctext">SCRIPT_BASENAME</span></a></li>
+class="tocnumber">8.67</span> <span class="toctext">SCRIPT_BASENAME</span></a></li>
<li class="toclevel-2"><a href="#SCRIPT_FILENAME"><span
-class="tocnumber">8.69</span> <span class="toctext">SCRIPT_FILENAME</span></a></li>
-<li class="toclevel-2"><a href="#SCRIPT_GID"><span class="tocnumber">8.70</span>
+class="tocnumber">8.68</span> <span class="toctext">SCRIPT_FILENAME</span></a></li>
+<li class="toclevel-2"><a href="#SCRIPT_GID"><span class="tocnumber">8.69</span>
<span class="toctext">SCRIPT_GID</span></a></li>
<li class="toclevel-2"><a href="#SCRIPT_GROUPNAME"><span
-class="tocnumber">8.71</span> <span class="toctext">SCRIPT_GROUPNAME</span></a></li>
-<li class="toclevel-2"><a href="#SCRIPT_MODE"><span class="tocnumber">8.72</span>
+class="tocnumber">8.70</span> <span class="toctext">SCRIPT_GROUPNAME</span></a></li>
+<li class="toclevel-2"><a href="#SCRIPT_MODE"><span class="tocnumber">8.71</span>
<span class="toctext">SCRIPT_MODE</span></a></li>
-<li class="toclevel-2"><a href="#SCRIPT_UID"><span class="tocnumber">8.73</span>
+<li class="toclevel-2"><a href="#SCRIPT_UID"><span class="tocnumber">8.72</span>
<span class="toctext">SCRIPT_UID</span></a></li>
<li class="toclevel-2"><a href="#SCRIPT_USERNAME"><span
-class="tocnumber">8.74</span> <span class="toctext">SCRIPT_USERNAME</span></a></li>
-<li class="toclevel-2"><a href="#SERVER_ADDR"><span class="tocnumber">8.75</span>
+class="tocnumber">8.73</span> <span class="toctext">SCRIPT_USERNAME</span></a></li>
+<li class="toclevel-2"><a href="#SERVER_ADDR"><span class="tocnumber">8.74</span>
<span class="toctext">SERVER_ADDR</span></a></li>
-<li class="toclevel-2"><a href="#SERVER_NAME"><span class="tocnumber">8.76</span>
+<li class="toclevel-2"><a href="#SERVER_NAME"><span class="tocnumber">8.75</span>
<span class="toctext">SERVER_NAME</span></a></li>
-<li class="toclevel-2"><a href="#SERVER_PORT"><span class="tocnumber">8.77</span>
+<li class="toclevel-2"><a href="#SERVER_PORT"><span class="tocnumber">8.76</span>
<span class="toctext">SERVER_PORT</span></a></li>
-<li class="toclevel-2"><a href="#SESSION"><span class="tocnumber">8.78</span>
+<li class="toclevel-2"><a href="#SESSION"><span class="tocnumber">8.77</span>
<span class="toctext">SESSION</span></a></li>
-<li class="toclevel-2"><a href="#SESSIONID"><span class="tocnumber">8.79</span>
+<li class="toclevel-2"><a href="#SESSIONID"><span class="tocnumber">8.78</span>
<span class="toctext">SESSIONID</span></a></li>
<li class="toclevel-2"><a href="#STREAM_INPUT_BODY"><span
-class="tocnumber">8.80</span> <span class="toctext">STREAM_INPUT_BODY</span></a></li>
+class="tocnumber">8.79</span> <span class="toctext">STREAM_INPUT_BODY</span></a></li>
<li class="toclevel-2"><a href="#STREAM_OUTPUT_BODY"><span
-class="tocnumber">8.81</span> <span class="toctext">STREAM_OUTPUT_BODY</span></a></li>
-<li class="toclevel-2"><a href="#TIME"><span class="tocnumber">8.82</span>
+class="tocnumber">8.80</span> <span class="toctext">STREAM_OUTPUT_BODY</span></a></li>
+<li class="toclevel-2"><a href="#TIME"><span class="tocnumber">8.81</span>
<span class="toctext">TIME</span></a></li>
-<li class="toclevel-2"><a href="#TIME_DAY"><span class="tocnumber">8.83</span>
+<li class="toclevel-2"><a href="#TIME_DAY"><span class="tocnumber">8.82</span>
<span class="toctext">TIME_DAY</span></a></li>
-<li class="toclevel-2"><a href="#TIME_EPOCH"><span class="tocnumber">8.84</span>
+<li class="toclevel-2"><a href="#TIME_EPOCH"><span class="tocnumber">8.83</span>
<span class="toctext">TIME_EPOCH</span></a></li>
-<li class="toclevel-2"><a href="#TIME_HOUR"><span class="tocnumber">8.85</span>
+<li class="toclevel-2"><a href="#TIME_HOUR"><span class="tocnumber">8.84</span>
<span class="toctext">TIME_HOUR</span></a></li>
-<li class="toclevel-2"><a href="#TIME_MIN"><span class="tocnumber">8.86</span>
+<li class="toclevel-2"><a href="#TIME_MIN"><span class="tocnumber">8.85</span>
<span class="toctext">TIME_MIN</span></a></li>
-<li class="toclevel-2"><a href="#TIME_MON"><span class="tocnumber">8.87</span>
+<li class="toclevel-2"><a href="#TIME_MON"><span class="tocnumber">8.86</span>
<span class="toctext">TIME_MON</span></a></li>
-<li class="toclevel-2"><a href="#TIME_SEC"><span class="tocnumber">8.88</span>
+<li class="toclevel-2"><a href="#TIME_SEC"><span class="tocnumber">8.87</span>
<span class="toctext">TIME_SEC</span></a></li>
-<li class="toclevel-2"><a href="#TIME_WDAY"><span class="tocnumber">8.89</span>
+<li class="toclevel-2"><a href="#TIME_WDAY"><span class="tocnumber">8.88</span>
<span class="toctext">TIME_WDAY</span></a></li>
-<li class="toclevel-2"><a href="#TIME_YEAR"><span class="tocnumber">8.90</span>
+<li class="toclevel-2"><a href="#TIME_YEAR"><span class="tocnumber">8.89</span>
<span class="toctext">TIME_YEAR</span></a></li>
-<li class="toclevel-2"><a href="#TX"><span class="tocnumber">8.91</span>
+<li class="toclevel-2"><a href="#TX"><span class="tocnumber">8.90</span>
<span class="toctext">TX</span></a></li>
-<li class="toclevel-2"><a href="#UNIQUE_ID"><span class="tocnumber">8.92</span>
+<li class="toclevel-2"><a href="#UNIQUE_ID"><span class="tocnumber">8.91</span>
<span class="toctext">UNIQUE_ID</span></a></li>
<li class="toclevel-2"><a href="#URLENCODED_ERROR"><span
-class="tocnumber">8.93</span> <span class="toctext">URLENCODED_ERROR</span></a></li>
-<li class="toclevel-2"><a href="#USERID"><span class="tocnumber">8.94</span>
+class="tocnumber">8.92</span> <span class="toctext">URLENCODED_ERROR</span></a></li>
+<li class="toclevel-2"><a href="#USERID"><span class="tocnumber">8.93</span>
<span class="toctext">USERID</span></a></li>
-<li class="toclevel-2"><a href="#USERAGENT_IP"><span class="tocnumber">8.95</span>
- <span class="toctext">USERAGENT_IP</span></a></li>
-<li class="toclevel-2"><a href="#WEBAPPID"><span class="tocnumber">8.96</span>
+<li class="toclevel-2"><a href="#WEBAPPID"><span class="tocnumber">8.94</span>
<span class="toctext">WEBAPPID</span></a></li>
<li class="toclevel-2"><a href="#WEBSERVER_ERROR_LOG"><span
-class="tocnumber">8.97</span> <span class="toctext">WEBSERVER_ERROR_LOG</span></a></li>
-<li class="toclevel-2"><a href="#XML"><span class="tocnumber">8.98</span>
+class="tocnumber">8.95</span> <span class="toctext">WEBSERVER_ERROR_LOG</span></a></li>
+<li class="toclevel-2"><a href="#XML"><span class="tocnumber">8.96</span>
<span class="toctext">XML</span></a></li>
</ul>
</li>
@@ -585,170 +555,160 @@
<ul>
<li class="toclevel-2"><a href="#base64Decode"><span class="tocnumber">9.1</span>
<span class="toctext">base64Decode</span></a></li>
-<li class="toclevel-2"><a href="#sqlHexDecode"><span class="tocnumber">9.2</span>
- <span class="toctext">sqlHexDecode</span></a></li>
<li class="toclevel-2"><a href="#base64DecodeExt"><span
-class="tocnumber">9.3</span> <span class="toctext">base64DecodeExt</span></a></li>
-<li class="toclevel-2"><a href="#base64Encode"><span class="tocnumber">9.4</span>
+class="tocnumber">9.2</span> <span class="toctext">base64DecodeExt</span></a></li>
+<li class="toclevel-2"><a href="#base64Encode"><span class="tocnumber">9.3</span>
<span class="toctext">base64Encode</span></a></li>
-<li class="toclevel-2"><a href="#cmdLine"><span class="tocnumber">9.5</span>
+<li class="toclevel-2"><a href="#cmdLine"><span class="tocnumber">9.4</span>
<span class="toctext">cmdLine</span></a></li>
<li class="toclevel-2"><a href="#compressWhitespace"><span
-class="tocnumber">9.6</span> <span class="toctext">compressWhitespace</span></a></li>
-<li class="toclevel-2"><a href="#cssDecode"><span class="tocnumber">9.7</span>
+class="tocnumber">9.5</span> <span class="toctext">compressWhitespace</span></a></li>
+<li class="toclevel-2"><a href="#cssDecode"><span class="tocnumber">9.6</span>
<span class="toctext">cssDecode</span></a></li>
<li class="toclevel-2"><a href="#escapeSeqDecode"><span
-class="tocnumber">9.8</span> <span class="toctext">escapeSeqDecode</span></a></li>
-<li class="toclevel-2"><a href="#hexDecode"><span class="tocnumber">9.9</span>
+class="tocnumber">9.7</span> <span class="toctext">escapeSeqDecode</span></a></li>
+<li class="toclevel-2"><a href="#hexDecode"><span class="tocnumber">9.8</span>
<span class="toctext">hexDecode</span></a></li>
-<li class="toclevel-2"><a href="#hexEncode"><span class="tocnumber">9.10</span>
+<li class="toclevel-2"><a href="#hexEncode"><span class="tocnumber">9.9</span>
<span class="toctext">hexEncode</span></a></li>
<li class="toclevel-2"><a href="#htmlEntityDecode"><span
-class="tocnumber">9.11</span> <span class="toctext">htmlEntityDecode</span></a></li>
-<li class="toclevel-2"><a href="#jsDecode"><span class="tocnumber">9.12</span>
+class="tocnumber">9.10</span> <span class="toctext">htmlEntityDecode</span></a></li>
+<li class="toclevel-2"><a href="#jsDecode"><span class="tocnumber">9.11</span>
<span class="toctext">jsDecode</span></a></li>
-<li class="toclevel-2"><a href="#length"><span class="tocnumber">9.13</span>
+<li class="toclevel-2"><a href="#length"><span class="tocnumber">9.12</span>
<span class="toctext">length</span></a></li>
-<li class="toclevel-2"><a href="#lowercase"><span class="tocnumber">9.14</span>
+<li class="toclevel-2"><a href="#lowercase"><span class="tocnumber">9.13</span>
<span class="toctext">lowercase</span></a></li>
-<li class="toclevel-2"><a href="#md5"><span class="tocnumber">9.15</span>
+<li class="toclevel-2"><a href="#md5"><span class="tocnumber">9.14</span>
<span class="toctext">md5</span></a></li>
-<li class="toclevel-2"><a href="#none"><span class="tocnumber">9.16</span>
+<li class="toclevel-2"><a href="#none"><span class="tocnumber">9.15</span>
<span class="toctext">none</span></a></li>
-<li class="toclevel-2"><a href="#normalisePath"><span class="tocnumber">9.17</span>
+<li class="toclevel-2"><a href="#normalisePath"><span class="tocnumber">9.16</span>
<span class="toctext">normalisePath</span></a></li>
<li class="toclevel-2"><a href="#normalisePathWin"><span
-class="tocnumber">9.18</span> <span class="toctext">normalisePathWin</span></a></li>
-<li class="toclevel-2"><a href="#parityEven7bit"><span class="tocnumber">9.19</span>
+class="tocnumber">9.17</span> <span class="toctext">normalisePathWin</span></a></li>
+<li class="toclevel-2"><a href="#parityEven7bit"><span class="tocnumber">9.18</span>
<span class="toctext">parityEven7bit</span></a></li>
-<li class="toclevel-2"><a href="#parityOdd7bit"><span class="tocnumber">9.20</span>
+<li class="toclevel-2"><a href="#parityOdd7bit"><span class="tocnumber">9.19</span>
<span class="toctext">parityOdd7bit</span></a></li>
-<li class="toclevel-2"><a href="#parityZero7bit"><span class="tocnumber">9.21</span>
+<li class="toclevel-2"><a href="#parityZero7bit"><span class="tocnumber">9.20</span>
<span class="toctext">parityZero7bit</span></a></li>
-<li class="toclevel-2"><a href="#removeNulls"><span class="tocnumber">9.22</span>
+<li class="toclevel-2"><a href="#removeNulls"><span class="tocnumber">9.21</span>
<span class="toctext">removeNulls</span></a></li>
<li class="toclevel-2"><a href="#removeWhitespace"><span
-class="tocnumber">9.23</span> <span class="toctext">removeWhitespace</span></a></li>
+class="tocnumber">9.22</span> <span class="toctext">removeWhitespace</span></a></li>
<li class="toclevel-2"><a href="#replaceComments"><span
-class="tocnumber">9.24</span> <span class="toctext">replaceComments</span></a></li>
+class="tocnumber">9.23</span> <span class="toctext">replaceComments</span></a></li>
<li class="toclevel-2"><a href="#removeCommentsChar"><span
-class="tocnumber">9.25</span> <span class="toctext">removeCommentsChar</span></a></li>
-<li class="toclevel-2"><a href="#removeComments"><span class="tocnumber">9.26</span>
+class="tocnumber">9.24</span> <span class="toctext">removeCommentsChar</span></a></li>
+<li class="toclevel-2"><a href="#removeComments"><span class="tocnumber">9.25</span>
<span class="toctext">removeComments</span></a></li>
-<li class="toclevel-2"><a href="#replaceNulls"><span class="tocnumber">9.27</span>
+<li class="toclevel-2"><a href="#replaceNulls"><span class="tocnumber">9.26</span>
<span class="toctext">replaceNulls</span></a></li>
-<li class="toclevel-2"><a href="#urlDecode"><span class="tocnumber">9.28</span>
+<li class="toclevel-2"><a href="#urlDecode"><span class="tocnumber">9.27</span>
<span class="toctext">urlDecode</span></a></li>
-<li class="toclevel-2"><a href="#urlDecodeUni"><span class="tocnumber">9.29</span>
+<li class="toclevel-2"><a href="#urlDecodeUni"><span class="tocnumber">9.28</span>
<span class="toctext">urlDecodeUni</span></a></li>
-<li class="toclevel-2"><a href="#urlEncode"><span class="tocnumber">9.30</span>
+<li class="toclevel-2"><a href="#urlEncode"><span class="tocnumber">9.29</span>
<span class="toctext">urlEncode</span></a></li>
-<li class="toclevel-2"><a href="#sha1"><span class="tocnumber">9.31</span>
+<li class="toclevel-2"><a href="#sha1"><span class="tocnumber">9.30</span>
<span class="toctext">sha1</span></a></li>
-<li class="toclevel-2"><a href="#trimLeft"><span class="tocnumber">9.32</span>
+<li class="toclevel-2"><a href="#trimLeft"><span class="tocnumber">9.31</span>
<span class="toctext">trimLeft</span></a></li>
-<li class="toclevel-2"><a href="#trimRight"><span class="tocnumber">9.33</span>
+<li class="toclevel-2"><a href="#trimRight"><span class="tocnumber">9.32</span>
<span class="toctext">trimRight</span></a></li>
-<li class="toclevel-2"><a href="#trim"><span class="tocnumber">9.34</span>
+<li class="toclevel-2"><a href="#trim"><span class="tocnumber">9.33</span>
<span class="toctext">trim</span></a></li>
</ul>
</li>
<li class="toclevel-1"><a href="#Actions"><span class="tocnumber">10</span>
<span class="toctext">Actions</span></a>
<ul>
-<li class="toclevel-2"><a href="#accuracy"><span class="tocnumber">10.1</span>
- <span class="toctext">accuracy</span></a></li>
-<li class="toclevel-2"><a href="#allow"><span class="tocnumber">10.2</span>
+<li class="toclevel-2"><a href="#allow"><span class="tocnumber">10.1</span>
<span class="toctext">allow</span></a></li>
-<li class="toclevel-2"><a href="#append"><span class="tocnumber">10.3</span>
+<li class="toclevel-2"><a href="#append"><span class="tocnumber">10.2</span>
<span class="toctext">append</span></a></li>
-<li class="toclevel-2"><a href="#auditlog"><span class="tocnumber">10.4</span>
+<li class="toclevel-2"><a href="#auditlog"><span class="tocnumber">10.3</span>
<span class="toctext">auditlog</span></a></li>
-<li class="toclevel-2"><a href="#block"><span class="tocnumber">10.5</span>
+<li class="toclevel-2"><a href="#block"><span class="tocnumber">10.4</span>
<span class="toctext">block</span></a></li>
-<li class="toclevel-2"><a href="#capture"><span class="tocnumber">10.6</span>
+<li class="toclevel-2"><a href="#capture"><span class="tocnumber">10.5</span>
<span class="toctext">capture</span></a></li>
-<li class="toclevel-2"><a href="#chain"><span class="tocnumber">10.7</span>
+<li class="toclevel-2"><a href="#chain"><span class="tocnumber">10.6</span>
<span class="toctext">chain</span></a></li>
-<li class="toclevel-2"><a href="#ctl"><span class="tocnumber">10.8</span>
+<li class="toclevel-2"><a href="#ctl"><span class="tocnumber">10.7</span>
<span class="toctext">ctl</span></a></li>
-<li class="toclevel-2"><a href="#deny"><span class="tocnumber">10.9</span>
+<li class="toclevel-2"><a href="#deny"><span class="tocnumber">10.8</span>
<span class="toctext">deny</span></a></li>
-<li class="toclevel-2"><a href="#deprecatevar"><span class="tocnumber">10.10</span>
+<li class="toclevel-2"><a href="#deprecatevar"><span class="tocnumber">10.9</span>
<span class="toctext">deprecatevar</span></a></li>
-<li class="toclevel-2"><a href="#drop"><span class="tocnumber">10.11</span>
+<li class="toclevel-2"><a href="#drop"><span class="tocnumber">10.10</span>
<span class="toctext">drop</span></a></li>
-<li class="toclevel-2"><a href="#exec"><span class="tocnumber">10.12</span>
+<li class="toclevel-2"><a href="#exec"><span class="tocnumber">10.11</span>
<span class="toctext">exec</span></a></li>
-<li class="toclevel-2"><a href="#expirevar"><span class="tocnumber">10.13</span>
+<li class="toclevel-2"><a href="#expirevar"><span class="tocnumber">10.12</span>
<span class="toctext">expirevar</span></a></li>
-<li class="toclevel-2"><a href="#id"><span class="tocnumber">10.14</span>
+<li class="toclevel-2"><a href="#id"><span class="tocnumber">10.13</span>
<span class="toctext">id</span></a></li>
-<li class="toclevel-2"><a href="#initcol"><span class="tocnumber">10.15</span>
+<li class="toclevel-2"><a href="#initcol"><span class="tocnumber">10.14</span>
<span class="toctext">initcol</span></a></li>
-<li class="toclevel-2"><a href="#log"><span class="tocnumber">10.16</span>
+<li class="toclevel-2"><a href="#log"><span class="tocnumber">10.15</span>
<span class="toctext">log</span></a></li>
-<li class="toclevel-2"><a href="#logdata"><span class="tocnumber">10.17</span>
+<li class="toclevel-2"><a href="#logdata"><span class="tocnumber">10.16</span>
<span class="toctext">logdata</span></a></li>
-<li class="toclevel-2"><a href="#maturity"><span class="tocnumber">10.18</span>
- <span class="toctext">maturity</span></a></li>
-<li class="toclevel-2"><a href="#msg"><span class="tocnumber">10.19</span>
+<li class="toclevel-2"><a href="#msg"><span class="tocnumber">10.17</span>
<span class="toctext">msg</span></a></li>
-<li class="toclevel-2"><a href="#multiMatch"><span class="tocnumber">10.20</span>
+<li class="toclevel-2"><a href="#multiMatch"><span class="tocnumber">10.18</span>
<span class="toctext">multiMatch</span></a></li>
-<li class="toclevel-2"><a href="#noauditlog"><span class="tocnumber">10.21</span>
+<li class="toclevel-2"><a href="#noauditlog"><span class="tocnumber">10.19</span>
<span class="toctext">noauditlog</span></a></li>
-<li class="toclevel-2"><a href="#nolog"><span class="tocnumber">10.22</span>
+<li class="toclevel-2"><a href="#nolog"><span class="tocnumber">10.20</span>
<span class="toctext">nolog</span></a></li>
-<li class="toclevel-2"><a href="#pass"><span class="tocnumber">10.23</span>
+<li class="toclevel-2"><a href="#pass"><span class="tocnumber">10.21</span>
<span class="toctext">pass</span></a></li>
-<li class="toclevel-2"><a href="#pause"><span class="tocnumber">10.24</span>
+<li class="toclevel-2"><a href="#pause"><span class="tocnumber">10.22</span>
<span class="toctext">pause</span></a></li>
-<li class="toclevel-2"><a href="#phase"><span class="tocnumber">10.25</span>
+<li class="toclevel-2"><a href="#phase"><span class="tocnumber">10.23</span>
<span class="toctext">phase</span></a></li>
-<li class="toclevel-2"><a href="#prepend"><span class="tocnumber">10.26</span>
+<li class="toclevel-2"><a href="#prepend"><span class="tocnumber">10.24</span>
<span class="toctext">prepend</span></a></li>
-<li class="toclevel-2"><a href="#proxy"><span class="tocnumber">10.27</span>
+<li class="toclevel-2"><a href="#proxy"><span class="tocnumber">10.25</span>
<span class="toctext">proxy</span></a></li>
-<li class="toclevel-2"><a href="#redirect"><span class="tocnumber">10.28</span>
+<li class="toclevel-2"><a href="#redirect"><span class="tocnumber">10.26</span>
<span class="toctext">redirect</span></a></li>
-<li class="toclevel-2"><a href="#rev"><span class="tocnumber">10.29</span>
+<li class="toclevel-2"><a href="#rev"><span class="tocnumber">10.27</span>
<span class="toctext">rev</span></a></li>
-<li class="toclevel-2"><a href="#sanitiseArg"><span class="tocnumber">10.30</span>
+<li class="toclevel-2"><a href="#sanitiseArg"><span class="tocnumber">10.28</span>
<span class="toctext">sanitiseArg</span></a></li>
<li class="toclevel-2"><a href="#sanitiseMatched"><span
-class="tocnumber">10.31</span> <span class="toctext">sanitiseMatched</span></a></li>
+class="tocnumber">10.29</span> <span class="toctext">sanitiseMatched</span></a></li>
<li class="toclevel-2"><a href="#sanitiseMatchedBytes"><span
-class="tocnumber">10.32</span> <span class="toctext">sanitiseMatchedBytes</span></a></li>
+class="tocnumber">10.30</span> <span class="toctext">sanitiseMatchedBytes</span></a></li>
<li class="toclevel-2"><a href="#sanitiseRequestHeader"><span
-class="tocnumber">10.33</span> <span class="toctext">sanitiseRequestHeader</span></a></li>
+class="tocnumber">10.31</span> <span class="toctext">sanitiseRequestHeader</span></a></li>
<li class="toclevel-2"><a href="#sanitiseResponseHeader"><span
-class="tocnumber">10.34</span> <span class="toctext">sanitiseResponseHeader</span></a></li>
-<li class="toclevel-2"><a href="#severity"><span class="tocnumber">10.35</span>
+class="tocnumber">10.32</span> <span class="toctext">sanitiseResponseHeader</span></a></li>
+<li class="toclevel-2"><a href="#severity"><span class="tocnumber">10.33</span>
<span class="toctext">severity</span></a></li>
-<li class="toclevel-2"><a href="#setuid"><span class="tocnumber">10.36</span>
+<li class="toclevel-2"><a href="#setuid"><span class="tocnumber">10.34</span>
<span class="toctext">setuid</span></a></li>
-<li class="toclevel-2"><a href="#setrsc"><span class="tocnumber">10.37</span>
- <span class="toctext">setrsc</span></a></li>
-<li class="toclevel-2"><a href="#setsid"><span class="tocnumber">10.38</span>
+<li class="toclevel-2"><a href="#setsid"><span class="tocnumber">10.35</span>
<span class="toctext">setsid</span></a></li>
-<li class="toclevel-2"><a href="#setenv"><span class="tocnumber">10.39</span>
+<li class="toclevel-2"><a href="#setenv"><span class="tocnumber">10.36</span>
<span class="toctext">setenv</span></a></li>
-<li class="toclevel-2"><a href="#setvar"><span class="tocnumber">10.40</span>
+<li class="toclevel-2"><a href="#setvar"><span class="tocnumber">10.37</span>
<span class="toctext">setvar</span></a></li>
-<li class="toclevel-2"><a href="#skip"><span class="tocnumber">10.41</span>
+<li class="toclevel-2"><a href="#skip"><span class="tocnumber">10.38</span>
<span class="toctext">skip</span></a></li>
-<li class="toclevel-2"><a href="#skipAfter"><span class="tocnumber">10.42</span>
+<li class="toclevel-2"><a href="#skipAfter"><span class="tocnumber">10.39</span>
<span class="toctext">skipAfter</span></a></li>
-<li class="toclevel-2"><a href="#status"><span class="tocnumber">10.43</span>
+<li class="toclevel-2"><a href="#status"><span class="tocnumber">10.40</span>
<span class="toctext">status</span></a></li>
-<li class="toclevel-2"><a href="#t"><span class="tocnumber">10.44</span>
+<li class="toclevel-2"><a href="#t"><span class="tocnumber">10.41</span>
<span class="toctext">t</span></a></li>
-<li class="toclevel-2"><a href="#tag"><span class="tocnumber">10.45</span>
+<li class="toclevel-2"><a href="#tag"><span class="tocnumber">10.42</span>
<span class="toctext">tag</span></a></li>
-<li class="toclevel-2"><a href="#ver"><span class="tocnumber">10.46</span>
- <span class="toctext">ver</span></a></li>
-<li class="toclevel-2"><a href="#xmlns"><span class="tocnumber">10.47</span>
+<li class="toclevel-2"><a href="#xmlns"><span class="tocnumber">10.43</span>
<span class="toctext">xmlns</span></a></li>
</ul>
</li>
@@ -759,67 +719,59 @@
<span class="toctext">beginsWith</span></a></li>
<li class="toclevel-2"><a href="#contains"><span class="tocnumber">11.2</span>
<span class="toctext">contains</span></a></li>
-<li class="toclevel-2"><a href="#containsWord"><span class="tocnumber">11.3</span>
- <span class="toctext">containsWord</span></a></li>
-<li class="toclevel-2"><a href="#endsWith"><span class="tocnumber">11.4</span>
+<li class="toclevel-2"><a href="#endsWith"><span class="tocnumber">11.3</span>
<span class="toctext">endsWith</span></a></li>
-<li class="toclevel-2"><a href="#eq"><span class="tocnumber">11.5</span>
+<li class="toclevel-2"><a href="#eq"><span class="tocnumber">11.4</span>
<span class="toctext">eq</span></a></li>
-<li class="toclevel-2"><a href="#ge"><span class="tocnumber">11.6</span>
+<li class="toclevel-2"><a href="#ge"><span class="tocnumber">11.5</span>
<span class="toctext">ge</span></a></li>
-<li class="toclevel-2"><a href="#geoLookup"><span class="tocnumber">11.7</span>
+<li class="toclevel-2"><a href="#geoLookup"><span class="tocnumber">11.6</span>
<span class="toctext">geoLookup</span></a></li>
-<li class="toclevel-2"><a href="#gsbLookup"><span class="tocnumber">11.8</span>
+<li class="toclevel-2"><a href="#gsbLookup"><span class="tocnumber">11.7</span>
<span class="toctext">gsbLookup</span></a></li>
-<li class="toclevel-2"><a href="#gt"><span class="tocnumber">11.9</span>
+<li class="toclevel-2"><a href="#gt"><span class="tocnumber">11.8</span>
<span class="toctext">gt</span></a></li>
-<li class="toclevel-2"><a href="#inspectFile"><span class="tocnumber">11.10</span>
+<li class="toclevel-2"><a href="#inspectFile"><span class="tocnumber">11.9</span>
<span class="toctext">inspectFile</span></a></li>
-<li class="toclevel-2"><a href="#ipMatch"><span class="tocnumber">11.11</span>
+<li class="toclevel-2"><a href="#ipMatch"><span class="tocnumber">11.10</span>
<span class="toctext">ipMatch</span></a></li>
-<li class="toclevel-2"><a href="#ipMatchF"><span class="tocnumber">11.12</span>
- <span class="toctext">ipMatchF</span></a></li>
-<li class="toclevel-2"><a href="#ipMatchFromFile"><span
-class="tocnumber">11.13</span> <span class="toctext">ipMatchFromFile</span></a></li>
-<li class="toclevel-2"><a href="#le"><span class="tocnumber">11.14</span>
+<li class="toclevel-2"><a href="#le"><span class="tocnumber">11.11</span>
<span class="toctext">le</span></a></li>
-<li class="toclevel-2"><a href="#lt"><span class="tocnumber">11.15</span>
+<li class="toclevel-2"><a href="#lt"><span class="tocnumber">11.12</span>
<span class="toctext">lt</span></a></li>
-<li class="toclevel-2"><a href="#pm"><span class="tocnumber">11.16</span>
+<li class="toclevel-2"><a href="#pm"><span class="tocnumber">11.13</span>
<span class="toctext">pm</span></a></li>
-<li class="toclevel-2"><a href="#pmf"><span class="tocnumber">11.17</span>
+<li class="toclevel-2"><a href="#pmf"><span class="tocnumber">11.14</span>
<span class="toctext">pmf</span></a></li>
-<li class="toclevel-2"><a href="#pmFromFile"><span class="tocnumber">11.18</span>
+<li class="toclevel-2"><a href="#pmFromFile"><span class="tocnumber">11.15</span>
<span class="toctext">pmFromFile</span></a></li>
-<li class="toclevel-2"><a href="#rbl"><span class="tocnumber">11.19</span>
+<li class="toclevel-2"><a href="#rbl"><span class="tocnumber">11.16</span>
<span class="toctext">rbl</span></a></li>
-<li class="toclevel-2"><a href="#rsub"><span class="tocnumber">11.20</span>
+<li class="toclevel-2"><a href="#rsub"><span class="tocnumber">11.17</span>
<span class="toctext">rsub</span></a></li>
-<li class="toclevel-2"><a href="#rx"><span class="tocnumber">11.21</span>
+<li class="toclevel-2"><a href="#rx"><span class="tocnumber">11.18</span>
<span class="toctext">rx</span></a></li>
-<li class="toclevel-2"><a href="#streq"><span class="tocnumber">11.22</span>
+<li class="toclevel-2"><a href="#streq"><span class="tocnumber">11.19</span>
<span class="toctext">streq</span></a></li>
-<li class="toclevel-2"><a href="#strmatch"><span class="tocnumber">11.23</span>
+<li class="toclevel-2"><a href="#strmatch"><span class="tocnumber">11.20</span>
<span class="toctext">strmatch</span></a></li>
<li class="toclevel-2"><a href="#validateByteRange"><span
-class="tocnumber">11.24</span> <span class="toctext">validateByteRange</span></a></li>
-<li class="toclevel-2"><a href="#validateDTD"><span class="tocnumber">11.25</span>
+class="tocnumber">11.21</span> <span class="toctext">validateByteRange</span></a></li>
+<li class="toclevel-2"><a href="#validateDTD"><span class="tocnumber">11.22</span>
<span class="toctext">validateDTD</span></a></li>
-<li class="toclevel-2"><a href="#validateEncryption"><span
-class="tocnumber">11.26</span> <span class="toctext">validateEncryption</span></a></li>
-<li class="toclevel-2"><a href="#validateSchema"><span class="tocnumber">11.27</span>
+<li class="toclevel-2"><a href="#validateSchema"><span class="tocnumber">11.23</span>
<span class="toctext">validateSchema</span></a></li>
<li class="toclevel-2"><a href="#validateUrlEncoding"><span
-class="tocnumber">11.28</span> <span class="toctext">validateUrlEncoding</span></a></li>
+class="tocnumber">11.24</span> <span class="toctext">validateUrlEncoding</span></a></li>
<li class="toclevel-2"><a href="#validateUtf8Encoding"><span
-class="tocnumber">11.29</span> <span class="toctext">validateUtf8Encoding</span></a></li>
-<li class="toclevel-2"><a href="#verifyCC"><span class="tocnumber">11.30</span>
+class="tocnumber">11.25</span> <span class="toctext">validateUtf8Encoding</span></a></li>
+<li class="toclevel-2"><a href="#verifyCC"><span class="tocnumber">11.26</span>
<span class="toctext">verifyCC</span></a></li>
-<li class="toclevel-2"><a href="#verifyCPF"><span class="tocnumber">11.31</span>
+<li class="toclevel-2"><a href="#verifyCPF"><span class="tocnumber">11.27</span>
<span class="toctext">verifyCPF</span></a></li>
-<li class="toclevel-2"><a href="#verifySSN"><span class="tocnumber">11.32</span>
+<li class="toclevel-2"><a href="#verifySSN"><span class="tocnumber">11.28</span>
<span class="toctext">verifySSN</span></a></li>
-<li class="toclevel-2"><a href="#within"><span class="tocnumber">11.33</span>
+<li class="toclevel-2"><a href="#within"><span class="tocnumber">11.29</span>
<span class="toctext">within</span></a></li>
</ul>
</li>
@@ -848,9 +800,9 @@
<a name="ModSecurity.C2.AE_Reference_Manual"
id="ModSecurity.C2.AE_Reference_Manual"></a><h1> <span
class="mw-headline"> ModSecurity® Reference Manual </span></h1>
-<a name="Current_as_of_v2.5.13_v2.6_and_v2.7"
-id="Current_as_of_v2.5.13_v2.6_and_v2.7"></a><h2> <span
-class="mw-headline"> Current as of v2.5.13 v2.6 and v2.7 </span></h2>
+<a name="Current_as_of_v2.5.13_and_v2.6"
+id="Current_as_of_v2.5.13_and_v2.6"></a><h2> <span class="mw-headline">
+Current as of v2.5.13 and v2.6 </span></h2>
<a name="Copyright_.C2.A9_2004-2011_Trustwave_Holdings.2C_Inc."
id="Copyright_.C2.A9_2004-2011_Trustwave_Holdings.2C_Inc."></a><h3> <span
class="mw-headline"> Copyright © 2004-2011 <a
@@ -1243,18 +1195,6 @@
title="http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf"
rel="nofollow">http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf</a>
</dd></dl>
-<dl><dd> Starting with ModSecurity 2.7.0 there are a few important
-configuration options
-</dd></dl>
-<ol><li><b>--enable-pcre-jit</b> - Enables JIT support from pcre >=
-8.20 that can improve regex performance.
-</li><li><b>--enable-cache-lua</b> - Enables lua vm caching that can
-improve lua script performance. Difference just appears if ModSecurity
-must run more than one script per transaction.
-</li><li><b>--enable-request-early</b> - On ModSecuricy 2.6 phase one
-has been moved to phase 2 hook, if you want to play around it use this
-option.
-</li></ol>
<a name="Configuration_Directives" id="Configuration_Directives"></a><h1>
<span class="mw-headline"> Configuration Directives </span></h1>
<p>The following section outlines all of the ModSecurity directives.
@@ -1301,7 +1241,7 @@
for application/x-www-form- urlencoded content.
</p><p><b>Syntax:</b> <code>SecArgumentSeparator character</code>
</p><p><b>Default:</b> &
-</p><p><b>Scope:</b> Main(< 2.7.0), Any(2.7.0)
+</p><p><b>Scope:</b> Main
</p><p><b>Version:</b> 2.0.0
</p><p>This directive is needed if a backend web application is using a
nonstandard argument separator. Applications are sometimes (very rarely)
@@ -1417,7 +1357,6 @@
log directories.
</p><p><b>Syntax:</b> <code>SecAuditLogFileMode octal_mode|"default"</code>
-</p><p><b>Default:</b> 0600
</p><p><b>Scope:</b> Any
</p><p><b>Version:</b> 2.5.10
</p><p><b>Example Usage:</b> <code>SecAuditLogFileMode 00640</code>
@@ -1728,7 +1667,7 @@
frontend compression enabled.
</p><p><b>Syntax:</b> <code>SecDisableBackendCompression On|Off </code>
</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.6.0
+</p><p><b>Version:</b> Development trunk
</p><p><b>Default:</b> Off
</p><p>This directive is necessary in reverse proxy mode when the
backend servers support response compression, but you wish to inspect
@@ -1737,100 +1676,6 @@
directive is not necessary in embedded mode, because ModSecurity
performs inspection before response compression takes place.
</p>
-<a name="SecEncryptionEngine" id="SecEncryptionEngine"></a><h2> <span
-class="mw-headline"> SecEncryptionEngine </span></h2>
-<p><b>Description:</b> Configures the encryption engine.
-</p><p><b>Syntax:</b> <code>SecEncryptionEngine On|Off</code>
-</p><p><b>Example Usage:</b> <code>SecEncryptionEngine On </code>
-</p><p><b>Scope</b>: Any
-</p><p><b>Version:</b> 2.7
-</p><p><b>Default:</b> Off
-</p><p>The possible values are:
-</p>
-<ul><li><b>On</b>: Encryption engine can process the request/response
-data.
-</li><li><b>Off</b>: Encryption engine will not process any data.
-</li></ul>
-<dl><dt> Note </dt><dd> Users must enable stream output variables
-and content injection.
-</dd></dl>
-<a name="SecEncryptionKey" id="SecEncryptionKey"></a><h2> <span
-class="mw-headline"> SecEncryptionKey </span></h2>
-<p><b>Description:</b> Define the key that will be used by HMAC.
-</p><p><b>Syntax:</b> <code>SecEncryptionKey rand|TEXT
-KeyOnly|SessionID|RemoteIP</code>
-</p><p><b>Example Usage:</b> <code>SecEncryptionKey "this_is_my_key"
-KeyOnly</code>
-</p><p><b>Scope</b>: Any
-</p><p><b>Version:</b> 2.7
-</p><p>ModSecurity encryption engine will append, if specified, the
-user's session id or remote ip to the key before the MAC operation. If
-the first parameter is "rand" then a random key will be generated and
-used by the engine.
-</p><p><br>
-</p>
-<a name="SecEncryptionParam" id="SecEncryptionParam"></a><h2> <span
-class="mw-headline"> SecEncryptionParam </span></h2>
-<p><b>Description:</b> Define the parameter name that will receive the
-MAC hash.
-</p><p><b>Syntax:</b> <code>SecEncryptionParam TEXT</code>
-</p><p><b>Example Usage:</b> <code>SecEncryptionKey "hmac"</code>
-</p><p><b>Scope</b>: Any
-</p><p><b>Version:</b> 2.7
-</p><p>ModSecurity encryption engine will add a new parameter to
-protected HTML elements containing the MAC hash.
-</p>
-<a name="SecEncryptionMethodRx" id="SecEncryptionMethodRx"></a><h2> <span
- class="mw-headline"> SecEncryptionMethodRx </span></h2>
-<p><b>Description:</b> Configures what kind of HTML data the encryption
-engine should sign based on regular expression.
-</p><p><b>Syntax:</b> <code>SecEncryptionMethodRx TYPE REGEX</code>
-</p><p><b>Example Usage</b>: <code>SecEncryptionMethodRx HashHref
-"product_info|list_product"</code>
-</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.7.0
-</p><p>As a initial support is possible to protect HREF, FRAME, IFRAME
-and FORM ACTION html elements as well response Location header when http
- redirect code are sent.
-</p><p>The possible values for TYPE are:
-</p>
-<ul><li><b>HashHref</b>: Used to sign href= html elements
-</li><li><b>HashFormAction</b>: Used to sign form action= html elements
-</li><li><b>HashIframeSrc</b>: Used to sign iframe src= html elements
-</li><li><b>HashframeSrc</b>: Used to sign frame src= html elements
-</li><li><b>HashLocation</b>: Used to sign Location response header
-</li></ul>
-<dl><dt> Note </dt><dd> This directive is used to sign the elements
- however user must use the @validateEncryption operator to enforce data
-integrity.
-</dd></dl>
-<p><br>
-</p>
-<a name="SecEncryptionMethodPm" id="SecEncryptionMethodPm"></a><h2> <span
- class="mw-headline"> SecEncryptionMethodPm </span></h2>
-<p><b>Description:</b> Configures what kind of HTML data the encryption
-engine should sign based on string search algoritm.
-</p><p><b>Syntax:</b> <code>SecEncryptionMethodRx TYPE "string1 string2
-string3..."</code>
-</p><p><b>Example Usage</b>: <code>SecEncryptionMethodRx HashHref
-"product_info list_product"</code>
-</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.7.0
-</p><p>As a initial support is possible to protect HREF, FRAME, IFRAME
-and FORM ACTION html elements as well response Location header when http
- redirect code are sent.
-</p><p>The possible values for TYPE are:
-</p>
-<ul><li><b>HashHref</b>: Used to sign href= html elements
-</li><li><b>HashFormAction</b>: Used to sign form action= html elements
-</li><li><b>HashIframeSrc</b>: Used to sign iframe src= html elements
-</li><li><b>HashframeSrc</b>: Used to sign frame src= html elements
-</li><li><b>HashLocation</b>: Used to sign Location response header
-</li></ul>
-<dl><dt> Note </dt><dd> This directive is used to sign the elements
- however user must use the @validateEncryption operator to enforce data
-integrity.
-</dd></dl>
<a name="SecGeoLookupDb" id="SecGeoLookupDb"></a><h2> <span
class="mw-headline"> SecGeoLookupDb </span></h2>
<p><b>Description</b>: Defines the path to the database that will be
@@ -1860,11 +1705,9 @@
autonumber" title="http://code.google.com/apis/safebrowsing/"
rel="nofollow">[3]</a>.
</p>
-<dl><dt> Note </dt><dd> Deprecated in 2.7.0 after Google dev team
-decided to not allow the database download anymore. After registering
-and obtaining a Safe Browsing API key, you can automatically download
-the GSB using a tool like wget (where <i><b>KEY</b></i> is your own API
-key):
+<dl><dt> Note </dt><dd> After registering and obtaining a Safe
+Browsing API key, you can automatically download the GSB using a tool
+like wget (where <i><b>KEY</b></i> is your own API key):
</dd></dl>
<p><code>wget <a
href="http://sb.google.com/safebrowsing/update?client=api&apikey=KEY&version=goog-malware-hash:1:-1"
@@ -2081,15 +1924,6 @@
title="http://blog.spiderlabs.com/2010/11/advanced-topic-of-the-week-mitigating-slow-http-dos-attacks.html"
rel="nofollow">http://blog.spiderlabs.com/2010/11/advanced-topic-of-the-week-mitigating-slow-http-dos-attacks.html</a>
</p>
-<a name="SecSensorId" id="SecSensorId"></a><h2> <span
-class="mw-headline"> SecSensorId </span></h2>
-<p><b>Description:</b> Define a sensor ID that will be present into log
-part H.
-</p><p><b>Syntax:</b> <code>SecSensorId TEXT </code>
-</p><p><b>Example Usage</b>: <code>SecSensorId WAFSensor01 </code>
-</p><p><b>Scope</b>: Main
-</p><p><b>Version</b>: 2.7.0
-</p>
<a name="SecWriteStateLimit" id="SecWriteStateLimit"></a><h2> <span
class="mw-headline"> SecWriteStateLimit </span></h2>
<p><b>Description:</b> Establishes a per-IP address limit of how many
@@ -2348,16 +2182,6 @@
</li><li><b>DetectionOnly</b>: process rules but never executes any
disruptive actions (block, deny, drop, allow, proxy and redirect)
</li></ul>
-<a name="SecRulePerfTime" id="SecRulePerfTime"></a><h2> <span
-class="mw-headline"> SecRulePerfTime </span></h2>
-<p><b>Description:</b> Set a performance threshold for rules. Rules that
- spends too much time will be logged into audit log Part H in the format
- id=usec.
-</p><p><b>Syntax:</b> <code>SecRulePerfTime USECS </code>
-</p><p><b>Example Usage:</b> <code>SecRulePerfTime 1000 </code>
-</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.7
-</p>
<a name="SecRuleRemoveById" id="SecRuleRemoveById"></a><h2> <span
class="mw-headline"> SecRuleRemoveById </span></h2>
<p><b>Description:</b> Removes the matching rules from the current
@@ -2561,7 +2385,7 @@
</p><p><b>Version:</b> 2.6
</p><p>This directive will append (or replace) variables to the current
target list of the specified rule with the targets provided in the
-second parameter. Starting with 2.7.0 this feature supports id range.
+second parameter.
</p><p><b>Explicitly Appending Targets</b>
</p><p>This is useful for implementing exceptions where you want to
externally update a target list to exclude inspection of specific
@@ -2610,107 +2434,6 @@
</p>
<pre>SecRule REQUEST_FILENAME "@streq /path/to/file.php" "phase:1,t:none,nolog,pass,ctl:ruleUpdateTargetById=958895;REQUEST_URI;REQUEST_FILENAME"
</pre>
-<dl><dt> Note </dt><dd> This ctl is deprecated and will be removed
-from the code, since we cannot use it per-transaction.
-</dd></dl>
-<a name="SecRuleUpdateTargetByMsg" id="SecRuleUpdateTargetByMsg"></a><h2>
- <span class="mw-headline"> SecRuleUpdateTargetByMsg </span></h2>
-<p><b>Description:</b> Updates the target (variable) list of the
-specified rule by rule message.
-</p><p><b>Syntax:</b> <code>SecRuleUpdateTargetByMsg TEXT
-TARGET1[,TARGET2,TARGET3] REPLACED_TARGET</code>
-</p><p><b>Example Usage:</b> <code>SecRuleUpdateTargetByMsg "Cross-site
-Scripting (XSS) Attack" "!ARGS:foo"</code>
-</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.7
-</p><p>This directive will append (or replace) variables to the current
-target list of the specified rule with the targets provided in the
-second parameter.
-</p><p><b>Explicitly Appending Targets</b>
-</p><p>This is useful for implementing exceptions where you want to
-externally update a target list to exclude inspection of specific
-variable(s).
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}"
-
-SecRuleUpdateTargetByMsg "System Command Injection" !ARGS:email
-</pre>
-<p>The effective resulting rule in the previous example will append the
-target to the end of the variable list as follows:
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/*|!ARGS:email "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}""
-</pre>
-<p><b>Explicitly Replacing Targets</b>
-</p><p>You can also entirely replace the target list to something more
-appropriate for your environment. For example, lets say you want to
-inspect REQUEST_URI instead of REQUEST_FILENAME, you could do this:
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}"
-
-SecRuleUpdateTargetByMsg "System Command Injection" REQUEST_URI REQUEST_FILENAME
-</pre>
-<p>The effective resulting rule in the previous example will append the
-target to the end of the variable list as follows:
-</p>
-<pre>SecRule REQUEST_URI|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}""
-</pre>
-<a name="SecRuleUpdateTargetByTag" id="SecRuleUpdateTargetByTag"></a><h2>
- <span class="mw-headline"> SecRuleUpdateTargetByTag </span></h2>
-<p><b>Description:</b> Updates the target (variable) list of the
-specified rule by rule tag.
-</p><p><b>Syntax:</b> <code>SecRuleUpdateTargetByTag TEXT
-TARGET1[,TARGET2,TARGET3] REPLACED_TARGET</code>
-</p><p><b>Example Usage:</b> <code>SecRuleUpdateTargetByTag
-"WEB_ATTACK/XSS" "!ARGS:foo"</code>
-</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.7
-</p><p>This directive will append (or replace) variables to the current
-target list of the specified rule with the targets provided in the
-second parameter.
-</p><p><b>Explicitly Appending Targets</b>
-</p><p>This is useful for implementing exceptions where you want to
-externally update a target list to exclude inspection of specific
-variable(s).
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}"
-
-SecRuleUpdateTargetByTag "WASCTC/WASC-31" !ARGS:email
-</pre>
-<p>The effective resulting rule in the previous example will append the
-target to the end of the variable list as follows:
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/*|!ARGS:email "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}""
-</pre>
-<p><b>Explicitly Replacing Targets</b>
-</p><p>You can also entirely replace the target list to something more
-appropriate for your environment. For example, lets say you want to
-inspect REQUEST_URI instead of REQUEST_FILENAME, you could do this:
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}"
-
-SecRuleUpdateTargetByTag "WASCTC/WASC-31" REQUEST_URI REQUEST_FILENAME
-</pre>
-<p>The effective resulting rule in the previous example will append the
-target to the end of the variable list as follows:
-</p>
-<pre>SecRule REQUEST_URI|ARGS_NAMES|ARGS|XML:/* "[\;\|\`]\W*?\bmail\b" \
- "phase:2,rev:'2.1.1',capture,t:none,t:htmlEntityDecode,t:compressWhitespace,t:lowercase,ctl:auditLogParts=+E,block,msg:'System Command Injection',id:'958895',tag:'WEB_ATTACK/COMMAND_INJECTION',tag:'WASCTC/WASC-31',tag:'OWASP_TOP_10/A1',tag:'PCI/6.5.2',logdata:'%{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.command_injection_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%
-{tx.0}""
-</pre>
<a name="SecServerSignature" id="SecServerSignature"></a><h2> <span
class="mw-headline"> SecServerSignature </span></h2>
<p><b>Description:</b> Instructs ModSecurity to change the data
@@ -2891,17 +2614,6 @@
in conjunction with the Apache VirtualHost directives. Applications
namespace information is also recorded in the audit logs (using the
WebApp-Info header of the H part).
-</p><p>This directive is used to set collections timeout. For example:
-</p>
-<pre>SecCollectionTimeout 500</pre>
-<a name="SecCollectionTimeout" id="SecCollectionTimeout"></a><h2> <span
-class="mw-headline"> SecCollectionTimeout </span></h2>
-<p><b>Description:</b> Specifies the collections timeout. Default is
-3600 seconds.
-</p><p><b>Syntax:</b> <code>SecCollectionTimeout seconds</code>
-</p><p><b>Default:</b> 3600
-</p><p><b>Scope:</b> Any
-</p><p><b>Version:</b> 2.6.3
</p>
<a name="Processing_Phases" id="Processing_Phases"></a><h1> <span
class="mw-headline"> Processing Phases </span></h1>
@@ -2917,7 +2629,7 @@
<p>Below is a diagram of the standard Apache Request Cycle. In the
diagram, the 5 ModSecurity processing phases are shown.
</p><p><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=File:Apache_request_cycle-modsecurity.jpg"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=File:Apache_request_cycle-modsecurity.jpg"
class="image" title="Apache request cycle-modsecurity.jpg"><img alt=""
src="Reference_Manual_files/600px-Apache_request_cycle-modsecurity.jpg"
height="459" width="600" border="0"></a>
@@ -3108,9 +2820,6 @@
<p>Contains the number of milliseconds elapsed since the beginning of
the current transaction. Available starting with 2.6.0.
</p>
-<dl><dt> Note </dt><dd> Starting with ModSecurity 2.7.0 the time is
- microseconds.
-</dd></dl>
<a name="ENV" id="ENV"></a><h2> <span class="mw-headline"> ENV </span></h2>
<p>Collection that provides access to environment variables set by
ModSecurity. Requires a single parameter to specify the name of the
@@ -3385,12 +3094,6 @@
<p>Contains the time, in microseconds, spent processing phase 5.
Available starting with 2.6.
</p>
-<a name="PERF_RULES" id="PERF_RULES"></a><h2> <span class="mw-headline">
- PERF_RULES </span></h2>
-<p>Contains the time of rules, in microseconds. Available starting with
-2.7.
-</p><p><code>SecRule PERF_RULES "@gt 1000" "id:12345,phase:5"</code>
-</p>
<a name="PERF_SREAD" id="PERF_SREAD"></a><h2> <span class="mw-headline">
PERF_SREAD </span></h2>
<p>Contains the time, in microseconds, spent reading from persistent
@@ -3898,12 +3601,6 @@
# Is the current user the administrator?
SecRule USERID "admin"
</pre>
-<a name="USERAGENT_IP" id="USERAGENT_IP"></a><h2> <span
-class="mw-headline"> USERAGENT_IP </span></h2>
-<p>This variable is created when running modsecurity with apache2.4 and
-will contains the client ip address set by mod_remoteip in proxied
-connections.
-</p>
<a name="WEBAPPID" id="WEBAPPID"></a><h2> <span class="mw-headline">
WEBAPPID </span></h2>
<p>This variable contains the current application name, which is set in
@@ -4025,11 +3722,6 @@
SecRule TX:1 ^(\w+): t:base64Decode,capture,chain
SecRule TX:1 ^(admin|root|backup)$
</pre>
-<a name="sqlHexDecode" id="sqlHexDecode"></a><h2> <span
-class="mw-headline"> sqlHexDecode </span></h2>
-<p>Decode sql hex data. Example (0x414243) will be decoded to (ABC).
-Available as of 2.6.3
-</p>
<a name="base64DecodeExt" id="base64DecodeExt"></a><h2> <span
class="mw-headline"> base64DecodeExt </span></h2>
<p>Decodes a Base64-encoded string. Unlike base64Decode, this version
@@ -4270,7 +3962,7 @@
<dl><dt> Note </dt><dd> <b>Disruptive actions will NOT be executed
if the SecRuleEngine is set to DetectionOnly</b>. If you are creating
exception/whitelisting rules that use the allow action, you should also
-add the ctl:ruleEngine=On action to execute the action.
+add the ctl:ruleEngine=DetectionOnly action to execute the action.
</dd></dl>
<ul><li> <b>Non-disruptive action</b>s - Do something, but that
something does not and cannot affect the rule processing flow. Setting a
@@ -4287,20 +3979,6 @@
action holds the status that will be used for blocking (if it takes
place).
</li></ul>
-<a name="accuracy" id="accuracy"></a><h2> <span class="mw-headline">
-accuracy </span></h2>
-<p><b>Description:</b> Specifies the relative accuracy level of the rule
- related to false positives/negatives. The value is a string based on a
- numeric scale (1-9 where 9 is very strong and 1 has many false
-positives).
-</p><p><b>Action Group:</b> Meta-data
-</p><p><b>Version:</b> 2.7
-</p><p><b>Example:</b>
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \
- "phase:2,ver:'CRS/2.2.4,accuracy:'9',maturity:'9',capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'% \
-{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}"
-</pre>
<a name="allow" id="allow"></a><h2> <span class="mw-headline"> allow </span></h2>
<p><b>Description:</b> Stops rule processing on a successful match and
allows the transaction to proceed.
@@ -4496,13 +4174,7 @@
</li><li><b>ruleRemoveById</b> - since this action us triggered at run
time, it should be specified <b>before</b> the rule in which it is
disabling.
-</li><li><b>ruleUpdateTargetById</b> - This is deprecated and will be
-removed from the code. Use ruleRemoveTargetById for per-request
-exceptions.
-</li><li><b>ruleRemoveTargetById</b>
-</li><li><b>ruleRemoveByMsg</b>
-</li><li><b>encryptionEngine</b>
-</li><li><b>encryptionEnforcement</b>
+</li><li><b>ruleUpdateTargetById</b>
</li></ol>
<p>With the exception of the requestBodyProcessor and
forceRequestBodyVariable settings, each configuration option corresponds
@@ -4611,8 +4283,7 @@
</p>
<a name="id" id="id"></a><h2> <span class="mw-headline"> id </span></h2>
<p><b>Description</b>: Assigns a unique ID to the rule or chain in which
- it appears. Starting with ModSecurity 2.7 this action is mandatory and
-must be numeric.
+ it appears.
</p><p><b>Action Group:</b> Meta-data
</p><p><b>Example:</b>
</p>
@@ -4632,22 +4303,14 @@
href="http://projects.otaku42.de/wiki/Scally-Whack" class="external
autonumber" title="http://projects.otaku42.de/wiki/Scally-Whack"
rel="nofollow">[9]</a>
-</li><li>430,000–439,999: reserved for rules published by Flameeyes <a
-href="http://www.flameeyes.eu/projects/modsec" class="external
-autonumber" title="http://www.flameeyes.eu/projects/modsec"
-rel="nofollow">[10]</a>
-</li><li>440.000-599,999: unused (available for reservation)
-</li><li>600,000-699,999: reserved for use by Akamai <a
-href="http://www.akamai.com/html/solutions/waf.html" class="external
-autonumber" title="http://www.akamai.com/html/solutions/waf.html"
-rel="nofollow">[11]</a>
+</li><li>430,000–699,999: unused (available for reservation)
</li><li>700,000–799,999: reserved for Ivan Ristic
</li><li>900,000–999,999: reserved for the OWASP ModSecurity Core Rule
Set <a
href="http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project"
class="external autonumber"
title="http://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project"
- rel="nofollow">[12]</a> project
+ rel="nofollow">[10]</a> project
</li><li>1,000,000-1,999,999: unused (available for reservation)
</li><li>2,000,000-2,999,999: reserved for rules from Trustwave's
SpiderLabs Research team
@@ -4693,21 +4356,6 @@
as %{TX.0} or %{MATCHED_VAR}. The information is properly
escaped for use with logging of binary data.
</p>
-<a name="maturity" id="maturity"></a><h2> <span class="mw-headline">
-maturity </span></h2>
-<p><b>Description:</b> Specifies the relative maturity level of the rule
- related to the length of time a rule has been public and the amount of
-testing it has received. The value is a string based on a numeric scale
- (1-9 where 9 is extensively tested and 1 is a brand new experimental
-rule).
-</p><p><b>Action Group:</b> Meta-data
-</p><p><b>Version:</b> 2.7
-</p><p><b>Example:</b>
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \
- "phase:2,ver:'CRS/2.2.4,accuracy:'9',maturity:'9',capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'% \
-{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}"
-</pre>
<a name="msg" id="msg"></a><h2> <span class="mw-headline"> msg </span></h2>
<p><b>Description:</b> Assigns a custom message to the rule or chain in
which it appears. The message will be logged along with every alert.
@@ -4786,8 +4434,7 @@
</pre>
<a name="pause" id="pause"></a><h2> <span class="mw-headline"> pause </span></h2>
<p><b>Description:</b> Pauses transaction processing for the specified
-number of milliseconds. Starting with ModSecurity 2.7 this feature also
-supports macro expansion.
+number of milliseconds.
</p><p><b>Action Group:</b> Non-disruptive
</p><p><b>Example:</b>
</p>
@@ -4810,17 +4457,6 @@
<pre># Initialize IP address tracking in phase 1
SecAction phase:1,nolog,pass,initcol:IP=%{REMOTE_ADDR}
</pre>
-<p>Starting in ModSecurity version v2.7 there are aliases for some phase
- numbers:
-</p>
-<ul><li><b>2 - request</b>
-</li><li><b>4 - response</b>
-</li><li><b>5 - logging</b>
-</li></ul>
-<p><b>Example:</b>
-</p>
-<pre>SecRule REQUEST_HEADERS:User-Agent "Test" "phase:request,log,deny"
-</pre>
<dl><dt> Warning </dt><dd> Keep in mind that if you specify the
incorrect phase, the variable used in the rule may not yet be available.
This could lead to a false negative situation where your variable and
@@ -5027,17 +4663,6 @@
application namespaces (configured using SecWebAppId), and will use one
if it is configured.
</p>
-<a name="setrsc" id="setrsc"></a><h2> <span class="mw-headline"> setrsc </span></h2>
-<p><b>Description:</b> Special-purpose action that initializes the
-RESOURCE collection using a key provided as parameter.
-</p><p><b>Action Group:</b> Non-disruptive
-</p><p><b>Example:</b>
-</p>
-<pre>SecAction "phase:1,pass,id:3,log,setrsc:'abcd1234'"
-</pre>
-<p>This action understands application namespaces (configured using
-SecWebAppId), and will use one if it is configured.
-</p>
<a name="setsid" id="setsid"></a><h2> <span class="mw-headline"> setsid </span></h2>
<p><b>Description:</b> Special-purpose action that initializes the
SESSION collection using the session token provided as parameter.
@@ -5184,16 +4809,6 @@
slashes to create a hierarchy of categories (as in the example). Since
ModSecurity 2.6.0 tag supports macro expansion.
</p>
-<a name="ver" id="ver"></a><h2> <span class="mw-headline"> ver </span></h2>
-<p><b>Description:</b> Specifies the rule set version.
-</p><p><b>Action Group:</b> Meta-data
-</p><p><b>Version:</b> 2.7
-</p><p><b>Example:</b>
-</p>
-<pre>SecRule REQUEST_FILENAME|ARGS_NAMES|ARGS|XML:/* "\bgetparentfolder\b" \
- "phase:2,ver:'CRS/2.2.4,capture,t:none,t:htmlEntityDecode,t:compressWhiteSpace,t:lowercase,ctl:auditLogParts=+E,block,msg:'Cross-site Scripting (XSS) Attack',id:'958016',tag:'WEB_ATTACK/XSS',tag:'WASCTC/WASC-8',tag:'WASCTC/WASC-22',tag:'OWASP_TOP_10/A2',tag:'OWASP_AppSensor/IE1',tag:'PCI/6.5.1',logdata:'% \
-{TX.0}',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.xss_score=+%{tx.critical_anomaly_score},setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-WEB_ATTACK/XSS-%{matched_var_name}=%{tx.0}"
-</pre>
<a name="xmlns" id="xmlns"></a><h2> <span class="mw-headline"> xmlns </span></h2>
<p><b>Description:</b> Configures an XML namespace, which will be used
in the execution of XPath expressions.
@@ -5229,24 +4844,6 @@
<pre># Detect ".php" anywhere in the request line
SecRule REQUEST_LINE "@contains .php"
</pre>
-<a name="containsWord" id="containsWord"></a><h2> <span
-class="mw-headline"> containsWord </span></h2>
-<p><b>Description:</b> Returns true if the parameter string (with word
-boundaries) is found anywhere in the input. Macro expansion is performed
- on the parameter string before comparison.
-</p><p><b>Example:</b>
-</p>
-<pre># Detect "select" anywhere in ARGS
-SecRule ARGS "@containsWord select"
-</pre>
-<p>Would match on - <br>
--1 union <b>select</b>
-BENCHMARK(2142500,MD5(CHAR(115,113,108,109,97,112))) FROM wp_users WHERE
- ID=1 and (ascii(substr(user_login,1,1))&0x01=0) from wp_users where
- ID=1--
-</p><p>But not on - <br>
-Your site has a wide <b>select</b>ion of computers.
-</p>
<a name="endsWith" id="endsWith"></a><h2> <span class="mw-headline">
endsWith </span></h2>
<p><b>Description:</b> Returns true if the parameter string is found at
@@ -5349,7 +4946,7 @@
href="http://mod-security.svn.sourceforge.net/viewvc/mod-security/crs/trunk/util/"
class="external autonumber"
title="http://mod-security.svn.sourceforge.net/viewvc/mod-security/crs/trunk/util/"
- rel="nofollow">[13]</a> that allows the file approval mechanism to
+ rel="nofollow">[11]</a> that allows the file approval mechanism to
integrate with the ClamAV virus scanner. This is especially handy to
prevent viruses and exploits from entering the web server through file
upload.
@@ -5447,31 +5044,6 @@
</p>
<pre>SecRule REMOTE_ADDR "@ipMatch 192.168.1.100,192.168.1.50,10.10.50.0/24"
</pre>
-<a name="ipMatchF" id="ipMatchF"></a><h2> <span class="mw-headline">
-ipMatchF </span></h2>
-<p>short alias for ipMatchFromFile
-</p>
-<a name="ipMatchFromFile" id="ipMatchFromFile"></a><h2> <span
-class="mw-headline"> ipMatchFromFile </span></h2>
-<p><b>Description:</b> Performs a fast ipv4 or ipv6 match of REMOTE_ADDR
- variable, loading data from a file. Can handle the following formats:
-</p>
-<ul><li>Full IPv4 Address - 192.168.1.100
-</li><li>Network Block/CIDR Address - 192.168.1.0/24
-</li><li>Full IPv6 Address - 2001:db8:85a3:8d3:1319:8a2e:370:7348
-</li><li>Network Block/CIDR Address -
-2001:db8:85a3:8d3:1319:8a2e:370:0/24
-</li></ul>
-<p><b>Examples:</b>
-</p>
-<pre>SecRule REMOTE_ADDR "@ipMatch ips.txt"
-</pre>
-<p>The file ips.txt may contain:
-</p>
-<pre>192.168.0.1
-172.16.0.0/16
-10.0.0.0/8
-</pre>
<a name="le" id="le"></a><h2> <span class="mw-headline"> le </span></h2>
<p><b>Description:</b> Performs numerical comparison and returns true if
the input value is less than or equal to the operator parameter. Macro
@@ -5598,9 +5170,7 @@
<a name="rsub" id="rsub"></a><h2> <span class="mw-headline"> rsub </span></h2>
<p><b>Description</b>: Performs regular expression data substitution
when applied to either the STREAM_INPUT_BODY or STREAM_OUTPUT_BODY
-variables. This operator also supports macro expansion. Starting with
-ModSecurity 2.7.0 this operator supports the syntax |hex| allowing users
- to use special chars like \n \r
+variables. This operator also supports macro expansion.
</p><p><b>Syntax:</b> <code>@rsub s/regex/str/[id]</code>
</p><p><b>Examples:</b>
Removing HTML Comments from response bodies:
@@ -5614,7 +5184,7 @@
</dd></dl>
<p>Regular expressions are handled by the PCRE library <a
href="http://www.pcre.org/" class="external autonumber"
-title="http://www.pcre.org" rel="nofollow">[14]</a>. ModSecurity
+title="http://www.pcre.org" rel="nofollow">[12]</a>. ModSecurity
compiles its regular expressions with the following settings:
</p>
<ol><li>The entire input is treated as a single line, even when there
@@ -5652,7 +5222,7 @@
</pre>
<p>Regular expressions are handled by the PCRE library <a
href="http://www.pcre.org/" class="external autonumber"
-title="http://www.pcre.org" rel="nofollow">[15]</a>. ModSecurity
+title="http://www.pcre.org" rel="nofollow">[13]</a>. ModSecurity
compiles its regular expressions with the following settings:
</p>
<ol><li>The entire input is treated as a single line, even when there
@@ -5749,15 +5319,6 @@
# Validate XML payload against DTD
SecRule XML "@validateDTD /path/to/xml.dtd" "phase:2,deny,msg:'Failed DTD validation'"
</pre>
-<a name="validateEncryption" id="validateEncryption"></a><h2> <span
-class="mw-headline"> validateEncryption </span></h2>
-<p><b>Description:</b> Validates REQUEST_URI that contains data
-protected by the encryption engine.
-</p><p><b>Example:</b>
-</p>
-<pre># Validates requested URI that matches a regular expression.
-SecRule REQUEST_URI "@validateEncryption "product_info|product_list" "phase:1,deny,id:123456"
-</pre>
<a name="validateSchema" id="validateSchema"></a><h2> <span
class="mw-headline"> validateSchema </span></h2>
<p><b>Description:</b> Validates the XML DOM tree against the supplied
@@ -6233,16 +5794,16 @@
<!--
NewPP limit report
-Preprocessor node count: 793/1000000
+Preprocessor node count: 718/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Expensive parser function count: 0/100
-->
-<!-- Saved in parser cache with key p_mod-security_mediawiki:pcache:idhash:12-0!1!0!!en!2!printable=1 and timestamp 20120723175510 -->
+<!-- Saved in parser cache with key p_mod-security_mediawiki:pcache:idhash:12-0!1!0!!en!2!edit=0!printable=1 and timestamp 20110930150653 -->
<div class="printfooter">
Retrieved from "<a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual">https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual</a>"</div>
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual">http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual</a>"</div>
<!-- end content -->
<div class="visualClear"></div>
</div>
@@ -6255,30 +5816,18 @@
<ul>
<li id="ca-nstab-main" class="selected"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual"
title="View the content page [alt-shift-c]" accesskey="c">Page</a></li>
<li id="ca-talk" class="new"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Talk:Reference_Manual&action=edit&redlink=1"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Talk:Reference_Manual&action=edit&redlink=1"
title="Discussion about the content page [alt-shift-t]" accesskey="t">Discussion</a></li>
- <li id="ca-edit"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit"
- title="You can edit this page.
-Please use the preview button before saving [alt-shift-e]" accesskey="e">Edit</a></li>
+ <li id="ca-viewsource"><a
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=edit"
+ title="This page is protected.
+You can view its source [alt-shift-e]" accesskey="e">View source</a></li>
<li id="ca-history"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=history"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=history"
title="Past revisions of this page [alt-shift-h]" accesskey="h">History</a></li>
- <li id="ca-delete"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=delete"
- title="Delete this page [alt-shift-d]" accesskey="d">Delete</a></li>
- <li id="ca-move"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:MovePage/Reference_Manual"
- title="Move this page [alt-shift-m]" accesskey="m">Move</a></li>
- <li id="ca-protect"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=protect"
- title="Protect this page [alt-shift-=]" accesskey="=">Protect</a></li>
- <li id="ca-watch"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&action=watch"
- title="Add this page to your watchlist [alt-shift-w]" accesskey="w">Watch</a></li>
</ul>
</div>
</div>
@@ -6288,24 +5837,6 @@
<table style="height: 4px;" rules="none" border="0" cellpadding="0"
cellspacing="0"></table>
<ul>
- <li id="pt-userpage"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=User:Brenosilva"
- title="Your user page [alt-shift-.]" accesskey="." class="new">Brenosilva</a></li>
- <li id="pt-mytalk"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=User_talk:Brenosilva"
- title="Your talk page [alt-shift-n]" accesskey="n" class="new">My talk</a></li>
- <li id="pt-preferences"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Preferences"
- title="Your preferences">My preferences</a></li>
- <li id="pt-watchlist"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Watchlist"
- title="The list of pages you are monitoring for changes [alt-shift-l]"
-accesskey="l">My watchlist</a></li>
- <li id="pt-mycontris"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Contributions/Brenosilva"
- title="List of your contributions [alt-shift-y]" accesskey="y">My
-contributions</a></li>
- <li id="pt-logout"></li>
</ul>
</div>
</div>
@@ -6313,7 +5844,7 @@
<a style="background-image:
url("/apps/mediawiki/mod-security/nfs/project/m/mo/mod-security/7/70/MediaWikiSidebarLogo.png");"
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page"
title="Visit the main page [alt-shift-z]" accesskey="z"></a>
</div>
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
@@ -6322,24 +5853,24 @@
<div class="pBody">
<ul>
<li id="n-mainpage-description"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page">Main
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page">Main
Page</a></li>
<li id="n-portal"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Community_Portal"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Community_Portal"
title="About the project, what you can do, where to find things">Community
portal</a></li>
<li id="n-currentevents"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Current_events"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=mod-security:Current_events"
title="Find background information on current events">Current events</a></li>
<li id="n-recentchanges"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChanges"
title="The list of recent changes in the wiki [alt-shift-r]"
accesskey="r">Recent changes</a></li>
<li id="n-randompage"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Random"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Random"
title="Load a random page [alt-shift-x]" accesskey="x">Random page</a></li>
<li id="n-help"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Help:Contents"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Help:Contents"
title="The place to find out">Help</a></li>
</ul>
</div>
@@ -6364,25 +5895,22 @@
<div class="pBody">
<ul>
<li id="t-whatlinkshere"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:WhatLinksHere/Reference_Manual"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:WhatLinksHere/Reference_Manual"
title="List of all wiki pages that link here [alt-shift-j]"
accesskey="j">What links here</a></li>
<li id="t-recentchangeslinked"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChangesLinked/Reference_Manual"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:RecentChangesLinked/Reference_Manual"
title="Recent changes in pages linked from this page [alt-shift-k]"
accesskey="k">Related changes</a></li>
-<li id="t-upload"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:Upload"
- title="Upload files [alt-shift-u]" accesskey="u">Upload file</a></li>
<li id="t-specialpages"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:SpecialPages"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Special:SpecialPages"
title="List of all special pages [alt-shift-q]" accesskey="q">Special
pages</a></li>
<li id="t-print"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&printable=yes&printable=yes"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&printable=yes&printable=yes"
rel="alternate" title="Printable version of this page [alt-shift-p]"
accesskey="p">Printable version</a></li> <li id="t-permalink"><a
-href="https://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&oldid=507"
+href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual&oldid=441"
title="Permanent link to this revision of the page">Permanent link</a></li>
</ul>
</div>
@@ -6394,15 +5922,15 @@
src="Reference_Manual_files/poweredby_mediawiki_88x31.png" alt="Powered
by MediaWiki"></a></div>
<ul id="f-list">
- <li id="lastmod"> This page was last modified on 23 July 2012, at
-17:54.</li>
- <li id="viewcount">This page has been accessed 142,275 times.</li>
+ <li id="lastmod"> This page was last modified on 30 September 2011,
+ at 15:04.</li>
+ <li id="viewcount">This page has been accessed 55,206 times.</li>
</ul>
</div>
</div>
<script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
-<!-- Served in 1.261 secs. -->
+<!-- Served in 1.178 secs. -->
<script type="text/javascript">
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/mlogc/mlogc-batch-load.pl.in
^
|
@@ -92,7 +92,7 @@
next;
};
if ($sect eq 'A') {
- if ($line =~ m%^(\[[^:]+:\d+:\d+:\d+ [^\]]+\]) (\S+) (\S+) (\d+) (\S+) (\d+)%) {
+ if ($line =~ m%^(\[[-\d/: a-zA-Z]{27}\]) (\S+) (\S+) (\d+) (\S+) (\d+)%) {
$data{logtime} = $1;
$data{uniqueid} = $2;
$data{remote_addr} = $3;
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/mlogc/mlogc.c
^
|
@@ -421,13 +421,10 @@
{
char linebuf[4100];
int line_count = -1;
- int line_size = 0;
- apr_status_t rc = 0;
- char *p = NULL;
for(;;) {
- memset(linebuf, 0, 4100);
- rc = apr_file_gets(linebuf, 4096, fd);
+ apr_status_t rc = apr_file_gets(linebuf, 4096, fd);
+ char *p;
if (rc == APR_EOF) break;
if (rc != APR_SUCCESS) {
@@ -443,16 +440,14 @@
}
p = &linebuf[0];
- line_size = strlen(p);
/* Remove the \n from the end of the line. */
- while(*p != '\0' && line_size > 0) {
+ while(*p != '\0') {
if (*p == '\n') {
*p = '\0';
break;
}
p++;
- line_size--;
}
if (linebuf[0] == '#') { /* Ignore comments. */
|
[-]
[+]
|
Changed |
modsecurity-apache_2.6.2.tar.bz2/tests/tfn/hexDecode.t
^
|
@@ -21,7 +21,7 @@
type => "tfn",
name => "hexDecode",
input => "546573740043617365",
- output => "Test\0Case",
+ output => "Test00Case",
ret => 1,
},
@@ -31,20 +31,20 @@
type => "tfn",
name => "hexDecode",
input => "01234567890a0z01234567890a",
- output => "\x01#Eg\x89\x0a#\x01#Eg\x89\x0a",
+ output => "01#Eg890a0z01#Eg890a",
ret => 1,
},
{
type => "tfn",
name => "hexDecode",
input => "01234567890az",
- output => "\x01#Eg\x89\x0a",
+ output => "01#Eg890az",
ret => 1,
},
{
type => "tfn",
name => "hexDecode",
input => "01234567890a0",
- output => "\x01#Eg\x89\x0a",
+ output => "01#Eg890a0",
ret => 1,
},
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files
^
|
-(directory)
|
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/600px-Apache_request_cycle-modsecurity.jpg
^
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/ajax.js
^
|
@@ -1,167 +0,0 @@
-// remote scripting library
-// (c) copyright 2005 modernmethod, inc
-var sajax_debug_mode = false;
-var sajax_request_type = "GET";
-
-/**
-* if sajax_debug_mode is true, this function outputs given the message into
-* the element with id = sajax_debug; if no such element exists in the document,
-* it is injected.
-*/
-function sajax_debug(text) {
- if (!sajax_debug_mode) return false;
-
- var e= document.getElementById('sajax_debug');
-
- if (!e) {
- e= document.createElement("p");
- e.className= 'sajax_debug';
- e.id= 'sajax_debug';
-
- var b= document.getElementsByTagName("body")[0];
-
- if (b.firstChild) b.insertBefore(e, b.firstChild);
- else b.appendChild(e);
- }
-
- var m= document.createElement("div");
- m.appendChild( document.createTextNode( text ) );
-
- e.appendChild( m );
-
- return true;
-}
-
-/**
-* compatibility wrapper for creating a new XMLHttpRequest object.
-*/
-function sajax_init_object() {
- sajax_debug("sajax_init_object() called..")
- var A;
- try {
- // Try the new style before ActiveX so we don't
- // unnecessarily trigger warnings in IE 7 when
- // set to prompt about ActiveX usage
- A = new XMLHttpRequest();
- } catch (e) {
- try {
- A=new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- A=new ActiveXObject("Microsoft.XMLHTTP");
- } catch (oc) {
- A=null;
- }
- }
- }
- if (!A)
- sajax_debug("Could not create connection object.");
-
- return A;
-}
-
-/**
-* Perform an ajax call to mediawiki. Calls are handeled by AjaxDispatcher.php
-* func_name - the name of the function to call. Must be registered in $wgAjaxExportList
-* args - an array of arguments to that function
-* target - the target that will handle the result of the call. If this is a function,
-* if will be called with the XMLHttpRequest as a parameter; if it's an input
-* element, its value will be set to the resultText; if it's another type of
-* element, its innerHTML will be set to the resultText.
-*
-* Example:
-* sajax_do_call('doFoo', [1, 2, 3], document.getElementById("showFoo"));
-*
-* This will call the doFoo function via MediaWiki's AjaxDispatcher, with
-* (1, 2, 3) as the parameter list, and will show the result in the element
-* with id = showFoo
-*/
-function sajax_do_call(func_name, args, target) {
- var i, x, n;
- var uri;
- var post_data;
- uri = wgServer +
- ((wgScript == null) ? (wgScriptPath + "/index.php") : wgScript) +
- "?action=ajax";
- if (sajax_request_type == "GET") {
- if (uri.indexOf("?") == -1)
- uri = uri + "?rs=" + encodeURIComponent(func_name);
- else
- uri = uri + "&rs=" + encodeURIComponent(func_name);
- for (i = 0; i < args.length; i++)
- uri = uri + "&rsargs[]=" + encodeURIComponent(args[i]);
- //uri = uri + "&rsrnd=" + new Date().getTime();
- post_data = null;
- } else {
- post_data = "rs=" + encodeURIComponent(func_name);
- for (i = 0; i < args.length; i++)
- post_data = post_data + "&rsargs[]=" + encodeURIComponent(args[i]);
- }
- x = sajax_init_object();
- if (!x) {
- alert("AJAX not supported");
- return false;
- }
-
- try {
- x.open(sajax_request_type, uri, true);
- } catch (e) {
- if (window.location.hostname == "localhost") {
- alert("Your browser blocks XMLHttpRequest to 'localhost', try using a real hostname for development/testing.");
- }
- throw e;
- }
- if (sajax_request_type == "POST") {
- x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
- x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- }
- x.setRequestHeader("Pragma", "cache=yes");
- x.setRequestHeader("Cache-Control", "no-transform");
- x.onreadystatechange = function() {
- if (x.readyState != 4)
- return;
-
- sajax_debug("received (" + x.status + " " + x.statusText + ") " + x.responseText);
-
- //if (x.status != 200)
- // alert("Error: " + x.status + " " + x.statusText + ": " + x.responseText);
- //else
-
- if ( typeof( target ) == 'function' ) {
- target( x );
- }
- else if ( typeof( target ) == 'object' ) {
- if ( target.tagName == 'INPUT' ) {
- if (x.status == 200) target.value= x.responseText;
- //else alert("Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")");
- }
- else {
- if (x.status == 200) target.innerHTML = x.responseText;
- else target.innerHTML= "<div class='error'>Error: " + x.status + " " + x.statusText + " (" + x.responseText + ")</div>";
- }
- }
- else {
- alert("bad target for sajax_do_call: not a function or object: " + target);
- }
-
- return;
- }
-
- sajax_debug(func_name + " uri = " + uri + " / post = " + post_data);
- x.send(post_data);
- sajax_debug(func_name + " waiting..");
- delete x;
-
- return true;
-}
-
-/**
- * @return boolean whether the browser supports XMLHttpRequest
- */
-function wfSupportsAjax() {
- var request = sajax_init_object();
- var supportsAjax = request ? true : false;
- delete request;
- return supportsAjax;
-}
-
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/commonPrint.css
^
|
@@ -1,267 +0,0 @@
-/*
-** MediaWiki Print style sheet for CSS2-capable browsers.
-** Copyright Gabriel Wicke, http://www.aulinx.de/
-**
-** Derived from the plone (http://plone.org/) styles
-** Copyright Alexander Limi
-*/
-
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-a.stub,
-a.new{ color:#ba0000; text-decoration:none; }
-
-#toc {
- /*border:1px solid #2f6fab;*/
- border:1px solid #aaaaaa;
- background-color:#f9f9f9;
- padding:5px;
-}
-.tocindent {
- margin-left: 2em;
-}
-.tocline {
- margin-bottom: 0px;
-}
-
-/* images */
-div.floatright {
- float: right;
- clear: right;
- margin: 0;
- position:relative;
- border: 0.5em solid White;
- border-width: 0.5em 0 0.8em 1.4em;
-}
-div.floatright p { font-style: italic;}
-div.floatleft {
- float: left;
- margin: 0.3em 0.5em 0.5em 0;
- position:relative;
- border: 0.5em solid White;
- border-width: 0.5em 1.4em 0.8em 0;
-}
-div.floatleft p { font-style: italic; }
-/* thumbnails */
-div.thumb {
- margin-bottom: 0.5em;
- border-style: solid; border-color: White;
- width: auto;
- overflow: hidden;
-}
-div.thumb div {
- border:1px solid #cccccc;
- padding: 3px !important;
- background-color:#f9f9f9;
- font-size: 94%;
- text-align: center;
-}
-div.thumb div a img {
- border:1px solid #cccccc;
-}
-div.thumb div div.thumbcaption {
- border: none;
- padding: 0.3em 0 0.1em 0;
-}
-div.magnify { display: none; }
-div.tright {
- float: right;
- clear: right;
- border-width: 0.5em 0 0.8em 1.4em;
-}
-div.tleft {
- float: left;
- margin-right:0.5em;
- border-width: 0.5em 1.4em 0.8em 0;
-}
-img.thumbborder {
- border: 1px solid #dddddd;
-}
-
-/* table standards */
-table.rimage {
- float:right;
- width:1pt;
- position:relative;
- margin-left:1em;
- margin-bottom:1em;
- text-align:center;
-}
-
-body {
- background: White;
- /*font-size: 11pt !important;*/
- color: Black;
- margin: 0;
- padding: 0;
-}
-
-.noprint,
-div#jump-to-nav,
-div.top,
-div#column-one,
-#colophon,
-.editsection,
-.toctoggle,
-.tochidden,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#viewcount,
-li#about,
-li#disclaimer,
-li#privacy {
- /* Hides all the elements irrelevant for printing */
- display: none;
-}
-
-ul {
- list-style-type: square;
-}
-
-#content {
- background: none;
- border: none ! important;
- padding: 0 ! important;
- margin: 0 ! important;
-}
-#footer {
- background : white;
- color : black;
- border-top: 1px solid black;
-}
-
-h1, h2, h3, h4, h5, h6 {
- font-weight: bold;
-}
-
-p, .documentDescription {
- margin: 1em 0 ! important;
- line-height: 1.2em;
-}
-
-.tocindent p {
- margin: 0 0 0 0 ! important;
-}
-
-pre {
- border: 1pt dashed black;
- white-space: pre;
- font-size: 8pt;
- overflow: auto;
- padding: 1em 0;
- background : white;
- color : black;
-}
-
-table.listing,
-table.listing td {
- border: 1pt solid black;
- border-collapse: collapse;
-}
-
-a {
- color: Black !important;
- background: none !important;
- padding: 0 !important;
-}
-
-a:link, a:visited {
- color: #520;
- background: transparent;
- text-decoration: underline;
-}
-
-#content a.external.text:after, #content a.external.autonumber:after {
- /* Expand URLs for printing */
- content: " (" attr(href) ") ";
-}
-
-#globalWrapper {
- width: 100% !important;
- min-width: 0 !important;
-}
-
-#content {
- background : white;
- color : black;
-}
-
-#column-content {
- margin: 0 !important;
-}
-
-#column-content #content {
- padding: 1em;
- margin: 0 !important;
-}
-/* MSIE/Win doesn't understand 'inherit' */
-a, a.external, a.new, a.stub {
- color: black ! important;
- text-decoration: none ! important;
-}
-
-/* Continue ... */
-a, a.external, a.new, a.stub {
- color: inherit ! important;
- text-decoration: inherit ! important;
-}
-
-img { border: none; }
-img.tex { vertical-align: middle; }
-span.texhtml { font-family: serif; }
-
-#siteNotice { display: none; }
-
-table.gallery {
- border: 1px solid #cccccc;
- margin: 2px;
- padding: 2px;
- background-color:#ffffff;
-}
-
-table.gallery tr {
- vertical-align:top;
-}
-
-div.gallerybox {
- border: 1px solid #cccccc;
- margin: 2px;
- background-color:#f9f9f9;
- width: 150px;
-}
-
-div.gallerybox div.thumb {
- text-align: center;
- border: 1px solid #cccccc;
- margin: 2px;
-}
-
-div.gallerytext {
- font-size: 94%;
- padding: 2px 4px;
-}
-
-/*
-** Diff rendering
-*/
-table.diff { background:white; }
-td.diff-otitle { background:#ffffff; }
-td.diff-ntitle { background:#ffffff; }
-td.diff-addedline {
- background:#ccffcc;
- font-size: smaller;
- border: solid 2px black;
-}
-td.diff-deletedline {
- background:#ffffaa;
- font-size: smaller;
- border: dotted 2px black;
-}
-td.diff-context {
- background:#eeeeee;
- font-size: smaller;
-}
-.diffchange {
- color: silver;
- font-weight: bold;
- text-decoration: underline;
-}
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index.css
^
|
@@ -1 +0,0 @@
-/* CSS placed here will affect the print output */
\ No newline at end of file
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index.php
^
|
@@ -1,8 +0,0 @@
-/* generated javascript */
-var skin = 'sourceforge';
-var stylepath = '/apps/mediawiki/mod-security/skins';
-
-/* MediaWiki:Common.js */
-/* Any JavaScript here will be loaded for all users on every page load. */
-
-/* MediaWiki:Sourceforge.js */
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index_002.css
^
|
@@ -1,2 +0,0 @@
-/* generated user stylesheet */
-a.new, #quickbar a.new { color: #CC2200; }
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index_003.css
^
|
@@ -1 +0,0 @@
-/* CSS placed here will be applied to all skins */
\ No newline at end of file
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/index_004.css
^
|
@@ -1 +0,0 @@
-/* Empty */
\ No newline at end of file
|
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/poweredby_mediawiki_88x31.png
^
|
[-]
[+]
|
Deleted |
modsecurity-apache_2.6.8.tar.bz2/doc/Reference_Manual_files/wikibits.js
^
|
@@ -1,1000 +0,0 @@
-// MediaWiki JavaScript support functions
-
-var clientPC = navigator.userAgent.toLowerCase(); // Get client info
-var is_gecko = /gecko/.test( clientPC ) &&
- !/khtml|spoofer|netscape\/7\.0/.test(clientPC);
-var webkit_match = clientPC.match(/applewebkit\/(\d+)/);
-if (webkit_match) {
- var is_safari = clientPC.indexOf('applewebkit') != -1 &&
- clientPC.indexOf('spoofer') == -1;
- var is_safari_win = is_safari && clientPC.indexOf('windows') != -1;
- var webkit_version = parseInt(webkit_match[1]);
-}
-var is_khtml = navigator.vendor == 'KDE' ||
- ( document.childNodes && !document.all && !navigator.taintEnabled );
-// For accesskeys; note that FF3+ is included here!
-var is_ff2 = /firefox\/[2-9]|minefield\/3/.test( clientPC );
-var is_ff2_ = /firefox\/2/.test( clientPC );
-// These aren't used here, but some custom scripts rely on them
-var is_ff2_win = is_ff2 && clientPC.indexOf('windows') != -1;
-var is_ff2_x11 = is_ff2 && clientPC.indexOf('x11') != -1;
-if (clientPC.indexOf('opera') != -1) {
- var is_opera = true;
- var is_opera_preseven = window.opera && !document.childNodes;
- var is_opera_seven = window.opera && document.childNodes;
- var is_opera_95 = /opera\/(9.[5-9]|[1-9][0-9])/.test( clientPC );
-}
-
-// Global external objects used by this script.
-/*extern ta, stylepath, skin */
-
-// add any onload functions in this hook (please don't hard-code any events in the xhtml source)
-var doneOnloadHook;
-
-if (!window.onloadFuncts) {
- var onloadFuncts = [];
-}
-
-function addOnloadHook(hookFunct) {
- // Allows add-on scripts to add onload functions
- if(!doneOnloadHook) {
- onloadFuncts[onloadFuncts.length] = hookFunct;
- } else {
- hookFunct(); // bug in MSIE script loading
- }
-}
-
-function hookEvent(hookName, hookFunct) {
- addHandler(window, hookName, hookFunct);
-}
-
-function importScript(page) {
- var uri = wgScript + '?title=' +
- encodeURIComponent(page.replace(/ /g,'_')).replace('%2F','/').replace('%3A',':') +
- '&action=raw&ctype=text/javascript';
- return importScriptURI(uri);
-}
-
-var loadedScripts = {}; // included-scripts tracker
-function importScriptURI(url) {
- if (loadedScripts[url]) {
- return null;
- }
- loadedScripts[url] = true;
- var s = document.createElement('script');
- s.setAttribute('src',url);
- s.setAttribute('type','text/javascript');
- document.getElementsByTagName('head')[0].appendChild(s);
- return s;
-}
-
-function importStylesheet(page) {
- return importStylesheetURI(wgScript + '?action=raw&ctype=text/css&title=' + encodeURIComponent(page.replace(/ /g,'_')));
-}
-
-function importStylesheetURI(url) {
- return document.createStyleSheet ? document.createStyleSheet(url) : appendCSS('@import "' + url + '";');
-}
-
-function appendCSS(text) {
- var s = document.createElement('style');
- s.type = 'text/css';
- s.rel = 'stylesheet';
- if (s.styleSheet) s.styleSheet.cssText = text //IE
- else s.appendChild(document.createTextNode(text + '')) //Safari sometimes borks on null
- document.getElementsByTagName('head')[0].appendChild(s);
- return s;
-}
-
-// special stylesheet links
-if (typeof stylepath != 'undefined' && typeof skin != 'undefined') {
- if (is_opera_preseven) {
- importStylesheetURI(stylepath+'/'+skin+'/Opera6Fixes.css');
- } else if (is_opera_seven && !is_opera_95) {
- importStylesheetURI(stylepath+'/'+skin+'/Opera7Fixes.css');
- } else if (is_opera_95) {
- importStylesheetURI(stylepath+'/'+skin+'/Opera9Fixes.css');
- } else if (is_khtml) {
- importStylesheetURI(stylepath+'/'+skin+'/KHTMLFixes.css');
- } else if (is_ff2_) {
- importStylesheetURI(stylepath+'/'+skin+'/FF2Fixes.css');
- }
-}
-
-if (wgBreakFrames) {
- // Un-trap us from framesets
- if (window.top != window) {
- window.top.location = window.location;
- }
-}
-
-function showTocToggle() {
- if (document.createTextNode) {
- // Uses DOM calls to avoid document.write + XHTML issues
-
- var linkHolder = document.getElementById('toctitle');
- if (!linkHolder) {
- return;
- }
-
- var outerSpan = document.createElement('span');
- outerSpan.className = 'toctoggle';
-
- var toggleLink = document.createElement('a');
- toggleLink.id = 'togglelink';
- toggleLink.className = 'internal';
- toggleLink.href = 'javascript:toggleToc()';
- toggleLink.appendChild(document.createTextNode(tocHideText));
-
- outerSpan.appendChild(document.createTextNode('['));
- outerSpan.appendChild(toggleLink);
- outerSpan.appendChild(document.createTextNode(']'));
-
- linkHolder.appendChild(document.createTextNode(' '));
- linkHolder.appendChild(outerSpan);
-
- var cookiePos = document.cookie.indexOf("hidetoc=");
- if (cookiePos > -1 && document.cookie.charAt(cookiePos + 8) == 1) {
- toggleToc();
- }
- }
-}
-
-function changeText(el, newText) {
- // Safari work around
- if (el.innerText) {
- el.innerText = newText;
- } else if (el.firstChild && el.firstChild.nodeValue) {
- el.firstChild.nodeValue = newText;
- }
-}
-
-function toggleToc() {
- var toc = document.getElementById('toc').getElementsByTagName('ul')[0];
- var toggleLink = document.getElementById('togglelink');
-
- if (toc && toggleLink && toc.style.display == 'none') {
- changeText(toggleLink, tocHideText);
- toc.style.display = 'block';
- document.cookie = "hidetoc=0";
- } else {
- changeText(toggleLink, tocShowText);
- toc.style.display = 'none';
- document.cookie = "hidetoc=1";
- }
-}
-
-var mwEditButtons = [];
-var mwCustomEditButtons = []; // eg to add in MediaWiki:Common.js
-
-function escapeQuotes(text) {
- var re = new RegExp("'","g");
- text = text.replace(re,"\\'");
- re = new RegExp("\\n","g");
- text = text.replace(re,"\\n");
- return escapeQuotesHTML(text);
-}
-
-function escapeQuotesHTML(text) {
- var re = new RegExp('&',"g");
- text = text.replace(re,"&");
- re = new RegExp('"',"g");
- text = text.replace(re,""");
- re = new RegExp('<',"g");
- text = text.replace(re,"<");
- re = new RegExp('>',"g");
- text = text.replace(re,">");
- return text;
-}
-
-
-/**
- * Set the accesskey prefix based on browser detection.
- */
-var tooltipAccessKeyPrefix = 'alt-';
-if (is_opera) {
- tooltipAccessKeyPrefix = 'shift-esc-';
-} else if (!is_safari_win && is_safari && webkit_version > 526) {
- tooltipAccessKeyPrefix = 'ctrl-alt-';
-} else if (!is_safari_win && (is_safari
- || clientPC.indexOf('mac') != -1
- || clientPC.indexOf('konqueror') != -1 )) {
- tooltipAccessKeyPrefix = 'ctrl-';
-} else if (is_ff2) {
- tooltipAccessKeyPrefix = 'alt-shift-';
-}
-var tooltipAccessKeyRegexp = /\[(ctrl-)?(alt-)?(shift-)?(esc-)?(.)\]$/;
-
-/**
- * Add the appropriate prefix to the accesskey shown in the tooltip.
- * If the nodeList parameter is given, only those nodes are updated;
- * otherwise, all the nodes that will probably have accesskeys by
- * default are updated.
- *
- * @param Array nodeList -- list of elements to update
- */
-function updateTooltipAccessKeys( nodeList ) {
- if ( !nodeList ) {
- // skins without a "column-one" element don't seem to have links with accesskeys either
- var columnOne = document.getElementById("column-one");
- if ( columnOne )
- updateTooltipAccessKeys( columnOne.getElementsByTagName("a") );
- // these are rare enough that no such optimization is needed
- updateTooltipAccessKeys( document.getElementsByTagName("input") );
- updateTooltipAccessKeys( document.getElementsByTagName("label") );
- return;
- }
-
- for ( var i = 0; i < nodeList.length; i++ ) {
- var element = nodeList[i];
- var tip = element.getAttribute("title");
- if ( tip && tooltipAccessKeyRegexp.exec(tip) ) {
- tip = tip.replace(tooltipAccessKeyRegexp,
- "["+tooltipAccessKeyPrefix+"$5]");
- element.setAttribute("title", tip );
- }
- }
-}
-
-/**
- * Add a link to one of the portlet menus on the page, including:
- *
- * p-cactions: Content actions (shown as tabs above the main content in Monobook)
- * p-personal: Personal tools (shown at the top right of the page in Monobook)
- * p-navigation: Navigation
- * p-tb: Toolbox
- *
- * This function exists for the convenience of custom JS authors. All
- * but the first three parameters are optional, though providing at
- * least an id and a tooltip is recommended.
- *
- * By default the new link will be added to the end of the list. To
- * add the link before a given existing item, pass the DOM node of
- * that item (easily obtained with document.getElementById()) as the
- * nextnode parameter; to add the link _after_ an existing item, pass
- * the node's nextSibling instead.
- *
- * @param String portlet -- id of the target portlet ("p-cactions", "p-personal", "p-navigation" or "p-tb")
- * @param String href -- link URL
- * @param String text -- link text (will be automatically lowercased by CSS for p-cactions in Monobook)
- * @param String id -- id of the new item, should be unique and preferably have the appropriate prefix ("ca-", "pt-", "n-" or "t-")
- * @param String tooltip -- text to show when hovering over the link, without accesskey suffix
- * @param String accesskey -- accesskey to activate this link (one character, try to avoid conflicts)
- * @param Node nextnode -- the DOM node before which the new item should be added, should be another item in the same list
- *
- * @return Node -- the DOM node of the new item (an LI element) or null
- */
-function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode) {
- var node = document.getElementById(portlet);
- if ( !node ) return null;
- node = node.getElementsByTagName( "ul" )[0];
- if ( !node ) return null;
-
- var link = document.createElement( "a" );
- link.appendChild( document.createTextNode( text ) );
- link.href = href;
-
- var item = document.createElement( "li" );
- item.appendChild( link );
- if ( id ) item.id = id;
-
- if ( accesskey ) {
- link.setAttribute( "accesskey", accesskey );
- tooltip += " ["+accesskey+"]";
- }
- if ( tooltip ) {
- link.setAttribute( "title", tooltip );
- }
- if ( accesskey && tooltip ) {
- updateTooltipAccessKeys( new Array( link ) );
- }
-
- if ( nextnode && nextnode.parentNode == node )
- node.insertBefore( item, nextnode );
- else
- node.appendChild( item ); // IE compatibility (?)
-
- return item;
-}
-
-function getInnerText(el) {
- if (typeof el == "string") return el;
- if (typeof el == "undefined") { return el };
- if (el.textContent) return el.textContent; // not needed but it is faster
- if (el.innerText) return el.innerText; // IE doesn't have textContent
- var str = "";
-
- var cs = el.childNodes;
- var l = cs.length;
- for (var i = 0; i < l; i++) {
- switch (cs[i].nodeType) {
- case 1: //ELEMENT_NODE
- str += ts_getInnerText(cs[i]);
- break;
- case 3: //TEXT_NODE
- str += cs[i].nodeValue;
- break;
- }
- }
- return str;
-}
-
-
-/**
- * Set up accesskeys/tooltips from the deprecated ta array. If doId
- * is specified, only set up for that id. Note that this function is
- * deprecated and will not be supported indefinitely -- use
- * updateTooltipAccessKey() instead.
- *
- * @param mixed doId string or null
- */
-function akeytt( doId ) {
- // A lot of user scripts (and some of the code below) break if
- // ta isn't defined, so we make sure it is. Explictly using
- // window.ta avoids a "ta is not defined" error.
- if (!window.ta) window.ta = new Array;
-
- // Make a local, possibly restricted, copy to avoid clobbering
- // the original.
- var ta;
- if ( doId ) {
- ta = [doId];
- } else {
- ta = window.ta;
- }
-
- // Now deal with evil deprecated ta
- var watchCheckboxExists = document.getElementById( 'wpWatchthis' ) ? true : false;
- for (var id in ta) {
- var n = document.getElementById(id);
- if (n) {
- var a = null;
- var ak = '';
- // Are we putting accesskey in it
- if (ta[id][0].length > 0) {
- // Is this object a object? If not assume it's the next child.
-
- if (n.nodeName.toLowerCase() == "a") {
- a = n;
- } else {
- a = n.childNodes[0];
- }
- // Don't add an accesskey for the watch tab if the watch
- // checkbox is also available.
- if (a && ((id != 'ca-watch' && id != 'ca-unwatch') || !watchCheckboxExists)) {
- a.accessKey = ta[id][0];
- ak = ' ['+tooltipAccessKeyPrefix+ta[id][0]+']';
- }
- } else {
- // We don't care what type the object is when assigning tooltip
- a = n;
- ak = '';
- }
-
- if (a) {
- a.title = ta[id][1]+ak;
- }
- }
- }
-}
-
-var checkboxes;
-var lastCheckbox;
-
-function setupCheckboxShiftClick() {
- checkboxes = [];
- lastCheckbox = null;
- var inputs = document.getElementsByTagName('input');
- addCheckboxClickHandlers(inputs);
-}
-
-function addCheckboxClickHandlers(inputs, start) {
- if ( !start) start = 0;
-
- var finish = start + 250;
- if ( finish > inputs.length )
- finish = inputs.length;
-
- for ( var i = start; i < finish; i++ ) {
- var cb = inputs[i];
- if ( !cb.type || cb.type.toLowerCase() != 'checkbox' )
- continue;
- var end = checkboxes.length;
- checkboxes[end] = cb;
- cb.index = end;
- cb.onclick = checkboxClickHandler;
- }
-
- if ( finish < inputs.length ) {
- setTimeout( function () {
- addCheckboxClickHandlers(inputs, finish);
- }, 200 );
- }
-}
-
-function checkboxClickHandler(e) {
- if (typeof e == 'undefined') {
- e = window.event;
- }
- if ( !e.shiftKey || lastCheckbox === null ) {
- lastCheckbox = this.index;
- return true;
- }
- var endState = this.checked;
- var start, finish;
- if ( this.index < lastCheckbox ) {
- start = this.index + 1;
- finish = lastCheckbox;
- } else {
- start = lastCheckbox;
- finish = this.index - 1;
- }
- for (var i = start; i <= finish; ++i ) {
- checkboxes[i].checked = endState;
- }
- lastCheckbox = this.index;
- return true;
-}
-
-function toggle_element_activation(ida,idb) {
- if (!document.getElementById) {
- return;
- }
- document.getElementById(ida).disabled=true;
- document.getElementById(idb).disabled=false;
-}
-
-function toggle_element_check(ida,idb) {
- if (!document.getElementById) {
- return;
- }
- document.getElementById(ida).checked=true;
- document.getElementById(idb).checked=false;
-}
-
-/*
- Written by Jonathan Snook, http://www.snook.ca/jonathan
- Add-ons by Robert Nyman, http://www.robertnyman.com
- Author says "The credit comment is all it takes, no license. Go crazy with it!:-)"
- From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
-*/
-function getElementsByClassName(oElm, strTagName, oClassNames){
- var arrReturnElements = new Array();
- if ( typeof( oElm.getElementsByClassName ) == "function" ) {
- /* Use a native implementation where possible FF3, Saf3.2, Opera 9.5 */
- var arrNativeReturn = oElm.getElementsByClassName( oClassNames );
- if ( strTagName == "*" )
- return arrNativeReturn;
- for ( var h=0; h < arrNativeReturn.length; h++ ) {
- if( arrNativeReturn[h].tagName.toLowerCase() == strTagName.toLowerCase() )
- arrReturnElements[arrReturnElements.length] = arrNativeReturn[h];
- }
- return arrReturnElements;
- }
- var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
- var arrRegExpClassNames = new Array();
- if(typeof oClassNames == "object"){
- for(var i=0; i<oClassNames.length; i++){
- arrRegExpClassNames[arrRegExpClassNames.length] =
- new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)");
- }
- }
- else{
- arrRegExpClassNames[arrRegExpClassNames.length] =
- new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)");
- }
- var oElement;
- var bMatchesAll;
- for(var j=0; j<arrElements.length; j++){
- oElement = arrElements[j];
- bMatchesAll = true;
- for(var k=0; k<arrRegExpClassNames.length; k++){
- if(!arrRegExpClassNames[k].test(oElement.className)){
- bMatchesAll = false;
- break;
- }
- }
- if(bMatchesAll){
- arrReturnElements[arrReturnElements.length] = oElement;
- }
- }
- return (arrReturnElements)
-}
-
-function redirectToFragment(fragment) {
- var match = navigator.userAgent.match(/AppleWebKit\/(\d+)/);
- if (match) {
- var webKitVersion = parseInt(match[1]);
- if (webKitVersion < 420) {
- // Released Safari w/ WebKit 418.9.1 messes up horribly
- // Nightlies of 420+ are ok
- return;
- }
- }
- if (is_gecko) {
- // Mozilla needs to wait until after load, otherwise the window doesn't scroll
- addOnloadHook(function () {
- if (window.location.hash == "")
- window.location.hash = fragment;
- });
- } else {
- if (window.location.hash == "")
- window.location.hash = fragment;
- }
-}
-
-/*
- * Table sorting script based on one (c) 1997-2006 Stuart Langridge and Joost
- * de Valk:
- * http://www.joostdevalk.nl/code/sortable-table/
- * http://www.kryogenix.org/code/browser/sorttable/
- *
- * @todo don't break on colspans/rowspans (bug 8028)
- * @todo language-specific digit grouping/decimals (bug 8063)
- * @todo support all accepted date formats (bug 8226)
- */
-
-var ts_image_path = stylepath+"/common/images/";
-var ts_image_up = "sort_up.gif";
-var ts_image_down = "sort_down.gif";
-var ts_image_none = "sort_none.gif";
-var ts_europeandate = wgContentLanguage != "en"; // The non-American-inclined can change to "true"
-var ts_alternate_row_colors = false;
-var ts_number_transform_table = null;
-var ts_number_regex = null;
-
-function sortables_init() {
- var idnum = 0;
- // Find all tables with class sortable and make them sortable
- var tables = getElementsByClassName(document, "table", "sortable");
- for (var ti = 0; ti < tables.length ; ti++) {
- if (!tables[ti].id) {
- tables[ti].setAttribute('id','sortable_table_id_'+idnum);
- ++idnum;
- }
- ts_makeSortable(tables[ti]);
- }
-}
-
-function ts_makeSortable(table) {
- var firstRow;
- if (table.rows && table.rows.length > 0) {
- if (table.tHead && table.tHead.rows.length > 0) {
- firstRow = table.tHead.rows[table.tHead.rows.length-1];
- } else {
- firstRow = table.rows[0];
- }
- }
- if (!firstRow) return;
-
- // We have a first row: assume it's the header, and make its contents clickable links
- for (var i = 0; i < firstRow.cells.length; i++) {
- var cell = firstRow.cells[i];
- if ((" "+cell.className+" ").indexOf(" unsortable ") == -1) {
- cell.innerHTML += ' '
- + '<a href="#" class="sortheader" '
- + 'onclick="ts_resortTable(this);return false;">'
- + '<span class="sortarrow">'
- + '<img src="'
- + ts_image_path
- + ts_image_none
- + '" alt="↓"/></span></a>';
- }
- }
- if (ts_alternate_row_colors) {
- ts_alternate(table);
- }
-}
-
-function ts_getInnerText(el) {
- return getInnerText( el );
-}
-
-function ts_resortTable(lnk) {
- // get the span
- var span = lnk.getElementsByTagName('span')[0];
-
- var td = lnk.parentNode;
- var tr = td.parentNode;
- var column = td.cellIndex;
-
- var table = tr.parentNode;
- while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
- table = table.parentNode;
- if (!table) return;
-
- if (table.rows.length <= 1) return;
-
- // Generate the number transform table if it's not done already
- if (ts_number_transform_table == null) {
- ts_initTransformTable();
- }
-
- // Work out a type for the column
- // Skip the first row if that's where the headings are
- var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);
-
- var itm = "";
- for (var i = rowStart; i < table.rows.length; i++) {
- if (table.rows[i].cells.length > column) {
- itm = ts_getInnerText(table.rows[i].cells[column]);
- itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
- if (itm != "") break;
- }
- }
-
- // TODO: bug 8226, localised date formats
- var sortfn = ts_sort_generic;
- var preprocessor = ts_toLowerCase;
- if (/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/.test(itm)) {
- preprocessor = ts_dateToSortKey;
- } else if (/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/.test(itm)) {
- preprocessor = ts_dateToSortKey;
- } else if (/^\d\d[\/.-]\d\d[\/.-]\d\d$/.test(itm)) {
- preprocessor = ts_dateToSortKey;
- // pound dollar euro yen currency cents
- } else if (/(^[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/.test(itm)) {
- preprocessor = ts_currencyToSortKey;
- } else if (ts_number_regex.test(itm)) {
- preprocessor = ts_parseFloat;
- }
-
- var reverse = (span.getAttribute("sortdir") == 'down');
-
- var newRows = new Array();
- var staticRows = new Array();
- for (var j = rowStart; j < table.rows.length; j++) {
- var row = table.rows[j];
- if((" "+row.className+" ").indexOf(" unsortable ") < 0) {
- var keyText = ts_getInnerText(row.cells[column]);
- var oldIndex = (reverse ? -j : j);
- var preprocessed = preprocessor( keyText );
-
- newRows[newRows.length] = new Array(row, preprocessed, oldIndex);
- } else staticRows[staticRows.length] = new Array(row, false, j-rowStart);
- }
-
- newRows.sort(sortfn);
-
- var arrowHTML;
- if (reverse) {
- arrowHTML = '<img src="'+ ts_image_path + ts_image_down + '" alt="↓"/>';
- newRows.reverse();
- span.setAttribute('sortdir','up');
- } else {
- arrowHTML = '<img src="'+ ts_image_path + ts_image_up + '" alt="↑"/>';
- span.setAttribute('sortdir','down');
- }
-
- for (var i = 0; i < staticRows.length; i++) {
- var row = staticRows[i];
- newRows.splice(row[2], 0, row);
- }
-
- // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
- // don't do sortbottom rows
- for (var i = 0; i < newRows.length; i++) {
- if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
- table.tBodies[0].appendChild(newRows[i][0]);
- }
- // do sortbottom rows only
- for (var i = 0; i < newRows.length; i++) {
- if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
- table.tBodies[0].appendChild(newRows[i][0]);
- }
-
- // Delete any other arrows there may be showing
- var spans = getElementsByClassName(tr, "span", "sortarrow");
- for (var i = 0; i < spans.length; i++) {
- spans[i].innerHTML = '<img src="'+ ts_image_path + ts_image_none + '" alt="↓"/>';
- }
- span.innerHTML = arrowHTML;
-
- if (ts_alternate_row_colors) {
- ts_alternate(table);
- }
-}
-
-function ts_initTransformTable() {
- if ( typeof wgSeparatorTransformTable == "undefined"
- || ( wgSeparatorTransformTable[0] == '' && wgDigitTransformTable[2] == '' ) )
- {
- digitClass = "[0-9,.]";
- ts_number_transform_table = false;
- } else {
- ts_number_transform_table = {};
- // Unpack the transform table
- // Separators
- ascii = wgSeparatorTransformTable[0].split("\t");
- localised = wgSeparatorTransformTable[1].split("\t");
- for ( var i = 0; i < ascii.length; i++ ) {
- ts_number_transform_table[localised[i]] = ascii[i];
- }
- // Digits
- ascii = wgDigitTransformTable[0].split("\t");
- localised = wgDigitTransformTable[1].split("\t");
- for ( var i = 0; i < ascii.length; i++ ) {
- ts_number_transform_table[localised[i]] = ascii[i];
- }
-
- // Construct regex for number identification
- digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '\\.'];
- maxDigitLength = 1;
- for ( var digit in ts_number_transform_table ) {
- // Escape regex metacharacters
- digits.push(
- digit.replace( /[\\\\$\*\+\?\.\(\)\|\{\}\[\]\-]/,
- function( s ) { return '\\' + s; } )
- );
- if (digit.length > maxDigitLength) {
- maxDigitLength = digit.length;
- }
- }
- if ( maxDigitLength > 1 ) {
- digitClass = '[' + digits.join( '', digits ) + ']';
- } else {
- digitClass = '(' + digits.join( '|', digits ) + ')';
- }
- }
-
- // We allow a trailing percent sign, which we just strip. This works fine
- // if percents and regular numbers aren't being mixed.
- ts_number_regex = new RegExp(
- "^(" +
- "[+-]?[0-9][0-9,]*(\\.[0-9,]*)?(E[+-]?[0-9][0-9,]*)?" + // Fortran-style scientific
- "|" +
- "[+-]?" + digitClass + "+%?" + // Generic localised
- ")$", "i"
- );
-}
-
-function ts_toLowerCase( s ) {
- return s.toLowerCase();
-}
-
-function ts_dateToSortKey(date) {
- // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
- if (date.length == 11) {
- switch (date.substr(3,3).toLowerCase()) {
- case "jan": var month = "01"; break;
- case "feb": var month = "02"; break;
- case "mar": var month = "03"; break;
- case "apr": var month = "04"; break;
- case "may": var month = "05"; break;
- case "jun": var month = "06"; break;
- case "jul": var month = "07"; break;
- case "aug": var month = "08"; break;
- case "sep": var month = "09"; break;
- case "oct": var month = "10"; break;
- case "nov": var month = "11"; break;
- case "dec": var month = "12"; break;
- // default: var month = "00";
- }
- return date.substr(7,4)+month+date.substr(0,2);
- } else if (date.length == 10) {
- if (ts_europeandate == false) {
- return date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
- } else {
- return date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
- }
- } else if (date.length == 8) {
- yr = date.substr(6,2);
- if (parseInt(yr) < 50) {
- yr = '20'+yr;
- } else {
- yr = '19'+yr;
- }
- if (ts_europeandate == true) {
- return yr+date.substr(3,2)+date.substr(0,2);
- } else {
- return yr+date.substr(0,2)+date.substr(3,2);
- }
- }
- return "00000000";
-}
-
-function ts_parseFloat( s ) {
- if ( !s ) {
- return 0;
- }
- if (ts_number_transform_table != false) {
- var newNum = '', c;
-
- for ( var p = 0; p < s.length; p++ ) {
- c = s.charAt( p );
- if (c in ts_number_transform_table) {
- newNum += ts_number_transform_table[c];
- } else {
- newNum += c;
- }
- }
- s = newNum;
- }
-
- num = parseFloat(s.replace(/,/g, ""));
- return (isNaN(num) ? 0 : num);
-}
-
-function ts_currencyToSortKey( s ) {
- return ts_parseFloat(s.replace(/[^0-9.,]/g,''));
-}
-
-function ts_sort_generic(a, b) {
- return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2];
-}
-
-function ts_alternate(table) {
- // Take object table and get all it's tbodies.
- var tableBodies = table.getElementsByTagName("tbody");
- // Loop through these tbodies
- for (var i = 0; i < tableBodies.length; i++) {
- // Take the tbody, and get all it's rows
- var tableRows = tableBodies[i].getElementsByTagName("tr");
- // Loop through these rows
- // Start at 1 because we want to leave the heading row untouched
- for (var j = 0; j < tableRows.length; j++) {
- // Check if j is even, and apply classes for both possible results
- var oldClasses = tableRows[j].className.split(" ");
- var newClassName = "";
- for (var k = 0; k < oldClasses.length; k++) {
- if (oldClasses[k] != "" && oldClasses[k] != "even" && oldClasses[k] != "odd")
- newClassName += oldClasses[k] + " ";
- }
- tableRows[j].className = newClassName + (j % 2 == 0 ? "even" : "odd");
- }
- }
-}
-
-/*
- * End of table sorting code
- */
-
-
-/**
- * Add a cute little box at the top of the screen to inform the user of
- * something, replacing any preexisting message.
- *
- * @param String -or- Dom Object message HTML to be put inside the right div
- * @param String className Used in adding a class; should be different for each
- * call to allow CSS/JS to hide different boxes. null = no class used.
- * @return Boolean True on success, false on failure
- */
-function jsMsg( message, className ) {
- if ( !document.getElementById ) {
- return false;
- }
- // We special-case skin structures provided by the software. Skins that
- // choose to abandon or significantly modify our formatting can just define
- // an mw-js-message div to start with.
- var messageDiv = document.getElementById( 'mw-js-message' );
- if ( !messageDiv ) {
- messageDiv = document.createElement( 'div' );
- if ( document.getElementById( 'column-content' )
- && document.getElementById( 'content' ) ) {
- // MonoBook, presumably
- document.getElementById( 'content' ).insertBefore(
- messageDiv,
- document.getElementById( 'content' ).firstChild
- );
- } else if ( document.getElementById('content')
- && document.getElementById( 'article' ) ) {
- // Non-Monobook but still recognizable (old-style)
- document.getElementById( 'article').insertBefore(
- messageDiv,
- document.getElementById( 'article' ).firstChild
- );
- } else {
- return false;
- }
- }
-
- messageDiv.setAttribute( 'id', 'mw-js-message' );
- messageDiv.style.display = 'block';
- if( className ) {
- messageDiv.setAttribute( 'class', 'mw-js-message-'+className );
- }
-
- if (typeof message === 'object') {
- while (messageDiv.hasChildNodes()) // Remove old content
- messageDiv.removeChild(messageDiv.firstChild);
- messageDiv.appendChild (message); // Append new content
- }
- else {
- messageDiv.innerHTML = message;
- }
- return true;
-}
-
-/**
- * Inject a cute little progress spinner after the specified element
- *
- * @param element Element to inject after
- * @param id Identifier string (for use with removeSpinner(), below)
- */
-function injectSpinner( element, id ) {
- var spinner = document.createElement( "img" );
- spinner.id = "mw-spinner-" + id;
- spinner.src = stylepath + "/common/images/spinner.gif";
- spinner.alt = spinner.title = "...";
- if( element.nextSibling ) {
- element.parentNode.insertBefore( spinner, element.nextSibling );
- } else {
- element.parentNode.appendChild( spinner );
- }
-}
-
-/**
- * Remove a progress spinner added with injectSpinner()
- *
- * @param id Identifier string
- */
-function removeSpinner( id ) {
- var spinner = document.getElementById( "mw-spinner-" + id );
- if( spinner ) {
- spinner.parentNode.removeChild( spinner );
- }
-}
-
-function runOnloadHook() {
- // don't run anything below this for non-dom browsers
- if (doneOnloadHook || !(document.getElementById && document.getElementsByTagName)) {
- return;
- }
-
- // set this before running any hooks, since any errors below
- // might cause the function to terminate prematurely
- doneOnloadHook = true;
-
- updateTooltipAccessKeys( null );
- akeytt( null );
- setupCheckboxShiftClick();
- sortables_init();
-
- // Run any added-on functions
- for (var i = 0; i < onloadFuncts.length; i++) {
- onloadFuncts[i]();
- }
-}
-
-/**
- * Add an event handler to an element
- *
- * @param Element element Element to add handler to
- * @param String attach Event to attach to
- * @param callable handler Event handler callback
- */
-function addHandler( element, attach, handler ) {
- if( window.addEventListener ) {
- element.addEventListener( attach, handler, false );
- } else if( window.attachEvent ) {
- element.attachEvent( 'on' + attach, handler );
- }
-}
-
-/**
- * Add a click event handler to an element
- *
- * @param Element element Element to add handler to
- * @param callable handler Event handler callback
- */
-function addClickHandler( element, handler ) {
- addHandler( element, 'click', handler );
-}
-
-/**
- * Removes an event handler from an element
- *
- * @param Element element Element to remove handler from
- * @param String remove Event to remove
- * @param callable handler Event handler callback to remove
- */
-function removeHandler( element, remove, handler ) {
- if( window.removeEventListener ) {
- element.removeEventListener( remove, handler, false );
- } else if( window.detachEvent ) {
- element.detachEvent( 'on' + remove, handler );
- }
-}
-//note: all skins should call runOnloadHook() at the end of html output,
-// so the below should be redundant. It's there just in case.
-hookEvent("load", runOnloadHook);
|
|
Deleted |
modsecurity-apache_2.7.4.tar.bz2
^
|
|
Deleted |
modsecurity-apache_2.7.5.tar.bz2
^
|
|
Deleted |
modsecurity-apache_2.7.7.tar.bz2
^
|
[-]
[+]
|
Changed |
zzz_asl_custom_exclude.conf
^
|
@@ -4,21 +4,3 @@
SecRuleRemoveById 350147
SecRuleRemoveById 350148
SecRuleRemoveById 340162
-SecRuleRemoveById 391213
-SecRuleRemoveById 340152
-
-# experimental
-SecRuleRemoveById 340202
-SecRuleRemoveById 340201
-SecRuleRemoveById 340204
-SecRuleRemoveById 340205
-SecRuleRemoveById 340206
-SecRuleRemoveById 340207
-SecRuleRemoveById 340208
-SecRuleRemoveById 340209
-SecRuleRemoveById 345400
-SecRuleRemoveById 345401
-SecRuleRemoveById 345402
-SecRuleRemoveById 345403
-SecRuleRemoveById 345404
-
|