#!/bin/bash
#
# VERSION=6
# CHANGES="small fixes in /var/log-switch"

export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/bin:/usr/local/sbin:/usr/fallback"
BEROCONF=/usr/fallback/beroconf

CIFS_ENABLED=$(${BEROCONF} get root cifs_log_enabled | grep -v failed)
CIFS_UNC=$(${BEROCONF} get root cifs_log_share | grep -v failed)
CIFS_UNC=${CIFS_UNC//\\\\//}
CIFS_USR=$(${BEROCONF} get root cifs_log_user | grep -v failed)
CIFS_PWD=$(${BEROCONF} get root cifs_log_password | grep -v failed)
CIFS_DOM=$(${BEROCONF} get root cifs_log_domain | grep -v failed)
CIFS_MNT=/var/log2

CIFS_MOD=/usr/local/modules/cifs.ko
NLS_MOD=/usr/local/modules/nls_base.ko

function cifs_mount {

	cifs_mnt="/bin/mount -t cifs ${CIFS_UNC} ${CIFS_MNT} -o username=${CIFS_USR},password=${CIFS_PWD}"

	if [ ! -z "${CIFS_DOM}" ]; then
		cifs_mnt="${cifs_mnt},domain=${CIFS_DOM}"
	fi

	insmod ${NLS_MOD} &> /dev/null
	insmod ${CIFS_MOD} &> /dev/null
	${cifs_mnt} &> /dev/null

	echo ${?}
}

function log_switch {

	if [ "${1}" = "cifs" ]; then
		insmod ${NLS_MOD} &> /dev/null
		insmod ${CIFS_MOD} &> /dev/null

		mount -oremount,rw /
		if [ -d ${CIFS_MNT} ]; then
			mkdir -p ${CIFS_MNT}
		fi
		rm -rf /var/log
		ln -s ${CIFS_MNT} /var/log
		mount -oremount,ro /
	elif [ "${1}" = "tmp" ]; then
		mount -oremount,rw /
		rm -rf /var/log
		ln -s /tmp /var/log
		mount -oremount,ro /

		rmmod ${NLS_MOD} &> /dev/null
		rmmod ${CIFS_MOD} &> /dev/null
	fi
}

case "${1}" in
	start)
		if [ "${CIFS_ENABLED}" != "1" ]; then
			echo " * Mounting ${CIFS_MNT} to a CIFS-share disabled in root.db, leaving."
			log_switch "tmp"
			exit 0
		fi

		if [ ! -f ${CIFS_MOD} ] || [ ! -f ${NLS_MOD} ]; then
			echo " * CIFS kernel modules not found, leaving."
			log_switch "tmp"
			exit 1
		fi

		if [ -z ${CIFS_UNC} ] || [ -z ${CIFS_USR} ] || [ -z ${CIFS_PWD} ]; then
			echo " * No CIFS-Share given, leaving."
			log_switch "tmp"
			exit 1
		fi

		echo -n " * Mounting /var/log2 to ${CIFS_UNC}: "
		res=$(cifs_mount)
		if [ "${res}" != "0" ]; then
			log_switch "tmp"
			echo "Failed."
			exit 1
		fi
		echo "Done."

		echo -n " * Switching /var/log to /var/log2: "
		log_switch "cifs"
		echo "Done."

		exit 0
	;;
	stop)
		echo -n " * Unmounting ${CIFS_MNT} from ${CIFS_UNC}: "
		log_switch "tmp"
		umount ${CIFS_MNT} &> /dev/null
		echo "Done."
	;;
	*)
		echo "Usage: ${0} [start|stop]"
		exit 1
	;;
esac
