While debugging a strange problem with pass I felt the need to log all output, including what gets sent to /dev/null
The attached patch uses a variable "DEBUG" as "sink". DEBUG=/tmp/devnull.log pass ... Will basically collect >/dev/null output into the specified file. PS: As for the original problem, it turned out to be an incompatibility of bash's exec -a on my current system. I don't yet know where the bug is. I'll open another thread if it turns out to be something that needs to be worked around in pass. Cheers, Renato
From 9bfc57de729bf529fae4fc032f54bc5ff04ceb36 Mon Sep 17 00:00:00 2001 From: Renato Alves <[email protected]> Date: Tue, 27 Dec 2016 22:49:19 +0100 Subject: [PATCH] Redirects to /dev/null now go via $DEBUG which defaults to /dev/null This allows debuging any error messages that may be silenced to /dev/null by calling pass as: DEBUG=/tmp/devnull.log pass ... --- src/password-store.sh | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/password-store.sh b/src/password-store.sh index a5a8002..69295f0 100755 --- a/src/password-store.sh +++ b/src/password-store.sh @@ -6,10 +6,11 @@ umask "${PASSWORD_STORE_UMASK:-077}" set -o pipefail +DEBUG="${DEBUG:-/dev/null}" GPG_OPTS=( $PASSWORD_STORE_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" +export GPG_TTY="${GPG_TTY:-$(tty 2>>"$DEBUG")}" +which gpg2 &>>"$DEBUG" && GPG="gpg2" [[ -n $GPG_AGENT_INFO || $GPG == "gpg2" ]] && GPG_OPTS+=( "--batch" "--use-agent" ) PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}" @@ -52,7 +53,7 @@ die() { verify_file() { [[ -n $PASSWORD_STORE_SIGNING_KEY ]] || return 0 [[ -f $1.sig ]] || die "Signature for $1 does not exist." - local fingerprints="$(gpg $PASSWORD_STORE_GPG_OPTS --verify --status-fd=1 "$1.sig" "$1" 2>/dev/null | sed -n 's/\[GNUPG:\] VALIDSIG \([A-F0-9]\{40\}\) .* \([A-F0-9]\{40\}\)$/\1\n\2/p')" + local fingerprints="$(gpg $PASSWORD_STORE_GPG_OPTS --verify --status-fd=1 "$1.sig" "$1" 2>>"$DEBUG" | sed -n 's/\[GNUPG:\] VALIDSIG \([A-F0-9]\{40\}\) .* \([A-F0-9]\{40\}\)$/\1\n\2/p')" local fingerprint found=0 for fingerprint in $PASSWORD_STORE_SIGNING_KEY; do [[ $fingerprint =~ ^[A-F0-9]{40}$ ]] || continue @@ -149,8 +150,8 @@ clip() { # variable. Specifically, it cannot store nulls nor (non-trivally) store # trailing new lines. local sleep_argv0="password store sleep on display $DISPLAY" - pkill -f "^$sleep_argv0" 2>/dev/null && sleep 0.5 - local before="$(xclip -o -selection "$X_SELECTION" 2>/dev/null | base64)" + pkill -f "^$sleep_argv0" 2>>"$DEBUG" && sleep 0.5 + local before="$(xclip -o -selection "$X_SELECTION" 2>>"$DEBUG" | base64)" echo -n "$1" | xclip -selection "$X_SELECTION" || die "Error: Could not copy data to the clipboard" ( ( exec -a "$sleep_argv0" sleep "$CLIP_TIME" ) @@ -164,10 +165,10 @@ clip() { # # Clipboard managers frequently write their history out in plaintext, # so we axe it here: - qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>/dev/null + qdbus org.kde.klipper /klipper org.kde.klipper.klipper.clearClipboardHistory &>>"$DEBUG" echo "$before" | base64 -d | xclip -selection "$X_SELECTION" - ) 2>/dev/null & disown + ) 2>>"$DEBUG" & disown echo "Copied $2 to clipboard. Will clear in $CLIP_TIME seconds." } tmpdir() { @@ -202,7 +203,7 @@ tmpdir() { GETOPT="getopt" SHRED="shred -f -z" -source "$(dirname "$0")/platform/$(uname | cut -d _ -f 1 | tr '[:upper:]' '[:lower:]').sh" 2>/dev/null # PLATFORM_FUNCTION_FILE +source "$(dirname "$0")/platform/$(uname | cut -d _ -f 1 | tr '[:upper:]' '[:lower:]').sh" 2>>"$DEBUG" # PLATFORM_FUNCTION_FILE # # END platform definable @@ -297,7 +298,7 @@ cmd_init() { git rm -qr "$gpg_id" git_commit "Deinitialize ${gpg_id}${id_path:+ ($id_path)}." fi - rmdir -p "${gpg_id%/*}" 2>/dev/null + rmdir -p "${gpg_id%/*}" 2>>"$DEBUG" else mkdir -v -p "$PREFIX/$id_path" printf "%s\n" "$@" > "$gpg_id" @@ -310,7 +311,7 @@ cmd_init() { signing_keys+=( --default-key $key ) done gpg "${GPG_OPTS[@]}" "${signing_keys[@]}" --detach-sign "$gpg_id" || die "Could not sign .gpg_id." - key="$(gpg --verify --status-fd=1 "$gpg_id.sig" "$gpg_id" 2>/dev/null | sed -n 's/\[GNUPG:\] VALIDSIG [A-F0-9]\{40\} .* \([A-F0-9]\{40\}\)$/\1/p')" + key="$(gpg --verify --status-fd=1 "$gpg_id.sig" "$gpg_id" 2>>"$DEBUG" | sed -n 's/\[GNUPG:\] VALIDSIG [A-F0-9]\{40\} .* \([A-F0-9]\{40\}\)$/\1/p')" [[ -n $key ]] || die "Signing of .gpg_id unsuccessful." git_add_file "$gpg_id.sig" "Signing new GPG id with ${key//[$IFS]/,}." fi @@ -449,7 +450,7 @@ cmd_edit() { fi ${EDITOR:-vi} "$tmp_file" [[ -f $tmp_file ]] || die "New password not saved." - $GPG -d -o - "${GPG_OPTS[@]}" "$passfile" 2>/dev/null | diff - "$tmp_file" &>/dev/null && die "Password unchanged." + $GPG -d -o - "${GPG_OPTS[@]}" "$passfile" 2>>"$DEBUG" | diff - "$tmp_file" &>>"$DEBUG" && die "Password unchanged." while ! $GPG -e "${GPG_RECIPIENT_ARGS[@]}" -o "$passfile" "${GPG_OPTS[@]}" "$tmp_file"; do yesno "GPG encryption failed. Would you like to try again?" done @@ -530,7 +531,7 @@ cmd_delete() { git rm -qr "$passfile" git_commit "Remove $path from store." fi - rmdir -p "${passfile%/*}" 2>/dev/null + rmdir -p "${passfile%/*}" 2>>"$DEBUG" } cmd_copy_move() { @@ -571,7 +572,7 @@ cmd_copy_move() { git rm -qr "$old_path" git_add_file "$new_path" "Rename ${1} to ${2}." fi - rmdir -p "$old_dir" 2>/dev/null + rmdir -p "$old_dir" 2>>"$DEBUG" else cp $interactive -r -v "$old_path" "$new_path" || exit 1 [[ -e "$new_path" ]] && reencrypt_path "$new_path" -- 2.10.0
_______________________________________________ Password-Store mailing list [email protected] https://lists.zx2c4.com/mailman/listinfo/password-store
