cachedpass: Script to cache a password in gpg-agent
parent
10e5548513
commit
ef9b32fb1d
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
|
PROMPT='Password:'
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf '%s: key [description]\n' "${0##*/}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
escape() {
|
||||||
|
printf '%s' "${1}" | tr ' ' '+'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
key="${1}"
|
||||||
|
description="${2}"
|
||||||
|
|
||||||
|
if [ -z "${key}" ]; then
|
||||||
|
usage >&2
|
||||||
|
exit 2
|
||||||
|
elif [ "${key}" = '-h' ] || [ "${key}" = '--help' ]; then
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ -z "${description}" ]; then
|
||||||
|
description=$(printf 'Enter the password for %s' "${key}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
sleep .125
|
||||||
|
umask 0077
|
||||||
|
|
||||||
|
agentpipe=$(mktemp -u)
|
||||||
|
mkfifo ${agentpipe}
|
||||||
|
trap 'rm ${agentpipe}' EXIT
|
||||||
|
|
||||||
|
printf 'GET_PASSPHRASE --data cachedpass:%s X %s %s' \
|
||||||
|
"$(escape "${key}")" \
|
||||||
|
"${PROMPT}" \
|
||||||
|
"$(escape "${description}")" \
|
||||||
|
| gpg-connect-agent > ${agentpipe} &
|
||||||
|
while read msg args; do
|
||||||
|
case "${msg}" in
|
||||||
|
ERR)
|
||||||
|
printf '%s\n' "${args#* }" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
OK)
|
||||||
|
;;
|
||||||
|
D)
|
||||||
|
printf '%s' "${args}" | xclip -i -l 1 -sel clip
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf 'Unexpected response from gpg-agent: %s %s' \
|
||||||
|
"${msg}" "${args}" >&2
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
done < ${agentpipe}
|
Loading…
Reference in New Issue