changeset 121:bd18a247ae4a

Listcontrol shouldn't open the mailfile to retrieve info we've already retrieved in mlmmj-process. Instead we parse it on to listcontrol from mlmmj-process.
author mmj
date Sat, 29 May 2004 23:39:39 +1000
parents 154b486fefd5
children 213b1e372027
files include/listcontrol.h src/listcontrol.c
diffstat 2 files changed, 20 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/include/listcontrol.h	Sat May 29 23:36:19 2004 +1000
+++ b/include/listcontrol.h	Sat May 29 23:39:39 2004 +1000
@@ -9,7 +9,9 @@
 #ifndef LISTCONTROL_H
 #define LISTCONTROL_H
 
-int listcontrol(const char *mailfilename, const char *listdir,
+#include "find_email_adr.h"
+
+int listcontrol(struct email_container *fromemails, const char *listdir,
 		const char *controladdr, const char *mlmmjsub,
 		const char *mlmmjunsub, const char *mlmmjsend,
 		const char *mlmmjbounce);
--- a/src/listcontrol.c	Sat May 29 23:36:19 2004 +1000
+++ b/src/listcontrol.c	Sat May 29 23:39:39 2004 +1000
@@ -53,27 +53,21 @@
 };
 
 
-int listcontrol(const char *mailfilename, const char *listdir,
+int listcontrol(struct email_container *fromemails, const char *listdir,
 		const char *controladdr, const char *mlmmjsub,
 		const char *mlmmjunsub, const char *mlmmjsend,
 		const char *mlmmjbounce)
 {
 	char tmpstr[READ_BUFSIZE];
-	char *atsign, *recipdelimsign, *tokenvalue, *bouncenr;
+	char *atsign, *recipdelimsign, *bouncenr;
 	char *controlstr, *param, *conffilename, *moderatefilename;
-	FILE *mailfile, *tempfile;
-	struct email_container fromemails;
+	FILE *tempfile;
 	size_t len;
 	struct stat stbuf;
 	int closedlist;
 	size_t cmdlen;
 	unsigned int ctrl;
 	
-	if((mailfile = fopen(mailfilename, "r")) == NULL) {
-		log_error(LOG_ARGS, "listcontrol, could not open mail");
-		exit(EXIT_FAILURE);
-	}
-
 	/* A closed list doesn't allow subscribtion and unsubscription */
 	closedlist = statctrl(listdir, "closedlist");
 
@@ -87,14 +81,10 @@
 	MY_ASSERT(controlstr);
 	snprintf(controlstr, len, "%s", recipdelimsign + 1);
 
-	tokenvalue = find_header_file(mailfile, tmpstr, "From:");
-	fclose(mailfile);
-	unlink(mailfilename);
-
-	find_email_adr(tmpstr, &fromemails);
-
 #if 0
 	log_error(LOG_ARGS, "controlstr = [%s]\n", controlstr);
+	log_error(LOG_ARGS, "fromemails->emaillist[0] = [%s]\n",
+			fromemails->emaillist[0]);
 #endif
 	for (ctrl=0; ctrl<CTRL_END; ctrl++) {
 		cmdlen = strlen(ctrl_commands[ctrl].command);
@@ -133,10 +123,10 @@
 
 	case CTRL_SUBSCRIBE:
 		if (closedlist) exit(EXIT_SUCCESS);
-		if(index(fromemails.emaillist[0], '@')) {
+		if(strchr(fromemails->emaillist[0], '@')) {
 			execlp(mlmmjsub, mlmmjsub,
 					"-L", listdir,
-					"-a", fromemails.emaillist[0],
+					"-a", fromemails->emaillist[0],
 					"-C", 0);
 			log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsub);
 			exit(EXIT_FAILURE);
@@ -151,14 +141,15 @@
 		if((tempfile = fopen(conffilename, "r"))) {
 			fgets(tmpstr, READ_BUFSIZE, tempfile);
 			fclose(tempfile);
-			if(strncasecmp(tmpstr, fromemails.emaillist[0],
+			if(strncasecmp(tmpstr, fromemails->emaillist[0],
 						strlen(tmpstr)) == 0) {
 				unlink(conffilename);
 				execlp(mlmmjsub, mlmmjsub,
 						"-L", listdir,
 						"-a", tmpstr,
 						"-c", 0);
-				log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsub);
+				log_error(LOG_ARGS, "execlp() of '%s' failed",
+						mlmmjsub);
 				exit(EXIT_FAILURE);
 			} else {
 				/* Not proper confirm */
@@ -170,12 +161,13 @@
 
 	case CTRL_UNSUBSCRIBE:
 		if (closedlist) exit(EXIT_SUCCESS);
-		if(index(fromemails.emaillist[0], '@')) {
+		if(strchr(fromemails->emaillist[0], '@')) {
 			execlp(mlmmjunsub, mlmmjunsub,
 					"-L", listdir,
-					"-a", fromemails.emaillist[0],
+					"-a", fromemails->emaillist[0],
 					"-C", 0);
-			log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjunsub);
+			log_error(LOG_ARGS, "execlp() of '%s' failed",
+					mlmmjunsub);
 			exit(EXIT_FAILURE);
 		} else /* Not a valid From: address, so we silently ignore */
 			exit(EXIT_SUCCESS);
@@ -188,7 +180,7 @@
 		if((tempfile = fopen(conffilename, "r"))) {
 			fgets(tmpstr, READ_BUFSIZE, tempfile);
 			fclose(tempfile);
-			if(strncasecmp(tmpstr, fromemails.emaillist[0],
+			if(strncasecmp(tmpstr, fromemails->emaillist[0],
 						strlen(tmpstr)) == 0) {
 				unlink(conffilename);
 				execlp(mlmmjunsub, mlmmjunsub,
@@ -236,8 +228,8 @@
 
 	case CTRL_HELP:
 		printf("Help wanted!\n");
-		if(index(fromemails.emaillist[0], '@'))
-			send_help(listdir, fromemails.emaillist[0],
+		if(strchr(fromemails->emaillist[0], '@'))
+			send_help(listdir, fromemails->emaillist[0],
 				  mlmmjsend);
 		break;