#!/bin/sh
#
# mlmmj-make-ml.sh - henne@hennevogel.de
#
# modified for Debian GNU/Linux by boll@debian.org

VERSION="0.1-debian (Modified for Debian GNU/Linux)"
DEFAULTDIR="/var/spool/mlmmj"
ETCDEFAULTDIR="/etc/mlmmj/lists"
TEXTPATH="/usr/share/mlmmj/text.skel"
SENDMAILPKG=`grep-dctrl -FProvides mail-transport-agent -a -FStatus installed -sPackage -n /var/lib/dpkg/status`
NEWALIASES=`which newaliases`

USAGE="
mlmmj-make-ml $VERSION
$0 [OPTIONS]
-h	display this help text
-L	the name of the mailinglist
-s	your spool directory if not $DEFAULTDIR
-z	nuffn for now
"

echo
echo "+------------------------------------------------------------+"
echo "| Information:                                               |"
echo "| Please report bugs against mlmmj-make-ml to the Debian BTS |"
echo "| at http://bugs.debian.org/                                 |"
echo "+------------------------------------------------------------+"
echo


while getopts ":hL:s:az:" Option
do
case "$Option" in 
	h )
	echo "$USAGE"
	exit 0
	;;
	z )
	echo -n "nothing"
	exit 0
	;;
	L )
	LISTNAME="$OPTARG"
	;;
	s )
	SPOOLDIR="$OPTARG"
	;;
	* )
	printf "$0: invalid option\nTry $0 -h for more information.\n"
	exit 1
	;;
esac
done
SHIFTVAL=$(( $OPTIND - 1 ))
shift $SHIFTVAL

if [ -z "$SPOOLDIR" ]; then
	SPOOLDIR="$DEFAULTDIR"
fi

echo "Creating Directorys below $SPOOLDIR. Use '-s spooldir' to change"

if [ -z "$LISTNAME" ]; then
	echo -n "What should the name of the Mailinglist be? [mlmmj-test] : "
	read LISTNAME
	if [ -z "$LISTNAME" ]; then
	LISTNAME="mlmmj-test"
	fi
fi

LISTDIR="$SPOOLDIR/$LISTNAME"
ETCLISTDIR="$ETCDEFAULTDIR/$LISTNAME"

mkdir -p $LISTDIR
mkdir -p $ETCLISTDIR

for DIR in incoming queue queue/discarded archive subconf unsubconf \
	   bounce moderation subscribers.d digesters.d requeue \
	   nomailsubs.d
do
	mkdir "$LISTDIR"/"$DIR"
done

for DIR in text control
do
	mkdir "$ETCLISTDIR"/"$DIR"
	ln -s "$ETCLISTDIR"/"$DIR" "$LISTDIR"/"$DIR"
done

test -f "$LISTDIR"/index || touch "$LISTDIR"/index

echo -n "The Domain for the List? [] : "
read FQDN
if [ -z "$FQDN" ]; then
	FQDN="localhost.localdomain"
fi

echo -n "The emailaddress of the list owner? [postmaster] : "
read OWNER
if [ -z "$OWNER" ]; then
	OWNER="postmaster"
fi
echo "$OWNER" > "$ETCLISTDIR"/"control/owner"

if [ -z "$TEXTPATH" -o ! -d "$TEXTPATH" ]; then
	echo "**NOTE** Could not copy the texts for the list"
	echo "Please manually copy the files from $TEXTPATH"
else
	cp "$TEXTPATH"/* "$ETCLISTDIR"/"text"
fi

LISTADDRESS="$LISTNAME@$FQDN"
echo "$LISTADDRESS" > "$ETCLISTDIR"/control/"listaddress"

MLMMJRECIEVE=`which mlmmj-recieve 2>/dev/null`
if [ -z "$MLMMJRECIEVE" ]; then
	MLMMJRECIEVE="/usr/bin/mlmmj-recieve"
fi

MLMMJMAINTD=`which mlmmj-maintd 2>/dev/null`
if [ -z "$MLMMJMAINTD" ]; then
	MLMMJMAINTD="/usr/bin/mlmmj-maintd"
fi

ALIAS="$LISTNAME:  \"|$MLMMJRECIEVE -L $SPOOLDIR/$LISTNAME/\""

echo "I am adding the following to your /etc/aliases file:"
echo "$ALIAS"
echo -n "is this ok (if not, you need to do so yourself)? [y/N] : "
read OKIDOKI
case $OKIDOKI in
	y|Y)
		echo "$ALIAS" >> /etc/aliases
		;;
	n|N)
		exit 0
		;;
	*)
		echo "Options were: y, Y, n or N"
esac

echo "Detecting the installed MTA and changing ownership as needed..."

if [ "$SENDMAILPKG" = "postfix" ]; then
	USER="nobody"
	GROUP="nogroup"
	echo "Postfix appears to be handling your mail, using ownership $USER:$GROUP..."
elif [ "$SENDMAILPKG" = "exim4-daemon-light" ]; then
	USER="Debian-exim"
	GROUP="Debian-exim"
	echo "Exim appears to be handling your mail, using ownership $USER:$GROUP..."
else
	USER="nobody"
	GROUP="nogroup"
	echo "Unable to detect MTA, using default ownership: $USER:$GROUP..."
fi

chown -R $USER:$GROUP $LISTDIR $LISTDIR/*
chmod -R 755 $LISTDIR
chmod -R 755 $ETCLISTDIR

# Check if all lists are owned by the right user, if not, ask if we should fix
# it.

ANOMALIES=0

for ENTRY in `ls $SPOOLDIR`
do
        SOWNER=`stat -c %U $SPOOLDIR/$ENTRY`
        SGROUP=`stat -c %G $SPOOLDIR/$ENTRY`

	if [ $SOWNER != $USER -o $SGROUP != $GROUP ]
		then
			ANOMALIES=1
	fi
done

if [ $ANOMALIES -eq 1 ]
	then
		echo -n "It appears that not all lists have proper ownership, do you want me to fix this? [y/N] : "
		read FIXOWNERSHIP
		case $FIXOWNERSHIP in
		        y|Y)
				chown -R $USER:$GROUP $SPOOLDIR/*

				;;
			n|N)
				echo "Not fixing ownership"
				;;
			*)
				echo "Options were: y, Y, n or N"
		esac
															
		
fi

echo "Running $NEWALIASES"
$NEWALIASES

echo "Done."
