summaryrefslogtreecommitdiffstats
path: root/qmail-send.c
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2017-08-16 16:35:48 +0200
committermanuel <manuel@mausz.at>2017-08-16 16:35:48 +0200
commit3ee3b980a23b79479a650343a0fa876f68cad4bc (patch)
tree1fa3f1b2234a7a831274fe279290cf928c6e9ca5 /qmail-send.c
parent08fb6b6e2d13be7b24bbf993bdc99c56e16ca3c5 (diff)
downloadqmail-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.c19
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;