]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
Added support for the 'originalmail' keyword (Sascha Sommer)
authormortenp <none@none>
Mon, 5 Nov 2007 21:23:37 +0000 (08:23 +1100)
committermortenp <none@none>
Mon, 5 Nov 2007 21:23:37 +0000 (08:23 +1100)
ChangeLog
include/prepstdreply.h
src/mlmmj-bounce.c
src/mlmmj-process.c
src/mlmmj-sub.c
src/mlmmj-unsub.c
src/prepstdreply.c
src/send_digest.c
src/send_help.c
src/send_list.c

index b56469000a4a1d0610bbbb052198591cf4654ba1..5ceb256a37d9568d344a35972b374733fa2440e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,4 @@
+ 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)
index 9b833f99024fec1ce1b1170d511f7a4018c84d01..9f62699f1ac958539ec6f0af7f0660995933bfdc 100644 (file)
 #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 */
index b00e9b8f6231c357d836bfe59624a663a6ec28b1..ad7fdf73415ef0bbdaab861c4f2d1955372370bf 100644 (file)
@@ -139,7 +139,7 @@ void do_probe(const char *listdir, const char *mlmmjsend, const char *addr)
 
        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);
 
index 86324d6c7dc54ea8e10d0bbc9fc50c73b54b2e21..72158ec73dd36cd125a1d5ee8328bb71f8bee9ea 100644 (file)
@@ -76,8 +76,7 @@ void newmoderated(const char *listdir, const char *mailfilename,
        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,
@@ -86,11 +85,6 @@ void newmoderated(const char *listdir, const char *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);
@@ -123,25 +117,7 @@ void newmoderated(const char *listdir, const char *mailfilename,
        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",
@@ -657,7 +633,7 @@ int main(int argc, char **argv)
                        queuefilename = prepstdreply(listdir,
                                        "maxmailsize", "$listowner$",
                                        fromemails.emaillist[0],
-                                       NULL, 2, maildata, NULL);
+                                       NULL, 2, maildata, NULL, donemailname);
                        MY_ASSERT(queuefilename)
                        myfree(listdelim);
                        myfree(listname);
@@ -768,7 +744,7 @@ int main(int argc, char **argv)
                                     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);
@@ -829,7 +805,7 @@ int main(int argc, char **argv)
                                        "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);
@@ -880,7 +856,7 @@ startaccess:
                        queuefilename = prepstdreply(listdir, "access",
                                                        "$listowner$",
                                                        fromemails.emaillist[0],
-                                                    NULL, 0, NULL, NULL);
+                                                    NULL, 0, NULL, NULL, donemailname);
                        MY_ASSERT(queuefilename)
                        myfree(listaddr);
                        myfree(listdelim);
index 8a2a68c1cdbe0381eb0d95a9188187822dce66e8..5bfed9537c8caabc648af97930510fada0b670c6 100644 (file)
@@ -147,7 +147,7 @@ void moderate_sub(const char *listdir, const char *listaddr,
        maildata[5] = moderators;
 
        queuefilename = prepstdreply(listdir, "submod-moderator",
-                               "$listowner$", to, replyto, 3, maildata, NULL);
+                               "$listowner$", to, replyto, 3, maildata, NULL, NULL);
        
        myfree(maildata[1]);
        
@@ -181,7 +181,7 @@ void moderate_sub(const char *listdir, const char *listaddr,
 
        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);
@@ -274,7 +274,7 @@ void confirm_sub(const char *listdir, const char *listaddr,
        }
 
        queuefilename = prepstdreply(listdir, listtext, "$helpaddr$",
-                                    subaddr, NULL, 0, NULL, NULL);
+                                    subaddr, NULL, 0, NULL, NULL, NULL);
        MY_ASSERT(queuefilename);
        myfree(listtext);
 
@@ -321,7 +321,7 @@ void notify_sub(const char *listdir, const char *listaddr,
        }
 
        queuefilename = prepstdreply(listdir, listtext, "$listowner$",
-                               "$listowner$", NULL, 1, maildata, NULL);
+                               "$listowner$", NULL, 1, maildata, NULL, NULL);
        MY_ASSERT(queuefilename)
        myfree(listtext);
        myfree(maildata[1]);
@@ -408,7 +408,7 @@ void generate_subconfirm(const char *listdir, const char *listaddr,
        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]);
@@ -460,7 +460,7 @@ void generate_subscribed(const char *listdir, const char *subaddr,
        myfree(listdelim);
 
        queuefilename = prepstdreply(listdir, "sub-subscribed", "$helpaddr$",
-                                    subaddr, NULL, 0, NULL, NULL);
+                                    subaddr, NULL, 0, NULL, NULL, NULL);
        MY_ASSERT(queuefilename);
 
        myfree(listaddr);
index b93391db643d16f9275bcd4edaa90a0a756c7015..5faf1e1f61c2404a3517d644c3bf493b4434bd5b 100644 (file)
@@ -76,7 +76,7 @@ void confirm_unsub(const char *listdir, const char *listaddr,
        }
 
        queuefilename = prepstdreply(listdir, listtext, "$helpaddr$",
-                                    subaddr, NULL, 0, NULL, NULL);
+                                    subaddr, NULL, 0, NULL, NULL, NULL);
        MY_ASSERT(queuefilename);
        myfree(listtext);
 
@@ -124,7 +124,7 @@ void notify_unsub(const char *listdir, const char *listaddr,
        }
        
        queuefilename = prepstdreply(listdir, listtext, "$listowner$",
-                                    "$listowner$", NULL, 1, maildata, NULL);
+                                    "$listowner$", NULL, 1, maildata, NULL, NULL);
        MY_ASSERT(queuefilename);
        myfree(listtext);
        myfree(maildata[1]);
@@ -213,7 +213,7 @@ void generate_unsubconfirm(const char *listdir, const char *listaddr,
        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]);
@@ -305,7 +305,7 @@ void generate_notsubscribed(const char *listdir, const char *subaddr,
        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);
index 77b61a78c623f66f4f02d4a524cadc317c2e1e1a..6040c97616be98d195b57f8e0ff1eb879d398744 100644 (file)
 #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;
@@ -62,7 +62,8 @@ char *substitute(const char *line, const char *listaddr, const char *listdelim,
 }
 
 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;
@@ -132,6 +133,27 @@ char *substitute_one(const char *line, const char *listaddr,
                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++) {
@@ -187,7 +209,7 @@ 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)
+                  char **data, char *customheaders, const char *mailname)
 {
        int infd, outfd;
        char *listaddr, *listdelim, *myfrom, *tmp, *subject, *retstr = NULL;
@@ -211,7 +233,7 @@ char *prepstdreply(const char *listdir, const char *filename, const char *from,
                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);
@@ -231,14 +253,14 @@ char *prepstdreply(const char *listdir, const char *filename, const char *from,
                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;
@@ -297,7 +319,7 @@ char *prepstdreply(const char *listdir, const char *filename, const char *from,
                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) {
index 7a1ae194da22b0c24b2064033f38b241e199194b..46c77b27bc9e3759add45d0cd4e846adab7da984 100644 (file)
@@ -263,7 +263,7 @@ int send_digest(const char *listdir, int firstindex, int lastindex,
                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);
@@ -362,7 +362,7 @@ errdighdrs:
                                myfree(line);
 
                                tmp = substitute(utfline, listaddr, listdelim,
-                                               5, subst_data);
+                                               5, subst_data, NULL);
                                myfree(utfline);
 
                                if(writen(fd, tmp, strlen(tmp)) < 0) {
index 05af1edba835df9e5cea5bad54a9aff2a4f84d47..33be9d3e1da63f63b9a4d8f759d6ae0a0127e0ab 100644 (file)
@@ -57,7 +57,7 @@ void send_help(const char *listdir, const char *emailaddr,
        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);
index e2280420d65c9a908070d3cfa7d87660c46c8d7b..1cf2372cfeb6afe3287cf38d88a0b41e01c914d2 100644 (file)
@@ -61,7 +61,7 @@ void send_list(const char *listdir, const char *emailaddr,
        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);