summaryrefslogtreecommitdiff
path: root/plugins/gpg-agent
diff options
context:
space:
mode:
authorOlaf Conradi <olaf@conradi.org>2013-06-23 11:34:03 +0200
committerOlaf Conradi <olaf@conradi.org>2013-06-23 11:34:03 +0200
commit711e96b1a277b1d5b9771c2eec19fa34f796839b (patch)
tree89efe1a96b4c6e51c1c216398e683854dd810bf0 /plugins/gpg-agent
parent78dba754d183804079474aa2b1390bd96cb67583 (diff)
downloadzsh-711e96b1a277b1d5b9771c2eec19fa34f796839b.tar.gz
zsh-711e96b1a277b1d5b9771c2eec19fa34f796839b.tar.bz2
zsh-711e96b1a277b1d5b9771c2eec19fa34f796839b.zip
Prevent starting multiple gpg-agents
Don't just overwrite the environment. First check for a running agent (an x-session might have one running). If no agent is found, source the environment and check again using those settings. If again no agent is found, start a new instance.
Diffstat (limited to 'plugins/gpg-agent')
-rw-r--r--plugins/gpg-agent/gpg-agent.plugin.zsh26
1 files changed, 17 insertions, 9 deletions
diff --git a/plugins/gpg-agent/gpg-agent.plugin.zsh b/plugins/gpg-agent/gpg-agent.plugin.zsh
index 109af44c8..b82711872 100644
--- a/plugins/gpg-agent/gpg-agent.plugin.zsh
+++ b/plugins/gpg-agent/gpg-agent.plugin.zsh
@@ -14,16 +14,24 @@ function start_agent_withssh {
export SSH_AGENT_PID
}
-# source settings of old agent, if applicable
-if [ -f "${GPG_ENV}" ]; then
- . ${GPG_ENV} > /dev/null
-fi
+# check if another agent is running
+if ! gpg-connect-agent --quiet /bye > /dev/null 2> /dev/null; then
+ # source settings of old agent, if applicable
+ if [ -f "${GPG_ENV}" ]; then
+ . ${GPG_ENV} > /dev/null
+ fi
-# check for existing ssh-agent
-if ssh-add -l > /dev/null 2> /dev/null; then
- start_agent_nossh;
-else
- start_agent_withssh;
+ # check again if another agent is running using the newly sources settings
+ if ! gpg-connect-agent --quiet /bye > /dev/null 2> /dev/null; then
+ # check for existing ssh-agent
+ if ssh-add -l > /dev/null 2> /dev/null; then
+ # ssh-agent running, start gpg-agent without ssh support
+ start_agent_nossh;
+ else
+ # otherwise start gpg-agent with ssh support
+ start_agent_withssh;
+ fi
+ fi
fi
GPG_TTY=$(tty)