[pass] [PATCH] See: "Bugfix for Mac's diskutil"

Caleb Marble cm at marblenix.com
Mon Jun 2 21:39:46 CEST 2014


With my previous commit I missed that `pass git status` also uses
mounted ramdisks, and needs to be safely removed there as well.
Therefore I moved the cleanup_tmp function to the beginning of
src/password-store.sh's helper functions. The caveat is that any locally
defined tmp_file's need to be passed to the function's arguments. The
intended use for this function is the command for `trap` definitions

I also added a new test to t0600 to account for `pass git status`
behavior.

This commit passes all tests. Further testing and comments appreciated.

---
 src/password-store.sh               |   21 ++++++++++++---------
 tests/t0600-darwin-test-diskutil.sh |    7 ++++++-
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/password-store.sh b/src/password-store.sh
index d8c052e..3ba3bdd 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -22,6 +22,16 @@ export GIT_WORK_TREE="${PASSWORD_STORE_GIT:-$PREFIX}"
 # BEGIN helper functions
 #
 
+shred_tmpfile() {
+	# If there is a local tmp_file var somewhere, be sure to pass it to
+	# shred_tmpfile() as an argument when you define a trap
+	tmp_file="$1"
+	$SHRED "$tmp_file"
+	if [[ $(uname) == Darwin ]]; then
+		cleanup_tmp
+	fi
+	rm -rf "$SECURE_TMPDIR" "$tmp_file"
+}
 git_add_file() {
 	[[ -d $GIT_DIR ]] || return
 	git add "$1" || return
@@ -413,14 +423,7 @@ cmd_edit() {
 
 	tmpdir #Defines $SECURE_TMPDIR
 	local tmp_file="$(TMPDIR="$SECURE_TMPDIR" mktemp -t "$template")"
-	eval "shred_tmpfile() {
-		$SHRED '$tmp_file'
-		if [[ $(uname) == Darwin ]]; then
-			cleanup_tmp
-		fi
-		rm -rf '$SECURE_TMPDIR' '$tmp_file'
-	}"
-	trap shred_tmpfile INT TERM EXIT
+	trap shred_tmpfile "$tmp_file" INT TERM EXIT
 
 
 	local action="Add"
@@ -570,7 +573,7 @@ cmd_git() {
 		git config --local diff.gpg.textconv "$GPG -d ${GPG_OPTS[*]}"
 	elif [[ -d $GIT_DIR ]]; then
 		tmpdir nowarn #Defines $SECURE_TMPDIR. We don't warn, because at most, this only copies encrypted files.
-		trap "rm -rf '$SECURE_TMPDIR'" INT TERM EXIT
+		trap shred_tmpfile INT TERM EXIT
 		export TMPDIR="$SECURE_TMPDIR"
 		git "$@"
 	else
diff --git a/tests/t0600-darwin-test-diskutil.sh b/tests/t0600-darwin-test-diskutil.sh
index 9c82e19..d43ee67 100755
--- a/tests/t0600-darwin-test-diskutil.sh
+++ b/tests/t0600-darwin-test-diskutil.sh
@@ -22,7 +22,7 @@ test_expect_success 'Setup initial key and git' '
 initial_disk_env=($(mounted_disks))
 
 # These two tests are copied from test-0100 and test-0200
-# The point is to create a situation where mounting a /dev/diskX is required.
+# The point is to create a situation where mounting a ramdisk is required.
 test_expect_success 'Test "insert" command' '
   "$PASS" init $KEY1 &&
   echo "Hello world" | "$PASS" insert -e cred1 &&
@@ -38,6 +38,11 @@ test_expect_success 'Test "edit" command' '
   [[ $("$PASS" show cred1) == "$FAKE_EDITOR_PASSWORD" ]]
 '
 
+# `pass git status` also uses mounted ramdisks
+test_expect_success 'Test "git" command' '
+  "$PASS" git status
+'
+
 end_disk_env=($(mounted_disks))
 
 # Simply test if the number of mounted disks is the same as when we began.
-- 
1.7.10.4



More information about the Password-Store mailing list