misc/103486: [patch] rc.d/jail: mount fstab after devfs

Jeremie Le Hen jeremie at le-hen.org
Fri Sep 22 07:00:41 PDT 2006


>Number:         103486
>Category:       misc
>Synopsis:       [patch] rc.d/jail: mount fstab after devfs
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri Sep 22 14:00:36 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Jeremie Le Hen
>Release:        FreeBSD 6.1-STABLE i386
>Organization:
>Environment:
System: FreeBSD obiwan 6.1-STABLE FreeBSD 6.1-STABLE #8: Sun Jun 25 18:27:14 CEST 2006 root at obiwan:/usr/obj/usr/src/sys/OBIWAN i386
>Description:
	The host administrator might sometime want to use the $jail_<jname>_fstab
	to mount devfs in more than one directory inside the jail.
>How-To-Repeat:
	Try to run a chrooted named(8) in a jail, it is currently impossible.
	Indeed, when $named_chroot_autoupdate is set to YES (the default),
	rc.d/named tries to mount devfs in $named_chrootdir/dev, which is
	obvisouly impossible from inside a jail.
	Thus it would be worth being possible to use $jail_<jname>_fstab to
	mount $jail_<jname>_rootdir/dev onto $jail_<jname>_rootdir/$named_chrootdir/dev.
	This is a little bit hackish, but a least makes possible to run
	a chrooted named(8) in a jail.
>Fix:
Index: jail
===================================================================
RCS file: /home/ncvs/src/etc/rc.d/jail,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 jail
--- jail	30 May 2006 16:20:48 -0000	1.34
+++ jail	22 Sep 2006 13:16:47 -0000
@@ -154,6 +154,10 @@ set_sysctl()
 #
 jail_umount_fs()
 {
+	if checkyesno _mount; then
+		[ -f "${_fstab}" ] || warn "${_fstab} does not exist"
+		umount -a -F "${_fstab}" >/dev/null 2>&1
+	fi
 	if checkyesno _fdescfs; then
 		if [ -d "${_fdescdir}" ] ; then
 			umount -f ${_fdescdir} >/dev/null 2>&1
@@ -169,10 +173,6 @@ jail_umount_fs()
 			umount -f ${_procdir} >/dev/null 2>&1
 		fi
 	fi
-	if checkyesno _mount; then
-		[ -f "${_fstab}" ] || warn "${_fstab} does not exist"
-		umount -a -F "${_fstab}" >/dev/null 2>&1
-	fi
 }
 
 jail_start()
@@ -199,13 +199,6 @@ jail_start()
 		if [ -n "${_interface}" ]; then
 			ifconfig ${_interface} alias ${_ip} netmask 255.255.255.255
 		fi
-		if checkyesno _mount; then
-			info "Mounting fstab for jail ${_jail} (${_fstab})"
-			if [ ! -f "${_fstab}" ]; then
-				err 3 "$name: ${_fstab} does not exist"
-			fi
-			mount -a -F "${_fstab}"
-		fi
 		if checkyesno _devfs; then
 			# If devfs is already mounted here, skip it.
 			df -t devfs "${_devdir}" >/dev/null
@@ -239,6 +232,13 @@ jail_start()
 				mount -t procfs proc "${_procdir}"
 			fi
 		fi
+		if checkyesno _mount; then
+			info "Mounting fstab for jail ${_jail} (${_fstab})"
+			if [ ! -f "${_fstab}" ]; then
+				err 3 "$name: ${_fstab} does not exist"
+			fi
+			mount -a -F "${_fstab}"
+		fi
 		_tmp_jail=${_tmp_dir}/jail.$$
 		eval jail ${_flags} -i ${_rootdir} ${_hostname} \
 			${_ip} ${_exec_start} > ${_tmp_jail} 2>&1
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list