53 lines
1.8 KiB
Diff
53 lines
1.8 KiB
Diff
--- orig/apache_1.3.26/src/modules/standard/mod_rewrite.h Wed Mar 13 13:05:34 2002
|
|
+++ apache_1.3.26/src/modules/standard/mod_rewrite.h Tue Oct 15 14:07:21 2002
|
|
@@ -447,6 +447,7 @@
|
|
static char *rewrite_mapfunc_toupper(request_rec *r, char *key);
|
|
static char *rewrite_mapfunc_tolower(request_rec *r, char *key);
|
|
static char *rewrite_mapfunc_escape(request_rec *r, char *key);
|
|
+static char *rewrite_mapfunc_ampescape(request_rec *r, char *key);
|
|
static char *rewrite_mapfunc_unescape(request_rec *r, char *key);
|
|
static char *select_random_value_part(request_rec *r, char *value);
|
|
static void rewrite_rand_init(void);
|
|
--- orig/apache_1.3.26/src/modules/standard/mod_rewrite.c Wed May 29 10:39:23 2002
|
|
+++ apache_1.3.26/src/modules/standard/mod_rewrite.c Tue Oct 15 14:07:49 2002
|
|
@@ -502,6 +502,9 @@
|
|
else if (strcmp(a2+4, "unescape") == 0) {
|
|
new->func = rewrite_mapfunc_unescape;
|
|
}
|
|
+ else if (strcmp(a2+4, "ampescape") == 0) {
|
|
+ new->func = rewrite_mapfunc_ampescape;
|
|
+ }
|
|
else if (sconf->state == ENGINE_ENABLED) {
|
|
return ap_pstrcat(cmd->pool, "RewriteMap: internal map not found:",
|
|
a2+4, NULL);
|
|
@@ -2982,6 +2985,30 @@
|
|
|
|
value = ap_escape_uri(r->pool, key);
|
|
return value;
|
|
+}
|
|
+
|
|
+static char *rewrite_mapfunc_ampescape(request_rec *r, char *key)
|
|
+{
|
|
+ /* We only need to escape the ampersand */
|
|
+ char *copy = ap_palloc(r->pool, 3 * strlen(key) + 3);
|
|
+ const unsigned char *s = (const unsigned char *)key;
|
|
+ unsigned char *d = (unsigned char *)copy;
|
|
+ unsigned c;
|
|
+
|
|
+ while ((c = *s)) {
|
|
+ if (c == '&') {
|
|
+ *d++ = '%';
|
|
+ *d++ = '2';
|
|
+ *d++ = '6';
|
|
+ }
|
|
+ else {
|
|
+ *d++ = c;
|
|
+ }
|
|
+ ++s;
|
|
+ }
|
|
+ *d = '\0';
|
|
+
|
|
+ return copy;
|
|
}
|
|
|
|
static char *rewrite_mapfunc_unescape(request_rec *r, char *key)
|