diff bin/fjail @ 74:247d35f910ca

fjail datasets now recognized a "-u" command option to not automatically mount created datasets
author Franz Glasner <hg@dom66.de>
date Thu, 15 Aug 2019 15:58:24 +0200
parents 2e991a00035b
children 2e3ac70bdfc8
line wrap: on
line diff
--- a/bin/fjail	Thu Aug 15 15:31:28 2019 +0200
+++ b/bin/fjail	Thu Aug 15 15:58:24 2019 +0200
@@ -2,17 +2,20 @@
 # -*- indent-tabs-mode: nil; -*-
 # @(#)$HGid$
 
-set -e
+set -eu
 
 VERSION="@@VERSION@@"
 
 # Reset to standard umask
 umask 0022
 
+
 #
 # "datasets" -- create the ZFS dataset tree
 #
-# command_datasets parent-dataset child-dataset
+# command_datasets [ -u ] parent-dataset child-dataset
+#
+#    -u  do not automatically mount newly created datasets
 #
 command_datasets() {
     # parent ZFS dataset -- child ZFS dataset name
@@ -21,6 +24,23 @@
     local _pmp _get _dummy
     # full name of the dataset
     local _ds
+    # dynamic ZFS options
+    local _zfsopts
+
+    _zfsopts=""
+    while getopts "u" _opt ; do
+        case ${_opt} in
+            u)
+                # do not mount newly created datasets
+                _zfsopts="${_zfsopts} -u"
+                ;;
+            \?|:)
+                return 2;
+                ;;
+        esac
+    done
+    shift $((OPTIND-1))
+    OPTIND=1
 
     _pds="$1"
     if [ -z "${_pds}" ]; then
@@ -55,23 +75,24 @@
         echo "ERROR: dataset \`${_ds}' does already exist" >&2
         return 1
     fi
-    zfs create -o atime=off                                                                      "${_ds}"
-    zfs create -o sync=disabled -o setuid=off                                                    "${_ds}/tmp"
-    zfs create                                                                                   "${_ds}/usr"
-    zfs create                                                                                   "${_ds}/var"
-    zfs create -o exec=off -o setuid=off                                                         "${_ds}/var/audit"
-    zfs create -o exec=off -o setuid=off                                                         "${_ds}/var/cache"
-    zfs create -o exec=off -o setuid=off -o compression=off                                      "${_ds}/var/cache/pkg"
-    zfs create -o exec=off -o setuid=off -o compression=off                                      "${_ds}/var/crash"
-    zfs create -o exec=off -o setuid=off                                                         "${_ds}/var/db"
-    zfs create -o exec=on -o setuid=off                                                          "${_ds}/var/db/pkg"
-    zfs create -o readonly=on -o exec=off -o setuid=off                                          "${_ds}/var/empty"
-    zfs create -o exec=off -o setuid=off -o primarycache=metadata                                "${_ds}/var/log"
-    zfs create -o exec=off -o setuid=off -o atime=on                                             "${_ds}/var/mail"
-    zfs create -o sync=disabled -o exec=off -o setuid=off -o compression=off -o primarycache=all "${_ds}/var/run"
-    zfs create -o sync=disabled -o setuid=off                                                    "${_ds}/var/tmp"
+    zfs create ${_zfsopts} -o atime=off                                                                      "${_ds}"
+    zfs create ${_zfsopts} -o sync=disabled -o setuid=off                                                    "${_ds}/tmp"
+    zfs create ${_zfsopts}                                                                                   "${_ds}/usr"
+    zfs create ${_zfsopts}                                                                                   "${_ds}/var"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off                                                         "${_ds}/var/audit"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off                                                         "${_ds}/var/cache"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off -o compression=off                                      "${_ds}/var/cache/pkg"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off -o compression=off                                      "${_ds}/var/crash"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off                                                         "${_ds}/var/db"
+    zfs create ${_zfsopts} -o exec=on -o setuid=off                                                          "${_ds}/var/db/pkg"
+    zfs create ${_zfsopts} -o readonly=on -o exec=off -o setuid=off                                          "${_ds}/var/empty"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata                                "${_ds}/var/log"
+    zfs create ${_zfsopts} -o exec=off -o setuid=off -o atime=on                                             "${_ds}/var/mail"
+    zfs create ${_zfsopts} -o sync=disabled -o exec=off -o setuid=off -o compression=off -o primarycache=all "${_ds}/var/run"
+    zfs create ${_zfsopts} -o sync=disabled -o setuid=off                                                    "${_ds}/var/tmp"
 }
 
+
 #
 # "privs" -- adjust privileges
 #
@@ -97,6 +118,7 @@
     chmod 0775 "${_mp}/var/mail"
 }
 
+
 #
 # Global option handling
 #
@@ -129,9 +151,6 @@
     privs)
         command_privs "$@"
         ;;
-    test)
-        echo "TEST"
-        ;;
     *)
         echo "ERROR" >&2
         exit 2