changeset 184:86d7d42fe996

Assorted bugfixes. Addition of lots of unlink() in listcontrol.c Make random-str return an even more random str, and hex format it since it looks better :)
author mmj
date Mon, 07 Jun 2004 07:08:09 +1000
parents 2ec251b9a2f8
children f92879537344
files src/do_all_the_voodo_here.c src/listcontrol.c src/mlmmj-process.c src/mlmmj-send.c src/send_help.c src/strgen.c
diffstat 6 files changed, 34 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/do_all_the_voodo_here.c	Mon Jun 07 04:29:13 2004 +1000
+++ b/src/do_all_the_voodo_here.c	Mon Jun 07 07:08:09 2004 +1000
@@ -68,7 +68,7 @@
 	while((hdrline = gethdrline(infd))) {
 		/* Done with headers? Then add extra if wanted*/
 		if((strlen(hdrline) == 1) && (hdrline[0] == '\n')){
-			if(hdrfd) {
+			if(hdrfd >= 0) {
 				if(dumpfd2fd(hdrfd, outfd) < 0) {
 					log_error(LOG_ARGS, "Could not"
 						"add extra headers");
@@ -119,7 +119,7 @@
 	}
 
 	/* No more, lets add the footer if one */
-	if(footfd)
+	if(footfd >= 0)
 		if(dumpfd2fd(footfd, outfd) < 0) {
 			log_error(LOG_ARGS, "Error when adding footer");
 			return -1;
--- a/src/listcontrol.c	Mon Jun 07 04:29:13 2004 +1000
+++ b/src/listcontrol.c	Mon Jun 07 07:08:09 2004 +1000
@@ -23,6 +23,7 @@
 #include "log_error.h"
 #include "statctrl.h"
 #include "mygetline.h"
+#include "chomp.h"
 
 enum ctrl_e {
 	CTRL_SUBSCRIBE,
@@ -121,6 +122,7 @@
 	switch (ctrl) {
 
 	case CTRL_SUBSCRIBE:
+		unlink(mailname);
 		if (closedlist) exit(EXIT_SUCCESS);
 		if(strchr(fromemails->emaillist[0], '@')) {
 			execlp(mlmmjsub, mlmmjsub,
@@ -134,14 +136,15 @@
 		break;
 
 	case CTRL_CONFSUB:
+		unlink(mailname);
 		if (closedlist) exit(EXIT_SUCCESS);
 		conffilename = concatstr(3, listdir, "/subconf/", param);
 		free(param);
 		if((tmpfd = open(conffilename, O_RDONLY)) > 0) {
 			tmpstr = mygetline(tmpfd);
+			chomp(tmpstr);
 			close(tmpfd);
-			if(strncasecmp(tmpstr, fromemails->emaillist[0],
-						strlen(tmpstr)) == 0) {
+			if(strcasecmp(tmpstr, fromemails->emaillist[0]) == 0) {
 				unlink(conffilename);
 				execlp(mlmmjsub, mlmmjsub,
 						"-L", listdir,
@@ -160,6 +163,7 @@
 		break;
 
 	case CTRL_UNSUBSCRIBE:
+		unlink(mailname);
 		if (closedlist) exit(EXIT_SUCCESS);
 		if(strchr(fromemails->emaillist[0], '@')) {
 			execlp(mlmmjunsub, mlmmjunsub,
@@ -174,14 +178,15 @@
 		break;
 
 	case CTRL_CONFUNSUB:
+		unlink(mailname);
 		if (closedlist) exit(EXIT_SUCCESS);
 		conffilename = concatstr(3, listdir, "/unsubconf/", param);
 		free(param);
 		if((tmpfd = open(conffilename, O_RDONLY))) {
 			tmpstr = mygetline(tmpfd);
 			close(tmpfd);
-			if(strncasecmp(tmpstr, fromemails->emaillist[0],
-						strlen(tmpstr)) == 0) {
+			chomp(tmpstr);
+			if(strcasecmp(tmpstr, fromemails->emaillist[0]) == 0) {
 				unlink(conffilename);
 				execlp(mlmmjunsub, mlmmjunsub,
 						"-L", listdir,
@@ -213,6 +218,7 @@
 
 	case CTRL_MODERATE:
 		/* TODO Add accept/reject parameter to moderate */
+		unlink(mailname);
 		moderatefilename = concatstr(3, listdir, "/moderation/", param);
 		free(param);
 		if(stat(moderatefilename, &stbuf) < 0) {
@@ -228,7 +234,7 @@
 		break;
 
 	case CTRL_HELP:
-		printf("Help wanted!\n");
+		unlink(mailname);
 		if(strchr(fromemails->emaillist[0], '@'))
 			send_help(listdir, fromemails->emaillist[0],
 				  mlmmjsend);
@@ -236,5 +242,7 @@
 
 	}
 
+	unlink(mailname);
+
 	return 0;
 }
--- a/src/mlmmj-process.c	Mon Jun 07 04:29:13 2004 +1000
+++ b/src/mlmmj-process.c	Mon Jun 07 07:08:09 2004 +1000
@@ -51,18 +51,8 @@
 		exit(EXIT_FAILURE);
 	}
 	free(moderatorfilename);
-	queuefilename = concatstr(3, listdir, "/queue/", randomstr);
 	
-	if((queuefd = open(queuefilename, O_WRONLY|O_CREAT|O_EXCL,
-					S_IRUSR|S_IWUSR)) < 0) {
-		log_error(LOG_ARGS, "Could not open '%s'", queuefilename);
-		free(queuefilename);
-		free(randomstr);
-		exit(EXIT_FAILURE);
-	}
-	free(randomstr);
-
-	moderatorsfilename = concatstr(2, listdir, "/moderators");
+	moderatorsfilename = concatstr(2, listdir, "/control/moderators");
 	if((moderatorsfd = open(moderatorsfilename, O_RDONLY)) < 0) {
 		log_error(LOG_ARGS, "Could not open '%s'", moderatorsfilename);
 		free(queuefilename);
@@ -80,6 +70,17 @@
 		exit(EXIT_FAILURE);
 	}
 
+	queuefilename = concatstr(3, listdir, "/queue/", randomstr);
+	
+	if((queuefd = open(queuefilename, O_WRONLY|O_CREAT|O_EXCL,
+					S_IRUSR|S_IWUSR)) < 0) {
+		log_error(LOG_ARGS, "Could not open '%s'", queuefilename);
+		free(queuefilename);
+		free(randomstr);
+		exit(EXIT_FAILURE);
+	}
+	free(randomstr);
+
 	from = concatstr(3, listname, "+owner@", fqdn);
 	s1 = concatstr(15, "From: ", from, "\nTo: ", listname, "-moderators@",
 			fqdn, "\nReply-To: ", listname,	"+moderate-",
--- a/src/mlmmj-send.c	Mon Jun 07 04:29:13 2004 +1000
+++ b/src/mlmmj-send.c	Mon Jun 07 07:08:09 2004 +1000
@@ -382,6 +382,7 @@
 	       " -l: List control variable:\n", prg);
 	printf("    '1' means 'send a single mail'\n"
 	       "    '2' means 'mail to moderators'\n"
+	       "    '3' means 'resend failed list mail'\n"
 	       " -L: Full path to list directory\n"
 	       " -m: Full path to mail file\n"
 	       " -r: Relayhost (defaults to localhost)\n"
@@ -502,7 +503,7 @@
 	case '1': /* A single mail is to be sent, do nothing */
 		break;
 	case '2': /* Moderators */
-		subfilename = concatstr(2, listdir, "/moderators");
+		subfilename = concatstr(2, listdir, "/control/moderators");
 		if((subfd = open(subfilename, O_RDONLY)) < 0) {
 			log_error(LOG_ARGS, "Could not open '%s':",
 					    subfilename);
--- a/src/send_help.c	Mon Jun 07 04:29:13 2004 +1000
+++ b/src/send_help.c	Mon Jun 07 07:08:09 2004 +1000
@@ -62,8 +62,8 @@
 
 	fromaddr = concatstr(3, listname, "+bounces-help@", listfqdn);
 
-	s1 = concatstr(11, "From: ", listname, "+owner@", listfqdn, "\n"
-			"To: ", emailaddr, "\n", "Subject: Help for ",
+	s1 = concatstr(9, "From: ", listname, "+owner@", listfqdn,
+			"\nTo: ", emailaddr, "\nSubject: Help for ",
 			listaddr, "\n\n");
 
 	if(writen(queuefd, s1, strlen(s1)) < 0) {
--- a/src/strgen.c	Mon Jun 07 04:29:13 2004 +1000
+++ b/src/strgen.c	Mon Jun 07 07:08:09 2004 +1000
@@ -19,10 +19,10 @@
 
 char *random_str()
 {
-	size_t len = 16;
+	size_t len = 32;
 	char *dest = malloc(len);
 
-	snprintf(dest, len, "%d", random_int());
+	snprintf(dest, len, "%X%X", random_int(), random_int());
 
 	return dest;
 }