#!/bin/sh
#
# Script supporting a blog post example on encrypted
# memory disks with GBDE. This script mounts/umounts the
# encrypted memory disk as configured in the blog post. Use at
# your own risk. It is unsupported and released in the public
# domain.
#
# Andrew Donofrio 28-12-2005 v0.0.0.0.1
#

# USER EDIT---->

#Memory disk device unit number
MD_DEVICEUNITNUMBER="1"

#Path of file backing memory disk
MD_FILEPATH="/usr/home/emd/"

#Name of file backing memory disk
MD_FILENAME="md${MD_DEVICEUNITNUMBER}"

# Lock file path
GBDE_LOCKFILEPATH="/etc/gbde/"

# Lock file name
GBDE_LOCKFILENAME="md${MD_DEVICEUNITNUMBER}c.lock"

# Mount point for encrypted memory disk
MOUNT_POINT="/usr/home/emd/enc${MD_DEVICEUNITNUMBER}"

# <----

# Default return code
RC=1

# Unmount and detach
md_stop()
{
        RC=0
        echo -n "Unmounting ${MOUNT_POINT}... "
        umount ${MOUNT_POINT}
        if [ $? -eq 0 ]; then
                echo "OK"
        else
                RC=1
                echo " ERROR!"
        fi
        echo -n "Detaching GBDE from md${MD_DEVICEUNITNUMBER}c... "
        gbde detach md${MD_DEVICEUNITNUMBER}c
        if [ $? -eq 0 ]; then
                echo "OK"
        else
                RC=1
                echo " ERROR!"
        fi
        echo -n "Detaching memory disk md${MD_DEVICEUNITNUMBER} from ${MD_FILEPATH}${MD_FILENAME}... "
        mdconfig -d -u ${MD_DEVICEUNITNUMBER}
        if [ $? -eq 0 ]; then
                echo "OK"
        else
                RC=1
                echo " ERROR!"
        fi
}

# Attach and mount
md_start()
{
        echo -n "Attaching memory disk md${MD_DEVICEUNITNUMBER} to ${MD_FILEPATH}${MD_FILENAME}... "
        mdconfig -a -t vnode -f ${MD_FILEPATH}${MD_FILENAME} -u ${MD_DEVICEUNITNUMBER}
        if [ $? -eq 0 ]; then
                echo "OK"
                echo -n "Attaching GBDE from md${MD_DEVICEUNITNUMBER}c... "
                gbde attach md${MD_DEVICEUNITNUMBER}c -l ${GBDE_LOCKFILEPATH}${GBDE_LOCKFILENAME}
                if [ $? -eq 0 ]; then
                        echo "OK"
                        echo -n "Mounting ${MOUNT_POINT}... "
                        mount /dev/md${MD_DEVICEUNITNUMBER}c.bde ${MOUNT_POINT}
                        if [ $? -eq 0 ]; then
                                echo "OK"
                                RC=0
                        else
                                echo " ERROR!"
#                               md_stop
                        fi
                else
                        echo " ERROR!"
#                       md_stop
                fi
        else
                echo " ERROR!"
        fi
}

# Start or stop
case "$1" in

        start)
                echo "Starting md${MD_DEVICEUNITNUMBER}..."
                md_start
                echo "Done."
                ;;

        stop)
                echo "Stopping md${MD_DEVICEUNITNUMBER}..."
                md_stop
                echo "Done."
                ;;

        *)
                echo "Usage: $0 (start|stop)"
                ;;
esac

# Bye
exit $RC
