diff options
| author | manuel <manuel@mausz.at> | 2017-08-16 16:35:48 +0200 |
|---|---|---|
| committer | manuel <manuel@mausz.at> | 2017-08-16 16:35:48 +0200 |
| commit | 3ee3b980a23b79479a650343a0fa876f68cad4bc (patch) | |
| tree | 1fa3f1b2234a7a831274fe279290cf928c6e9ca5 /qmail-send.c | |
| parent | 08fb6b6e2d13be7b24bbf993bdc99c56e16ca3c5 (diff) | |
| download | qmail-3ee3b980a23b79479a650343a0fa876f68cad4bc.tar.gz qmail-3ee3b980a23b79479a650343a0fa876f68cad4bc.tar.bz2 qmail-3ee3b980a23b79479a650343a0fa876f68cad4bc.zip | |
Implement plus addressing for virtualdomains
Diffstat (limited to 'qmail-send.c')
| -rw-r--r-- | qmail-send.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/qmail-send.c b/qmail-send.c index 0baed66..6eac4d5 100644 --- a/qmail-send.c +++ b/qmail-send.c | |||
| @@ -160,6 +160,25 @@ char *recip; | |||
| 160 | return 1; | 160 | return 1; |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | static stralloc newaddr = {0}; | ||
| 164 | for (i = at; i > 0; --i) { | ||
| 165 | if (addr.s[i] == '+' /*|| addr.s[i] == '-'*/) { | ||
| 166 | if (i == at - 1) break; | ||
| 167 | if (!stralloc_copyb(&newaddr, addr.s, i)) return 0; | ||
| 168 | if (!stralloc_catb(&newaddr, addr.s + at, addr.len - at)) return 0; | ||
| 169 | if (x = constmap(&mapvdoms, newaddr.s, newaddr.len)) { | ||
| 170 | if (!*x) break; | ||
| 171 | if (!stralloc_cats(&rwline, x)) return 0; | ||
| 172 | if (!stralloc_cats(&rwline, "-")) return 0; | ||
| 173 | addr.s[i] = '-'; | ||
| 174 | if (!stralloc_cat(&rwline, &addr)) return 0; | ||
| 175 | if (!stralloc_0(&rwline)) return 0; | ||
| 176 | return 1; | ||
| 177 | } | ||
| 178 | break; | ||
| 179 | } | ||
| 180 | } | ||
| 181 | |||
| 163 | if (!stralloc_cat(&rwline,&addr)) return 0; | 182 | if (!stralloc_cat(&rwline,&addr)) return 0; |
| 164 | if (!stralloc_0(&rwline)) return 0; | 183 | if (!stralloc_0(&rwline)) return 0; |
| 165 | return 2; | 184 | return 2; |
