#include "memory.h"
#include "log_oper.h"
#include "chomp.h"
+#include "unistr.h"
enum action {
ALLOW,
void newmoderated(const char *listdir, const char *mailfilename,
- const char *mlmmjsend, const char *efromsender)
+ const char *mlmmjsend, const char *efromsender,
+ size_t tokencount, char **data)
{
+ size_t i;
char *from, *listfqdn, *listname, *moderators = NULL;
char *buf, *replyto, *listaddr = getlistaddr(listdir), *listdelim;
char *queuefilename = NULL, *moderatorsfilename, *efromismod = NULL;
char *mailbasename = mybasename(mailfilename), *tmp, *to;
int moderatorsfd, foundaddr = 0, notifymod = 0, status;
- char *maildata[4] = { "moderateaddr", NULL, "moderators", NULL };
+ char *maildata[10] = { "moderateaddr", NULL, "moderators", NULL };
pid_t childpid, pid;
#if 0
printf("mailfilename = [%s], mailbasename = [%s]\n", mailfilename,
listfqdn = genlistfqdn(listaddr);
listname = genlistname(listaddr);
+ MY_ASSERT(tokencount<=3)
+ for (i=0; i<tokencount; i++) {
+ maildata[4+2*i] = data[2*i];
+ maildata[5+2*i] = data[1+2*i];
+ }
+ tokencount += 2;
+
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,
+ to, replyto, tokencount, maildata,
mailfilename);
/* we might need to exec more than one mlmmj-send */
queuefilename = prepstdreply(listdir, "moderation-poster",
"$listowner$", efromsender,
- NULL, 1, maildata+2, mailfilename);
+ NULL, tokencount-1, maildata+2, mailfilename);
execlp(mlmmjsend, mlmmjsend,
"-l", "1",
char *listfqdn, *listname, *fromaddr;
char *queuefilename, *recipextra = NULL, *owner = NULL;
char *maxmailsizestr;
- char *maildata[4] = { "posteraddr", NULL, "maxmailsize", NULL };
+ char *maildata[6] = { "subject", NULL,
+ "posteraddr", NULL, "maxmailsize", NULL };
char *envstr, *efrom;
struct stat st;
uid_t uid;
{ "Cc:", 0, NULL },
{ "Return-Path:", 0, NULL },
{ "Delivered-To:", 0, NULL },
+ { "Subject:", 0, NULL },
{ NULL, 0, NULL }
};
for(i = 0; i < readhdrs[0].valuecount; i++) {
find_email_adr(readhdrs[0].values[i], &fromemails);
}
+ if (fromemails.emailcount)
+ maildata[3] = fromemails.emaillist[0];
/* To: addresses */
for(i = 0; i < readhdrs[1].valuecount; i++) {
find_email_adr(readhdrs[4].values[i], &dtemails);
}
+ /* Subject: */
+ if (readhdrs[5].valuecount)
+ maildata[1] = unistr_header_to_utf8(readhdrs[5].values[0]);
+ if (!maildata[1])
+ maildata[1] = mystrdup("");
+
/* envelope from */
if((envstr = getenv("SENDER")) != NULL) {
/* qmail, postfix, exim */
close(rawmailfd);
close(donemailfd);
unlink(mailfile);
- log_oper(listdir, OPLOGFNAME, "mlmmj-recieve: sending"
+ log_oper(listdir, OPLOGFNAME, "mlmmj-process: sending"
" mail from %s to owner",
efrom);
execlp(mlmmjsend, mlmmjsend,
listfqdn = genlistfqdn(listaddr);
fromaddr = concatstr(4, listname, listdelim,
"bounces-help@", listfqdn);
- maildata[3] = maxmailsizestr;
+ maildata[5] = maxmailsizestr;
queuefilename = prepstdreply(listdir,
"maxmailsize", "$listowner$",
fromemails.emaillist[0],
- NULL, 1, maildata+2, donemailname);
+ NULL, 1, maildata+4, donemailname);
MY_ASSERT(queuefilename)
myfree(listdelim);
myfree(listname);
listfqdn);
queuefilename = prepstdreply(listdir, "notintocc",
"$listowner$", fromemails.emaillist[0],
- NULL, 0, NULL, donemailname);
+ NULL, 2, maildata, donemailname);
MY_ASSERT(queuefilename)
myfree(listdelim);
myfree(listname);
listdelim = getlistdelim(listdir);
listname = genlistname(listaddr);
listfqdn = genlistfqdn(listaddr);
- maildata[1] = fromemails.emaillist[0];
fromaddr = concatstr(4, listname, listdelim,
"bounces-help@", listfqdn);
queuefilename = prepstdreply(listdir, "subonlypost",
"$listowner$", fromemails.emaillist[0],
- NULL, 1, maildata, donemailname);
+ NULL, 2, maildata, donemailname);
MY_ASSERT(queuefilename)
myfree(listaddr);
myfree(listdelim);
queuefilename = prepstdreply(listdir, "access",
"$listowner$",
fromemails.emaillist[0],
- NULL, 0, NULL, donemailname);
+ NULL, 2, maildata, donemailname);
MY_ASSERT(queuefilename)
myfree(listaddr);
myfree(listdelim);
fsync(omitfd);
close(omitfd);
}
- newmoderated(listdir, mqueuename, mlmmjsend, efrom);
+ newmoderated(listdir, mqueuename, mlmmjsend, efrom, 2, maildata);
return EXIT_SUCCESS;
}