require_root()
{
	local exe preserve_env
	echo \* checking privileges
	[ $(id -u) -ne "0" ] && {
		echo root is required
		exe="$EXEDIR/$(basename "$0")"
		exists sudo && {
			echo elevating with sudo
			exec sudo -E sh "$exe"
		}
		exists su && {
			echo elevating with su
			case "$UNAME" in
				Linux)
					preserve_env="--preserve-environment"
					;;
				FreeBSD|OpenBSD|Darwin)
					preserve_env="-m"
					;;
			esac
			exec su $preserve_env root -c "sh \"$exe\""
		}
		echo su or sudo not found
		exitp 2
	}
	HAVE_ROOT=1
}