Ver Fonte

separate concerns

Pi há 1 ano atrás
pai
commit
bd441c776b

+ 2 - 2
filters/cropswap-members@shandan.one

@@ -5,11 +5,11 @@ foreach (tolower $ADDR) =~ /^$MEMBERGROUPREGEX$/
    {
       TOALIAS=$MATCH2
    }
-   CONTINUE=1
-   TOMEMBER=1
    MAILGROUP=$MEMBERGROUP
    SUBJECT="Crop Swap Member"
 }
+TOMEMBER=($TOMEMBER || ($MAILGROUP eq $MEMBERGROUP))
+CONTINUE=($CONTINUE || $MAILGROUP ne "")
 if ($DISPATCH)
 {
    MAILGROUPALIAS="Crop Swap Members"

+ 2 - 2
filters/cropswap@shandan.one

@@ -5,10 +5,10 @@ foreach (tolower $ADDR) =~ /^$ORGANIZERGROUPREGEX$/
    {
       TOALIAS=$MATCH2
    }
-   CONTINUE=1
-   TOORGANIZER=1
    MAILGROUP=$ORGANIZERGROUP
 }
+TOORGANIZER=($TOORGANIZER || ($MAILGROUP eq $ORGANIZERGROUP))
+CONTINUE=($CONTINUE || $MAILGROUP ne "")
 if ($DISPATCH)
 {
    MAILGROUPALIAS="Crop Swap Notices"

+ 13 - 28
filters/postmaster@localhost

@@ -1,50 +1,35 @@
-SIGNUPRESP="/opt/cropswap/signup.eml"
 POSTMASTERREGEX=escape($POSTMASTER)
-ANYGROUPREGEX="$MEMBERGROUPREGEX|$ORGANIZERGROUPREGEX"
-foreach (tolower $ADDR) =~ /^$POSTMASTERREGEX|$ANYGROUPREGEX$/
+SIGNUPRESP="/opt/cropswap/signup.eml"
+foreach (tolower $ADDR) =~ /^$POSTMASTERREGEX$/
 {
-   if ($MATCH =~ /^$ANYGROUPREGEX$/)
+   if (/^X\-GROUP:\s*(.+)\s*$/)
    {
-      MAILGROUP=$MATCH
+      MAILGROUP=$MATCH1
    }
-   elsif (/^X\-GROUP:\s*($ANYGROUPREGEX)\s*$/)
+   if (/^Subject:\s*\[SIGNUP\]\s*$/)
    {
-      MAILGROUP=$MATCH1
-      if (/^Subject:\s*\[SIGNUP\]\s*$/)
+      TOPOSTMASTER=1
+      if (/^X\-GROUP\-ALIAS:\s*(.+)\s*$/)
       {
-         TOPOSTMASTER=1
-         if (/^X\-GROUP\-ALIAS:\s*(.*)\s*$/)
-         {
-            MAILGROUPALIAS=$MATCH1
-            if (/^X-MEMBER-ALIAS:\s*(.+)\s*$/)
-            {
-               ALIAS=$MATCH1
-               CONTINUE=1
-            }
-         }
+         MAILGROUPALIAS=$MATCH1
       }
-   }
-   if ($MAILGROUP ne "")
-   {
-      TOORGANIZER=($TOORGANIZER || ($MAILGROUP eq $ORGANIZERGROUP))
-      TOMEMBER=($TOMEMBER || ($MAILGROUP eq $MEMBERGROUP))
-      if (/^Subject:\s*\[(SUBSCRIBE|UNSUBSCRIBE)\]\s*$/)
+      if (/^X-MEMBER-ALIAS:\s*(.+)\s*$/)
       {
-         SUBSCRIBE=$MATCH1
-         CONTINUE=1
+         MEMBERALIAS=$MATCH1
       }
+      CONTINUE=($MEMBERALIAS ne "" && $MAILGROUP ne "" && $MAILGROUPALIAS ne "")
    }
 }
 if ($DISPATCH)
 {
    gdbmopen($MLIST, "C")
    SUFFIX=0
-   KEY=$ALIAS
+   KEY=$MEMBERALIAS
    EXISTS=gdbmfetch($KEY)
    while ($EXISTS ne "" && $EXISTS ne tolower($FROM))
    {
       SUFFIX=($SUFFIX + 1)
-      KEY="$ALIAS $SUFFIX"
+      KEY="$MEMBERALIAS $SUFFIX"
       EXISTS=gdbmfetch($KEY)
    }
    if (gdbmstore(tolower($FROM), $KEY) || gdbmstore($KEY, tolower($FROM)))

+ 21 - 10
filters/subscriptions

@@ -1,16 +1,27 @@
 SUBSCRIBERESP="/opt/cropswap/subunsub.eml"
-if ($SUBSCRIBE ne "")
+if ($MAILGROUP ne "")
 {
-   gdbmopen($SLIST, "C")
-   if (gdbmstore(tolower($FROM), $SUBSCRIBE))
+   if (/^Subject:\s*\[(SUBSCRIBE|UNSUBSCRIBE)\]\s*$/)
    {
+      SUBSCRIBE=$MATCH1
+      CONTINUE=1
+   }
+}
+if ($DISPATCH)
+{
+   if ($SUBSCRIBE ne "")
+   {
+      gdbmopen($SLIST, "C")
+      if (gdbmstore(tolower($FROM), $SUBSCRIBE))
+      {
+         gdbmclose
+         EXITCODE=$FATAL
+         cc "|$DEBUGMAIL subunsub-fail"
+         exit
+      }
       gdbmclose
-      EXITCODE=$FATAL
-      cc "|$DEBUGMAIL subunsub-fail"
-      exit
+      system "$SUBUNSUB '$SUBSCRIBE' '$ALIAS' '$FROM'"
+      RESP=$SUBSCRIBERESP
+      to "|$MAILBOT"
    }
-   gdbmclose
-   system "$SUBUNSUB '$SUBSCRIBE' '$ALIAS' '$FROM'"
-   RESP=$SUBSCRIBERESP
-   to "|$MAILBOT"
 }

+ 14 - 12
maildroprc

@@ -18,16 +18,6 @@ if ($TEST)
 {
    import MAILDROPDIR
 }
-POSTMASTER="postmaster@localhost"
-
-# bi-directional group
-# From subscribed member -> other subscribed members
-MEMBERGROUP="cropswap-members@shandan.one"
-
-# uni-directional group
-# From anyone -> organizers
-# From organizers -> subscribed members
-ORGANIZERGROUP="cropswap@shandan.one"
 
 UNHANDLED=5
 BADREQUEST=4
@@ -35,12 +25,25 @@ UNREGISTERED=3
 UNSUBSCRIBED=2
 FATAL=1
 
+MAILGROUP=""
+MAILGROUPALIAS=""
+
+POSTMASTER="postmaster@localhost"
+# uni-directional group
+# From anyone -> organizers
+# From organizers -> subscribed members
+ORGANIZERGROUP="cropswap@shandan.one"
+# bi-directional group
+# From subscribed member -> other subscribed members
+MEMBERGROUP="cropswap-members@shandan.one"
+
 foreach /^(To|Cc):.*/
 {
    ADDR=getaddr($MATCH)
    include "$FILTERDIR/$MEMBERGROUP"
    include "$FILTERDIR/$ORGANIZERGROUP"
    include "$FILTERDIR/$POSTMASTER"
+   include "$FILTERDIR/subscriptions"
 }
 
 if ($TOMEMBER && $TOORGANIZER)
@@ -71,8 +74,7 @@ SLIST="$LISTDIR/slist"
 gdbmopen($MLIST, "R")
 TO=gdbmfetch($TOALIAS)
 gdbmclose
-
-HANDLE=1
+DISPATCH=1
 if ($TOPOSTMASTER)
 {
    include "$FILTERDIR/$POSTMASTER"