changeset 37:6b61ded65896

Send around the full path to the binaries
author mmj
date Fri, 23 Apr 2004 23:54:04 +1000
parents b81af15bf60c
children 7f4c75a4a346
files include/listcontrol.h include/mlmmj-sub.h include/mlmmj-unsub.h include/send_help.h src/listcontrol.c src/mlmmj-process.c src/mlmmj-recieve.c src/mlmmj-send.c src/mlmmj-sub.c src/mlmmj-unsub.c src/send_help.c
diffstat 11 files changed, 107 insertions(+), 130 deletions(-) [+]
line wrap: on
line diff
--- 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 */
--- 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 */
--- /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 <mmj at mmj.dk>
+ *
+ * $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 */
--- 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
--- 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;
 }
--- 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 <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <libgen.h>
 
 #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");
--- 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 <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <libgen.h>
 
 #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;
 }
--- 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);
--- 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 <unistd.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <libgen.h>
 
 #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;
 }
--- 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 <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <libgen.h>
 
 #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;
 }
--- 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);
 }