PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * ap_expr: Expression parser: Add the ability to apply a SHA1 hash to
- strings within the parser.
- trunk patch: http://svn.apache.org/r1457450
- http://svn.apache.org/r1457610
- http://svn.apache.org/r1457995
- http://svn.apache.org/r1458003
- 2.4.x patch: trunk patch applies.
- +1: minfrin, rjung, jim
-
* remove useless tests ==> (*x && apr_isspace(*x))
trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1452128
2.4.x patch: trunk patch works (with some offset)
<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>sha1</code></td>
+ <td>Hash the string using SHA1, then encode the hash with hexadecimal
+ encoding</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>
#include "apr_lib.h"
#include "apr_fnmatch.h"
+#include "apr_base64.h"
+#include "apr_sha1.h"
#include <limits.h> /* for INT_MAX */
return ap_pbase64decode(ctx->p, arg);
}
+static const char *sha1_func(ap_expr_eval_ctx_t *ctx, const void *data,
+ const char *arg)
+{
+ apr_sha1_ctx_t context;
+ apr_byte_t sha1[APR_SHA1_DIGESTSIZE];
+ char *out;
+
+ out = apr_palloc(ctx->p, APR_SHA1_DIGESTSIZE*2+1);
+
+ apr_sha1_init(&context);
+ apr_sha1_update(&context, arg, strlen(arg));
+ apr_sha1_final(sha1, &context);
+
+ ap_bin2hex(sha1, APR_SHA1_DIGESTSIZE, out);
+
+ return out;
+}
+
#define MAX_FILE_SIZE 10*1024*1024
static const char *file_func(ap_expr_eval_ctx_t *ctx, const void *data,
char *arg)
{ filesize_func, "filesize", NULL, 1 },
{ base64_func, "base64", NULL, 0 },
{ unbase64_func, "unbase64", NULL, 0 },
+ { sha1_func, "sha1", NULL, 0 },
{ NULL, NULL, NULL}
};