#!/bin/sh

# Manages symbolic links for config files. kkatarn, 2015.
# May 2015: initial version.
# July 2015: support for local etc (handy for FreeBSD)

# Root of the reference configuration tree
: ${TOOL_ROOT:=${TOOL_ROOT:-"/opt"}}

# Extension of backup files
SAV=cfgsaved

usage()
{
	echo "Creates symbolic link for config file in ${REF_ETC} and places it to /etc."
	echo "Usage: $(basename $0) <add|del> configfile"
}

if [ $# -ne 2 ]; then
	usage
	exit 1
fi

# If this script is called as 'llncfg', it manages links in /usr/local/etc.

[ $(basename $0) = "llncfg" ] && ETC=/usr/local/etc || ETC=/etc

REF_ETC=${TOOL_ROOT}/etc

insert_cfg()
{
	CFG=$1
	if ! [ -f ${REF_ETC}/${CFG} ]; then
		echo "No config \"${CFG}\" in ${REF_ETC}"
		return 1
	fi
	if [ -f ${ETC}/${CFG} ]; then
		if [ -f ${ETC}/${CFG}.${SAV} ]; then
			echo "Both ${ETC}/${CFG} and ${ETC}/${CFG}.${SAV} already exist."
			echo "Unable to continue; please, perform manual cleanup."
			return 1
		fi
		mv ${ETC}/${CFG} ${ETC}/${CFG}.${SAV}
	fi
	ln -s ${REF_ETC}/${CFG} ${ETC}/${CFG}
}

plugout_cfg()
{
	CFG=$1
	[ -L ${ETC}/${CFG} ] && rm ${ETC}/${CFG}
	if [ -f ${ETC}/${CFG} ]; then
		echo "${ETC}/${CFG} exists and is not a symlink."
		return 1
	fi
	[ -f ${ETC}/${CFG}.${SAV} ] && mv ${ETC}/${CFG}.${SAV} ${ETC}/${CFG}
}

case $1 in
	add)
		insert_cfg $2
		;;
	del)
		plugout_cfg $2
		;;
	*)
		usage
		exit 1
		;;
esac
