2013-05-01 02:53:56 +00:00
|
|
|
#
|
|
|
|
# Provides for an easier use of GPG by setting up gpg-agent.
|
|
|
|
#
|
|
|
|
# Authors:
|
|
|
|
# Sorin Ionescu <sorin.ionescu@gmail.com>
|
|
|
|
#
|
|
|
|
|
|
|
|
# Return if requirements are not found.
|
|
|
|
if (( ! $+commands[gpg-agent] )); then
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
2013-05-18 23:27:40 +00:00
|
|
|
# Set the default paths to gpg-agent files.
|
2014-11-22 03:37:11 +00:00
|
|
|
_gpg_agent_conf="${GNUPGHOME:-$HOME/.gnupg}/gpg-agent.conf"
|
2017-07-28 17:24:45 +00:00
|
|
|
_gpg_agent_env="${TMPDIR:-/tmp}/gpg-agent.env.$UID"
|
2013-05-01 02:53:56 +00:00
|
|
|
|
2017-11-10 20:23:37 +00:00
|
|
|
# Load environment variables from previous run
|
|
|
|
source "$_gpg_agent_env" 2> /dev/null
|
|
|
|
|
2013-05-01 02:53:56 +00:00
|
|
|
# Start gpg-agent if not started.
|
2014-11-27 21:19:13 +00:00
|
|
|
if [[ -z "$GPG_AGENT_INFO" && ! -S "${GNUPGHOME:-$HOME/.gnupg}/S.gpg-agent" ]]; then
|
2014-10-06 20:42:22 +00:00
|
|
|
# Start gpg-agent if not started.
|
2015-02-13 05:00:27 +00:00
|
|
|
if ! ps -U "$LOGNAME" -o pid,ucomm | grep -q -- "${${${(s.:.)GPG_AGENT_INFO}[2]}:--1} gpg-agent"; then
|
2014-10-06 20:42:22 +00:00
|
|
|
eval "$(gpg-agent --daemon | tee "$_gpg_agent_env")"
|
|
|
|
fi
|
2013-05-18 23:27:40 +00:00
|
|
|
fi
|
2013-05-01 02:53:56 +00:00
|
|
|
|
2013-05-18 23:27:40 +00:00
|
|
|
# Inform gpg-agent of the current TTY for user prompts.
|
2013-05-01 02:53:56 +00:00
|
|
|
export GPG_TTY="$(tty)"
|
2013-05-18 23:27:40 +00:00
|
|
|
|
|
|
|
# Integrate with the SSH module.
|
2016-02-11 12:35:09 +00:00
|
|
|
if grep '^enable-ssh-support' "$_gpg_agent_conf" &> /dev/null; then
|
2015-07-21 22:01:31 +00:00
|
|
|
# Load required functions.
|
|
|
|
autoload -Uz add-zsh-hook
|
|
|
|
|
2013-05-18 23:27:40 +00:00
|
|
|
# Override the ssh-agent environment file default path.
|
|
|
|
_ssh_agent_env="$_gpg_agent_env"
|
|
|
|
|
|
|
|
# Load the SSH module for additional processing.
|
|
|
|
pmodload 'ssh'
|
2014-11-27 03:19:26 +00:00
|
|
|
|
|
|
|
# Updates the GPG-Agent TTY before every command since SSH does not set it.
|
|
|
|
function _gpg-agent-update-tty {
|
|
|
|
gpg-connect-agent UPDATESTARTUPTTY /bye >/dev/null
|
|
|
|
}
|
|
|
|
add-zsh-hook preexec _gpg-agent-update-tty
|
2013-05-18 23:27:40 +00:00
|
|
|
fi
|
2013-05-01 02:53:56 +00:00
|
|
|
|
|
|
|
# Clean up.
|
2013-05-18 23:27:40 +00:00
|
|
|
unset _gpg_agent_{conf,env}
|
2013-05-01 02:53:56 +00:00
|
|
|
|
|
|
|
# Disable GUI prompts inside SSH.
|
|
|
|
if [[ -n "$SSH_CONNECTION" ]]; then
|
|
|
|
export PINENTRY_USER_DATA='USE_CURSES=1'
|
|
|
|
fi
|