#!/bin/bash --
#
# Create the mailbox directory for a new virtual mail user
# with appropreate permissions.
# Copyright 2008 T.Nonogaki @Stray Penguin (www.asahi-net.or.jp/~aa4t-nngk/)

# Setting variables.
vmail_base=/var/vmail/users
branch=
vmail_uid=mailadmin
vmail_gid=mailadmin
vbox_perm=0700
maildir_cmd=mkmaildir

ME=$(basename $0)

function show_usage() {
	cat <<EOM
USAGE: $ME [-d {SUBDIR}] USER
 This script makes a set of Maildir structure for the user.
 You can use \`-d SUBDIR' option, where SUBDIR is a directory relative
 to $vmail_base. Then, the USER dir gets created under SUBDIR.
EOM
exit 1
}

function mkmaildir() {
    local maildir
    maildir=$1

    mkdir $maildir && \
    mkdir ${maildir}/{new,cur,tmp} && \
    chmod -R 700 $maildir
    return $?
}

# Uncomment below if you use Qmail's maildirmake.
#if [ ! -x $maildir_cmd ]; then
#    echo "$maildir_cmd does not exit or non-executable."
#    exit 1
#fi

[ -n "$1" ] || show_usage

while getopts "d:" opt; do
	case $opt in
	  d)
		branch=${OPTARG#/}
		branch="/${branch%/}"
	esac
done

shift  $(($OPTIND - 1))

[ -n "$1" ] || show_usage

if [ ! -d $vmail_base ]; then
	echo "vmail base directory $vmail_base does not exist."
	exit 1
fi

if [ -n "$branch" -a ! -d ${vmail_base}$branch ]; then
	echo "parent directory ${vmail_base}$branch does not exist."
	exit 1
fi

if [ -d ${vmail_base}${branch}/$1 ]; then
	echo "user directory ${vmail_base}${branch}/$1 already exists."
	exit 1
fi

mkdir -p ${vmail_base}${branch}/$1 && \
chown ${vmail_uid}:${vmail_gid} ${vmail_base}${branch}/$1 && \
chmod $vbox_perm ${vmail_base}${branch}/$1 && \
$maildir_cmd ${vmail_base}${branch}/$1/Maildir && \
chown -R ${vmail_uid}:${vmail_gid} ${vmail_base}${branch}/$1/Maildir

exit $?
