]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
Listcontrol shouldn't open the mailfile to retrieve info we've already
authormmj <none@none>
Sat, 29 May 2004 13:39:39 +0000 (23:39 +1000)
committermmj <none@none>
Sat, 29 May 2004 13:39:39 +0000 (23:39 +1000)
retrieved in mlmmj-process. Instead we parse it on to listcontrol from
mlmmj-process.

include/listcontrol.h
src/listcontrol.c

index 3bc6f59251cd9553fea06f859336d0e052ab6ccc..ad561a724aa7416477ad2f400a98e338b007bfe3 100644 (file)
@@ -9,7 +9,9 @@
 #ifndef LISTCONTROL_H
 #define LISTCONTROL_H
 
-int listcontrol(const char *mailfilename, const char *listdir,
+#include "find_email_adr.h"
+
+int listcontrol(struct email_container *fromemails, const char *listdir,
                const char *controladdr, const char *mlmmjsub,
                const char *mlmmjunsub, const char *mlmmjsend,
                const char *mlmmjbounce);
index 86c71bee59c3a259dbec3885fa769e0e5decc439..a629d5e0081dc8307816c1b7a38f01200159e6c0 100644 (file)
@@ -53,27 +53,21 @@ static struct ctrl_command ctrl_commands[] = {
 };
 
 
-int listcontrol(const char *mailfilename, const char *listdir,
+int listcontrol(struct email_container *fromemails, const char *listdir,
                const char *controladdr, const char *mlmmjsub,
                const char *mlmmjunsub, const char *mlmmjsend,
                const char *mlmmjbounce)
 {
        char tmpstr[READ_BUFSIZE];
-       char *atsign, *recipdelimsign, *tokenvalue, *bouncenr;
+       char *atsign, *recipdelimsign, *bouncenr;
        char *controlstr, *param, *conffilename, *moderatefilename;
-       FILE *mailfile, *tempfile;
-       struct email_container fromemails;
+       FILE *tempfile;
        size_t len;
        struct stat stbuf;
        int closedlist;
        size_t cmdlen;
        unsigned int ctrl;
        
-       if((mailfile = fopen(mailfilename, "r")) == NULL) {
-               log_error(LOG_ARGS, "listcontrol, could not open mail");
-               exit(EXIT_FAILURE);
-       }
-
        /* A closed list doesn't allow subscribtion and unsubscription */
        closedlist = statctrl(listdir, "closedlist");
 
@@ -87,14 +81,10 @@ int listcontrol(const char *mailfilename, const char *listdir,
        MY_ASSERT(controlstr);
        snprintf(controlstr, len, "%s", recipdelimsign + 1);
 
-       tokenvalue = find_header_file(mailfile, tmpstr, "From:");
-       fclose(mailfile);
-       unlink(mailfilename);
-
-       find_email_adr(tmpstr, &fromemails);
-
 #if 0
        log_error(LOG_ARGS, "controlstr = [%s]\n", controlstr);
+       log_error(LOG_ARGS, "fromemails->emaillist[0] = [%s]\n",
+                       fromemails->emaillist[0]);
 #endif
        for (ctrl=0; ctrl<CTRL_END; ctrl++) {
                cmdlen = strlen(ctrl_commands[ctrl].command);
@@ -133,10 +123,10 @@ int listcontrol(const char *mailfilename, const char *listdir,
 
        case CTRL_SUBSCRIBE:
                if (closedlist) exit(EXIT_SUCCESS);
-               if(index(fromemails.emaillist[0], '@')) {
+               if(strchr(fromemails->emaillist[0], '@')) {
                        execlp(mlmmjsub, mlmmjsub,
                                        "-L", listdir,
-                                       "-a", fromemails.emaillist[0],
+                                       "-a", fromemails->emaillist[0],
                                        "-C", 0);
                        log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsub);
                        exit(EXIT_FAILURE);
@@ -151,14 +141,15 @@ int listcontrol(const char *mailfilename, const char *listdir,
                if((tempfile = fopen(conffilename, "r"))) {
                        fgets(tmpstr, READ_BUFSIZE, tempfile);
                        fclose(tempfile);
-                       if(strncasecmp(tmpstr, fromemails.emaillist[0],
+                       if(strncasecmp(tmpstr, fromemails->emaillist[0],
                                                strlen(tmpstr)) == 0) {
                                unlink(conffilename);
                                execlp(mlmmjsub, mlmmjsub,
                                                "-L", listdir,
                                                "-a", tmpstr,
                                                "-c", 0);
-                               log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsub);
+                               log_error(LOG_ARGS, "execlp() of '%s' failed",
+                                               mlmmjsub);
                                exit(EXIT_FAILURE);
                        } else {
                                /* Not proper confirm */
@@ -170,12 +161,13 @@ int listcontrol(const char *mailfilename, const char *listdir,
 
        case CTRL_UNSUBSCRIBE:
                if (closedlist) exit(EXIT_SUCCESS);
-               if(index(fromemails.emaillist[0], '@')) {
+               if(strchr(fromemails->emaillist[0], '@')) {
                        execlp(mlmmjunsub, mlmmjunsub,
                                        "-L", listdir,
-                                       "-a", fromemails.emaillist[0],
+                                       "-a", fromemails->emaillist[0],
                                        "-C", 0);
-                       log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjunsub);
+                       log_error(LOG_ARGS, "execlp() of '%s' failed",
+                                       mlmmjunsub);
                        exit(EXIT_FAILURE);
                } else /* Not a valid From: address, so we silently ignore */
                        exit(EXIT_SUCCESS);
@@ -188,7 +180,7 @@ int listcontrol(const char *mailfilename, const char *listdir,
                if((tempfile = fopen(conffilename, "r"))) {
                        fgets(tmpstr, READ_BUFSIZE, tempfile);
                        fclose(tempfile);
-                       if(strncasecmp(tmpstr, fromemails.emaillist[0],
+                       if(strncasecmp(tmpstr, fromemails->emaillist[0],
                                                strlen(tmpstr)) == 0) {
                                unlink(conffilename);
                                execlp(mlmmjunsub, mlmmjunsub,
@@ -236,8 +228,8 @@ int listcontrol(const char *mailfilename, const char *listdir,
 
        case CTRL_HELP:
                printf("Help wanted!\n");
-               if(index(fromemails.emaillist[0], '@'))
-                       send_help(listdir, fromemails.emaillist[0],
+               if(strchr(fromemails->emaillist[0], '@'))
+                       send_help(listdir, fromemails->emaillist[0],
                                  mlmmjsend);
                break;