Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!texbell!ficc!peter From: peter@ficc.ferranti.com (Peter da Silva) Newsgroups: comp.mail.uucp Subject: Re: small, working mailers (Was: Re: Paths and Precedence) Message-ID: <0:R43.A@xds13.ferranti.com> Date: 19 Jul 90 18:32:53 GMT References: <11034@alice.UUCP> <11043@alice.UUCP> <551@isgtec.UUCP> Reply-To: peter@ficc.ferranti.com (Peter da Silva) Organization: Xenix Support, FICC Lines: 128 In article <551@isgtec.UUCP> bmw@isgtec.UUCP (Bruce Walker) writes: > So if there is something small, simple and functional out there, I for one > would like to hear about it! I use smail 2.5 on the ether, by changing smail to call a router program (included). That program uses a file called "routes" and a bunch of one-line shell scripts, like so: ========== in defs.h #define ROUTER "/usr/lib/smail/router" /* Command to route !oid mail */ #define RMAIL(flags,from,sys) "%s %s %s %s",ROUTER,flags,from,sys /* */ ========== routes ris0 opennet ris1 opennet ris2 opennet bridge opennet uds1 uucp uds2 uucp ========== r.opennet exec rexec //$SYS/usr/lib/mail/execmail -f $FROM $USERS ========== r.uucp exec uux $FLAGS - "$SYS!rmail $USERS" ========== router.c #include #include #include #define LIBDIR "/usr/lib/smail" #define ROUTEFILE "/usr/lib/smail/routes" #define DEFROUTE "uucp" char flags[BUFSIZ], users[NCARGS]; char *from, *sys; char *prog; main(ac, av) int ac; char **av; { char *flagp = flags; char *userp = users; FILE *fp; char line[BUFSIZ]; char *lsys, *lroute, *lnl; *flagp = 0; *userp = 0; prog = *av; while(ac > 1 && av[1][0] == '-') { strcpy(flagp, av[1]); strcat(flagp, " "); flagp += strlen(flagp); av++; ac--; } if(ac > 1) { from = *++av; ac--; } else fail("No sender specified"); if(ac > 1) { sys = *++av; ac--; } else fail("No system specified"); if(ac <= 1) fail("No user specified"); while(*++av) { sprintf(userp, "%s ", *av); userp += strlen(userp); ac--; } if(!(fp = fopen(ROUTEFILE, "r"))) { perror(ROUTEFILE); send(DEFROUTE); } while(fgets(line, sizeof line, fp)) { lsys = line; while(isspace(*lsys)) lsys++; lroute = lsys; while(isgraph(*lroute)) lroute++; if(lroute) { *lroute++ = 0; if(strcmp(sys, lsys) == 0) { while(isspace(*lroute)) lroute++; lnl = lroute; while(isgraph(*lnl)) lnl++; *lnl = 0; fclose(fp); send(lroute); } } } fclose(fp); send(DEFROUTE); } static char work[NCARGS]; send(route) char *route; { char *workp; workp = work; sprintf(workp, "USERS=\"%s\" SYS=%s FROM=%s FLAGS=%s ", users, sys, from, flags); workp += strlen(workp); sprintf(workp, "%s/r.%s ", LIBDIR, route); workp += strlen(workp); sprintf(workp, "%s %s %s %s", flags, from, sys, users); fprintf(stderr, "+ %s\n", work); execl("/bin/sh", "sh", "-c", work, (char *)0); } fail(message) char *message; { fprintf(stderr, "%s: %s\n", prog, message); exit(1); } -- Peter da Silva. `-_-' +1 713 274 5180.