changeset 641:436eea81bc20

Changed Message-ID headers to include FQDN (Ansgar Burchardt)
author mortenp
date Mon, 11 Jun 2007 04:05:02 +1000
parents 3770bb64ea17
children a5e0c3976086
files ChangeLog include/strgen.h src/prepstdreply.c src/strgen.c
diffstat 4 files changed, 20 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu May 10 02:59:23 2007 +1000
+++ b/ChangeLog	Mon Jun 11 04:05:02 2007 +1000
@@ -1,3 +1,4 @@
+ o Changed Message-ID headers to include FQDN (Ansgar Burchardt)
  o Added support for 'discard' keyword in access rules (Sascha Sommer)
 1.2.14
  o Updated Danish listtexts (Jesper Lund)
--- a/include/strgen.h	Thu May 10 02:59:23 2007 +1000
+++ b/include/strgen.h	Mon Jun 11 04:05:02 2007 +1000
@@ -34,7 +34,7 @@
 char *mydirname(const char *path);
 char *mybasename(const char *path);
 char *cleanquotedp(const char *qpstr);
-char *genmsgid(void);
+char *genmsgid(const char *fqdn);
 char *gendatestr(void);
 
 #endif /* STRGEN_H */
--- a/src/prepstdreply.c	Thu May 10 02:59:23 2007 +1000
+++ b/src/prepstdreply.c	Mon Jun 11 04:05:02 2007 +1000
@@ -160,6 +160,7 @@
 {
 	int infd, outfd;
 	char *listaddr, *listdelim, *myfrom, *tmp, *subject, *retstr = NULL;
+	char *listfqdn;
 	char *myreplyto, *myto, *str = NULL, *mydate, *mymsgid;
 
 	tmp = concatstr(3, listdir, "/text/", filename);
@@ -177,6 +178,7 @@
 
 	listaddr = getlistaddr(listdir);
 	listdelim = getlistdelim(listdir);
+	listfqdn = genlistfqdn(listaddr);
 
 	tmp = mygetline(infd);
 	if(strncasecmp(tmp, "Subject:", 8) != 0) {
@@ -192,7 +194,7 @@
 	myfrom = substitute(from, listaddr, listdelim, tokencount, data);
 	myto = substitute(to, listaddr, listdelim, tokencount, data);
 	mydate = gendatestr();
-	mymsgid = genmsgid();
+	mymsgid = genmsgid(listfqdn);
 
 	if(replyto) {
 		myreplyto = substitute(replyto, listaddr, listdelim,
@@ -216,7 +218,9 @@
 	if(outfd < 0) {
 		log_error(LOG_ARGS, "Could not open std mail %s", retstr);
 		myfree(str);
+		myfree(listaddr);
 		myfree(listdelim);
+		myfree(listfqdn);
 		return NULL;
 	}
 
@@ -226,7 +230,9 @@
 	if(writen(outfd, str, strlen(str)) < 0) {
 		log_error(LOG_ARGS, "Could not write std mail");
 		myfree(str);
+		myfree(listaddr);
 		myfree(listdelim);
+		myfree(listfqdn);
 		return NULL;
 	}
 
@@ -238,7 +244,9 @@
 		myfree(tmp);
 		if(writen(outfd, str, strlen(str)) < 0) {
 			myfree(str);
+			myfree(listaddr);
 			myfree(listdelim);
+			myfree(listfqdn);
 			log_error(LOG_ARGS, "Could not write std mail");
 			return NULL;
 		}
@@ -248,5 +256,9 @@
 	fsync(outfd);
 	close(outfd);
 
+	myfree(listaddr);
+	myfree(listdelim);
+	myfree(listfqdn);
+
 	return retstr;
 }
--- a/src/strgen.c	Thu May 10 02:59:23 2007 +1000
+++ b/src/strgen.c	Mon Jun 11 04:05:02 2007 +1000
@@ -259,21 +259,14 @@
 	return retstr;
 }
 
-char *genmsgid()
+char *genmsgid(const char *fqdn)
 {
-	size_t len = 128;
-	char *s = mymalloc(len), *retstr;
-	time_t t;
-
-	t = time(NULL);
+	char buf[256];
 
-	snprintf(s, len-1, "<%ld-%x-mlmmj-%x@%x.plonk", (long int)t,
-			random_int(), random_int(), random_int());
+	snprintf(buf, sizeof(buf), "Message-ID: <%ld-%d-mlmmj-%x@%s>\n",
+			(long int)time(NULL), (int)getpid(), random_int(), fqdn);
 
-	retstr = concatstr(3, "Message-ID: ", s, ">\n");
-	myfree(s);
-	
-	return retstr;
+	return mystrdup(buf);
 }
 
 char *gendatestr()