hdr_merge = 'g', /* merge (merge, but avoid duplicates) */
hdr_unset = 'u', /* unset header */
hdr_echo = 'e', /* echo headers from request to response */
- hdr_edit = 'r', /* change value by regexp, match once */
- hdr_edit_r = 'R' /* change value by regexp, everymatch */
+ hdr_edit = 'r' /* change value by regexp */
} hdr_actions;
/*
/* No string to parse with unset and echo commands */
if (hdr->action == hdr_unset ||
hdr->action == hdr_edit ||
- hdr->action == hdr_edit_r ||
hdr->action == hdr_echo) {
return NULL;
}
new->action = hdr_echo;
else if (!strcasecmp(action, "edit"))
new->action = hdr_edit;
- else if (!strcasecmp(action, "edit*"))
- new->action = hdr_edit_r;
else
return "first argument must be 'add', 'set', 'append', 'merge', "
- "'unset', 'echo', 'edit', or 'edit*'.";
+ "'unset', 'echo', or 'edit'.";
- if (new->action == hdr_edit || new->action == hdr_edit_r) {
+ if (new->action == hdr_edit) {
if (subs == NULL) {
return "Header edit requires a match and a substitution";
}
unsigned int nmatch = 10;
ap_regmatch_t pmatch[10];
const char *subs;
- const char *remainder;
char *ret;
int diffsz;
if (ap_regexec(hdr->regex, value, nmatch, pmatch, 0)) {
}
subs = ap_pregsub(pool, hdr->subs, value, nmatch, pmatch);
diffsz = strlen(subs) - (pmatch[0].rm_eo - pmatch[0].rm_so);
- if (hdr->action == hdr_edit) {
- remainder = value + pmatch[0].rm_eo;
- }
- else { /* recurse to edit multiple matches if applicable */
- remainder = process_regexp(hdr, value + pmatch[0].rm_eo, pool);
- diffsz += strlen(remainder) - strlen(value + pmatch[0].rm_eo);
- }
ret = apr_palloc(pool, strlen(value) + 1 + diffsz);
memcpy(ret, value, pmatch[0].rm_so);
strcpy(ret + pmatch[0].rm_so, subs);
echo_header, (void *) &v, r->headers_in, NULL);
break;
case hdr_edit:
- case hdr_edit_r:
if (apr_table_get(headers, hdr->header)) {
edit_do ed;