# HG changeset patch # User mmj # Date 1082728444 -36000 # Node ID 6b61ded65896801e92f5863160ea9e2a5ecf6634 # Parent b81af15bf60c71db2de402c16caa87c7f39f47da Send around the full path to the binaries diff -r b81af15bf60c -r 6b61ded65896 include/listcontrol.h --- a/include/listcontrol.h Fri Apr 23 23:53:47 2004 +1000 +++ b/include/listcontrol.h Fri Apr 23 23:54:04 2004 +1000 @@ -10,6 +10,7 @@ #define LISTCONTROL_H int listcontrol(const char *mailfilename, const char *listdir, - const char *controladdr); + const char *controladdr, const char *mlmmjsub, + const char *mlmmjunsub, const char *mlmmjsend); #endif /* LISTCONTROL_H */ diff -r b81af15bf60c -r 6b61ded65896 include/mlmmj-sub.h --- a/include/mlmmj-sub.h Fri Apr 23 23:53:47 2004 +1000 +++ b/include/mlmmj-sub.h Fri Apr 23 23:54:04 2004 +1000 @@ -9,8 +9,9 @@ #ifndef MLMMJ_SUBSCRIBE_H #define MLMMJ_SUBSCRIBE_H -void unsubscribe(int subreadfd, int subwritefd, const char *address); +void confirm_sub(const char *listdir, const char *listaddr, + const char *subaddr, const char *mlmmjsend); void generate_subconfirm(const char *listdir, const char *listadr, - const char *subaddr); + const char *subaddr, const char *mlmmjsend); #endif /* MLMMJ_SUBSCRIBE_H */ diff -r b81af15bf60c -r 6b61ded65896 include/mlmmj-unsub.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/mlmmj-unsub.h Fri Apr 23 23:54:04 2004 +1000 @@ -0,0 +1,18 @@ +/* Copyright (C) 2002, 2003 Mads Martin Joergensen + * + * $Id$ + * + * This file is redistributable under version 2 of the GNU General + * Public License as described at http://www.gnu.org/licenses/gpl.txt + */ + +#ifndef MLMMJ_UNSUBSCRIBE_H +#define MLMMJ_UNSUBSCRIBE_H + +void confirm_unsub(const char *listdir, const char *listaddr, + const char *subaddr, const char *mlmmj); +void unsubscribe(int subreadfd, int subwritefd, const char *address); +void generate_unsubconfirm(const char *listdir, const char *listaddr, + const char *subaddr, const char *mlmmjsend); + +#endif /* MLMMJ_UNSUBSCRIBE_H */ diff -r b81af15bf60c -r 6b61ded65896 include/send_help.h --- a/include/send_help.h Fri Apr 23 23:53:47 2004 +1000 +++ b/include/send_help.h Fri Apr 23 23:54:04 2004 +1000 @@ -1,6 +1,7 @@ #ifndef SEND_HELP_H #define SEND_HELP_H -void send_help(const char *listdir, const char *emailaddr); +void send_help(const char *listdir, const char *emailaddr, + const char *mlmmjsend); #endif diff -r b81af15bf60c -r 6b61ded65896 src/listcontrol.c --- a/src/listcontrol.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/listcontrol.c Fri Apr 23 23:54:04 2004 +1000 @@ -21,15 +21,12 @@ #include "log_error.h" int listcontrol(const char *mailfilename, const char *listdir, - const char *controladdr) + const char *controladdr, const char *mlmmjsub, + const char *mlmmjunsub, const char *mlmmjsend) { - char *atsign; - char *recipdelimsign; char tmpstr[READ_BUFSIZE]; - char *tokenvalue; - char *confstr; - char *controlstr; - char *conffilename; + char *atsign, *recipdelimsign, *tokenvalue, *confstr; + char *controlstr, *conffilename; FILE *mailfile, *tempfile; struct email_container fromemails; size_t len; @@ -56,11 +53,11 @@ if(strncasecmp(controlstr, "subscribe", 9) == 0) { free(controlstr); if(index(fromemails.emaillist[0], '@')) { - execlp(BINDIR"mlmmj-sub", "mlmmj-sub", + execlp(mlmmjsub, mlmmjsub, "-L", listdir, "-a", fromemails.emaillist[0], "-C", 0); - log_error("execlp() of "BINDIR"mlmmj-sub failed"); + log_error("execlp() of mlmmj-sub failed"); exit(EXIT_FAILURE); } else /* Not a valid From: address, so we silently ignore */ exit(EXIT_SUCCESS); @@ -76,12 +73,11 @@ if(strncasecmp(tmpstr, fromemails.emaillist[0], strlen(tmpstr)) == 0) { unlink(conffilename); - execlp(BINDIR"mlmmj-sub", "mlmmj-sub", + execlp(mlmmjsub, mlmmjsub, "-L", listdir, "-a", tmpstr, "-c", 0); - log_error("execlp() of "BINDIR"mlmmj-sub" - " failed"); + log_error("execlp() of mlmmj-sub failed"); exit(EXIT_FAILURE); } else { /* Not proper confirm */ @@ -92,12 +88,11 @@ } else if(strncasecmp(controlstr, "unsubscribe", 11) == 0) { free(controlstr); if(index(fromemails.emaillist[0], '@')) { - execlp(BINDIR"mlmmj-unsub", "mlmmj-unsub", + execlp(mlmmjunsub, mlmmjunsub, "-L", listdir, "-a", fromemails.emaillist[0], "-C", 0); - log_error("execlp() of "BINDIR"mlmmj-unsub" - " failed"); + log_error("execlp() of mlmmj-unsub failed"); exit(EXIT_FAILURE); } else /* Not a valid From: address, so we silently ignore */ exit(EXIT_SUCCESS); @@ -113,12 +108,11 @@ if(strncasecmp(tmpstr, fromemails.emaillist[0], strlen(tmpstr)) == 0) { unlink(conffilename); - execlp(BINDIR"mlmmj-unsub", "mlmmj-unsub", + execlp(mlmmjunsub, mlmmjunsub, "-L", listdir, "-a", tmpstr, "-c", 0); - log_error("execlp() of " - BINDIR"mlmmj-unsub failed"); + log_error("execlp() of mlmmj-unsub failed"); exit(EXIT_FAILURE); } else { exit(EXIT_SUCCESS); @@ -129,7 +123,8 @@ printf("Help wanted!\n"); free(controlstr); if(index(fromemails.emaillist[0], '@')) - send_help(listdir, fromemails.emaillist[0]); + send_help(listdir, fromemails.emaillist[0], + mlmmjsend); } return 0; } diff -r b81af15bf60c -r 6b61ded65896 src/mlmmj-process.c --- a/src/mlmmj-process.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/mlmmj-process.c Fri Apr 23 23:54:04 2004 +1000 @@ -14,6 +14,7 @@ #include #include #include +#include #include "mlmmj.h" #include "wrappers.h" @@ -38,6 +39,9 @@ char *listdir = NULL, *mailfile = NULL, *headerfilename = NULL; char *footerfilename = NULL, *donemailname = NULL; char *randomstr = random_str(); + char *mlmmjsend = concatstr(2, dirname(argv[0]), "/mlmmj-send"); + char *mlmmjsub = concatstr(2, dirname(argv[0]), "/mlmmj-sub"); + char *mlmmjunsub = concatstr(2, dirname(argv[0]), "/mlmmj-unsub"); FILE *headerfile, *footerfile, *rawmailfile, *donemailfile; struct email_container toemails = { 0, NULL }; const char *badheaders[] = { "From ", "Return-Path:", NULL }; @@ -115,7 +119,7 @@ footerfile, badheaders, readhdrs); fclose(rawmailfile); - /*XXX: unlink(mailfile);*/ + unlink(mailfile); close(fd); fclose(donemailfile); @@ -140,9 +144,11 @@ } if(strchr(toemails.emaillist[0], RECIPDELIM)) { - printf("listcontrol(%s, %s, %s)\n", donemailname, listdir, - toemails.emaillist[0]); - listcontrol(donemailname, listdir, toemails.emaillist[0]); + printf("listcontrol(%s, %s, %s, %s, %s, %s)\n", donemailname, + listdir, toemails.emaillist[0], mlmmjsub, + mlmmjunsub, mlmmjsend); + listcontrol(donemailname, listdir, toemails.emaillist[0], + mlmmjsub, mlmmjunsub, mlmmjsend); return EXIT_SUCCESS; } @@ -152,7 +158,7 @@ exit(EXIT_SUCCESS); } - execlp(BINDIR"mlmmj-send", "mlmmj-send", + execlp(mlmmjsend, mlmmjsend, "-L", listdir, "-m", donemailname, 0); log_error("execlp() of mlmmj-send failed"); diff -r b81af15bf60c -r 6b61ded65896 src/mlmmj-recieve.c --- a/src/mlmmj-recieve.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/mlmmj-recieve.c Fri Apr 23 23:54:04 2004 +1000 @@ -14,6 +14,7 @@ #include #include #include +#include #include "mlmmj.h" #include "wrappers.h" @@ -34,6 +35,7 @@ char *infilename = NULL, *listdir = NULL, *line = NULL; char *randomstr = random_str(); int fd, opt, noprocess = 0; + char *mlmmjprocess = concatstr(2, dirname(argv[0]), "/mlmmj-process"); while ((opt = getopt(argc, argv, "hPVL:")) != -1) { switch(opt) { @@ -89,10 +91,10 @@ exit(EXIT_SUCCESS); } - execlp(BINDIR"mlmmj-process", "mlmmj-process", + execlp(mlmmjprocess, mlmmjprocess, "-L", listdir, "-m", infilename, 0); - log_error("execlp() of "BINDIR"mlmmj-process failed"); + log_error("execlp() of mlmmj-process failed"); return EXIT_FAILURE; } diff -r b81af15bf60c -r 6b61ded65896 src/mlmmj-send.c --- a/src/mlmmj-send.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/mlmmj-send.c Fri Apr 23 23:54:04 2004 +1000 @@ -71,7 +71,8 @@ free(listadr); return NULL; } - snprintf(bounce_adr, len, "%s-bounces%c%s@%s", listadr, RECIPDELIM, recipient, listdomain); + snprintf(bounce_adr, len, "%s-bounces%c%s@%s", listadr, RECIPDELIM, + recipient, listdomain); free(recipient); free(listadr); diff -r b81af15bf60c -r 6b61ded65896 src/mlmmj-sub.c --- a/src/mlmmj-sub.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/mlmmj-sub.c Fri Apr 23 23:54:04 2004 +1000 @@ -15,6 +15,7 @@ #include #include #include +#include #include "mlmmj.h" #include "mlmmj-sub.h" @@ -25,23 +26,16 @@ #include "subscriberfuncs.h" #include "log_error.h" -void confirm_sub(const char *listdir, const char *listaddr, const char *subaddr) +void confirm_sub(const char *listdir, const char *listaddr, + const char *subaddr, const char *mlmmjsend) { size_t len; FILE *subtextfile; FILE *queuefile; char buf[READ_BUFSIZE]; - char *bufres; - char *subtextfilename; - char *randomstr; - char *queuefilename; - char *fromstr; - char *tostr; - char *subjectstr; - char *fromaddr; - char *helpaddr; - char *listname; - char *listfqdn; + char *bufres, *subtextfilename, *randomstr, *queuefilename; + char *fromstr, *tostr, *subjectstr, *fromaddr, *helpaddr; + char *listname, *listfqdn; subtextfilename = concatstr(2, listdir, "/text/sub-ok"); @@ -105,36 +99,24 @@ fclose(subtextfile); fclose(queuefile); - execlp(BINDIR"mlmmj-send", "mlmmj-send", + execlp(mlmmjsend, mlmmjsend, "-L", "1", "-T", subaddr, "-F", fromaddr, "-m", queuefilename, 0); - log_error("execlp() of "BINDIR"mlmmj-send"); + log_error("execlp() of mlmmj-send failed"); exit(EXIT_FAILURE); } void generate_subconfirm(const char *listdir, const char *listaddr, - const char *subaddr) + const char *subaddr, const char *mlmmjsend) { size_t len; - char *confirmaddr; char buf[READ_BUFSIZE]; - char *bufres; - char *listname; - char *listfqdn; - char *confirmfilename; - char *subtextfilename; - char *queuefilename; - char *fromaddr; - char *randomstr; - char *tostr; - char *fromstr; - char *helpaddr; - char *subjectstr; - FILE *subconffile; - FILE *subtextfile; - FILE *queuefile; + char *confirmaddr, *bufres, *listname, *listfqdn, *confirmfilename; + char *subtextfilename, *queuefilename, *fromaddr, *randomstr; + char *tostr, *fromstr, *helpaddr, *subjectstr; + FILE *subconffile, *subtextfile, *queuefile; listname = genlistname(listaddr); listfqdn = genlistfqdn(listaddr); @@ -220,13 +202,13 @@ fclose(subtextfile); fclose(queuefile); - execlp(BINDIR"mlmmj-send", "mlmmj-send", + execlp(mlmmjsend, mlmmjsend, "-L", "1", "-T", subaddr, "-F", fromaddr, "-R", confirmaddr, "-m", queuefilename, 0); - log_error("execlp() of "BINDIR"mlmmj-send failed"); + log_error("execlp() of mlmmj-send failed"); exit(EXIT_FAILURE); } @@ -246,11 +228,9 @@ size_t len; int opt, subfilefd, lock; char listaddr[READ_BUFSIZE]; - char *listdir = 0; - char *address = 0; - char *subfilename = 0; - int subconfirm = 0; - int confirmsub = 0; + char *listdir = NULL, *address = NULL, *subfilename = NULL; + char *mlmmjsend = concatstr(2, dirname(argv[0]), "/mlmmj-send"); + int subconfirm = 0, confirmsub = 0; log_set_name(argv[0]); @@ -312,7 +292,8 @@ if(find_subscriber(subfilefd, address)) { if(subconfirm) - generate_subconfirm(listdir, listaddr, address); + generate_subconfirm(listdir, listaddr, address, + mlmmjsend); else { lseek(subfilefd, 0L, SEEK_END); len = strlen(address); @@ -329,7 +310,7 @@ } if(confirmsub) - confirm_sub(listdir, listaddr, address); + confirm_sub(listdir, listaddr, address, mlmmjsend); return EXIT_SUCCESS; } diff -r b81af15bf60c -r 6b61ded65896 src/mlmmj-unsub.c --- a/src/mlmmj-unsub.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/mlmmj-unsub.c Fri Apr 23 23:54:04 2004 +1000 @@ -15,9 +15,10 @@ #include #include #include +#include #include "mlmmj.h" -#include "mlmmj-sub.h" +#include "mlmmj-unsub.h" #include "mylocking.h" #include "wrappers.h" #include "mygetline.h" @@ -26,23 +27,16 @@ #include "strgen.h" #include "log_error.h" -void confirm_unsub(const char *listdir, const char *listaddr, const char *subaddr) +void confirm_unsub(const char *listdir, const char *listaddr, + const char *subaddr, const char *mlmmjsend) { size_t len; FILE *subtextfile; FILE *queuefile; char buf[READ_BUFSIZE]; - char *bufres; - char *subtextfilename; - char *randomstr; - char *queuefilename; - char *fromstr; - char *tostr; - char *subjectstr; - char *fromaddr; - char *helpaddr; - char *listname; - char *listfqdn; + char *bufres, *subtextfilename, *randomstr, *queuefilename; + char *fromstr, *tostr, *subjectstr, *fromaddr, *helpaddr; + char *listname, *listfqdn; subtextfilename = concatstr(2, listdir, "/text/unsub-ok"); @@ -106,36 +100,24 @@ fclose(subtextfile); fclose(queuefile); - execlp(BINDIR"mlmmj-send", "mlmmj-send", + execlp(mlmmjsend, mlmmjsend, "-L", "1", "-T", subaddr, "-F", fromaddr, "-m", queuefilename, 0); - log_error("execlp() of "BINDIR"mlmmj-send failed"); + log_error("execlp() of mlmmjsend failed"); exit(EXIT_FAILURE); } void generate_unsubconfirm(const char *listdir, const char *listaddr, - const char *subaddr) + const char *subaddr, const char *mlmmjsend) { size_t len; - char *confirmaddr; char buf[READ_BUFSIZE]; - char *bufres; - char *listname; - char *listfqdn; - char *confirmfilename; - char *subtextfilename; - char *queuefilename; - char *fromaddr; - char *randomstr; - char *tostr; - char *fromstr; - char *helpaddr; - char *subjectstr; - FILE *subconffile; - FILE *subtextfile; - FILE *queuefile; + char *confirmaddr, *bufres, *listname, *listfqdn, *confirmfilename; + char *subtextfilename, *queuefilename, *fromaddr, *randomstr; + char *tostr, *fromstr, *helpaddr, *subjectstr; + FILE *subconffile, *subtextfile, *queuefile; listname = genlistname(listaddr); listfqdn = genlistfqdn(listaddr); @@ -221,13 +203,13 @@ fclose(subtextfile); fclose(queuefile); - execlp(BINDIR"mlmmj-send", "mlmmj-send", + execlp(mlmmjsend, mlmmjsend, "-L", "1", "-T", subaddr, "-F", fromaddr, "-R", confirmaddr, "-m", queuefilename, 0); - log_error("execlp() of "BINDIR"mlmmj-send failed"); + log_error("execlp() of mlmmj-send failed"); exit(EXIT_FAILURE); } @@ -260,12 +242,10 @@ int main(int argc, char **argv) { int subread, subwrite, sublock, opt; - int confirmunsub = 0; - int unsubconfirm = 0; + int confirmunsub = 0, unsubconfirm = 0; char listaddr[READ_BUFSIZE]; - char *listdir = 0; - char *address = 0; - char *subreadname = 0; + char *listdir = NULL, *address = NULL, *subreadname = NULL; + char *mlmmjsend = concatstr(2, dirname(argv[0]), "/mlmmj-send"); log_set_name(argv[0]); @@ -334,7 +314,7 @@ exit(EXIT_FAILURE); } if(unsubconfirm) - generate_unsubconfirm(listdir, listaddr, address); + generate_unsubconfirm(listdir, listaddr, address, mlmmjsend); else unsubscribe(subread, subwrite, address); @@ -345,7 +325,7 @@ close(subwrite); if(confirmunsub) - confirm_unsub(listdir, listaddr, address); + confirm_unsub(listdir, listaddr, address, mlmmjsend); return EXIT_SUCCESS; } diff -r b81af15bf60c -r 6b61ded65896 src/send_help.c --- a/src/send_help.c Fri Apr 23 23:53:47 2004 +1000 +++ b/src/send_help.c Fri Apr 23 23:54:04 2004 +1000 @@ -19,23 +19,14 @@ #include "getlistaddr.h" #include "log_error.h" -void send_help(const char *listdir, const char *emailaddr) +void send_help(const char *listdir, const char *emailaddr, + const char *mlmmjsend) { - FILE *helpfile; - FILE *queuefile; - char *bufres; - char buf[READ_BUFSIZE]; - char *helpaddr; - char *fromaddr; - char *fromstr; - char *tostr; - char *subjectstr; - char *helpfilename; - char *queuefilename; - char *listname; - char *randomstr; - char *listfqdn; - char listaddr[READ_BUFSIZE]; + FILE *helpfile, *queuefile; + char buf[READ_BUFSIZE], listaddr[READ_BUFSIZE]; + char *bufres, *helpaddr, *fromaddr, *fromstr, *tostr; + char *subjectstr, *helpfilename, *queuefilename, *listname; + char *randomstr, *listfqdn; size_t len; getlistaddr(listaddr, listdir); @@ -110,11 +101,11 @@ fclose(helpfile); fclose(queuefile); - execlp(BINDIR"mlmmj-send", "mlmmj-send", + execlp(mlmmjsend, mlmmjsend, "-L", "1", "-T", emailaddr, "-F", fromaddr, "-m", queuefilename, 0); - log_error("execlp() of "BINDIR"mlmmj-send failed"); + log_error("execlp() of mlmmjsend failed"); exit(EXIT_FAILURE); }