[SPAM] Re: [vchkpw] [SPAM] Dovecot-lda for vpopmail
Rick Romero <[email protected]> Mon, 24 Sep 2012 08:34:08 -0500
| Newsgroups | gmane.mail.vpopmail |
|---|---|
| Message-ID | <[email protected]> |
Heres a patch for 5.4.17 - I've been running this for a while now. Basically, run the deliver command after the tempfile is created (to verify delivery and quota) then unlink the tempfile and return. I tried to make it all fancy with build options, then figured I was the only one who would do it this wacky way. :) This version passes the home directory to deliver, so you don't need to run the dovecot lookup service. I also had to specify the timezone to get the correct timestamp for some reason. Rick Quoting Alessio Cecchi <[email protected]>: > As many users of vpopmail we switched to dovecot for POP and IMAP. > > I would like to switch also from maildrop to dovecot-lda. Many > configuration are possibile but the best way is to patch > vdelivermail to use dovecot-lda directly. > > Has anyone solved the problem? > > If someone wants to write a patch for me, I am willing to make a bid. > Thanks > > -- > Alessio Cecchi is: > @ ILS -> http://www.linux.it/~alessice/ > on LinkedIn -> http://www.linkedin.com/in/alessice > Assistenza Sistemi GNU/Linux -> http://www.cecchi.biz/ > @ PLUG -> ex-Presidente, adesso senatore a vita, http://www.prato.linux.it > > > --- vdelivermail.c 2009-05-18 19:13:17.000000000 -0500 +++ vdelivermail.c.dovecot 2010-12-10 08:34:33.444212000 -0600 @@ -411,7 +411,8 @@ size_t headerlen; int write_fd; char quota[80]; - + char home[150]; + //char *cmd[] = { "|/usr/local/libexec/dovecot/deliver", "", (char *)0 }; headerlen = strlen (extra_headers); msgsize += headerlen; @@ -426,7 +427,19 @@ maildir, tm, pid, hostname, (long unsigned) msgsize); read_quota_from_maildir (maildir, quota, sizeof(quota)); +// #ifdef DELIVER_STDOUT + /* export HOME environment variable - strip /Maildir/ */ + if ( putenv(home) == -1 ) { + printf( + "putenv(HOME) failed errno %d %s@%s", + errno, TheUser, TheDomain); + return -1; + } + sprintf(home,"|/usr/bin/env -i HOME=%s TZ=CST /usr/local/libexec/dovecot/deliver",vpw->pw_dir); + // run_command(home); + // return 0; +// #else /* open the new email file */ if ((write_fd=open(local_file_tmp, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR)) == -1) { if (errno == EDQUOT) return -1; @@ -450,6 +463,12 @@ } /* completed write to tmp directory, now move it into the new directory */ + // Scratch that - pipe to Dovecot deliver and remove tmp file (quota check) + + close(write_fd); + unlink (local_file_tmp); + run_command(home); + return 0; /* sync the data to disk and close the file */ errno = 0; @@ -487,6 +506,7 @@ /* return failure (sync/close failed, message NOT delivered) */ return -2; +//#endif } /* !DSPAM:5060615234212177865488!