Browse Source

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.
Olaf Conradi 12 years ago
parent
commit
711e96b1a2
1 changed files with 17 additions and 9 deletions
  1. 17 9
      plugins/gpg-agent/gpg-agent.plugin.zsh

+ 17 - 9
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)