#!/bin/sh ### TrueCrypt Mount wrapper ### This file is a part of `truecrypt-extra` ### ### (c) Andrew Sichevoi, http://thekondor.net ### Distributed in the terms of GNU GPL v3.0+ license ### ### The latest version is available on http://git.thekondor.net if [ -f /etc/default/truecrypt ]; then . /etc/default/truecrypt fi run_textual_truecrypt() { ${TRUECRYPT_BINARY} --text --non-interactive $@ 2>/dev/null } run_regular_truecrypt() { ${TRUECRYPT_BINARY} $@ } setup_defaults_if_not_available() { DEFAULT_USER_MOUNT_ROOT=/home/%username%/.mount/encrypted if [ -z "${USER_MOUNT_ROOT}" ]; then USER_MOUNT_ROOT=${DEFAULT_USER_MOUNT_ROOT} fi DEFAULT_TRUECRYPT_BINARY=/usr/bin/truecrypt if [ -z "${TRUECRYPT_BINARY}" ]; then TRUECRYPT_BINARY=${DEFAULT_TRUECRYPT_BINARY} fi DEFAULT_EXPLORE_MOUNTED_VOLUME=true if [ -z "${EXPLORE_MOUNTED_VOLUME}" ]; then EXPLORE_MOUNTED_VOLUME=${DEFAULT_EXPLORE_MOUNTED_VOLUME} fi DEFAULT_ERROR_REPORTING_CHANNEL='/bin/echo %error%' if [ -z "${ERROR_REPORTING_CHANNEL}" ]; then ERROR_REPORTING_CHANNEL=${DEFAULT_ERROR_REPORTING_CHANNEL} fi } check_if_mount_point_already_used() { _MOUNT_POINT_DIR=$1 _IS_LISTED_IN_TRUECRYPT=$(run_textual_truecrypt --list | grep "${_MOUNT_POINT_DIR}" -c) if [ 0 -eq $? -a ! 0 -eq ${_IS_LISTED_IN_TRUECRYPT} ]; then raise_error "Error: mount point '${_MOUNT_POINT_DIR}' is already used by truecrypt. It cannot be used right now." fi } check_if_truecrypt_available() { if [ ! -x "${TRUECRYPT_BINARY}" ]; then raise_error "Error: Truecrypt (${TRUECRYPT_BINARY}) is not available" fi } raise_error() { _ERROR_MESSAGE=$(/bin/echo -n "$@" | sed -e 's/\\/\\\\/g' | sed -e "s/\//::/g" | tr \" \') _ERROR_CMD=$(/bin/echo ${ERROR_REPORTING_CHANNEL} | sed -e "s/%error%/${_ERROR_MESSAGE}/g") eval "${_ERROR_CMD}" exit 1 } check_passed_arguments() { if [ 1 != $# ]; then raise_error "Usage: ${0} " fi } escape_mount_dir_name() { /bin/echo $@ | /usr/bin/tr "[:cntrl:][:space:][:punct:]" "_" } generate_mount_point_dir_name() { escape_mount_dir_name $1 } generate_mount_point() { _MOUNT_POINT_DIR=$(/bin/echo ${USER_MOUNT_ROOT}/$(generate_mount_point_dir_name $1)) _USERNAME_VAR=$(whoami) _MOUNT_POINT_DIR=$(/bin/echo ${_MOUNT_POINT_DIR} | /bin/sed -e s/%username%/${_USERNAME_VAR}/g) /bin/echo ${_MOUNT_POINT_DIR} } create_mount_point() { _MOUNT_POINT_DIR=$1 if [ ! -d "${_MOUNT_POINT_DIR}" ]; then /bin/mkdir -p ${_MOUNT_POINT_DIR} if [ ! 0 -eq $? ]; then raise_error "Error: failed to create ${_MOUNT_POINT_DIR}" fi fi } explore_mount_point() { if [ ${EXPLORE_MOUNTED_VOLUME} ]; then _MOUNT_POINT_DIR=${1} /usr/bin/xdg-open ${_MOUNT_POINT_DIR} fi } mount_tc_volume() { _TC_VOLUME=${1} _MOUNT_POINT_DIR=$(generate_mount_point ${_TC_VOLUME}) check_if_mount_point_already_used ${_MOUNT_POINT_DIR} create_mount_point ${_MOUNT_POINT_DIR} run_regular_truecrypt ${_TC_VOLUME} ${_MOUNT_POINT_DIR} if [ ! 0 -eq $? ]; then raise_error "Error: truecrypt execution error, code = ${?}" fi explore_mount_point ${_MOUNT_POINT_DIR} } check_passed_arguments $@ setup_defaults_if_not_available mount_tc_volume $1