Einar Bordewich spoke forth with the blessed manuscript:
> ----- Original Message -----
> From: "Bill Shupp" <[EMAIL PROTECTED]>
> 
> <snip>
> > I think Gabriel's changes are a good start, and eventually Einar's way
> > should probably be implemented.  However, this to me is mostly a cosmetic
> > issue, as I don't think there are any significant performance
> disadvantages.
> 
> I agree that this is mostly a cosmetic issue. But, it's according to the
> thoughts about virtualdomains and qmail. My colleague Reier Pytte (not on
> this list) made a patch for vaddaliasdomain on how to handle alias
> virtualdomains correct. This was done last minutes on friday afternoon.
> Deletion of domain/aliasdomain is not finnished yet, but it's work in
> progress. If domain is deleted and it has aliasdomains, all of these will be
> removed (just entries in rcpthosts/morercpthosts and virtualdomains). If
> aliasdomain is deleted, only the aliasdomain is removed ;-)

I did basically the same thing, but did cut and pasting of code
rather than copy and pasting. :)

Patch attached.

-- 
-- Casey Zacek
   Senior Staff Engineer
   NeoSpire, Inc.
diff -ur old/vpopmail-4.10.35/vaddaliasdomain.c new/vpopmail-4.10.35/vaddaliasdomain.c
--- old/vpopmail-4.10.35/vaddaliasdomain.c      Tue Jun 26 05:11:23 2001
+++ new/vpopmail-4.10.35/vaddaliasdomain.c      Fri Aug 31 09:08:13 2001
@@ -63,18 +63,8 @@
                usage();
                vexit(0);
        }
-       strncpy(TmpBuf3, Dir, MAX_BUFF);
-
-       tmpstr = strstr(Dir, "/domains");
-       *tmpstr = 0;
-
-       snprintf(TmpBuf1, MAX_BUFF, "%s/domains/%s", Dir, Domain_new);
-       snprintf(TmpBuf2, MAX_BUFF, "%s/domains/%s", Dir, Domain_old);
-       if ( symlink(TmpBuf2, TmpBuf1) != 0 ) {
-               fprintf(stderr, "Could not make link\n");
-               perror("making link");
-       }
-       add_domain_assign( Domain_new, TmpBuf3, uid, gid );
+       add_domain_rcpthosts( Domain_new );
+       add_domain_virtualdomains( Domain_new, Domain_old );
        signal_process("qmail-send", SIGHUP);
 
        return(vexit(0));
diff -ur old/vpopmail-4.10.35/vpopmail.c new/vpopmail-4.10.35/vpopmail.c
--- old/vpopmail-4.10.35/vpopmail.c     Thu Aug 23 11:05:54 2001
+++ new/vpopmail-4.10.35/vpopmail.c     Sat Sep  1 18:37:15 2001
@@ -531,6 +531,52 @@
     return(0);
 }
 
+/*
+ * Add a domain to rcpthosts (or morercpthosts)
+ */
+void add_domain_rcpthosts( char *domain )
+{
+ static char tmpstr[MAX_BUFF];
+
+    /* If we have more than 50 domains in rcpthosts
+     * make a morercpthosts and compile it
+     */
+    if ( count_rcpthosts() >= 50 ) {
+        snprintf(tmpstr, MAX_BUFF, "%s/control/morercpthosts", QMAILDIR);
+        update_file(tmpstr, domain);
+        snprintf(tmpstr, MAX_BUFF, "%s/control/morercpthosts", QMAILDIR);
+        chmod(tmpstr, VPOPMAIL_QMAIL_MODE ); 
+        if ( OptimizeAddDomain == 0 ) {
+            compile_morercpthosts();
+        }
+
+    /* or just add to rcpthosts */
+    } else {
+        snprintf(tmpstr, MAX_BUFF, "%s/control/rcpthosts", QMAILDIR);
+        update_file(tmpstr, domain);
+        snprintf(tmpstr, MAX_BUFF, "%s/control/rcpthosts", QMAILDIR);
+        chmod(tmpstr, VPOPMAIL_QMAIL_MODE ); 
+    }
+}
+
+/*
+ * Add a domain to the virtualdomains control file, remove dupes, set mode
+ * FIXME: won't remove a bob.com:bob.com "duplicate" if being replaced with
+ *        bob.com:reallybob.com.  Also, vice-versa.. need to remove all
+ *        bob.com:* lines.
+ */
+void add_domain_virtualdomains( char *domain, char *real_domain )
+{
+ static char tmpstr1[MAX_BUFF];
+ static char tmpstr2[MAX_BUFF];
+
+    /* Add to virtualdomains file and remove duplicates  and set mode */
+    snprintf(tmpstr1, MAX_BUFF, "%s/control/virtualdomains", QMAILDIR );
+    snprintf(tmpstr2, MAX_BUFF, "%s:%s", domain, real_domain );
+    update_file(tmpstr1, tmpstr2);
+    chmod(tmpstr1, VPOPMAIL_QMAIL_MODE ); 
+}
+
 /* 
  * Add a domain to all the control files 
  * And signal qmail
@@ -544,7 +590,6 @@
  struct stat mystat;
  static char tmpstr1[MAX_BUFF];
  static char tmpstr2[MAX_BUFF];
- static char tmpstr3[MAX_BUFF];
 
     snprintf(tmpstr1, MAX_BUFF, "%s/users/assign", QMAILDIR);
 
@@ -559,11 +604,11 @@
         fclose(fs1);
     }
 
-    snprintf(tmpstr3, MAX_BUFF, "+%s-:%s:%lu:%lu:%s:-::",
+    snprintf(tmpstr2, MAX_BUFF, "+%s-:%s:%lu:%lu:%s:-::",
         domain, domain, (long unsigned)uid, (long unsigned)gid, dir);
 
     /* update the file and add the above line and remove duplicates */
-    update_file(tmpstr1, tmpstr3);
+    update_file(tmpstr1, tmpstr2);
 
     /* set the mode in case we are running with a strange mask */
     chmod(tmpstr1, VPOPMAIL_QMAIL_MODE ); 
@@ -573,31 +618,8 @@
         update_newu();
     }
 
-    /* If we have more than 50 domains in rcpthosts
-     * make a morercpthosts and compile it
-     */
-    if ( count_rcpthosts() >= 50 ) {
-        snprintf(tmpstr1, MAX_BUFF, "%s/control/morercpthosts", QMAILDIR);
-        update_file(tmpstr1, domain);
-        snprintf(tmpstr1, MAX_BUFF, "%s/control/morercpthosts", QMAILDIR);
-        chmod(tmpstr1, VPOPMAIL_QMAIL_MODE ); 
-        if ( OptimizeAddDomain == 0 ) {
-            compile_morercpthosts();
-        }
-
-    /* or just add to rcpthosts */
-    } else {
-        snprintf(tmpstr1, MAX_BUFF, "%s/control/rcpthosts", QMAILDIR);
-        update_file(tmpstr1, domain);
-        snprintf(tmpstr1, MAX_BUFF, "%s/control/rcpthosts", QMAILDIR);
-        chmod(tmpstr1, VPOPMAIL_QMAIL_MODE ); 
-    }
-    
-    /* Add to virtualdomains file and remove duplicates  and set mode */
-    snprintf(tmpstr1, MAX_BUFF, "%s/control/virtualdomains", QMAILDIR );
-    snprintf(tmpstr2, MAX_BUFF, "%s:%s", domain, domain );
-    update_file(tmpstr1, tmpstr2);
-    chmod(tmpstr1, VPOPMAIL_QMAIL_MODE ); 
+    add_domain_rcpthosts( domain );
+    add_domain_virtualdomains( domain, domain );
 
     /* make sure it's not in locals and set mode */
     snprintf(tmpstr1, MAX_BUFF, "%s/control/locals", QMAILDIR);
diff -ur old/vpopmail-4.10.35/vpopmail.h new/vpopmail-4.10.35/vpopmail.h
--- old/vpopmail-4.10.35/vpopmail.h     Thu Aug 23 11:06:40 2001
+++ new/vpopmail-4.10.35/vpopmail.h     Fri Aug 31 09:09:28 2001
@@ -95,6 +95,8 @@
 int mkpasswd3( char *, char *, int);
 char *vgetpasswd( char *);
 int vdelfiles( char *);
+void add_domain_rcpthosts(char *domain);
+void add_domain_virtualdomains(char *domain, char *real_domain);
 int add_domain_assign( char *domain, char *dir, uid_t uid, gid_t gid);
 int del_control( char *);
 int del_domain_assign( char *domain, char *dir, uid_t uid, gid_t gid);

Reply via email to