#!/bin/sh -e
# This script mounts a user's confidential private folder
#
# Original by Michael Halcrow, IBM
# Extracted to a stand-alone script by Dustin Kirkland <kirkland@canonical.com>
#
# This script:
#  * interactively prompts for a user's wrapping passphrase (defaults to their
#    login passphrase)
#  * checks it for validity
#  * unwraps a users mount passphrase with their supplied wrapping passphrase
#  * inserts the mount passphrase into the keyring
#  * and mounts a user's encrypted private folder

PRIVATE_DIR="Private"
WRAPPING_PASS="LOGIN"
PW_ATTEMPTS=3
MESSAGE="Enter your login passphrase: "

if [ -f $HOME/.ecryptfs/wrapping-independent ]; then
    # use a wrapping passphrase different from the login passphrase
    WRAPPING_PASS="INDEPENDENT"
    MESSAGE="Enter your wrapping passphrase: "
fi

WRAPPED_PASSPHRASE_FILE="$HOME/.ecryptfs/wrapped-passphrase"
MOUNT_PASSPHRASE_SIG_FILE="$HOME/.ecryptfs/$PRIVATE_DIR.sig"

# First, silently try to perform the mount, which would succeed if the appropriate
# key is available in the keyring
if /sbin/mount.ecryptfs_private >/dev/null 2>&1; then
    exit 0
fi

# Otherwise, interactively prompt for the user's password
if [ -f "$WRAPPED_PASSPHRASE_FILE" -a -f "$MOUNT_PASSPHRASE_SIG_FILE" ]; then
    tries=0
    stty_orig=`stty -g`
    while [ $tries -lt $PW_ATTEMPTS ]; do
        echo -n "$MESSAGE"
        stty -echo
        LOGINPASS=`head -n1`
        stty $stty_orig
        echo
        if printf "%s\0" "$LOGINPASS" | ecryptfs-insert-wrapped-passphrase-into-keyring "$WRAPPED_PASSPHRASE_FILE" - ; then
            break
        else
            echo "ERROR: Your passphrase is incorrect"
            tries=$(($tries + 1))
            continue
        fi
    done
    if [ $tries -ge $PW_ATTEMPTS ]; then
        echo "ERROR: Too many incorrect password attempts, exiting"
        exit 1
    fi
    /sbin/mount.ecryptfs_private
else
    echo "ERROR: Encrypted $PRIVATE_DIR is not setup properly"
    exit 1
fi
if grep -qs "$HOME/.Private $PWD ecryptfs " /proc/mounts 2>/dev/null; then
    echo
    echo "INFO: Your private directory has been mounted."
    echo "INFO: To see this change in your current shell:"
    echo "  cd $PWD"
    echo
fi
exit 0