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()

Reply via email to