summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/doc-docbook/spec.xfpt6
-rw-r--r--src/src/transport.c15
2 files changed, 15 insertions, 6 deletions
diff --git a/doc/doc-docbook/spec.xfpt b/doc/doc-docbook/spec.xfpt
index 410a166ab..aed97644c 100644
--- a/doc/doc-docbook/spec.xfpt
+++ b/doc/doc-docbook/spec.xfpt
@@ -18654,8 +18654,10 @@ avoided. The &%repeat_use%& option of the &%redirect%& router may be of help.
This option specifies a list of text headers,
colon-separated (by default, changeable in the usual way &<<SECTlistsepchange>>&),
that is associated with any addresses that are accepted by the router.
-Each item is separately expanded, at routing time. However, this
-option has no effect when an address is just being verified. The way in which
+However, the option has no effect when an address is just being verified.
+Each list item is separately expanded, at routing time.
+If an item ends in *, it will match any header with the same prefix.
+The way in which
the text is used to remove header lines at transport time is described in
section &<<SECTheadersaddrem>>&. Header lines are not actually removed until
the message is in the process of being transported. This means that references
diff --git a/src/src/transport.c b/src/src/transport.c
index ed3dcf0af..02994d2ca 100644
--- a/src/src/transport.c
+++ b/src/src/transport.c
@@ -738,10 +738,17 @@ for (header_line * h = header_list; h; h = h->next) if (h->type != htype_old)
return FALSE;
}
len = s ? Ustrlen(s) : 0;
- if (strncmpic(h->text, s, len) != 0) continue;
- ss = h->text + len;
- while (*ss == ' ' || *ss == '\t') ss++;
- if (*ss == ':') break;
+ if (len && s[len-1] == '*') /* trailing glob */
+ {
+ if (strncmpic(h->text, s, len-1) == 0) break;
+ }
+ else
+ {
+ if (strncmpic(h->text, s, len) != 0) continue;
+ ss = h->text + len;
+ while (*ss == ' ' || *ss == '\t') ss++;
+ if (*ss == ':') break;
+ }
}
if (s) { include_header = FALSE; break; }
}