Yep, it is exactly that. At the moment I have all the files in
~vpopmail/domains/<domainname>/<username> called '.qmail'.
I have attached the patch 'as is' that I have been using for a while now,
and have also quickly modded the patch in include .vpopmail files (as a
secondary to .qmail, please note this is untested) in the users directory.
I have also attached a patch which sort of takes care of the Delivered-To:
line using either of the 2 above patches.
(just deals with .qmail's for now) and will modify it next
week if needed.
On Fri, 16 Dec 2005, Charles J. Boening wrote:
> I thought that was the proposal. To call the files .vpopamil files
> since vdelivermail was actually doing the delivery. You'd still have
> .qmail files in the ~vpopmail/domains/<domainname> directory but the
> ~vpopmail/domains/<domainname>/<username> directory would have
> .vpopamail files.
>
> Guess I'll have to go back and read again.
>
>
> Charlie
>
>
>
> > -----Original Message-----
> > From: Jeremy Kister [mailto:[EMAIL PROTECTED]
> > Sent: Friday, December 16, 2005 2:21 PM
> > To: [email protected]
> > Subject: Re: [vchkpw] Per user .qmail patch
> >
> > On 12/16/2005 3:00 PM, Charles J. Boening wrote:
> > > Don't really need a perl script. This should work.
> > >
> > > find /home/vpopmail/domains -name .qmail* | xargs -i rename qmail
> > > vpopmail '{}'
> >
> > from your suggestion, I think you're one of the people who
> > are confused. :)
> >
> > renaming all .qmail* files in ~vpopmail/domains will break
> > your installation horribly.
> >
> > --
> >
> > Jeremy Kister
> > http://jeremy.kister.net./
> >
> >
>
diff -uPr vpopmail-5.4.13.orig/vdelivermail.c vpopmail-5.4.13/vdelivermail.c
--- vpopmail-5.4.13.orig/vdelivermail.c 2005-09-02 19:47:29.000000000 +0100
+++ vpopmail-5.4.13/vdelivermail.c 2005-12-16 15:53:29.000000000 +0000
@@ -62,6 +62,7 @@
#ifdef QMAIL_EXT
/* the User with '-' and following chars out if any */
char TheUserExt[AUTH_SIZE];
+char TheExt[AUTH_SIZE];
#endif
#define FILE_SIZE 156
@@ -217,6 +218,11 @@
vexit(EXIT_BOUNCE);
}
+ strncpy(TheExt, &TheUser[i+1], AUTH_SIZE);
+ for (i = 0; (TheExt[i] != 0); i++) {
+ if (TheExt[i] == '.') TheExt[i] = ':';
+ }
+
#endif
vget_assign(TheDomain, TheDomainDir, sizeof(TheDomainDir), &TheDomainUid,
&TheDomainGid);
@@ -697,16 +703,36 @@
chdir(dir);
+#ifdef QMAIL_EXT
/* format the file name */
- if ( (fs = fopen(".qmail","r")) == NULL ) {
+ if (strlen(TheExt)) {
+ strcpy(tmpbuf,".qmail-");
+ strcat(tmpbuf,TheExt);
+ if ( (fs = fopen(tmpbuf,"r")) == NULL ) {
+ for (i=strlen(TheExt);i>=0;--i) {
+ if (!i || TheExt[i-1]=='-') {
+ strcpy(tmpbuf,".qmail-");
+ strncat(tmpbuf,TheExt,i);
+ strcat(tmpbuf,"default");
+ if ( (fs = fopen(tmpbuf,"r")) != NULL) {
+ break;
+ }
+ }
+ }
+ }
+ } else {
+ fs = fopen(".qmail","r");
+ }
+#else
+ fs = fopen(".qmail","r");
+#endif
+ /* no .qmail file at all */
+ if (fs == NULL ) {
/* no file, so just return */
return(-1);
}
- /* format a simple loop checker name */
- snprintf(tmpbuf, sizeof(tmpbuf), "[EMAIL PROTECTED]", TheUser, TheDomain);
-
/* read the file, line by line */
while ( fgets(qmail_line, sizeof(qmail_line), fs ) != NULL ) {
if (*qmail_line == '#') continue;
@@ -716,14 +742,6 @@
if (qmail_line[i] == '\n') qmail_line[i] = 0;
}
- /* simple loop check, if they are sending it to themselves
- * then skip this line
- */
- if ( strcmp( qmail_line, tmpbuf) == 0 ) continue;
- /* check for &[EMAIL PROTECTED] as well */
- if ((*qmail_line == '&') && (strcmp (qmail_line + 1, tmpbuf) == 0))
- continue;
-
deliver_mail(qmail_line, "");
return_value = 1;
diff -uPr vpopmail-5.4.13.orig/vdelivermail.c vpopmail-5.4.13/vdelivermail.c
--- vpopmail-5.4.13.orig/vdelivermail.c 2005-09-02 19:47:29.000000000 +0100
+++ vpopmail-5.4.13/vdelivermail.c 2005-12-16 21:39:15.000000000 +0000
@@ -62,6 +62,7 @@
#ifdef QMAIL_EXT
/* the User with '-' and following chars out if any */
char TheUserExt[AUTH_SIZE];
+char TheExt[AUTH_SIZE];
#endif
#define FILE_SIZE 156
@@ -217,6 +218,11 @@
vexit(EXIT_BOUNCE);
}
+ strncpy(TheExt, &TheUser[i+1], AUTH_SIZE);
+ for (i = 0; (TheExt[i] != 0); i++) {
+ if (TheExt[i] == '.') TheExt[i] = ':';
+ }
+
#endif
vget_assign(TheDomain, TheDomainDir, sizeof(TheDomainDir), &TheDomainUid,
&TheDomainGid);
@@ -697,16 +703,48 @@
chdir(dir);
+#ifdef QMAIL_EXT
/* format the file name */
- if ( (fs = fopen(".qmail","r")) == NULL ) {
+ if (strlen(TheExt)) {
+ strcpy(tmpbuf,".qmail-");
+ strcat(tmpbuf,TheExt);
+ if ( (fs = fopen(tmpbuf,"r")) == NULL ) {
+ strcpy(tmpbuf,".vpopmail-");
+ strcat(tmpbuf,TheExt);
+ if ( (fs = fopen(tmpbuf,"r")) == NULL ) {
+ for (i=strlen(TheExt);i>=0;--i) {
+ if (!i || TheExt[i-1]=='-') {
+ strcpy(tmpbuf,".qmail-");
+ strncat(tmpbuf,TheExt,i);
+ strcat(tmpbuf,"default");
+ if ( (fs = fopen(tmpbuf,"r")) != NULL) {
+ break;
+ }
+ strcpy(tmpbuf,".vpopmail-");
+ strncat(tmpbuf,TheExt,i);
+ strcat(tmpbuf,"default");
+ if ( (fs = fopen(tmpbuf,"r")) != NULL) {
+ break;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ if ( (fs = fopen(".qmail","r")) == NULL) {
+ fs = fopen(".vpopmail","r");
+ }
+ }
+#else
+ fs = fopen(".qmail","r");
+#endif
+ /* no .qmail file at all */
+ if (fs == NULL ) {
/* no file, so just return */
return(-1);
}
- /* format a simple loop checker name */
- snprintf(tmpbuf, sizeof(tmpbuf), "[EMAIL PROTECTED]", TheUser, TheDomain);
-
/* read the file, line by line */
while ( fgets(qmail_line, sizeof(qmail_line), fs ) != NULL ) {
if (*qmail_line == '#') continue;
@@ -716,14 +754,6 @@
if (qmail_line[i] == '\n') qmail_line[i] = 0;
}
- /* simple loop check, if they are sending it to themselves
- * then skip this line
- */
- if ( strcmp( qmail_line, tmpbuf) == 0 ) continue;
- /* check for &[EMAIL PROTECTED] as well */
- if ((*qmail_line == '&') && (strcmp (qmail_line + 1, tmpbuf) == 0))
- continue;
-
deliver_mail(qmail_line, "");
return_value = 1;
diff -uPr vpopmail-5.4.13.orig/vdelivermail.c vpopmail-5.4.13/vdelivermail.c
--- vpopmail-5.4.13.orig/vdelivermail.c 2005-09-02 19:47:29.000000000 +0100
+++ vpopmail-5.4.13/vdelivermail.c 2005-11-24 13:06:22.000000000 +0000
@@ -499,6 +499,7 @@
FILE *fs;
char tmp_file[256];
char maildirquota[80];
+ char *email;
/* This is a comment, ignore it */
if ( *address == '#' ) return;
@@ -597,15 +598,19 @@
}
#endif
+ /* Get the email address from the maildir */
+ email = maildir_to_email(address);
+
/* Set the Delivered-To: header */
- if ( strcmp( address, bounce) == 0 ) {
+ if ( strcmp( address, bounce) == 0 ||
+ strcmp( email, "") == 0 ) {
snprintf(DeliveredTo, sizeof(DeliveredTo),
"%sDelivered-To: [EMAIL PROTECTED]", getenv("RPLINE"),
TheUser, TheDomain);
} else {
snprintf(DeliveredTo, sizeof(DeliveredTo),
"%sDelivered-To: %s\n", getenv("RPLINE"),
- maildir_to_email(address));
+ email);
}
switch (deliver_to_maildir (address, DeliveredTo, 0, message_size)) {