#! /bin/sh
##  $Revision: 1.4 $
##  Initial parsing of control messages.

# =()<NEWSBIN=@<_PATH_NEWSBIN>@>()=
NEWSBIN=/usr/local/news/bin
PATH=${NEWSBIN}:${PATH}:/bin:/usr/bin ; export PATH
# =()<AWK=@<_PATH_AWK>@>()=
AWK=/usr/local/bin/gawk

WRITELOG=${NEWSBIN}/writelog

# =()<ACTIVE=@<_PATH_ACTIVE>@>()=
ACTIVE=/usr/local/news/active
# =()<ACTIVETIMES=@<_PATH_ACTIVETIMES>@>()=
ACTIVETIMES=/usr/local/news/active.times
# =()<CTLFILE=@<_PATH_CONTROLCTL>@>()=
CTLFILE=/usr/local/news/control.ctl
# =()<EGREP=@<_PATH_EGREP>@>()=
EGREP=/usr/local/bin/egnugrep
# =()<INEWS=@<_PATH_INEWS>@>()=
INEWS=/usr/local/news/inews
# =()<LIB=@<_PATH_NEWSLIB>@>()=
LIB=/usr/local/news
# =()<MAILCMD=@<_PATH_MAILCMD>@>()=
MAILCMD=/usr/ucb/Mail
# =()<NEWSFEEDS=@<_PATH_NEWSFEEDS>@>()=
NEWSFEEDS=/usr/local/news/newsfeeds
# =()<NEWSGROUPS=@<_PATH_NEWSGROUPS>@>()=
NEWSGROUPS=/usr/local/news/newsgroups
LOCALGROUPS=${NEWSLIB}/localgroups
# =()<NEWSMASTER=@<NEWSMASTER>@>()=
NEWSMASTER=usenet
# =()<NEWSUSER=@<NEWSUSER>@>()=
NEWSUSER=news
# =()<CONTROLPROGS=@<_PATH_CONTROLPROGS>@>()=
CONTROLPROGS=/usr/local/news/bin/control
# =()<SPOOL=@<_PATH_SPOOL>@>()=
SPOOL=/var/spool/news
# =()<TMPDIR=${TMPDIR-@<_PATH_TMP>@}>()=
TMPDIR=${TMPDIR-/tmp}
# =()<PATH_MOST_LOGS=@<_PATH_MOST_LOGS>@>()=
PATH_MOST_LOGS=/var/log/news

AZ=ABCDEFGHIJKLMNOPQRSTUVWXYZ
az=abcdefghijklmnopqrstuvwxyz
FROM="`echo $1 | tr ${AZ} ${az}`"
REPLYTO="$2"
case "$3" in
/*)
    ARTICLE="$3"
    ;;
*)
    ARTICLE="${SPOOL}/$3"
    ;;
esac
PATHHOST="$4"

umask 002
TEMP=${TMPDIR}/ctl$$
##  Avoid egrep bugs with empty or-patterns.
test -z "${PROG}" && PROG=all
${EGREP} "^(${PROG}|all):" <${CTLFILE} >${TEMP}

##  Get any arguments.
if grep "^Control:[ 	]*${PROG}" <${ARTICLE} >/dev/null 2>&1 ; then
    set ""`sed -n -e "s/^Control:[ 	]*${PROG}//p" -e '/^$/q' <${ARTICLE}`
else
    if grep "^Subject:[ 	]*cmsg[ 	]*${PROG}" \
		<${ARTICLE} >/dev/null 2>&1 ; then
	set ""`sed -n -e "s/^Subject:[ 	]*cmsg[ 	]*${PROG}//p" \
		-e '/^$/q' <${ARTICLE}`
    else
	rm ${TEMP}
	${MAILCMD} -s "Bad header for ${PROG} by ${FROM}" \
		${NEWSMASTER} <${ARTICLE}
	exit
    fi
fi

ACTION=mail
IFS=:
exec <${TEMP}
while read MESSAGE FROM_PAT NG_PAT ACT_PAT ; do
    eval "case \"${FROM}\" in
    ${FROM_PAT})
	##  Got a match -- if newgroup/rmgroup, must also
	##  match the newsgroup apttern.
	case \"${PROG}\" in
	newgroup|rmgroup)
	    case \"$1\" in
	    ${NG_PAT})
		ACTION=${ACT_PAT}
		;;
	    esac
	    ;;
	*)
	    ACTION=${ACT_PAT}
	    ;;
	esac
    ;;
    esac"
done
rm ${TEMP}
IFS="`echo stn | tr stn ' \011\012'`"

LOGFILE=mail
case ${ACTION} in
drop)
    exit
    ;;
log)
    echo "`date` Ignored ${PROG} ${ARTICLE} by ${FROM} (${PATHHOST})" 1>&2
    exit
    ;;
log=*)
    LOGFILE=`expr "${ACTION}" : 'log=[	 ]*\(.*\)'`
    ACTION=logit
    ;;
doit=*)
    LOGFILE=`expr "${ACTION}" : 'doit=[	 ]*\(.*\)'`
    ACTION=doit
    ;;
esac

case "${LOGFILE}" in
"")
    LOGFILE=/dev/null
    ;;
mail|/*)
    ;;
*)
    LOGFILE=${PATH_MOST_LOGS}/${LOGFILE}.log
    ;;
esac
export LOGFILE
