diff cgi-bin/webuser-notify.in @ 0:c7f6b056b673

First import of vendor version
author Peter Gervai <grin@grin.hu>
date Tue, 10 Mar 2009 13:49:58 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cgi-bin/webuser-notify.in	Tue Mar 10 13:49:58 2009 +0100
@@ -0,0 +1,188 @@
+#! /bin/sh
+
+# send mail messages about new per-user DCC log files
+
+# This script can be run by the daily DCC cron job after it has been
+#	1. changed to contain the URL of the local DCC CGI scripts,
+#	2. changed to use a locally suitable command to send mail
+#	3. copied to the DCC libexec directory,
+#	4. and made executable.
+#   It is remotely possible that the default values in this script are
+#	suitable and that you could use this script directly by putting
+#	the following in the libexec directory:
+#	    #! /bin/sh
+#	    sh /var/dcc/cgi-bin/webuser-notify -d $*
+#
+# This script expects to be called by the standard DCC cron job to read a
+#   series of user names on stdin, each of which has a new log file.
+#   Each user name must be prefixed with the appropriate subdirectory such
+#   as "local/".  The single argument to this script must be the
+#   DCCM_USERDIRS or DCCIFD_USERDIRS_directory made into an absolute path.
+
+
+# Copyright (c) 2008 by Rhyolite Software, LLC
+#
+# This agreement is not applicable to any entity which sells anti-spam
+# solutions to others or provides an anti-spam solution as part of a
+# security solution sold to other entities, or to a private network
+# which employs the DCC or uses data provided by operation of the DCC
+# but does not provide corresponding data to other users.
+#
+# Permission to use, copy, modify, and distribute this software without
+# changes for any purpose with or without fee is hereby granted, provided
+# that the above copyright notice and this permission notice appear in all
+# copies and any distributed versions or copies are either unchanged
+# or not called anything similar to "DCC" or "Distributed Checksum
+# Clearinghouse".
+#
+# Parties not eligible to receive a license under this agreement can
+# obtain a commercial license to use DCC by contacting Rhyolite Software
+# at sales@rhyolite.com.
+#
+# A commercial license would be for Distributed Checksum and Reputation
+# Clearinghouse software.  That software includes additional features.  This
+# free license for Distributed ChecksumClearinghouse Software does not in any
+# way grant permision to use Distributed Checksum and Reputation Clearinghouse
+# software
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND RHYOLITE SOFTWARE, LLC DISCLAIMS ALL
+# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RHYOLITE SOFTWARE, LLC
+# BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+# SOFTWARE.
+#	Rhyolite Software DCC 1.3.103-1.11 $Revision$
+
+
+# http or https; prefer https.
+HTTPS="https"
+
+# URL of the CGI scripts
+#   you will probably need to change this
+BASE=`hostname`
+BASE=`expr "$BASE" : '.*\.\([^.]*\.[^.]*$\)' \| "$BASE"`
+BASE="www.$BASE/DCC-cgi-bin"
+
+
+SWITCH='#webuser mail-notify'
+
+USAGE="`basename $0`: [-x] -d userdirs"
+USERDIRS=
+while getopts "xd:" c; do
+    case $c in
+	x) set -x;;
+	d) USERDIRS=$OPTARG;;
+	*) ;;
+    esac
+done
+shift `expr $OPTIND - 1 || true`
+if test "$#" -ne 0 -o "$USERDIRS" = ""; then
+    echo "$USAGE" 1>&2
+    exit 1
+fi
+if test ! -d "$USERDIRS"; then
+    echo "userdir $1 is not a directory" 1>&2
+    exit 1
+fi
+
+
+while read NM; do
+    # ignore users that are not configured to use the machinery
+    if test ! -f "$USERDIRS/$NM/whiteclnt"; then
+	continue;
+    fi
+
+    DIR="$USERDIRS/$NM"
+
+    UNAME=`expr "$NM" : 'local/\(.*\)' \| "$NM"`
+    OK=no
+    BOX="$UNAME"
+    eval `sed -n -e '/^[^#]/q'						\
+	-e "s/^$SWITCH=on mailbox=$/OK=yes;/p"				\
+	-e "s/^$SWITCH=on mailbox=\(.*\)/BOX=\1;OK=yes;/p"		\
+	-e "s/^$SWITCH=off.*/OK=no;/p"	$USERDIRS/$NM/whiteclnt`
+    if test "$OK" != yes; then
+	# forget it if notifications are turned off for this user
+	continue
+    fi
+
+    # Don't send a notification of messages older than this file,
+    #	 because the user has already check them through the CGI scripts.
+    MARKER=notify.marker
+
+    # Postpone notifications until this file is current to avoid sending
+    #	daily notes that the user is ignoring.
+    BLOCK=notify.block
+
+    # Send a notification when this file is current
+    PENDING=notify.pending
+
+    FND="find $DIR -follow"
+
+    if test -f $DIR/$PENDING; then
+	# Because `find -mtime -0` sometimes means  `find -mtime -1`
+	# or vice versa, use this to see if $DIR/$PENDING is finally ready.
+	rm -f $DIR/$MARKER
+	touch $DIR/$MARKER
+	if test "`$FND -name $PENDING -newer $DIR/$MARKER`" != ""; then
+	    continue;
+	fi
+	rm $DIR/$PENDING
+
+    else
+	if test -f $DIR/$MARKER; then
+	    if test "`$FND -name 'msg.*' -newer $DIR/$MARKER		\
+			| head -1`" = ""; then
+		# there are no messages the user has not seen
+		continue
+	    fi
+	fi
+	# We have at least one new message.  If we are blocked by having
+	# sent a notification within the past week, make a pending message.
+	rm -f $DIR/$MARKER
+	touch $DIR/$MARKER
+	if test "`$FND -name $BLOCK -newer $DIR/$MARKER`" != ""; then
+	    mv $DIR/$BLOCK $DIR/$PENDING
+	    continue;
+	fi
+    fi
+
+    # browsers don't tolerate '/' or '@' in usernames and passwords in URLs
+    URL_UNAME="`expr "$UNAME@" : '\([^/@]*@$\)' || true`$BASE"
+
+
+
+    ####################################################################
+    # Modify the following message to taste.
+
+    MAIL_SUBJECT="bulk mail notification for $UNAME"
+    if test "`basename @NOTIFYMAILER@`" = sendmail; then
+	HEADERS="Subject: $MAIL_SUBJECT
+Precedence: bulk
+"
+	CMD="@NOTIFYMAILER@ $BOX"
+    else
+	HEADERS=
+	CMD="@NOTIFYMAILER@ -s '$MAIL_SUBJECT' $BOX"
+    fi 
+eval $CMD <<EOF
+$HEADERS
+Recently logged bulk messages for $UNAME can be viewed at
+$HTTPS://$URL_UNAME/list-log
+Edit your whitelist at
+$HTTPS://$URL_UNAME/edit-whiteclnt
+if any of those are solicited bulk messages instead of spam
+or to stop or redirect these messages.
+
+The user name for both web pages is $UNAME
+EOF
+
+    # no more of this mail for a week
+    NWEEK=`@PERL@ -e 'use POSIX; 
+	    print strftime("%y%m%d%H%M", localtime(time()+7*24*60*60))'`
+    rm -f $DIR/$BLOCK
+    touch -t "$NWEEK" $DIR/$BLOCK
+
+done