#!/bin/sh -x
#
# aryzhov@spasu.net
#
# Create a new OpenWebMail user
# Normally, must be started from add_zones for a specific machine
#
#
# # # # # # # # # # # # # # # # # # # # # # # # # #
#
# If SI_CONFIG_DIR is defined, we are in Jumpstart,
# so set the normal ARZ Jumpstart environment.
#
[ x$SI_CONFIG_DIR != x ] && {


  [ -z "$SID" ] && SID=/tmp/install_config
  [ X$SubrIsRead = XYes ] || . $SID/Scripts/Misc/!Includes/Subroutines
  [ X$VarsAreSet = XYes ] || SetJVars
  SetRootOpts ; [ X$ROOT != X/ ] && exec Chroot_Script $0 $*

}

PATH=$PATH:`pwd`; export PATH

echo "\n\n=== Creating OpenWebMail users ===\n"

[ x$1 != x ]        || StartShell "Arg list must be usernames"

REFROOT=/zones/ftpd/root
REF_ETC=$REFROOT/etc
OWM_ETC=/zones/inet/root/usr/local/www/cgi-bin/openwebmail/etc
FTP_HOMES=/space/export/ftp/export/home
WWW_HOMES=/space/export/www
HOME_DIRS=/space/export/home


PERL=/bin/perl
[ -x $PERL ] || PERL=/usr/local/bin/perl
[ -x $PERL ] || PERL=/zones/inet/root/usr/local/bin/perl
[ -x $PERL ] || { echo NoPerl; exit 1; }

MKFTPUSER=`which MakeFTPUser` || StartShell "No MakeFTPUser script found"

cp $MKFTPUSER $REFROOT//export/ftp/bin/MakeFTPUser

for u in $* ; do

  echo Creating user $u

  touch $OWM_ETC/master.passwd

  egrep -s "^$u:" $OWM_ETC/master.passwd && {
    echo "$u already exists - skipping"
    continue
  }

  chroot $REFROOT /export/ftp/bin/MakeFTPUser $u || continue

  SEC=`expr 1+ \`date +%S\``
  UPASSWD=`expr \`date +%S%m\` \* \`date +%m%S\` \* \`date +%H%m\` / $SEC`
  sleep 1 ; UPASSWD=`expr $UPASSWD / \`date +%S\``
  sleep 1 ; UPASSWD=`printf "%7x" \`expr $UPASSWD \* \\\`date +%S\\\`\``
  sleep 1 ; UPASSWD=`echo $UPASSWD`
  CPASSWD=`$PERL -e "print crypt q($UPASSWD), q(\`date +%S%S%m%S%S%S%m\`)";`
  LINE=`awk -F: '$1=="'$u'" {printf("'$u:$CPASSWD':%s:%s:%s:%s:%s", $3,$4,$5,$6,$7)}' $REF_ETC/passwd` || continue
  UID=`echo $LINE | cut -d: -f3`
  GID=`echo $LINE | cut -d: -f4`

  [ 0$UID -gt 0 ] || { echo Bad passwd line: $LINE; continue; }

  [ -d $WWW_HOMES/$u/. ] || mkdir $WWW_HOMES/$u || continue
  chown -R $UID $WWW_HOMES/$u/.

  (
    for d in $WWW_HOMES $HOME_DIRS; do

      cd $d
      [ -d $u/. ] || {
	mkdir $u
	[ -d ./!Template/. ] && (cd ./!Template/. && tar cf - .) | (
	  cd $u
	  tar xf -
	  for f in `find . -type f -print` ; do
	    cp $f /tmp/a
	    sed "s/TempUser/$u/g;s/TempUser/$u/g" </tmp/a >$f
	  done
	  ln -s $FTP_HOMES/$u/pub   ftp
	  ln -s $WWW_HOMES/$u       www
	)
	chown -R $UID $u
      }
    done
  )

  for z in smtp inet ; do
    (
      cd /zones/$z/root/etc
      for f in passwd shadow ; do
	egrep -s "^$u:" $f || (egrep "^$u:" $REF_ETC/$f >>$f)
      done
    )
  done

  (
    cd $OWM_ETC || continue
    f=master.passwd
    egrep -s "^$u:" $f || <$REF_ETC/passwd awk -F: '$1=="'$u'" {printf("%s:%s:%d:%d:%s:%s:%s\n", $1, "'$CPASSWD'", $3, $4, $5, "'/export/home/$u'", $7)}' >>$f
  )

  (
    cd /space/zones/inet/root/export/home
    [ -d $u/. ] || mkdir $u
  )

  (
    cd /space/zones/inet/root/var/mail
    touch $u
    chown $UID $u
  )

  echo $u $UPASSWD
done
