diff options
author | Peder Stray <peder.stray@gmail.com> | 2020-02-03 14:35:03 +0000 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2020-02-03 15:52:27 +0000 |
commit | 258dfd012173250b20520c8fb24329eb8998970a (patch) | |
tree | 61990c955558288753572eefbd2bdf5a50d4c647 | |
parent | 3f008c6043698cb7309be81ec15186a94166a037 (diff) |
Support tail-glob in headers_remove. Bug 159
-rw-r--r-- | doc/doc-docbook/spec.xfpt | 6 | ||||
-rw-r--r-- | src/src/transport.c | 15 |
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; } } |