mirror of
https://github.com/apache/httpd.git
synced 2025-08-13 14:40:20 +00:00
ap_expr now allows kept_body() function to grab/use
response body if stored in r->kept_body git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1725755 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
3
CHANGES
3
CHANGES
@ -1,6 +1,9 @@
|
|||||||
-*- coding: utf-8 -*-
|
-*- coding: utf-8 -*-
|
||||||
Changes with Apache 2.5.0
|
Changes with Apache 2.5.0
|
||||||
|
|
||||||
|
*) ap_expr: expression support for r->kept_body if it exists.
|
||||||
|
[Jim Jagielski]
|
||||||
|
|
||||||
*) mod_http2: bytes read/written on slave connections are reported via the
|
*) mod_http2: bytes read/written on slave connections are reported via the
|
||||||
optional mod_logio functions. Fixes PR 58871.
|
optional mod_logio functions. Fixes PR 58871.
|
||||||
|
|
||||||
|
@ -501,6 +501,8 @@ listfunction ::= listfuncname "<strong>(</strong>" word "<strong>)</strong>"
|
|||||||
<td>Lookup operating system environment variable</td><td></td></tr>
|
<td>Lookup operating system environment variable</td><td></td></tr>
|
||||||
<tr><td><code>note</code></td>
|
<tr><td><code>note</code></td>
|
||||||
<td>Lookup request note</td><td></td></tr>
|
<td>Lookup request note</td><td></td></tr>
|
||||||
|
<tr><td><code>kept_body</code></td>
|
||||||
|
<td>Lookup response body if available in <code>r->kept_body</code></td><td></td></tr>
|
||||||
<tr><td><code>env</code></td>
|
<tr><td><code>env</code></td>
|
||||||
<td>Return first match of <code>note</code>, <code>reqenv</code>,
|
<td>Return first match of <code>note</code>, <code>reqenv</code>,
|
||||||
<code>osenv</code></td><td></td></tr>
|
<code>osenv</code></td><td></td></tr>
|
||||||
|
@ -1049,6 +1049,28 @@ static const char *req_table_func(ap_expr_eval_ctx_t *ctx, const void *data,
|
|||||||
return apr_table_get(t, arg);
|
return apr_table_get(t, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *kb_func(ap_expr_eval_ctx_t *ctx, const void *data,
|
||||||
|
const char *arg)
|
||||||
|
{
|
||||||
|
apr_off_t length;
|
||||||
|
apr_size_t len;
|
||||||
|
apr_status_t rv;
|
||||||
|
char *buf;
|
||||||
|
|
||||||
|
if (!ctx->r || !ctx->r->kept_body)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
rv = apr_brigade_length(ctx->r->kept_body, 1, &length);
|
||||||
|
len = (apr_size_t)length;;
|
||||||
|
if (rv != APR_SUCCESS || len == 0)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
buf = apr_palloc(ctx->r->pool, len);
|
||||||
|
apr_brigade_flatten(ctx->r->kept_body, buf, &len);
|
||||||
|
buf[len-1] = '\0'; /* ensure */
|
||||||
|
return (const char*)buf;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *env_func(ap_expr_eval_ctx_t *ctx, const void *data,
|
static const char *env_func(ap_expr_eval_ctx_t *ctx, const void *data,
|
||||||
const char *arg)
|
const char *arg)
|
||||||
{
|
{
|
||||||
@ -1785,6 +1807,7 @@ static const struct expr_provider_single string_func_providers[] = {
|
|||||||
{ unbase64_func, "unbase64", NULL, 0 },
|
{ unbase64_func, "unbase64", NULL, 0 },
|
||||||
{ sha1_func, "sha1", NULL, 0 },
|
{ sha1_func, "sha1", NULL, 0 },
|
||||||
{ md5_func, "md5", NULL, 0 },
|
{ md5_func, "md5", NULL, 0 },
|
||||||
|
{ kb_func, "kept_body", NULL, 0 },
|
||||||
#if APR_VERSION_AT_LEAST(1,6,0)
|
#if APR_VERSION_AT_LEAST(1,6,0)
|
||||||
{ ldap_func, "ldap", NULL, 0 },
|
{ ldap_func, "ldap", NULL, 0 },
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user