Skip to content

Commit

Permalink
Added contrib/gocryptfssh
Browse files Browse the repository at this point in the history
  • Loading branch information
zevv authored and rfjakob committed Jun 17, 2023
1 parent 8979cca commit 0f11c77
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions contrib/gocryptfssh
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/bin/sh

# This script mounts an gocryptfs filesystem, starts a shell in the mounted
# directory, and then unmounts the filesystem when the shell exits. This is an
# equivalent of the encfssh script by by David Rosenstrauch.

canonicalize() {
cd "$1" || return
pwd
}


case $1 in "" | -h | --help)
echo "Usage: gocryptfssh encrypted_directory [unencrypted-directory [-p]]"
echo " -p mount the unencrypted directory as public"
exit 1
;;
esac

enc_dir=$1
unenc_dir_given=false
mount_public=false
if [ ! -z "$2" ]; then
unenc_dir_given=true
unenc_dir=$2
for arg in "$@" ; do
if [ "$arg" = "-p" ]; then
mount_public=true
fi
done
[ -d "$unenc_dir" ] || mkdir -- "$unenc_dir"
else
unenc_dir=$(mktemp -d .XXXXXXXX)
fi

if [ ! -d "$enc_dir" ]; then
mkdir -- "$enc_dir"
fi

enc_dir=$(canonicalize "$enc_dir")
unenc_dir=$(canonicalize "$unenc_dir")

options=
if [ "$unenc_dir_given" = "true" ]; then
if [ "$mount_public" = "true" ]; then
options="-- -o allow_other"
fi
fi

# Attach the directory and change into it

if gocryptfs "$enc_dir" "$unenc_dir" $options; then :; else
echo "gocryptfs failed"
rmdir -- "$unenc_dir"
exit 1
fi
if ! [ "$unenc_dir_given" = "true" ]; then
chmod 700 "$unenc_dir"
fi
echo "Directory is $unenc_dir" >&2
cd "$unenc_dir" || exit

# Fall back to umount if fusermount is not available (e.g., on OS X)
fuse_umount() {
if command -v fusermount >/dev/null 2>&1; then
fusermount -u "$@"
else
umount "$@" # MacOS case
fi
}

# Honor the SHELL environment variable to select a shell to run
"$SHELL"; retval=$?

# ensure that this shell isn't itself holding the mounted directory open
# ...but avoid terminating on failure, *or* causing a shellcheck warning for
# failing to check exit status from cd.
cd / ||:

# if unmount fails, skip rmdir, always use exit status of failure
fuse_umount "$unenc_dir" || exit

if ! [ "$unenc_dir_given" = true ]; then
rmdir -- "$unenc_dir"
fi
exit "$retval"

0 comments on commit 0f11c77

Please sign in to comment.