summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2017-11-23 18:27:42 +0100
committerYann Ylavic <ylavic@apache.org>2017-11-23 18:27:42 +0100
commitaa69bb4dcd8909d02ed5fe2479f4cec0d607bd86 (patch)
tree76863425b6d5b10ce2acbab8e8683172034a28d2
parentOn the trunk: (diff)
downloadapache2-aa69bb4dcd8909d02ed5fe2479f4cec0d607bd86.tar.xz
apache2-aa69bb4dcd8909d02ed5fe2479f4cec0d607bd86.zip
mod_substitute: add runtime traces. PR 61132.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1816179 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--modules/filters/mod_substitute.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/modules/filters/mod_substitute.c b/modules/filters/mod_substitute.c
index d6d031211c..25dc142eb3 100644
--- a/modules/filters/mod_substitute.c
+++ b/modules/filters/mod_substitute.c
@@ -51,6 +51,7 @@ typedef struct subst_pattern_t {
apr_size_t replen;
apr_size_t patlen;
int flatten;
+ const char *from;
} subst_pattern_t;
typedef struct {
@@ -121,6 +122,8 @@ static void *merge_substitute_dcfg(apr_pool_t *p, void *basev, void *overv)
apr_bucket_delete(tmp_b); \
} while (0)
+#define CAP2LINEMAX(n) ((n) < (apr_size_t)200 ? (int)(n) : 200)
+
static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
apr_bucket_brigade *mybb,
apr_pool_t *pool)
@@ -165,6 +168,17 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
if (apr_bucket_read(b, &buff, &bytes, APR_BLOCK_READ)
== APR_SUCCESS) {
int have_match = 0;
+
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "Line read (%" APR_SIZE_T_FMT " bytes): %.*s",
+ bytes, CAP2LINEMAX(bytes), buff);
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "Replacing %s:'%s' by '%s'",
+ script->pattern ? "string" :
+ script->regexp ? "regex" :
+ "unknown",
+ script->from, script->replacement);
+
vb.strlen = 0;
if (script->pattern) {
const char *repl;
@@ -176,6 +190,9 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
apr_size_t repl_len = strlen(script->replacement);
while ((repl = apr_strmatch(script->pattern, buff, bytes)))
{
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "Matching found, result: '%s'",
+ script->replacement);
have_match = 1;
/* get offset into buff for pattern */
len = (apr_size_t) (repl - buff);
@@ -231,6 +248,9 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
*/
char *copy = ap_varbuf_pdup(pool, &vb, NULL, 0,
buff, bytes, &len);
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "New line (%" APR_SIZE_T_FMT " bytes): %.*s",
+ len, CAP2LINEMAX(len), copy);
tmp_b = apr_bucket_pool_create(copy, len, pool,
f->r->connection->bucket_alloc);
APR_BUCKET_INSERT_BEFORE(b, tmp_b);
@@ -248,6 +268,9 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
*/
if (space_left < b->length)
return APR_ENOMEM;
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "New line (%" APR_SIZE_T_FMT " bytes): %.*s",
+ bytes, CAP2LINEMAX(bytes), buff);
}
}
}
@@ -259,6 +282,8 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
while (!ap_regexec_len(script->regexp, pos, left,
AP_MAX_REG_MATCH, regm, 0)) {
apr_status_t rv;
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "Matching found");
have_match = 1;
if (script->flatten && !force_quick) {
/* check remaining buffer size */
@@ -276,6 +301,8 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
cfg->max_line_length - vb.strlen);
if (rv != APR_SUCCESS)
return rv;
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "Result: '%s'", vb.buf);
}
else {
apr_size_t repl_len;
@@ -296,6 +323,8 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
tmp_b = apr_bucket_transient_create(repl, repl_len,
f->r->connection->bucket_alloc);
APR_BUCKET_INSERT_BEFORE(b, tmp_b);
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "Result: '%s'", repl);
}
/*
* reset to past what we just did. pos now maps to b
@@ -311,6 +340,9 @@ static apr_status_t do_pattmatch(ap_filter_t *f, apr_bucket *inb,
*/
copy = ap_varbuf_pdup(pool, &vb, NULL, 0, pos, left,
&len);
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, f->r,
+ "New line (%" APR_SIZE_T_FMT " bytes): %.*s",
+ len, CAP2LINEMAX(len), copy);
tmp_b = apr_bucket_pool_create(copy, len, pool,
f->r->connection->bucket_alloc);
APR_BUCKET_INSERT_BEFORE(b, tmp_b);
@@ -647,6 +679,7 @@ static const char *set_pattern(cmd_parms *cmd, void *cfg, const char *line)
nscript->regexp = NULL;
nscript->replacement = NULL;
nscript->patlen = 0;
+ nscript->from = from;
if (is_pattern) {
nscript->patlen = strlen(from);