# script to migrate data from netware-shares
#
# Copyright (C) 2007  GONICUS GmbH  info@GONICUS.de
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

#!/bin/sh 
trap 'exit 0' INT

# So wird das NCP share gemounted
ncpmount -A 192.168.1.23 -V DATEN FS1 -u root -g root -U kul.06.LHM -P passwort -N NFS -y utf8 -p cp850 -m src/



#
# Ausgabe Hinweistext
#
usage()
{
	cat <<-EOF
	Usage: ${0##*/} [-dvuasmrpk] usermapping sharemapping
	
	Optionen:
		-a  synchronisiere das ADMIN-Share
		-d  dry run, simuliert was ausgeführt würde
		-k  Kombination aus -a -s -u   
		-p  zeige Fortschrittsbalken
		-r  entferne überflüssige Dateien im Ziel-Share
		-s  synchronisiere gemeinsam genutztes Share
		-m  überspringe Mail-Synchronisation
		-u  synchronisiere Benutzer-Shares
		-v  verbose
	
	EOF

	exit 1
}


#
# Prüft usermapping Datei
#
check_file()
{
	if [ ! -r "$1" ]; then
		echo "Kann Datei '$1' nicht öffnen - abgebrochen" 1>&2
		exit 2
	fi
}


#
# Erstellt Nutzerverzeichnis
#
create_dir()
{
	if [ ! -d "$1" ]; then
		echo "  * erstelle Verzeichnis '$1'"
		[ -z "$dry_run" ] && mkdir -p "$1"
	fi
}


#
# Syncrhonisiert Daten für Benutzer
#
sync_user()
{
	src_name=$1
	dst_name=$2

	if [ -d $SOURCE/DATEN/HOME/$src_name ]; then
		echo "* migriere Daten von $src_name ($dst_name)";
		# [ -d "$HOMES/MAIL/$dst_name" ] && rm -r "$HOMES/MAIL/$dst_name/*"
		create_dir "$HOMES/MAIL/$dst_name"
		echo "  * synchronisiere '$SOURCE/DATEN/HOME/$src_name/' nach '$HOMES/homes/$dst_name'"
		rsync $progress $delete $dry_run $verbose --size-only --a --exclude '/mozilla' --modify-window=10 "$SOURCE/DATEN/HOME/$src_name/" "$HOMES/homes/$dst_name"
		if [ $mail -ne 0 ]; then
			echo "  * synchronisiere '$HOMES/homes/$dst_name/mozilla' nach '$HOMES/MAIL/$dst_name/'"
			rsync $progress $delete $dry_run $verbose -a --size-only --modify-window=10 "$SOURCE/DATEN/HOME/$src_name/mozilla/" "$HOMES/MAIL/$dst_name"
		fi
		create_dir "$PROFILES/$dst_name"
		[ -d "$SOURCE/PROFILES/profile/$dst_name/" ] && rsync $progress $delete $dry_run $verbose -a -size-only --modify-window=10 "$SOURCE/PROFILES/profile/$dst_name/" "$PROFILES/$dst_name"
	else
		echo "* überspringen $src_name ($dst_name) - kein Verzeichnis vorhanden"
	fi
}



##############################################################################
#                         H A U P T P R O G R A M M                          #
##############################################################################

# Defaults
dry_run=""
verbose=""
users=0
admin=0
shared=0
remove=0
mail=1
progress=0
SOURCE=src/
HOMES=/mnt/filer2
ADMIN=/mnt/filer2/ADMIN
SHARE=/mnt/filer1/KULT
PROFILES=/mnt/filer1/PROFILES

# Kommandozeilen Optionen auslesen
while getopts ":dvuasrpmk" Option
do
  case $Option in
    d)	dry_run="--dry-run"
	;;
    v)	verbose="--verbose"
	;;
    u)	users=1
	;;
    a)	admin=1
	;;
    m)	mail=0
	;;
    s)	shared=1
	;;
    k)	shared=1
	admin=1
	users=1
	;;
    r)	remove="--delete"
	;;
    p)	progress="--progress"
	;;
  esac
done
shift $(($OPTIND - 1))

# Testen
[ $# -ne 2 ] && usage
check_file $1
check_file $2
if [ ! -f $SOURCE/INSTALL.LOG ]; then
	echo -e "Quelle nicht eingebunden. Bitte den folgenden Befehl verwenden:\n\n"
	echo "ncpmount -A 192.168.1.23 -V DATEN FS1 -u root -g root -U kul.06.LHM -P passwort -N NFS -y utf8 -p cp850 -m src"
	exit 2
fi
CNT=$(mount | grep "//filer[12]/vol1. on /mnt/filer[12] type cifs (rw" | wc -l)
if [ $CNT -ne 2 ]; then
	echo -e "Ziele nicht eingebunden. Bitte vor dem Start einbinden!\n"
	exit 2
fi

{
# Synchronisiere Nutzer
if [ $users -eq 1 ]; then
	cat $1 | while read src_name dst_name; do
		sync_user $src_name $dst_name
	done
fi

# Synchroniere Shared
if [ $shared -eq 1 ]; then
	cat $2 | while read src_name dst_name; do
		if [ ! -d $SOURCE/DATEN/HOME/$src_name ]; then
			echo "* Verzeichnis $src_name nicht gefunden - übersprungen" 1>&2
			continue
		fi
		rsync $progress $delete $dry_run $verbose -a --size-only --modify-window=10 "$SOURCE/DATEN/HOME/$src_name/" "$SHARE/$dst_name"
	done
fi

# Synchroniere Admin
if [ $admin -eq 1 ]; then
	rsync $progress $delete $dry_run $verbose -a --size-only --modify-window=10 "$SOURCE/Admin/" "$ADMIN"
fi
} 2> stderr.log

