summaryrefslogtreecommitdiffstats
path: root/qmail-send.c
diff options
context:
space:
mode:
Diffstat (limited to 'qmail-send.c')
-rw-r--r--qmail-send.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/qmail-send.c b/qmail-send.c
index 6eac4d5..8c6237e 100644
--- a/qmail-send.c
+++ b/qmail-send.c
@@ -149,21 +149,18 @@ char *recip;
149 return 1; 149 return 1;
150 } 150 }
151 151
152 for (i = 0;i <= addr.len;++i) 152 if ((x = constmap(&mapvdoms, addr.s, addr.len)) && (*x)) {
153 if (!i || (i == at + 1) || (i == addr.len) || ((i > at) && (addr.s[i] == '.'))) 153 if (!stralloc_cats(&rwline,x)) return 0;
154 if (x = constmap(&mapvdoms,addr.s + i,addr.len - i)) { 154 if (!stralloc_cats(&rwline,"-")) return 0;
155 if (!*x) break; 155 if (!stralloc_cat(&rwline,&addr)) return 0;
156 if (!stralloc_cats(&rwline,x)) return 0; 156 if (!stralloc_0(&rwline)) return 0;
157 if (!stralloc_cats(&rwline,"-")) return 0; 157 return 1;
158 if (!stralloc_cat(&rwline,&addr)) return 0; 158 }
159 if (!stralloc_0(&rwline)) return 0; 159
160 return 1; 160 /* sub-addressing: ignore first and last character in local part */
161 }
162
163 static stralloc newaddr = {0}; 161 static stralloc newaddr = {0};
164 for (i = at; i > 0; --i) { 162 for (i = 1; i < at - 1; ++i) {
165 if (addr.s[i] == '+' /*|| addr.s[i] == '-'*/) { 163 if (addr.s[i] == '+' /*|| addr.s[i] == '-'*/) {
166 if (i == at - 1) break;
167 if (!stralloc_copyb(&newaddr, addr.s, i)) return 0; 164 if (!stralloc_copyb(&newaddr, addr.s, i)) return 0;
168 if (!stralloc_catb(&newaddr, addr.s + at, addr.len - at)) return 0; 165 if (!stralloc_catb(&newaddr, addr.s + at, addr.len - at)) return 0;
169 if (x = constmap(&mapvdoms, newaddr.s, newaddr.len)) { 166 if (x = constmap(&mapvdoms, newaddr.s, newaddr.len)) {
@@ -179,6 +176,17 @@ char *recip;
179 } 176 }
180 } 177 }
181 178
179 for (i = at + 1;i <= addr.len;++i)
180 if ((i == at + 1) || (i == addr.len) || ((i > at) && (addr.s[i] == '.')))
181 if (x = constmap(&mapvdoms,addr.s + i,addr.len - i)) {
182 if (!*x) break;
183 if (!stralloc_cats(&rwline,x)) return 0;
184 if (!stralloc_cats(&rwline,"-")) return 0;
185 if (!stralloc_cat(&rwline,&addr)) return 0;
186 if (!stralloc_0(&rwline)) return 0;
187 return 1;
188 }
189
182 if (!stralloc_cat(&rwline,&addr)) return 0; 190 if (!stralloc_cat(&rwline,&addr)) return 0;
183 if (!stralloc_0(&rwline)) return 0; 191 if (!stralloc_0(&rwline)) return 0;
184 return 2; 192 return 2;