浏览代码

Merge pull request #1904 from oohlaf/gpg-agent-fix

Prevent starting multiple gpg-agents
Robby Russell 11 年之前
父节点
当前提交
354211f5ac
共有 1 个文件被更改,包括 17 次插入9 次删除
  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
     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 sourced 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
 fi
 
 
 GPG_TTY=$(tty)
 GPG_TTY=$(tty)