#!/usr/local/bin/cbsd
#v11.1.4
MYARG="jname"
MYOPTARG="fstab zfs"
MYDESC="Undelegate ZFS filesystem from jail"
ADDHELP="zfs - source zfs filesystem, jname - destination jail. fstab - mount via fstab file records\n"

. ${subr}
. ${strings}
. ${tools}
init $*

[ ${zfsfeat} -eq 0 ] && exit
[ -n "${fstab}" -a ! -f "${fstab}" ] && err 1 "${fstab} does not exist"
[ -z "${zfs}" -a -z "${fstab}" ] && err 1 "${MAGENTA}attachzfs: ${GREEN}zfs=${MAGENTA} or ${GREEN}fstab= ${MAGENTA} is necessary${NORMAL}"

zfs_check_and_deattach()
{
	local _err
	zfsfs ${1}

	_err=$?

	case "${_err}" in
		0)
			return 0
			;;
		1)
			/sbin/zfs unmount -f ${1}
			;;
		2)
			;;
		*)
			return 0
	esac

	# no we ready for dettaching ${zfs} from $jname
	/sbin/zfs set jailed=off ${1}
	/sbin/zfs unjail ${jname} ${1}
	/sbin/zfs set mountpoint=none ${1}

	return 2
}


mount_via_fstab()
{
	/bin/cat ${fstab} | while read _device _mountpt _fs _mode _a _b; do
		case ":${_device}" in
			:#* | :)
				continue
				;;
		esac

		[ "${_fs}" != "zfs" -o -z "${_device}" ] && continue
		zfs_check_and_deattach ${_device}
		case $? in
			0)
				${ECHO} "${MAGENTA}attachzfs: ${_device} is not valid ZFS filesystem${NORMAL}"
				return 0
				;;
			2)
				;;
			*)
				${ECHO} "${MAGENTA}attachzfs: Unknown error while test for zfsfs ${_device}. Skip${NORMAL}"
				return 0
				;;
		esac
	done

	exit 0
}

. ${jrcconf}
[ $? -eq 1 ] && err 1 "${MAGENTA}attachzfs: no such jail: ${GREEN}${jname}${NORMAL}"
[ ${status} -ne 1 ] && err 1 "${MAGENTA}attachzfs: jail is not running: ${GREEN}${jname}${NORMAL}"

. ${zfstool}
[ -n "${fstab}" ] && mount_via_fstab

zfs_check_and_deattach ${zfs}

case $? in
	0)
		err 1 "${MAGENTA}attachzfs: ${zfs} is not valid ZFS filesystem${NORMAL}"
		;;
	2)
		;;
	*)	
		err 1 "${MAGENTA}attachzfs: Unknown error while test for zfsfs ${zfs}. Skip${NORMAL}"
		;;
esac
