#!/usr/local/bin/cbsd
#v11.1.11
MYARG="jname"
MYOPTARG="file nameserver"
MYDESC="Prepare resolv.conf in jail"
ADDHELP="file - path to resolv.conf to put him into jail\n\
nameserver - IP address(es), comma-separated if multiple, e.g: nameserver=9.9.9.9,149.112.112.112\n"

. ${subrdir}/nc.subr

. ${cbsdinit}

set_resolvconf()
{
	local _i
	local _tpl="CBSD makeresolv function"

	local IFS

	if [ -n "${nameserver}" -o -z "${file}" ]; then
		IFS=","
		for _i in ${jnameserver}; do
			IFS=" "
			iptype ${_i}
			_ret=$?
			case "${_ret}" in
				0)
					# ???
					;;
				1)
					[ ${jail_has_v4} -eq 1 ] && echo "nameserver ${_i}   # ${_tpl}" >> ${data}/etc/resolv.conf
					;;
				2)
					[ ${jail_has_v6} -eq 1 ] && echo "nameserver ${_i}   # ${_tpl}" >> ${data}/etc/resolv.conf
					;;
			esac
			IFS=","
		done
		IFS=" "
	else
		# just copy file
		[ ! -r "${file}" ] && err 1 "${N1_COLOR}makeresolv: unable to read ${N2_COLOR}${file}${N0_COLOR}"
		${CP_CMD} -a ${file} ${data}/etc/resolv.conf
	fi
}

unset_resolvconf()
{
	local _tpl="CBSD makeresolv function"

	if [ -n "${nameserver}" -o -z "${file}" ]; then
		# nameserver if preferr to file
		if ${GREP_CMD} "${_tpl}" ${data}/etc/resolv.conf >/dev/null 2>&1; then
			${CP_CMD} -a ${data}/etc/resolv.conf ${data}/etc/resolv.conf.bak
			${GREP_CMD} -v "${_tpl}" ${data}/etc/resolv.conf.bak |${GREP_CMD} "." > ${data}/etc/resolv.conf
		fi
	else
		# just copy file
		${CP_CMD} -a ${data}/etc/resolv.conf ${data}/etc/resolv.conf.bak
	fi
}

. ${subrdir}/rcconf.subr

[ $? -eq 1 ] && err 1 "${N1_COLOR}no such jail: ${N2_COLOR}${jname}${N0_COLOR}"

[ ${applytpl} -eq 0 -o ${floatresolv} -eq 0 ] && exit 0

[ -n "${nameserver}" ] && jnameserver="${nameserver}"

# v4/v6 flag?
jail_has_v4=0
jail_has_v6=0

if [ "${ip4_addr}" = "0" ]; then
	# assume full stack jail
	jail_has_v4=1
	jail_has_v6=1
else
	OIFS="${IFS}"
	IFS=","
	for _i in ${ip4_addr}; do
		IFS="${OIFS}"
		ipwmask ${_i}
		if [ -z "${IWM}" -o "${_i}" = "0" ]; then
			IFS=","
			continue
		fi


		iptype ${IWM}
		_ret=$?
		case "${_ret}" in
			0)
				case "${IWM}" in
					[Dd][Hh][Cc][Pp])
						jail_has_v4=1
						;;
					[Dd][Hh][Cc][Pp][vV]6)
						jail_has_v6=1
						;;
				esac
				;;
			1)
				jail_has_v4=1
				;;
			2)
				jail_has_v6=1
				;;
			*)
				# ??
				;;
		esac

		IFS=","
	done
fi
OIFS="${IFS}"

unset_resolvconf
set_resolvconf

exit 0
