<tr><td><code>unescape</code></td>
<td>Unescape %hex encoded string, leaving encoded slashes alone;
return empty string if %00 is found</td><td></td></tr>
+ <tr><td><code>base64</code></td>
+ <td>Encode the string using base64 encoding</td><td></td></tr>
+ <tr><td><code>unbase64</code></td>
+ <td>Decode base64 encoded string, return truncated string if 0x00 is
+ found</td><td></td></tr>
<tr><td><code>file</code></td>
<td>Read contents from a file</td><td>yes</td></tr>
<tr><td><code>filesize</code></td>
return ap_escape_uri(ctx->p, arg);
}
+static const char *base64_func(ap_expr_eval_ctx_t *ctx, const void *data,
+ const char *arg)
+{
+ return ap_pbase64encode(ctx->p, (char *)arg);
+}
+
+static const char *unbase64_func(ap_expr_eval_ctx_t *ctx, const void *data,
+ const char *arg)
+{
+ return ap_pbase64decode(ctx->p, arg);
+}
+
#define MAX_FILE_SIZE 10*1024*1024
static const char *file_func(ap_expr_eval_ctx_t *ctx, const void *data,
char *arg)
{ unescape_func, "unescape", NULL, 0 },
{ file_func, "file", NULL, 1 },
{ filesize_func, "filesize", NULL, 1 },
+ { base64_func, "base64", NULL, 0 },
+ { unbase64_func, "unbase64", NULL, 0 },
{ NULL, NULL, NULL}
};
/* XXX: base64 encode/decode ? */