# HG changeset patch # User mmj # Date 1115055551 -36000 # Node ID 89a256e8f1d3a8e43ea508dffb3f43519f0475c8 # Parent d57cdfc7e17ad8dd3ecf23a0494331ad1c6f07fa read() wrapper, and yet another littering hole plunged diff -r d57cdfc7e17a -r 89a256e8f1d3 ChangeLog --- 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 diff -r d57cdfc7e17a -r 89a256e8f1d3 include/wrappers.h --- 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 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); diff -r d57cdfc7e17a -r 89a256e8f1d3 src/Makefile.am --- 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 diff -r d57cdfc7e17a -r 89a256e8f1d3 src/Makefile.in --- 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@ diff -r d57cdfc7e17a -r 89a256e8f1d3 src/incindexfile.c --- 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 '9') { intbuf[i] = '\0'; diff -r d57cdfc7e17a -r 89a256e8f1d3 src/listcontrol.c --- 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; diff -r d57cdfc7e17a -r 89a256e8f1d3 src/mlmmj-bounce.c --- 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 */ } diff -r d57cdfc7e17a -r 89a256e8f1d3 src/mlmmj-maintd.c --- 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) diff -r d57cdfc7e17a -r 89a256e8f1d3 src/mlmmj-send.c --- 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 +/* Copyright (C) 2004, 2003, 2004 Mads Martin Joergensen * * $Id$ * diff -r d57cdfc7e17a -r 89a256e8f1d3 src/random-int.c --- 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 #include +#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); }