#!/bin/sh

set -e

. /etc/local/volumes || exit 0
XDIRREAL="$XDIR/users/root"

if [ $XCHANGE ]; then
	if [ ! -d "$XDIR" ]; then
		echo "XDIR doesn't exist. Ignoring XCHANGE!"
		XCHANGE=""
	fi
fi

if [ $# -gt 0 ]; then
	USERS=$*
else
# TODO: scan /etc/passwd and use `getent passwd postgres | awk -F: '{print $6}' | head -1` or similar
	USERS=$(ls /home)
fi

mac=".mac"
pc=".pc"
xchange=".xchange"
[ $NETATALK_HOME ] && mac=$NETATALK_HOME
[ $SAMBA_HOME ] && pc=$SAMBA_HOME
[ $XCHANGE_HOME ] && xchange=$XCHANGE_HOME

for USER in $USERS; do
	HOME="/home/$USER"

	test -d $HOME || continue
	test -L $HOME && continue
#	[ $USER != "lost+found" ] || continue
	id -u $USER >/dev/null 2>&1 || continue
#	echo $UID
#	[ $UID gt 1000 ] || continue

	echo -n $USER

#	if [ -x /etc/local/quota.sh ]; then
#		/etc/local/quota.sh $USER
#		fi
	[ $QUOTASOFT ] || QUOTASOFT="0"
	[ $QUOTAHARD ] || QUOTAHARD="0"
	for QUOTAHOME in $QUOTAHOMES; do
		if [ $NEW_QUOTA ]; then
			setquota $USER $QUOTASOFT $QUOTAHARD 0 0 $QUOTAHOME
		else
			setquota $USER $QUOTAHOME $QUOTASOFT $QUOTAHARD 0 0
		fi
	done

#    	groupadd $USER
#	usermod -g $USER $USER
#	rm -f $HOME/.profile $HOME/.bashrc $HOME/.bash_history
#	cp /etc/skel/.bash_profile /etc/skel/.bashrc $HOME/
	
	if [ $NETATALK ]; then
		mkdir -p $HOME/$mac
	fi
	if [ $SAMBA ]; then
		mkdir -p $HOME/$pc
	fi
#	if [ $XCHANGE ]; then
#		mkdir -p $HOME/$xchange
#		chown -R $USER: $HOME/$xchange
#		chmod -R u=rw,go=,g+r,ug+X $HOME/$xchange
#	fi
	if [ $XCHANGE ]; then
		[ -d $XDIRREAL/$USER ] || mkdir -p $XDIRREAL/$USER
		chown -R $USER:users $XDIRREAL/$USER
		chmod -R g=r,g+X $XDIRREAL/$USER
		if [ -e "x$HOME/$xchange" ]; then
			rm -rf $HOME/$xchange
			ln -dfs $XDIRREAL/$USER $HOME/$xchange
		fi
	fi
	if [ $PUBLIC ]; then
		mkdir -p $HOME/public_html
	fi

	chown $USER: $HOME
	chmod u=rwX,go=rX $HOME

#	chown -R $USER: $HOME
#	chmod -R u=rw,g=r,o=,ug+X $HOME
#	chmod o+rX $HOME

	if [ -f $HOME/.forward ]; then
		chown $USER: $HOME/.forward
		chmod 0640 $HOME/.forward
	fi

	mkdir -p $HOME/mail
	touch $HOME/mail/mbox
	chown -R $USER: $HOME/mail
	chmod -R u=rw,go=,u+X $HOME/mail
	if [ -f $HOME/.mailboxlist ]; then
		chown $USER: $HOME/.mailboxlist
		chmod 0640 $HOME/.mailboxlist
	fi
	if [ -f /var/spool/mail/$USER ]; then
		chown $USER:mail /var/spool/mail/$USER
		chmod ug=rw,o= /var/spool/mail/$USER
	fi

	if [ -d $HOME/$mac ]; then
		chown -R $USER: $HOME/$mac
		chmod -R u=rw,g=r,o=,ug+X $HOME/$mac
		rm -rf $HOME/$mac/Network\ Trash\ Folder
		mkdir $HOME/$mac/Network\ Trash\ Folder
		chown nobody: $HOME/$mac/Network\ Trash\ Folder
		chmod a= $HOME/$mac/Network\ Trash\ Folder
	fi
	
	# Access to Mac folders
	for macdir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_$USER$"`; do
		chgrp -R $USER $macdir
		chmod -R u=rw,g=rw,o=,ug+X,g+s $macdir
	done
	for macdir in `find $HOME -mindepth 1 -maxdepth 1 -type d | egrep "^$HOME/mac_${USER}_ro$"`; do
		chown -R $USER: $macdir
		chmod -R u=rw,g=r,o=,ug+X $macdir
	done
	
	# Content cleanup of Mac folders
	for macdir in `find $HOME -mindepth 2 -maxdepth 2 -type d | egrep "^$HOME/mac_$USER/"`; do
		rm -rf $macdir/Network\ Trash\ Folder
		mkdir $macdir/Network\ Trash\ Folder
		chown nobody: $macdir/Network\ Trash\ Folder
		chmod a= $macdir/Network\ Trash\ Folder
	done
	
	if [ -d $HOME/$pc ]; then
		chown -R $USER: $HOME/$pc
		chmod -R u=rw,g=r,o=,ug+X $HOME/$pc
	fi
	
#	if test -d $HOME/$xchange; then
#		chown -R $USER:users $HOME/$xchange
#		chmod -R g=r,g+X $HOME/$xchange
#		if test "x$XCHANGEDIR" != "x"; then
#			rm -rf $XCHANGEDIR/$USER
#			ln -dfs $HOME/$xchange $XCHANGEDIR/$USER
#		fi
#	fi

	if [ -d $HOME/public_html ]; then
		chown -R $USER: $HOME/public_html
		chmod -R u+rX,go=r,go+X $HOME/public_html
		if [ $NETATALK ]; then
			if [ -d "$HOME/public_html/Network\ Trash\ Folder" ]; then
				rm -rf $HOME/public_html/Network\ Trash\ Folder
				mkdir $HOME/public_html/Network\ Trash\ Folder
				chown nobody: $HOME/public_html/Network\ Trash\ Folder
				chmod a= $HOME/public_html/Network\ Trash\ Folder
			fi
		fi
	fi

## Needs more work (not all websites are equally handled)	
#	for dir in $(cd $HOME && find -maxdepth 1 -type d -name 'web_*' -exec sh -c 'cd {} && basename `pwd`' \;); do
#		chown -R $USER: $HOME/$dir
#		chmod -R u+rX,go=r,go+X $HOME/$dir
#	done

	echo "."
done

if [ $XCHANGE ]; then
	for USER in $(ls $XDIRREAL); do
		id $USER >/dev/null 2>&1 || rm -rf $XDIRREAL/$USER
	done
fi