Hello,
this is a patch to qmail-send and qmail-todo to manage domain "aliases". It
might be used in 2 cases :
1) You use the domain your-domain.com for emails but you also want all emails
sent to [EMAIL PROTECTED] or [EMAIL PROTECTED] to be redirected to
[EMAIL PROTECTED]
2) You have misconfigured email clients in servers or workstations on your
domain and you want any mail sent to [EMAIL PROTECTED] to be
redirected to [EMAIL PROTECTED]
This patch use a file control/aliasdomains with contains lines of the form :
alias-domain:real-domain
All email sent to [EMAIL PROTECTED] will be sent by qmail to [EMAIL PROTECTED]
You may use wildcards in alias-domain (it's like in the virtualdomains file).
In case 1 you setup this file as :
your-domain.net:your-domain.com
your-domain.org:your-domain.com
In case 2 you setup this file as:
.your-domain.com:your-domain.com
Is it possible to include this patch (and the patch to qmail-remote I just
posted on the list) in the qmail-ldap distribution ?
--- qmail-todo.c Thu Feb 20 21:44:31 2003
+++ qmail-todo.c.orig Thu Feb 20 21:38:20 2003
@@ -37,8 +37,6 @@
struct constmap maplocals;
stralloc vdoms = {0};
struct constmap mapvdoms;
-stralloc aliasdoms = {0};
-struct constmap mapaliasdoms;
stralloc envnoathost = {0};
char strnum[FMT_ULONG];
@@ -102,7 +100,6 @@
int j;
char *x;
static stralloc addr = {0};
- static stralloc addr2 = {0};
int at;
if (!stralloc_copys(&rwline,"T")) return 0;
@@ -124,40 +121,24 @@
at = byte_rchr(addr.s,addr.len,'@');
-
- if (!stralloc_copyb(&addr2, addr.s, at+1)) return 0;
-
- for (i=at+1; i <=addr.len; ++i) {
- if ((i == at + 1) || (i == addr.len) || (addr.s[i] == '.')) {
- if (x = constmap(&mapaliasdoms, addr.s+i, addr.len-i)) {
- if (!stralloc_cats(&addr2, x)) return 0;
- i=0;
- break;
- }
- }
- }
- if (i)
- if (!stralloc_copy(&addr2, &addr)) return 0;
-
-
- if (constmap(&maplocals,addr2.s + at + 1,addr2.len - at - 1)) {
- if (!stralloc_cat(&rwline,&addr2)) return 0;
+ if (constmap(&maplocals,addr.s + at + 1,addr.len - at - 1)) {
+ if (!stralloc_cat(&rwline,&addr)) return 0;
if (!stralloc_0(&rwline)) return 0;
return 1;
}
- for (i = 0;i <= addr2.len;++i)
- if (!i || (i == at + 1) || (i == addr2.len) || ((i > at) && (addr2.s[i] == '.')))
- if (x = constmap(&mapvdoms,addr2.s + i,addr2.len - i)) {
+ for (i = 0;i <= addr.len;++i)
+ if (!i || (i == at + 1) || (i == addr.len) || ((i > at) && (addr.s[i] == '.')))
+ if (x = constmap(&mapvdoms,addr.s + i,addr.len - i)) {
if (!*x) break;
if (!stralloc_cats(&rwline,x)) return 0;
if (!stralloc_cats(&rwline,"-")) return 0;
- if (!stralloc_cat(&rwline,&addr2)) return 0;
+ if (!stralloc_cat(&rwline,&addr)) return 0;
if (!stralloc_0(&rwline)) return 0;
return 1;
}
- if (!stralloc_cat(&rwline,&addr2)) return 0;
+ if (!stralloc_cat(&rwline,&addr)) return 0;
if (!stralloc_0(&rwline)) return 0;
return 2;
}
@@ -583,12 +564,6 @@
case 0: if (!constmap_init(&mappercenthack,"",0,0)) return 0; break;
case 1: if (!constmap_init(&mappercenthack,percenthack.s,percenthack.len,0)) return 0; break;
}
- switch(control_readfile(&aliasdoms,"control/aliasdomains",0))
- {
- case -1: return 0;
- case 0: if (!constmap_init(&mapaliasdoms,"",0,1)) return 0; break;
- case 1: if (!constmap_init(&mapaliasdoms,aliasdoms.s,aliasdoms.len,1)) return 0; break;
- }
switch(control_readfile(&vdoms,"control/virtualdomains",0))
{
case -1: return 0;
@@ -600,24 +575,19 @@
stralloc newlocals = {0};
stralloc newvdoms = {0};
-stralloc newaliasdoms = {0};
void regetcontrols(void)
{
- int r,s;
+ int r;
if (control_readfile(&newlocals,"control/locals",1) != 1)
{ log1("alert: qmail-todo: unable to reread control/locals\n"); return; }
r = control_readfile(&newvdoms,"control/virtualdomains",0);
if (r == -1)
{ log1("alert: qmail-todo: unable to reread control/virtualdomains\n"); return; }
- s = control_readfile(&newaliasdoms,"control/aliasdomains",0);
- if (s == -1)
- { log1("alert: unable to reread control/aliasdomains\n"); return; }
constmap_free(&maplocals);
constmap_free(&mapvdoms);
- constmap_free(&mapaliasdoms);
while (!stralloc_copy(&locals,&newlocals)) nomem();
while (!constmap_init(&maplocals,locals.s,locals.len,0)) nomem();
@@ -629,14 +599,6 @@
}
else
while (!constmap_init(&mapvdoms,"",0,1)) nomem();
-
- if (s)
- {
- while (!stralloc_copy(&aliasdoms,&newaliasdoms)) nomem();
- while (!constmap_init(&mapaliasdoms,aliasdoms.s,aliasdoms.len,1)) nomem();
- }
- else
- while (!constmap_init(&mapaliasdoms,"",0,1)) nomem();
}
void reread(void)
--- qmail-send.c Thu Feb 20 18:44:28 2003
+++ qmail-send.c.orig Wed Feb 5 08:50:46 2003
@@ -50,8 +50,6 @@
struct constmap maplocals;
stralloc vdoms = {0};
struct constmap mapvdoms;
-stralloc aliasdoms = {0};
-struct constmap mapaliasdoms;
stralloc envnoathost = {0};
stralloc bouncefrom = {0};
stralloc bouncehost = {0};
@@ -123,7 +121,6 @@
int j;
char *x;
static stralloc addr = {0};
- static stralloc addr2 = {0};
int at;
if (!stralloc_copys(&rwline,"T")) return 0;
@@ -144,40 +141,25 @@
}
at = byte_rchr(addr.s,addr.len,'@');
-
- if (!stralloc_copyb(&addr2, addr.s, at+1)) return 0;
-
- for (i=at+1; i <=addr.len; ++i) {
- if ((i == at + 1) || (i == addr.len) || (addr.s[i] == '.')) {
- if (x = constmap(&mapaliasdoms, addr.s+i, addr.len-i)) {
- if (!stralloc_cats(&addr2, x)) return 0;
- i=0;
- break;
- }
- }
- }
- if (i)
- if (!stralloc_copy(&addr2, &addr)) return 0;
-
- if (constmap(&maplocals,addr2.s + at + 1,addr2.len - at - 1)) {
- if (!stralloc_cat(&rwline,&addr2)) return 0;
+ if (constmap(&maplocals,addr.s + at + 1,addr.len - at - 1)) {
+ if (!stralloc_cat(&rwline,&addr)) return 0;
if (!stralloc_0(&rwline)) return 0;
return 1;
}
- for (i = 0;i <= addr2.len;++i)
- if (!i || (i == at + 1) || (i == addr2.len) || ((i > at) && (addr2.s[i] == '.')))
- if (x = constmap(&mapvdoms,addr2.s + i,addr2.len - i)) {
+ for (i = 0;i <= addr.len;++i)
+ if (!i || (i == at + 1) || (i == addr.len) || ((i > at) && (addr.s[i] == '.')))
+ if (x = constmap(&mapvdoms,addr.s + i,addr.len - i)) {
if (!*x) break;
if (!stralloc_cats(&rwline,x)) return 0;
if (!stralloc_cats(&rwline,"-")) return 0;
- if (!stralloc_cat(&rwline,&addr2)) return 0;
+ if (!stralloc_cat(&rwline,&addr)) return 0;
if (!stralloc_0(&rwline)) return 0;
return 1;
}
- if (!stralloc_cat(&rwline,&addr2)) return 0;
+ if (!stralloc_cat(&rwline,&addr)) return 0;
if (!stralloc_0(&rwline)) return 0;
return 2;
}
@@ -1655,14 +1637,6 @@
case 0: if (!constmap_init(&mappercenthack,"",0,0)) return 0; break;
case 1: if (!constmap_init(&mappercenthack,percenthack.s,percenthack.len,0)) return 0; break;
}
-
- switch(control_readfile(&aliasdoms,"control/aliasdomains",0))
- {
- case -1: return 0;
- case 0: if (!constmap_init(&mapaliasdoms,"",0,1)) return 0; break;
- case 1: if (!constmap_init(&mapaliasdoms,aliasdoms.s,aliasdoms.len,1)) return 0; break;
- }
-
switch(control_readfile(&vdoms,"control/virtualdomains",0))
{
case -1: return 0;
@@ -1673,12 +1647,11 @@
stralloc newlocals = {0};
stralloc newvdoms = {0};
-stralloc newaliasdoms = {0};
stralloc newcbtext = {0};
void regetcontrols()
{
- int r,s;
+ int r;
if (control_readint(&bouncemaxbytes,"control/bouncemaxbytes") == -1)
{ log1("alert: unable to reread control/bouncemaxbytes\n"); return; }
@@ -1694,13 +1667,9 @@
r = control_readfile(&newvdoms,"control/virtualdomains",0);
if (r == -1)
{ log1("alert: unable to reread control/virtualdomains\n"); return; }
- s = control_readfile(&newaliasdoms,"control/aliasdomains",0);
- if (s == -1)
- { log1("alert: unable to reread control/aliasdomains\n"); return; }
constmap_free(&maplocals);
constmap_free(&mapvdoms);
- constmap_free(&mapaliasdoms);
while (!stralloc_copy(&locals,&newlocals)) nomem();
while (!constmap_init(&maplocals,locals.s,locals.len,0)) nomem();
@@ -1712,15 +1681,6 @@
}
else
while (!constmap_init(&mapvdoms,"",0,1)) nomem();
-
- if (s)
- {
- while (!stralloc_copy(&aliasdoms,&newaliasdoms)) nomem();
- while (!constmap_init(&mapaliasdoms,aliasdoms.s,aliasdoms.len,1)) nomem();
- }
- else
- while (!constmap_init(&mapaliasdoms,"",0,1)) nomem();
-
}
void reread()