[pass] [PATCH] OSX: gpgtools, ramdisk and file extensions
mitzip
password-store at mitzip.com
Sat Apr 4 08:32:06 CEST 2015
1) Detect gpgtools in it's non-standard directory [upstream wontfix]
2) Add shredding for tmp files in /dev/shm as they could be swapped
3) Add shredding and ramdisk tmpdir for OSX
4) Detect OSX's shred command, srm.
5) Remove .gpg file extensions for PassFF in OSX (set final regex
match to 0 or 1 times)
---
src/password-store.sh | 32 ++++++++++++++++++++++++++++----
1 file changed, 28 insertions(+), 4 deletions(-)
diff --git a/src/password-store.sh b/src/password-store.sh
index 47f7ffa..8f67f00 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -10,7 +10,13 @@ GPG_OPTS=( "--quiet" "--yes" "--compress-algo=none"
"--no-encrypt-to" )
GPG="gpg"
export GPG_TTY="${GPG_TTY:-$(tty 2>/dev/null)}"
which gpg2 &>/dev/null && GPG="gpg2"
-[[ -n $GPG_AGENT_INFO || $GPG == "gpg2" ]] && GPG_OPTS+=( "--batch"
"--use-agent" )
+
+# Check if gpgtools is installed under OSX
+#
http://support.gpgtools.org/discussions/problems/9091-usrbingpgconf#comment_27431107
+# https://gpgtools.lighthouseapp.com/projects/66001/tickets/114
+[[ -f /usr/local/MacGPG2/bin/gpg2 ]] &&
GPG="/usr/local/MacGPG2/bin/gpg2"
+
+[[ -n $GPG_AGENT_INFO || "$GPG" != "gpg" ]] && GPG_OPTS+=( "--batch"
"--use-agent" )
PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
X_SELECTION="${PASSWORD_STORE_X_SELECTION:-clipboard}"
@@ -161,9 +167,23 @@ tmpdir() {
if [[ -d /dev/shm && -w /dev/shm && -x /dev/shm ]]; then
SECURE_TMPDIR="$(mktemp -d "/dev/shm/$template")"
remove_tmpfile() {
+ find "$SECURE_TMPDIR" -type f -exec $SHRED {} +
rm -rf "$SECURE_TMPDIR"
}
trap remove_tmpfile INT TERM EXIT
+ elif [[ "$OSTYPE" == "darwin"* && -n "$(which hdiutil)" && -n
"$(which diskutil)" ]]; then
+ NUMSECTORS=2000 # a sector is 512 bytes
+ DeviceName=$(hdiutil attach -nomount ram://$NUMSECTORS)
+ diskutil quiet eraseVolume HFS+ osxshm $DeviceName
+ diskutil quiet disableJournal $DeviceName
+ SECURE_TMPDIR="$(mktemp -d "/Volumes/osxshm/$template")"
+ remove_tmpfile() {
+ $SHRED -r $SECURE_TMPDIR
+ umount /Volumes/osxshm
+ diskutil quiet secureErase 2 $DeviceName
+ diskutil quiet eject $DeviceName
+ }
+ trap remove_tmpfile INT TERM EXIT
else
[[ $warn -eq 1 ]] && yesno "$(cat <<-_EOF
Your system does not have /dev/shm, which means that it may
@@ -183,7 +203,11 @@ tmpdir() {
}
GETOPT="getopt"
-SHRED="shred -f -z"
+if [[ "$OSTYPE" == "darwin"* && -n "$(which srm)" ]]; then
+ SHRED="srm -f -z"
+else
+ SHRED="shred -f -z"
+fi
source "$(dirname "$0")/platform/$(uname | cut -d _ -f 1 | tr
'[:upper:]' '[:lower:]').sh" 2>/dev/null # PLATFORM_FUNCTION_FILE
@@ -322,7 +346,7 @@ cmd_show() {
else
echo "${path%\/}"
fi
- tree -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed
's/\.gpg\(\x1B\[[0-9]\+m\)\{0,1\}\( ->\|$\)/\1\2/g' # remove .gpg at end
of line, but keep colors
+ tree -C -l --noreport "$PREFIX/$path" | tail -n +2 | sed
's/\.gpg\(\x1B\[[0-9]\+m\)\{0,1\}\( ->\|$\)\{0,1\}/\1\2/g' # remove .gpg
at end of line, but keep colors
elif [[ -z $path ]]; then
die "Error: password store is empty. Try \"pass init\"."
else
@@ -334,7 +358,7 @@ cmd_find() {
[[ -z "$@" ]] && die "Usage: $PROGRAM $COMMAND pass-names..."
IFS="," eval 'echo "Search Terms: $*"'
local terms="*$(printf '%s*|*' "$@")"
- tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs
--ignore-case "$PREFIX" | tail -n +2 | sed
's/\.gpg\(\x1B\[[0-9]\+m\)\{0,1\}\( ->\|$\)/\1\2/g'
+ tree -C -l --noreport -P "${terms%|*}" --prune --matchdirs
--ignore-case "$PREFIX" | tail -n +2 | sed
's/\.gpg\(\x1B\[[0-9]\+m\)\{0,1\}\( ->\|$\)\{0,1\}/\1\2/g' # remove .gpg
at end of line, but keep colors
}
cmd_grep() {
--
2.3.4
More information about the Password-Store
mailing list