Просмотр исходного кода

silently process SIGNUP/SUBSCRIPTIONS via postmaster if no state change

Pi 1 год назад
Родитель
Сommit
4ee0805abf

+ 0 - 1
cropswap-sendmail.sh

@@ -25,7 +25,6 @@ if [ "${subject/\[${SUBJECT}\]/}" == "${subject}" ]; then
 	subject="[${SUBJECT}] ${subject## }"
 fi
 
-set -x
 banner="NOTICE:======== <<<"
 makemime \
 	-c "text/plain" -C 'UTF-8' - <<< "${banner}" | reformail \

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

@@ -8,7 +8,7 @@ foreach (tolower $ADDR) =~ /^$MEMBERGROUPREGEX$/
    MAILGROUP=$MEMBERGROUP
    SUBJECT="Crop Swap Member"
 }
-TOMEMBER=($TOMEMBER || ($MAILGROUP eq $MEMBERGROUP))
+FORMEMBER=($FORMEMBER || ($MAILGROUP eq $MEMBERGROUP))
 CONTINUE=($CONTINUE || $MAILGROUP ne "")
 if ($DISPATCH)
 {

+ 1 - 1
filters/cropswap@shandan.one

@@ -7,7 +7,7 @@ foreach (tolower $ADDR) =~ /^$ORGANIZERGROUPREGEX$/
    }
    MAILGROUP=$ORGANIZERGROUP
 }
-TOORGANIZER=($TOORGANIZER || ($MAILGROUP eq $ORGANIZERGROUP))
+FORORGANIZER=($FORORGANIZER || ($MAILGROUP eq $ORGANIZERGROUP))
 CONTINUE=($CONTINUE || $MAILGROUP ne "")
 if ($DISPATCH)
 {

+ 10 - 1
filters/postmaster@localhost

@@ -2,13 +2,14 @@ POSTMASTERREGEX=escape($POSTMASTER)
 SIGNUPRESP="/opt/cropswap/signup.eml"
 foreach (tolower $ADDR) =~ /^$POSTMASTERREGEX$/
 {
+   TOPOSTMASTER=1
    if (/^X\-GROUP:\s*(.+)\s*$/)
    {
       MAILGROUP=$MATCH1
    }
    if (/^Subject:\s*\[SIGNUP\]\s*$/)
    {
-      TOPOSTMASTER=1
+      FORPOSTMASTER=1
       if (/^X\-GROUP\-ALIAS:\s*(.+)\s*$/)
       {
          MAILGROUPALIAS=$MATCH1
@@ -23,6 +24,10 @@ foreach (tolower $ADDR) =~ /^$POSTMASTERREGEX$/
 if ($DISPATCH)
 {
    gdbmopen($MLIST, "C")
+   if (gdbmfetch(tolower($FROM)) ne "")
+   {
+      NOREPLY=1
+   }
    SUFFIX=0
    KEY=$MEMBERALIAS
    EXISTS=gdbmfetch(tolower($KEY))
@@ -72,6 +77,10 @@ if ($DISPATCH)
       cc "|$DEBUGMAIL 'auth-sub-fail'"
       exit
    }
+   if ($NOREPLY)
+   {
+      exit
+   }
    RESP=$SIGNUPRESP
    to "|$MAILBOT"
 }

+ 8 - 0
filters/subscriptions

@@ -12,6 +12,10 @@ if ($DISPATCH)
    if ($SUBSCRIBE ne "")
    {
       gdbmopen($SLIST, "C")
+      if (gdbmfetch(tolower($FROM)) eq $SUBSCRIBE)
+      {
+         NOREPLY=$TOPOSTMASTER
+      }
       if (gdbmstore(tolower($FROM), $SUBSCRIBE))
       {
          gdbmclose
@@ -21,6 +25,10 @@ if ($DISPATCH)
       }
       gdbmclose
       system "$SUBUNSUB '$SUBSCRIBE' '$ALIAS' '$FROM'"
+      if ($NOREPLY)
+      {
+         exit
+      }
       RESP=$SUBSCRIBERESP
       to "|$MAILBOT"
    }

+ 2 - 2
maildroprc

@@ -46,7 +46,7 @@ foreach /^(To|Cc):.*/
    include "$FILTERDIR/subscriptions"
 }
 
-if ($TOMEMBER && $TOORGANIZER)
+if ($FORMEMBER && $FORORGANIZER)
 {
    EXITCODE=$BADREQUEST
    cc "|$DEBUGMAIL multiple-mail-group-set"
@@ -75,7 +75,7 @@ gdbmopen($MLIST, "R")
 TO=gdbmfetch($TOALIAS)
 gdbmclose
 DISPATCH=1
-if ($TOPOSTMASTER)
+if ($FORPOSTMASTER)
 {
    include "$FILTERDIR/$POSTMASTER"
 }

+ 8 - 20
tests/test-signup.sh

@@ -44,11 +44,8 @@ EOF
 	${SCRIPTDIR}/cropswap-postmaster.sh SUBSCRIBE admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	X-GROUP: $group
 	EOF
-	# TODO: subscribe when already subscribed should not generate an e-mail
-	#       when sent via postmaster
-	grep 'Your subscription status has been updated successfully' reply.out
-	grep -Fx 'Admin' "${group}/slist.txt"
-	grep -Fx 'admin@mail.com' "${group}/slist.txt"
+	contents=$(file reply.out)
+	[[ "$contents" =~ empty ]]
 
 	${SCRIPTDIR}/cropswap-postmaster.sh UNSUBSCRIBE admin@mail.com <<-EOF 1> reply.out 2> reply.err #|| cat reply.err && exit 1
 	X-GROUP: $group
@@ -60,11 +57,8 @@ EOF
 	${SCRIPTDIR}/cropswap-postmaster.sh UNSUBSCRIBE admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	X-GROUP: $group
 	EOF
-	# TODO: subscribe when already unsubscribed should not generate an e-mail
-	#       when sent via postmaster
-	grep 'Your subscription status has been updated successfully' reply.out
-	grep -Fvx 'Admin' "${group}/slist.txt" || ! grep -Fxq 'Admin' "${group}/slist.txt"
-	grep -Fvx 'admin@mail.com' "${group}/slist.txt" || ! grep -Fxq 'admin@mail.com' "${group}/slist.txt"
+	contents=$(file reply.out)
+	[[ "$contents" =~ empty ]]
 
 	maildrop -f admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	From: postmaster@localhost
@@ -121,11 +115,8 @@ EOF
 	${SCRIPTDIR}/cropswap-postmaster.sh SUBSCRIBE non-admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	X-GROUP: $group
 	EOF
-	# TODO: subscribe when already subscribed should not generate an e-mail
-	#       when sent via postmaster
-	grep 'Your subscription status has been updated successfully' reply.out
-	grep -Fx 'Non-admin' "${group}/slist.txt"
-	grep -Fx 'non-admin@mail.com' "${group}/slist.txt"
+	contents=$(file reply.out)
+	[[ "$contents" =~ empty ]]
 
 	${SCRIPTDIR}/cropswap-postmaster.sh UNSUBSCRIBE non-admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	X-GROUP: $group
@@ -137,11 +128,8 @@ EOF
 	${SCRIPTDIR}/cropswap-postmaster.sh UNSUBSCRIBE non-admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	X-GROUP: $group
 	EOF
-	# TODO: subscribe when already unsubscribed should not generate an e-mail
-	#       when sent via postmaster
-	grep 'Your subscription status has been updated successfully' reply.out
-	grep -Fvx 'Non-admin' "${group}/slist.txt" || ! grep -Fqx 'Non-admin' "${group}/slist.txt"
-	grep -Fvx 'non-admin@mail.com' "${group}/slist.txt" || ! grep -Fqx 'non-admin@mail.com' "${group}/slist.txt"
+	contents=$(file reply.out)
+	[[ "$contents" =~ empty ]]
 
 	maildrop -f non-admin@mail.com <<-EOF 1> reply.out 2> reply.err
 	From: postmaster@localhost