{
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);
listaddr = getlistaddr(listdir);
listdelim = getlistdelim(listdir);
+ listfqdn = genlistfqdn(listaddr);
tmp = mygetline(infd);
if(strncasecmp(tmp, "Subject:", 8) != 0) {
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,
if(outfd < 0) {
log_error(LOG_ARGS, "Could not open std mail %s", retstr);
myfree(str);
+ myfree(listaddr);
myfree(listdelim);
+ myfree(listfqdn);
return NULL;
}
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;
}
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;
}
fsync(outfd);
close(outfd);
+ myfree(listaddr);
+ myfree(listdelim);
+ myfree(listfqdn);
+
return retstr;
}
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()