changeset 486:89a256e8f1d3

read() wrapper, and yet another littering hole plunged
author mmj
date Tue, 03 May 2005 03:39:11 +1000
parents d57cdfc7e17a
children cecbb0d77eb2
files ChangeLog include/wrappers.h src/Makefile.am src/Makefile.in src/incindexfile.c src/listcontrol.c src/mlmmj-bounce.c src/mlmmj-maintd.c src/mlmmj-send.c src/random-int.c
diffstat 10 files changed, 49 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun May 01 20:57:52 2005 +1000
+++ b/ChangeLog	Tue May 03 03:39:11 2005 +1000
@@ -1,3 +1,5 @@
+ o Also remove mails when it's a bounce from a person not subbed
+ o Introduce read() wrapper (Stevens)
  o Bouncing confirmation mails of sub or unsub should be cleaned from
    the queue as well
  o Normally mails which doesn't have exactly one From: emailaddress are
--- a/include/wrappers.h	Sun May 01 20:57:52 2005 +1000
+++ b/include/wrappers.h	Tue May 03 03:39:11 2005 +1000
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 
 ssize_t writen(int fd, const void *vptr, size_t n);
+ssize_t readn(int fd, void *vptr, size_t n);
 int random_int(void);
 int dumpfd2fd(int infd, int outfd);
 
--- a/src/Makefile.am	Sun May 01 20:57:52 2005 +1000
+++ b/src/Makefile.am	Tue May 03 03:39:11 2005 +1000
@@ -16,11 +16,11 @@
                      incindexfile.c checkwait_smtpreply.c getlistaddr.c \
 		     mylocking.c init_sockfd.c strgen.c random-int.c \
 		     print-version.c log_error.c mygetline.c memory.c \
-		     statctrl.c ctrlvalue.c getaddrsfromfd.c
+		     statctrl.c ctrlvalue.c getaddrsfromfd.c readn.c
 
 mlmmj_recieve_SOURCES = mlmmj-recieve.c writen.c random-int.c strgen.c \
 			print-version.c log_error.c dumpfd2fd.c memory.c \
-			log_oper.c mylocking.c
+			log_oper.c mylocking.c readn.c
 
 mlmmj_process_SOURCES = mlmmj-process.c writen.c find_email_adr.c \
 			incindexfile.c itoa.c getlistaddr.c chomp.c \
@@ -29,28 +29,28 @@
 			do_all_the_voodo_here.c mygetline.c gethdrline.c \
 			log_error.c statctrl.c ctrlvalue.c dumpfd2fd.c \
 			subscriberfuncs.c ctrlvalues.c memory.c log_oper.c \
-			send_list.c
+			send_list.c readn.c
 
 mlmmj_sub_SOURCES = mlmmj-sub.c writen.c mylocking.c \
 			getlistaddr.c chomp.c random-int.c strgen.c \
 			subscriberfuncs.c print-version.c \
 			log_error.c mygetline.c prepstdreply.c memory.c \
-			statctrl.c
+			statctrl.c readn.c
 
 mlmmj_unsub_SOURCES = mlmmj-unsub.c writen.c mylocking.c \
 			getlistaddr.c chomp.c subscriberfuncs.c random-int.c \
 			strgen.c print-version.c log_error.c mygetline.c \
-			prepstdreply.c memory.c statctrl.c
+			prepstdreply.c memory.c statctrl.c readn.c
 			
 mlmmj_bounce_SOURCES = mlmmj-bounce.c print-version.c log_error.c \
 		       subscriberfuncs.c strgen.c random-int.c writen.c \
 		       prepstdreply.c mygetline.c chomp.c getlistaddr.c \
-		       memory.c find_email_adr.c gethdrline.c
+		       memory.c find_email_adr.c gethdrline.c readn.c
 
 mlmmj_maintd_SOURCES = mlmmj-maintd.c print-version.c log_error.c mygetline.c \
 		       strgen.c random-int.c chomp.c writen.c memory.c \
 		       ctrlvalue.c send_digest.c getlistaddr.c dumpfd2fd.c \
-		       mylocking.c log_oper.c
+		       mylocking.c log_oper.c readn.c
 
 mlmmj_list_SOURCES = mlmmj-list.c strgen.c writen.c print-version.c memory.c \
-		     log_error.c random-int.c
+		     log_error.c random-int.c readn.c
--- a/src/Makefile.in	Sun May 01 20:57:52 2005 +1000
+++ b/src/Makefile.in	Tue May 03 03:39:11 2005 +1000
@@ -61,12 +61,13 @@
 	subscriberfuncs.$(OBJEXT) strgen.$(OBJEXT) \
 	random-int.$(OBJEXT) writen.$(OBJEXT) prepstdreply.$(OBJEXT) \
 	mygetline.$(OBJEXT) chomp.$(OBJEXT) getlistaddr.$(OBJEXT) \
-	memory.$(OBJEXT) find_email_adr.$(OBJEXT) gethdrline.$(OBJEXT)
+	memory.$(OBJEXT) find_email_adr.$(OBJEXT) gethdrline.$(OBJEXT) \
+	readn.$(OBJEXT)
 mlmmj_bounce_OBJECTS = $(am_mlmmj_bounce_OBJECTS)
 mlmmj_bounce_LDADD = $(LDADD)
 am_mlmmj_list_OBJECTS = mlmmj-list.$(OBJEXT) strgen.$(OBJEXT) \
 	writen.$(OBJEXT) print-version.$(OBJEXT) memory.$(OBJEXT) \
-	log_error.$(OBJEXT) random-int.$(OBJEXT)
+	log_error.$(OBJEXT) random-int.$(OBJEXT) readn.$(OBJEXT)
 mlmmj_list_OBJECTS = $(am_mlmmj_list_OBJECTS)
 mlmmj_list_LDADD = $(LDADD)
 am_mlmmj_maintd_OBJECTS = mlmmj-maintd.$(OBJEXT) \
@@ -75,7 +76,7 @@
 	chomp.$(OBJEXT) writen.$(OBJEXT) memory.$(OBJEXT) \
 	ctrlvalue.$(OBJEXT) send_digest.$(OBJEXT) \
 	getlistaddr.$(OBJEXT) dumpfd2fd.$(OBJEXT) mylocking.$(OBJEXT) \
-	log_oper.$(OBJEXT)
+	log_oper.$(OBJEXT) readn.$(OBJEXT)
 mlmmj_maintd_OBJECTS = $(am_mlmmj_maintd_OBJECTS)
 mlmmj_maintd_LDADD = $(LDADD)
 am_mlmmj_process_OBJECTS = mlmmj-process.$(OBJEXT) writen.$(OBJEXT) \
@@ -87,13 +88,14 @@
 	mygetline.$(OBJEXT) gethdrline.$(OBJEXT) log_error.$(OBJEXT) \
 	statctrl.$(OBJEXT) ctrlvalue.$(OBJEXT) dumpfd2fd.$(OBJEXT) \
 	subscriberfuncs.$(OBJEXT) ctrlvalues.$(OBJEXT) \
-	memory.$(OBJEXT) log_oper.$(OBJEXT) send_list.$(OBJEXT)
+	memory.$(OBJEXT) log_oper.$(OBJEXT) send_list.$(OBJEXT) \
+	readn.$(OBJEXT)
 mlmmj_process_OBJECTS = $(am_mlmmj_process_OBJECTS)
 mlmmj_process_LDADD = $(LDADD)
 am_mlmmj_recieve_OBJECTS = mlmmj-recieve.$(OBJEXT) writen.$(OBJEXT) \
 	random-int.$(OBJEXT) strgen.$(OBJEXT) print-version.$(OBJEXT) \
 	log_error.$(OBJEXT) dumpfd2fd.$(OBJEXT) memory.$(OBJEXT) \
-	log_oper.$(OBJEXT) mylocking.$(OBJEXT)
+	log_oper.$(OBJEXT) mylocking.$(OBJEXT) readn.$(OBJEXT)
 mlmmj_recieve_OBJECTS = $(am_mlmmj_recieve_OBJECTS)
 mlmmj_recieve_LDADD = $(LDADD)
 am_mlmmj_send_OBJECTS = mlmmj-send.$(OBJEXT) writen.$(OBJEXT) \
@@ -103,7 +105,7 @@
 	init_sockfd.$(OBJEXT) strgen.$(OBJEXT) random-int.$(OBJEXT) \
 	print-version.$(OBJEXT) log_error.$(OBJEXT) \
 	mygetline.$(OBJEXT) memory.$(OBJEXT) statctrl.$(OBJEXT) \
-	ctrlvalue.$(OBJEXT) getaddrsfromfd.$(OBJEXT)
+	ctrlvalue.$(OBJEXT) getaddrsfromfd.$(OBJEXT) readn.$(OBJEXT)
 mlmmj_send_OBJECTS = $(am_mlmmj_send_OBJECTS)
 mlmmj_send_LDADD = $(LDADD)
 am_mlmmj_sub_OBJECTS = mlmmj-sub.$(OBJEXT) writen.$(OBJEXT) \
@@ -111,7 +113,7 @@
 	random-int.$(OBJEXT) strgen.$(OBJEXT) \
 	subscriberfuncs.$(OBJEXT) print-version.$(OBJEXT) \
 	log_error.$(OBJEXT) mygetline.$(OBJEXT) prepstdreply.$(OBJEXT) \
-	memory.$(OBJEXT) statctrl.$(OBJEXT)
+	memory.$(OBJEXT) statctrl.$(OBJEXT) readn.$(OBJEXT)
 mlmmj_sub_OBJECTS = $(am_mlmmj_sub_OBJECTS)
 mlmmj_sub_LDADD = $(LDADD)
 am_mlmmj_unsub_OBJECTS = mlmmj-unsub.$(OBJEXT) writen.$(OBJEXT) \
@@ -119,7 +121,7 @@
 	subscriberfuncs.$(OBJEXT) random-int.$(OBJEXT) \
 	strgen.$(OBJEXT) print-version.$(OBJEXT) log_error.$(OBJEXT) \
 	mygetline.$(OBJEXT) prepstdreply.$(OBJEXT) memory.$(OBJEXT) \
-	statctrl.$(OBJEXT)
+	statctrl.$(OBJEXT) readn.$(OBJEXT)
 mlmmj_unsub_OBJECTS = $(am_mlmmj_unsub_OBJECTS)
 mlmmj_unsub_LDADD = $(LDADD)
 binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
@@ -223,11 +225,11 @@
                      incindexfile.c checkwait_smtpreply.c getlistaddr.c \
 		     mylocking.c init_sockfd.c strgen.c random-int.c \
 		     print-version.c log_error.c mygetline.c memory.c \
-		     statctrl.c ctrlvalue.c getaddrsfromfd.c
+		     statctrl.c ctrlvalue.c getaddrsfromfd.c readn.c
 
 mlmmj_recieve_SOURCES = mlmmj-recieve.c writen.c random-int.c strgen.c \
 			print-version.c log_error.c dumpfd2fd.c memory.c \
-			log_oper.c mylocking.c
+			log_oper.c mylocking.c readn.c
 
 mlmmj_process_SOURCES = mlmmj-process.c writen.c find_email_adr.c \
 			incindexfile.c itoa.c getlistaddr.c chomp.c \
@@ -236,31 +238,31 @@
 			do_all_the_voodo_here.c mygetline.c gethdrline.c \
 			log_error.c statctrl.c ctrlvalue.c dumpfd2fd.c \
 			subscriberfuncs.c ctrlvalues.c memory.c log_oper.c \
-			send_list.c
+			send_list.c readn.c
 
 mlmmj_sub_SOURCES = mlmmj-sub.c writen.c mylocking.c \
 			getlistaddr.c chomp.c random-int.c strgen.c \
 			subscriberfuncs.c print-version.c \
 			log_error.c mygetline.c prepstdreply.c memory.c \
-			statctrl.c
+			statctrl.c readn.c
 
 mlmmj_unsub_SOURCES = mlmmj-unsub.c writen.c mylocking.c \
 			getlistaddr.c chomp.c subscriberfuncs.c random-int.c \
 			strgen.c print-version.c log_error.c mygetline.c \
-			prepstdreply.c memory.c statctrl.c
+			prepstdreply.c memory.c statctrl.c readn.c
 
 mlmmj_bounce_SOURCES = mlmmj-bounce.c print-version.c log_error.c \
 		       subscriberfuncs.c strgen.c random-int.c writen.c \
 		       prepstdreply.c mygetline.c chomp.c getlistaddr.c \
-		       memory.c find_email_adr.c gethdrline.c
+		       memory.c find_email_adr.c gethdrline.c readn.c
 
 mlmmj_maintd_SOURCES = mlmmj-maintd.c print-version.c log_error.c mygetline.c \
 		       strgen.c random-int.c chomp.c writen.c memory.c \
 		       ctrlvalue.c send_digest.c getlistaddr.c dumpfd2fd.c \
-		       mylocking.c log_oper.c
+		       mylocking.c log_oper.c readn.c
 
 mlmmj_list_SOURCES = mlmmj-list.c strgen.c writen.c print-version.c memory.c \
-		     log_error.c random-int.c
+		     log_error.c random-int.c readn.c
 
 all: all-am
 
@@ -401,6 +403,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prepstdreply.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-version.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-int.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send_digest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send_help.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send_list.Po@am__quote@
--- a/src/incindexfile.c	Sun May 01 20:57:52 2005 +1000
+++ b/src/incindexfile.c	Tue May 03 03:39:11 2005 +1000
@@ -66,7 +66,7 @@
 		return 0;
 	}
 
-	read(fd, intbuf, INTBUF_SIZE);
+	readn(fd, intbuf, INTBUF_SIZE);
 	for(i=0; i<sizeof(intbuf); i++) {
 		if(intbuf[i] < '0' || intbuf[i] > '9') {
 			intbuf[i] = '\0';
--- a/src/listcontrol.c	Sun May 01 20:57:52 2005 +1000
+++ b/src/listcontrol.c	Tue May 03 03:39:11 2005 +1000
@@ -101,7 +101,7 @@
 		const char *mlmmjbounce, const char *mailname)
 {
 	char *atsign, *recipdelimsign, *bouncenr, *tmpstr;
-	char *controlstr, *param, *conffilename, *moderatefilename;
+	char *controlstr, *param = NULL, *conffilename, *moderatefilename;
 	char *c, *archivefilename, *sendfilename;
 	const char *subswitch;
 	size_t len;
--- a/src/mlmmj-bounce.c	Sun May 01 20:57:52 2005 +1000
+++ b/src/mlmmj-bounce.c	Tue May 03 03:39:11 2005 +1000
@@ -368,12 +368,19 @@
 	bfilename = concatstr(3, listdir, "/bounce/", address);
 
 	a = strrchr(address, '=');
-	if (!a)
+	if (!a) {
+		if(mailname)
+			unlink(mailname);
 		exit(EXIT_SUCCESS);  /* ignore malformed address */
+	}
 	*a = '@';
 
 	/* make sure it's a subscribed address */
 	if(is_subbed(listdir, address)) {
+		log_error(LOG_ARGS, "%s is bouncing but not subscribed?",
+				address);
+		if(mailname)
+			unlink(mailname);
 		myfree(bfilename);
 		exit(EXIT_SUCCESS); /* Not subbed, so exit silently */
 	}
--- a/src/mlmmj-maintd.c	Sun May 01 20:57:52 2005 +1000
+++ b/src/mlmmj-maintd.c	Tue May 03 03:39:11 2005 +1000
@@ -85,7 +85,8 @@
 	else if (pid)
 		exit(EXIT_SUCCESS); /* parent says bye bye */
 
-	chdir(rootdir);
+	if(chdir(rootdir) < 0)
+		log_error(LOG_ARGS, "Could not chdir(%s)", rootdir);
 
 	i = sysconf(_SC_OPEN_MAX);
 	if(i < 0)
--- a/src/mlmmj-send.c	Sun May 01 20:57:52 2005 +1000
+++ b/src/mlmmj-send.c	Tue May 03 03:39:11 2005 +1000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004 Mads Martin Joergensen <mmj at mmj.dk>
+/* Copyright (C) 2004, 2003, 2004 Mads Martin Joergensen <mmj at mmj.dk>
  *
  * $Id$
  *
--- a/src/random-int.c	Sun May 01 20:57:52 2005 +1000
+++ b/src/random-int.c	Tue May 03 03:39:11 2005 +1000
@@ -26,6 +26,8 @@
 #include <unistd.h>
 #include <time.h>
 
+#include "wrappers.h"
+
 int random_int()
 {
 	unsigned int seed;
@@ -39,13 +41,13 @@
 		devrandom = open("/dev/random", O_RDONLY);
 
 	if (devrandom >= 0) {
-		read(devrandom, &ch, 1);
+		readn(devrandom, &ch, 1);
 		seed ^= ch;
-		read(devrandom, &ch, 1);
+		readn(devrandom, &ch, 1);
 		seed ^= ch << 8;
-		read(devrandom, &ch, 1);
+		readn(devrandom, &ch, 1);
 		seed ^= ch << 16;
-		read(devrandom, &ch, 1);
+		readn(devrandom, &ch, 1);
 		seed ^= ch << 24;
 		close(devrandom);
 	}