]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
Add functionality for subscribers only posting and to only allow posts with
authormmj <none@none>
Mon, 14 Jun 2004 14:56:47 +0000 (00:56 +1000)
committermmj <none@none>
Mon, 14 Jun 2004 14:56:47 +0000 (00:56 +1000)
listaddress in To: or Cc:

src/Makefile.am
src/mlmmj-process.c

index a55a4304334059ceb752e05bc0079a885e4ea18d..75c43b27ef4030855fae335508d92cdcb840ae09 100644 (file)
@@ -25,7 +25,8 @@ mlmmj_process_SOURCES = mlmmj-process.c writen.c find_email_adr.c \
                        mylocking.c listcontrol.c random-int.c strgen.c \
                        print-version.c send_help.c prepstdreply.c \
                        do_all_the_voodo_here.c mygetline.c gethdrline.c \
-                       log_error.c statctrl.c ctrlvalue.c dumpfd2fd.c
+                       log_error.c statctrl.c ctrlvalue.c dumpfd2fd.c \
+                       subscriberfuncs.c
 
 mlmmj_sub_SOURCES = mlmmj-sub.c writen.c mylocking.c \
                        getlistaddr.c chomp.c random-int.c strgen.c \
index 9bf642f038a6422506c93fd349293db091cb92a8..b9d4650db72c7e1da53ca2664ccdf4fe038ce4a7 100644 (file)
@@ -28,6 +28,9 @@
 #include "mygetline.h"
 #include "statctrl.h"
 #include "ctrlvalue.h"
+#include "getlistaddr.h"
+#include "prepstdreply.h"
+#include "subscriberfuncs.h"
 
 void newmoderated(const char *listdir, const char *mailfilename,
                  const char *mlmmjsend)
@@ -164,11 +167,15 @@ int main(int argc, char **argv)
 {
        int i, fd, opt, noprocess = 0, moderated = 0;
        int hdrfd, footfd, rawmailfd, donemailfd;
+       int subonlypost = 0, addrtocc = 1, intocc = 0;
        char *listdir = NULL, *mailfile = NULL, *headerfilename = NULL;
        char *footerfilename = NULL, *donemailname = NULL;
        char *randomstr = random_str(), *mqueuename;
        char *mlmmjsend, *mlmmjsub, *mlmmjunsub, *mlmmjbounce;
-       char *bindir, *subjectprefix, *discardname;
+       char *bindir, *subjectprefix, *discardname, *listaddr;
+       char *listfqdn, *listname, *fromaddr, *fromstr, *subject;
+       char *queuefilename;
+       char *maildata[4];
        struct email_container fromemails = { 0, NULL };
        struct email_container toemails = { 0, NULL };
        struct email_container ccemails = { 0, NULL };
@@ -290,8 +297,8 @@ int main(int argc, char **argv)
        }
 
        if(readhdrs[2].token) { /* Cc: addresses */
-               for(i = 0; i < readhdrs[1].valuecount; i++) {
-                       find_email_adr(readhdrs[1].values[i], &ccemails);
+               for(i = 0; i < readhdrs[2].valuecount; i++) {
+                       find_email_adr(readhdrs[2].values[i], &ccemails);
                }
        }
        if(strchr(toemails.emaillist[0], RECIPDELIM)) {
@@ -303,11 +310,77 @@ int main(int argc, char **argv)
                            donemailname);
                return EXIT_SUCCESS;
        }
-#if 0
-       for(i = 0; i < toemails.emailcount; i++) {
-               if(strncmp(listaddr, toemails.emaillist[i],
-                                       strlen(toemails.emaillist[i]))
-#endif
+
+       listaddr = getlistaddr(listdir);
+
+       addrtocc = !(statctrl(listdir, "tocc"));
+       if(addrtocc) {
+               for(i = 0; i < toemails.emailcount; i++)
+                       if(strcmp(listaddr, toemails.emaillist[i]) == NULL)
+                               intocc = 1;
+               for(i = 0; i < ccemails.emailcount; i++)
+                       if(strcmp(listaddr, ccemails.emaillist[i]) == NULL)
+                               intocc = 1;
+       }
+
+       if(addrtocc && !intocc) {
+               listname = genlistname(listaddr);
+               listfqdn = genlistfqdn(listaddr);
+               maildata[0] = "*LSTADDR*";
+               maildata[1] = listaddr;
+               fromaddr = concatstr(3, listname, "+bounces-help@", listfqdn);
+               fromstr = concatstr(3, listname, "+owner@", listfqdn);
+               subject = concatstr(3, "Post to ", listaddr, " denied.");
+               queuefilename = prepstdreply(listdir, "notintocc", fromstr,
+                                            fromemails.emaillist[0], NULL,
+                                            subject, 1, maildata);
+               free(listaddr);
+               free(listname);
+               free(listfqdn);
+               free(fromstr);
+               free(subject);
+               execlp(mlmmjsend, mlmmjsend,
+                               "-l", "1",
+                               "-T", fromemails.emaillist[0],
+                               "-F", fromaddr,
+                               "-m", queuefilename, 0);
+
+               log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
+               exit(EXIT_FAILURE);
+       }
+
+       subonlypost = statctrl(listdir, "subonlypost");
+       if(subonlypost) {
+               if(is_subbed(listdir, fromemails.emaillist[0]) != 0) {
+                       listname = genlistname(listaddr);
+                       listfqdn = genlistfqdn(listaddr);
+                       maildata[0] = "*LSTADDR*";
+                       maildata[1] = listaddr;
+                       maildata[2] = "*POSTERADDR*";
+                       maildata[3] = fromemails.emaillist[0];
+                       fromaddr = concatstr(3, listname, "+bounces-help@",
+                                       listfqdn);
+                       fromstr = concatstr(3, listname, "+owner@", listfqdn);
+                       subject = concatstr(3, "Post to ", listaddr,
+                                               " denied");
+                       queuefilename = prepstdreply(listdir, "subonlypost",
+                                       fromstr, fromemails.emaillist[0], NULL,
+                                            subject, 2, maildata);
+                       free(listaddr);
+                       free(listname);
+                       free(listfqdn);
+                       free(fromstr);
+                       free(subject);
+                       execlp(mlmmjsend, mlmmjsend,
+                                       "-l", "1",
+                                       "-T", fromemails.emaillist[0],
+                                       "-F", fromaddr,
+                                       "-m", queuefilename, 0);
+
+                       log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
+                       exit(EXIT_FAILURE);
+               }
+       }
 
        moderated = statctrl(listdir, "moderated");