summaryrefslogtreecommitdiffstats
path: root/etc/rc.d/gbde
diff options
context:
space:
mode:
Diffstat (limited to 'etc/rc.d/gbde')
-rw-r--r--etc/rc.d/gbde92
1 files changed, 92 insertions, 0 deletions
diff --git a/etc/rc.d/gbde b/etc/rc.d/gbde
new file mode 100644
index 0000000..900afc7
--- /dev/null
+++ b/etc/rc.d/gbde
@@ -0,0 +1,92 @@
+#!/bin/sh
+#
+# This file, originally written by Garrett A. Wollman, is in the public
+# domain.
+#
+# $FreeBSD$
+#
+
+# PROVIDE: disks
+# KEYWORD: FreeBSD
+
+. /etc/rc.subr
+
+name="gbde"
+start_precmd="find_gbde_devices start"
+stop_precmd="find_gbde_devices stop"
+start_cmd="gbde_start"
+stop_cmd="gbde_stop"
+
+find_gbde_devices()
+{
+ case "${gbde_devices-auto}" in
+ [Aa][Uu][Tt][Oo])
+ gbde_devices="";;
+ *)
+ return 0;;
+ esac
+
+ case "$1" in
+ start) fstab="/etc/fstab";;
+ stop) fstab=$(mktemp /tmp/mtab.XXXXXX)
+ mount -p >${fstab}
+ esac
+
+ #
+ # We can't use "mount -p | while ..." because when a shell loop
+ # is the target of a pipe it executes in a subshell, and so can't
+ # modify variables in the script.
+ #
+ while read device mountpt type options dump pass; do
+ case "$device" in
+ *.bde)
+ # Ignore swap devices
+ case "$type" in
+ swap)
+ continue;;
+ esac
+
+ case "$options" in
+ *noauto*)
+ if checkyesno gbde_autoattach_all; then
+ gbde_devices="${gbde_devices} ${device}"
+ fi
+ ;;
+ *)
+ gbde_devices="${gbde_devices} ${device}"
+ ;;
+ esac
+ ;;
+ esac
+ done <${fstab}
+
+ case "$1" in
+ stop) rm -f ${fstab};;
+ esac
+
+ return 0
+}
+
+gbde_start()
+{
+ for device in $gbde_devices; do
+ parentdev=${device%.bde}
+ parent=${parentdev#/dev/}
+ eval "lock=\${gbde_lock_${parent}-\"/etc/${parent}.lock\"}"
+ if [ -e $lock ]; then
+ echo "Configuring Disk Encryption for ${device}."
+ gbde attach ${parentdev} -l ${lock}
+ fi
+ done
+}
+
+gbde_stop()
+{
+ for device in $gbde_devices; do
+ umount ${device}
+ gbde detach ${device%.bde}
+ done
+}
+
+load_rc_config $name
+run_rc_command "$1"
OpenPOWER on IntegriCloud