aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.d/Makefile4
-rw-r--r--init.d/encswap.in46
2 files changed, 48 insertions, 2 deletions
diff --git a/init.d/Makefile b/init.d/Makefile
index a34ee90a..d192749e 100644
--- a/init.d/Makefile
+++ b/init.d/Makefile
@@ -22,8 +22,8 @@ NET_LO-FreeBSD= net.lo0
SRCS-FreeBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
rpcbind.in savecore.in syslogd.in
# These are FreeBSD specific
-SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in ipfw.in mixer.in nscd.in \
- powerd.in syscons.in
+SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
+ mixer.in nscd.in powerd.in syscons.in
NET_LO-Linux= net.lo
SRCS-Linux= devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
diff --git a/init.d/encswap.in b/init.d/encswap.in
new file mode 100644
index 00000000..a03fe581
--- /dev/null
+++ b/init.d/encswap.in
@@ -0,0 +1,46 @@
+#!@PREFIX@/sbin/runscript
+# Copyright 1992-2012 FreeBSD Project
+# Released under the 2-clause BSD license
+# $Header: $
+
+depend() {
+ before swap
+}
+
+start() {
+ while read device mountpoint type options rest ; do
+ case ":${device}:${type}:${options}" in
+ :#*)
+ continue
+ ;;
+ *.bde:swap:sw)
+ passphrase=`dd if=/dev/random count=1 2>/dev/null | md5 -q`
+ device="${device%.bde}"
+ gbde init "${device}" -P "${passphrase}" || return 1
+ gbde attach "${device}" -p "${passphrase}" || return 1
+ ;;
+ *.eli:swap:sw)
+ device="${device%.eli}"
+ geli onetime ${geli_swap_flags} "${device}" || return 1
+ ;;
+ esac
+ done < /etc/fstab
+}
+
+stop() {
+ while read device mountpoint type options rest ; do
+ case ":${device}:${type}:${options}" in
+ :#*)
+ continue
+ ;;
+ *.bde:swap:sw)
+ device="${device%.bde}"
+ gbde detach "${device}"
+ ;;
+ *.eli:swap:sw)
+ # Nothing here, because geli swap devices should be
+ # created with the auto-detach-on-last-close option.
+ ;;
+ esac
+ done < /etc/fstab
+}