#!/bin/sh

##  Author:
##      Werner Reisberger     <werner at pure dot ch> 
##  Description:
##    confirm allows (un)subscriptions to mailing lists running with  
##    SmartList  depending on a confirmation. If automatic subscription is 
##    not allowed the confirmation can be done by the list maintainer(s).
##---------------------------------------------------------------------------##
##    
##    Copyright (C) 1998-2003   Werner Reisberger  <werner at pure dot ch>
##    Copyright (C) 1997        Michelle Dick <artemis@rahul.net> and
##                              Werner Reisberger  <werner at pure dot ch>
##
##    This program is free software; you can redistribute it and/or modify
##    it under the terms of the GNU General Public License as published by
##    the Free Software Foundation; either version 2 of the License, or
##    (at your option) any later version.
##
##    This program is distributed in the hope that it will be useful,
##    but WITHOUT ANY WARRANTY; without even the implied warranty of
##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##    GNU General Public License for more details.
##
##    You should have received a copy of the GNU General Public License
##    along with this program; if not, write to the Free Software
##    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
##---------------------------------------------------------------------------##

test=test		# /bin/test
echo=echo		# /bin/echo
cat=cat			# /bin/cat
sed=sed			# /bin/sed
grep=grep		# /bin/grep
date=date		# /bin/date
ls=ls                   # /bin/ls
rm=rm                   # /bin/rm
mkdir=mkdir             # /bin/mkdir
formail=formail		# /usr/local/bin/formail
multigram=multigram 	# ../.bin/multigram

$test -z "$listaddr" &&
 $echo "Don't start this script directly, it is used in rc.request" && exit 64

ADR=$1

tmprequest=tmp.request
tmpfrom=tmp.from

case "$X_ENVELOPE_TO" in
  *$list-request*) wrongaddress="" ;;
  *) wrongaddress="WARNING:
	Please try to use '$listreq'
	the next time when issuing (un)subscribe requests.
" ;;
esac

subscraddr=""

address=`$formail -k -xSubject: |
 $sed -n -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' \
  -e '/^[	 ]*[^	 a-z]/ q' \
  -e 's/^[^@]*add[	 ]*'\
'[^	 ]*[	 ]\([^	 ]*[-a-z0-9_][@!][a-z0-9][^	 ]*\).*/\1/p' \
  -e 's/^[^@]*address[	 ]*'\
'[^	 ]*[	 ]\([^	 ]*[-a-z0-9_][@!][a-z0-9][^	 ]*\).*/\1/p' \
  -e 's/^[^@]*sub[	 ]*'\
'[^	 ]*[	 ]\([^	 ]*[-a-z0-9_][@!][a-z0-9][^	 ]*\).*/\1/p' \
  -e 's/^[^@]*subscribe[	 ]*'\
'[^	 ]*[	 ]\([^	 ]*[-a-z0-9_][@!][a-z0-9][^	 ]*\).*/\1/p' `

fromaddr=`$cat $tmpfrom`

for a in $address ""
do
  if $test -z "$subscraddr"
  then
     case $a in
	$listreq|$listaddr) ;;
	?*) subscraddr=$a
	   $echo "$subscraddr" >$tmpfrom ;;
     esac
  fi
done

for a in $address ""
do
  $test -z "$subscraddr" && subscraddr=$a
done

$test -z "$subscraddr" && subscraddr=$fromaddr

if [ -z $ADR ]; then
  $formail -f -I"X-RFC822Conform: $subscraddr" < $tmprequest
else
  # log the attempt
  $echo "$0: subscription request from $fromaddr" >>$subscribe_log
  $grep "^[ 	]*$subscraddr[ 	]*" dist
fi
