On Wed, 2004-03-31 at 09:40, Suresh Ramasubramanian wrote: [3/31/2004 8:11 AM] Soumava Das : > > > Thanks everybody. > > I think I will go for postfix. But, is there anything equivalent to vexim for > > postfix? > > vpopmail + postfix - http://www.inter7.com/vpopmail/postfix.txt >
One problem with the above solution is that it requires qmail also to be installed. The solution above uses /var/qmail/bin/sendmail to move the mail from postfix's queue to qmail's queue. Then qmail uses vdelivermail to deliver the mail to the user's inbox. So you will require a working setup and configuration of both postfix and qmail. You will end up have two queues, mail getting written twice to the disk before getting finally delivered to the user's Maildir. I had come across this issue around 1.5 years back and wrote a wrapper called 'postdel' for vdelivermail. Using postdel you will not require a qmail installation and will hence reduce your I/O by half. Since this was done 1.5 years ago, some postfix error code from sys_exits.h could have changed. If any one wants to hack the code below, they are free do do. Also like any other free software, my code comes without warranty or obligations. I also claim no copyrights, etc. You are free to do anything with the code (except to involve me). If you do something useful with the code, let me know :) Summary of steps involved to implement are as below 1. Install vpopmail by following instructions from http://www.inter7.com 2. Edit main.cf and master.cf (assuming you have installed and configured postfix) Have the following in main.cf local_transport = vdel vdel_destination_recipient_limit = 1 Have the following line in master.cf vdel unix - n n - 100 pipe flags=Fq. user=vpopmail argv=/var/vpopmail/bin/postdel -u $user -d $recipient -r $sender 3. Compile postdel.c gcc postdel.c -s -O -o postdel cp postdel /var/vpopmail/bin My earlier post with postdel.c attached as a gzip got rejected. Hence I am resending with the source code inline /* * $Log: postdel.c,v $ * Revision 2.4 2002-12-13 19:11:15+05:30 Manny * added environment variable MAKE_SEEKABLE to turn on/off seekable stdin * * Revision 2.3 2002-12-11 10:28:26+05:30 Manny * added ERESTART check for errno * * Revision 2.2 2002-12-05 14:15:51+05:30 Manny * set environment variable SENDER and MTA * * Revision 2.1 2002-11-22 14:17:05+05:30 Manny * postfix wrapper for vfilter/vdelivermail * */ #ifndef lint static char sccsid[] = "$Id: postdel.c,v 2.4 2002-12-13 19:11:15+05:30 Manny Stab root $"; #endif #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> /* * From postfix source distribution - sys_exits.h */ #define EX_USAGE 64 /*- command line usage error */ #define EX_DATAERR 65 /*- data format error */ #define EX_NOINPUT 66 /*- cannot open input */ #define EX_NOUSER 67 /*- addressee unknown */ #define EX_NOHOST 68 /*- host name unknown */ #define EX_UNAVAILABLE 69 /*- service unavailable */ #define EX_SOFTWARE 70 /*- internal software error */ #define EX_OSERR 71 /*- system error (e.g., can't fork) */ #define EX_OSFILE 72 /*- critical OS file missing */ #define EX_CANTCREAT 73 /*- can't create (user) output file */ #define EX_IOERR 74 /*- input/output error */ #define EX_TEMPFAIL 75 /*- temporary failure */ #define EX_PROTOCOL 76 /*- remote error in protocol */ #define EX_NOPERM 77 /*- permission denied */ #define EX_CONFIG 78 /*- configuration error */ #define MAX_BUFF 2048 #define BOUNCE_ALL "bounce-no-mailbox" char *(vdelargs[]) = { "/var/vpopmail/bin/vdelivermail", "''", BOUNCE_ALL, 0}; char *(filtargs[]) = { "/var/vpopmail/bin/vfilter", "''", BOUNCE_ALL, 0}; static int get_options(int, char **, char *, char *, char *, char *, int *); int main(int argc, char **argv) { char User[MAX_BUFF], Host[MAX_BUFF], ReturnPathEnv[MAX_BUFF], Sender[MAX_BUFF]; int use_filter, wait_status, tmp_stat; pid_t pid; if(get_options(argc, argv, User, Host, ReturnPathEnv, Sender, &use_filter)) _exit(EX_USAGE); if (putenv(User) == -1) { fprintf(stderr, "postdel: putenv: %s\n", strerror(ENOMEM)); _exit(EX_OSERR); } else if (putenv(Host) == -1) { fprintf(stderr, "postdel: putenv: %s\n", strerror(ENOMEM)); _exit(EX_OSERR); } else if (putenv(ReturnPathEnv) == -1) { fprintf(stderr, "postdel: putenv: %s\n", strerror(ENOMEM)); _exit(EX_OSERR); } else if (putenv(Sender) == -1) { fprintf(stderr, "postdel: putenv: %s\n", strerror(ENOMEM)); _exit(EX_OSERR); } else if (putenv("MTA=Postfix") == -1) { fprintf(stderr, "postdel: putenv: %s\n", strerror(ENOMEM)); _exit(EX_OSERR); } switch (pid = vfork()) { case -1: _exit(EX_OSERR); case 0: #ifdef MAKE_SEEKABLE putenv("MAKE_SEEKABLE=1"); #endif if(use_filter) execv(*filtargs, filtargs); else execv(*vdelargs, vdelargs); fprintf(stderr, "postdel: execv: %s\n", *vdelargs); _exit(111); default: for(;;) { pid = wait(&wait_status); if(pid == -1 && (errno == EINTR || errno == ERESTART)) continue; else if(pid == -1) { fprintf(stderr, "postdel: %s. supermail bug\n", *vdelargs); _exit(EX_SOFTWARE); } break; } if(WIFSTOPPED(wait_status) || WIFSIGNALED(wait_status)) { fprintf(stderr, "postdel: %s crashed.\n", *vdelargs); _exit(EX_TEMPFAIL); } else if(WIFEXITED(wait_status)) { switch ((tmp_stat = WEXITSTATUS(wait_status))) { case 0: _exit(0); case 100: _exit(EX_NOUSER); default: _exit(EX_TEMPFAIL); } } break; } _exit(EX_TEMPFAIL); return(0); /*- for stupid solaris */ } static int get_options(int argc, char **argv, char *user, char *domain, char *rpline, char *sender, int *use_filter) { int c; char *tmpstr; *use_filter = 0; *user = *domain = *rpline = 0; while ((c = getopt(argc, argv, "Vvfu:d:r:")) != -1) { switch (c) { case 'f': *use_filter = 1; break; case 'u': snprintf(user, MAX_BUFF, "EXT=%s", optarg); break; case 'd': if ((tmpstr = strchr(optarg, '@'))) snprintf(domain, MAX_BUFF, "HOST=%s", tmpstr + 1); else snprintf(domain, MAX_BUFF, "HOST=%s", optarg); break; case 'r': snprintf(rpline, MAX_BUFF, "RPLINE=Return-Path: <%s>\n", optarg); snprintf(sender, MAX_BUFF, "SENDER=%s", optarg); break; default: fprintf(stderr, "USAGE: postdel [-f] -u user -d domain -r sender\n"); return(1); } } if(!*user || !*domain || !*rpline) { fprintf(stderr, "USAGE: postdel [-f] -u user -d domain -r sender\n"); return(1); } return(0); } ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ linux-india-help mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/linux-india-help
