+ o Added support for the 'originalmail' keyword (Sascha Sommer)
o Merged various changes to the web interface from Franky Van Liedekerke
1.2.15-RC1
o Added --enable-recieve-strip configure option (Ansgar Burchardt)
#define PREPSTDREPLY_H
char *substitute(const char *line, const char *listaddr, const char *listdelim,
- size_t datacount, char **data);
+ size_t datacount, char **data, const char* mailname);
char *substitute_one(const char *line, const char *listaddr,
- const char *listdelim, size_t datacount, char **data);
+ const char *listdelim, size_t datacount, char **data,
+ const char* mailname);
int open_listtext(const char *listdir, const char *filename);
char *prepstdreply(const char *listdir, const char *filename, const char *from,
- const char *to, const char *replyto, size_t tokencount,
- char **data, char *customheaders);
+ const char *to, const char *replyto, size_t tokencount,
+ char **data, char *customheaders, const char *mailname);
#endif /* PREPSTDREPLY_H */
maildata[1] = indexstr;
queuefilename = prepstdreply(listdir, "bounce-probe", "$listowner$",
- myaddr, NULL, 1, maildata, NULL);
+ myaddr, NULL, 1, maildata, NULL, NULL);
MY_ASSERT(queuefilename);
myfree(indexstr);
char *buf, *replyto, *listaddr = getlistaddr(listdir), *listdelim;
char *queuefilename = NULL, *moderatorsfilename;
char *mailbasename = mybasename(mailfilename), *tmp, *to;
- int queuefd, moderatorsfd, mailfd;
- size_t count = 0;
+ int moderatorsfd;
char *maildata[4] = { "moderateaddr", NULL, "moderators", NULL };
#if 0
printf("mailfilename = [%s], mailbasename = [%s]\n", mailfilename,
listfqdn = genlistfqdn(listaddr);
listname = genlistname(listaddr);
- if((mailfd = open(mailfilename, O_RDONLY)) < 0) {
- log_error(LOG_ARGS, "Could not open '%s'", mailfilename);
- exit(EXIT_FAILURE);
- }
-
moderatorsfilename = concatstr(2, listdir, "/control/moderators");
if((moderatorsfd = open(moderatorsfilename, O_RDONLY)) < 0) {
log_error(LOG_ARGS, "Could not open '%s'", moderatorsfilename);
myfree(listfqdn);
queuefilename = prepstdreply(listdir, "moderation", "$listowner$",
- to, replyto, 2, maildata, NULL);
-
- if((queuefd = open(queuefilename, O_WRONLY|O_APPEND)) < 0) {
- log_error(LOG_ARGS, "Could not open '%s'", queuefilename);
- myfree(queuefilename);
- exit(EXIT_FAILURE);
- }
-
- while(count < 100 && (buf = mygetline(mailfd))) {
- tmp = concatstr(2, " ", buf);
- myfree(buf);
- if(writen(queuefd, tmp, strlen(tmp)) < 0)
- log_error(LOG_ARGS, "Could not write line for "
- "moderatemail");
- myfree(tmp);
- count++;
- }
- close(queuefd);
- close(mailfd);
+ to, replyto, 2, maildata, NULL, mailfilename);
execlp(mlmmjsend, mlmmjsend,
"-l", "2",
queuefilename = prepstdreply(listdir,
"maxmailsize", "$listowner$",
fromemails.emaillist[0],
- NULL, 2, maildata, NULL);
+ NULL, 2, maildata, NULL, donemailname);
MY_ASSERT(queuefilename)
myfree(listdelim);
myfree(listname);
listfqdn);
queuefilename = prepstdreply(listdir, "notintocc",
"$listowner$", fromemails.emaillist[0],
- NULL, 0, NULL, NULL);
+ NULL, 0, NULL, NULL, donemailname);
MY_ASSERT(queuefilename)
myfree(listdelim);
myfree(listname);
"bounces-help@", listfqdn);
queuefilename = prepstdreply(listdir, "subonlypost",
"$listowner$", fromemails.emaillist[0],
- NULL, 1, maildata, NULL);
+ NULL, 1, maildata, NULL, donemailname);
MY_ASSERT(queuefilename)
myfree(listaddr);
myfree(listdelim);
queuefilename = prepstdreply(listdir, "access",
"$listowner$",
fromemails.emaillist[0],
- NULL, 0, NULL, NULL);
+ NULL, 0, NULL, NULL, donemailname);
MY_ASSERT(queuefilename)
myfree(listaddr);
myfree(listdelim);
maildata[5] = moderators;
queuefilename = prepstdreply(listdir, "submod-moderator",
- "$listowner$", to, replyto, 3, maildata, NULL);
+ "$listowner$", to, replyto, 3, maildata, NULL, NULL);
myfree(maildata[1]);
from = concatstr(4, listname, listdelim, "bounces-help@", listfqdn);
queuefilename = prepstdreply(listdir, "submod-requester", "$listowner$",
- subaddr, NULL, 0, NULL, NULL);
+ subaddr, NULL, 0, NULL, NULL, NULL);
myfree(listname);
myfree(listfqdn);
}
queuefilename = prepstdreply(listdir, listtext, "$helpaddr$",
- subaddr, NULL, 0, NULL, NULL);
+ subaddr, NULL, 0, NULL, NULL, NULL);
MY_ASSERT(queuefilename);
myfree(listtext);
}
queuefilename = prepstdreply(listdir, listtext, "$listowner$",
- "$listowner$", NULL, 1, maildata, NULL);
+ "$listowner$", NULL, 1, maildata, NULL, NULL);
MY_ASSERT(queuefilename)
myfree(listtext);
myfree(maildata[1]);
maildata[3] = mystrdup(confirmaddr);
queuefilename = prepstdreply(listdir, listtext, "$helpaddr$", subaddr,
- confirmaddr, 2, maildata, NULL);
+ confirmaddr, 2, maildata, NULL, NULL);
myfree(maildata[1]);
myfree(maildata[3]);
myfree(listdelim);
queuefilename = prepstdreply(listdir, "sub-subscribed", "$helpaddr$",
- subaddr, NULL, 0, NULL, NULL);
+ subaddr, NULL, 0, NULL, NULL, NULL);
MY_ASSERT(queuefilename);
myfree(listaddr);
}
queuefilename = prepstdreply(listdir, listtext, "$helpaddr$",
- subaddr, NULL, 0, NULL, NULL);
+ subaddr, NULL, 0, NULL, NULL, NULL);
MY_ASSERT(queuefilename);
myfree(listtext);
}
queuefilename = prepstdreply(listdir, listtext, "$listowner$",
- "$listowner$", NULL, 1, maildata, NULL);
+ "$listowner$", NULL, 1, maildata, NULL, NULL);
MY_ASSERT(queuefilename);
myfree(listtext);
myfree(maildata[1]);
maildata[3] = mystrdup(confirmaddr);
queuefilename = prepstdreply(listdir, listtext, "$helpaddr$", subaddr,
- confirmaddr, 2, maildata, NULL);
+ confirmaddr, 2, maildata, NULL, NULL);
myfree(maildata[1]);
myfree(maildata[3]);
myfree(listdelim);
queuefilename = prepstdreply(listdir, "unsub-notsubscribed",
- "$helpaddr$", subaddr, NULL, 0, NULL, NULL);
+ "$helpaddr$", subaddr, NULL, 0, NULL, NULL, NULL);
MY_ASSERT(queuefilename);
myfree(listaddr);
#include "unistr.h"
char *substitute(const char *line, const char *listaddr, const char *listdelim,
- size_t datacount, char **data)
+ size_t datacount, char **data, const char *mailname)
{
char *s1, *s2;
- s1 = substitute_one(line, listaddr, listdelim, datacount, data);
+ s1 = substitute_one(line, listaddr, listdelim, datacount, data, mailname);
while(s1) {
- s2 = substitute_one(s1, listaddr, listdelim, datacount, data);
+ s2 = substitute_one(s1, listaddr, listdelim, datacount, data, mailname);
if(s2) {
myfree(s1);
s1 = s2;
}
char *substitute_one(const char *line, const char *listaddr,
- const char *listdelim, size_t datacount, char **data)
+ const char *listdelim, size_t datacount, char **data,
+ const char* mailname)
{
char *fqdn, *listname, *d1, *d2, *token, *value = NULL;
char *retstr, *origline;
value = concatstr(4, listname, listdelim, "subscribe-nomail@",
fqdn);
goto concatandreturn;
+ } else if(strcmp(token, "originalmail") == 0) {
+ /* append the first 100 lines of the mail inline */
+ int mailfd;
+ if(mailname &&
+ ((mailfd = open(mailname, O_RDONLY)) > 0)){
+ size_t count = 0;
+ char* str = NULL;
+ while(count < 100 && (str = mygetline(mailfd))) {
+ char* tmp = value;
+ value = concatstr(3, value, " ", str);
+ if(tmp)
+ myfree(tmp);
+ count++;
+ }
+ if(str)
+ myfree(str);
+ close(mailfd);
+ }else{
+ log_error(LOG_ARGS, "Could not substitute $originalmail$ (mailname == %s)",mailname);
+ }
+ goto concatandreturn;
}
if(data) {
for(i = 0; i < datacount; i++) {
char *prepstdreply(const char *listdir, const char *filename, const char *from,
const char *to, const char *replyto, size_t tokencount,
- char **data, char *customheaders)
+ char **data, char *customheaders, const char *mailname)
{
int infd, outfd;
char *listaddr, *listdelim, *myfrom, *tmp, *subject, *retstr = NULL;
chomp(line);
utfsub = unistr_escaped_to_utf8(line + 9);
utfsub2 = substitute(utfsub, listaddr, listdelim, tokencount,
- data);
+ data, NULL);
subject = unistr_utf8_to_header(utfsub2);
myfree(utfsub);
myfree(utfsub2);
utfline = NULL;
}
- myfrom = substitute(from, listaddr, listdelim, tokencount, data);
- myto = substitute(to, listaddr, listdelim, tokencount, data);
+ myfrom = substitute(from, listaddr, listdelim, tokencount, data, NULL);
+ myto = substitute(to, listaddr, listdelim, tokencount, data, NULL);
mydate = gendatestr();
mymsgid = genmsgid(listfqdn);
if(replyto) {
myreplyto = substitute(replyto, listaddr, listdelim,
- tokencount, data);
+ tokencount, data, NULL);
tmp = concatstr(3, "Reply-To: ", myreplyto, "\n");
myfree(myreplyto);
myreplyto = tmp;
myfree(tmp);
tmp = utfline;
- str = substitute(utfline, listaddr, listdelim, tokencount, data);
+ str = substitute(utfline, listaddr, listdelim, tokencount, data, mailname);
myfree(tmp);
if(writen(outfd, str, strlen(str)) < 0) {
utfsub = unistr_escaped_to_utf8(line + 9);
}
- utfsub2 = substitute(utfsub, listaddr, listdelim, 5, subst_data);
+ utfsub2 = substitute(utfsub, listaddr, listdelim, 5, subst_data, NULL);
subject = unistr_utf8_to_header(utfsub2);
myfree(utfsub);
myfree(utfsub2);
myfree(line);
tmp = substitute(utfline, listaddr, listdelim,
- 5, subst_data);
+ 5, subst_data, NULL);
myfree(utfline);
if(writen(fd, tmp, strlen(tmp)) < 0) {
myfree(listdelim);
queuefilename = prepstdreply(listdir, textfile, "$listowner$",
- emailaddr, NULL, 0, NULL, NULL);
+ emailaddr, NULL, 0, NULL, NULL, NULL);
if(queuefilename == NULL) {
log_error(LOG_ARGS, "Could not prepare %s mail", name);
exit(EXIT_FAILURE);
myfree(listdelim);
queuefilename = prepstdreply(listdir, "listsubs", "$listowner$",
- emailaddr, NULL, 0, NULL, NULL);
+ emailaddr, NULL, 0, NULL, NULL, NULL);
if(queuefilename == NULL) {
log_error(LOG_ARGS, "Could not prepare sub list mail");
exit(EXIT_FAILURE);