aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/tests/start-stop-agent
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/tests/start-stop-agent')
-rwxr-xr-xlang/python/tests/start-stop-agent69
1 files changed, 69 insertions, 0 deletions
diff --git a/lang/python/tests/start-stop-agent b/lang/python/tests/start-stop-agent
new file mode 100755
index 00000000..9b08b55b
--- /dev/null
+++ b/lang/python/tests/start-stop-agent
@@ -0,0 +1,69 @@
+#!/bin/sh
+# Copyright (C) 2013 g10 Code GmbH
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved. This file is
+# distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY, to the extent permitted by law; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+if [ -z "$(command -v gpg-connect-agent)" ]; then
+ echo "gpg-agent not installed and thus not started" >&2
+ exit 0;
+fi
+
+GPG_AGENT_INFO=
+export GPG_AGENT_INFO
+GPG_AGENT=$(which gpg-agent)
+
+token=$(echo "gpgme-$(pwd)" | tr ' ' '_')
+
+if [ "$1" = "--stop" ]; then
+ if [ "$(gpg-connect-agent --no-autostart getval\ $token /bye 2>/dev/null | head -1)" \
+ != "D set" ]; then
+ echo "gpg-agent not running" >&2
+ exit 0
+ fi
+ echo "stopping gpg-agent " >&2
+ gpg-connect-agent KILLAGENT /bye >/dev/null 2>&1
+ exit 0
+fi
+
+# Update 'agent-program' in the configuration files to make sure we
+# will always start exactly this agent again if we ever need to.
+for F in gpg.conf gpgsm.conf
+do
+ if test -f "$GNUPGHOME/$F"
+ then
+ cat "$GNUPGHOME/$F" > "$GNUPGHOME/$F~"
+ sed -e "s#^agent-program.*#agent-program ${GPG_AGENT}|--debug-quick-random#" \
+ >"$GNUPGHOME/$F" <"$GNUPGHOME/$F~"
+ rm -f "$GNUPGHOME/$F~"
+ fi
+done
+
+if [ "$(gpg-connect-agent --no-autostart getval\ $token /bye 2>/dev/null | head -1)" \
+ = "D set" ]; then
+ echo "gpg-agent already running" >&2
+ exit 0
+fi
+
+echo "starting gpg-agent.." >&2
+
+# GnuPG prior to 2.1.12 needs --allow-loopback-pinentry for the
+# loopback entry to work. Old versions do not understand this though,
+# so we need to be careful.
+if "$GPG_AGENT" --gpgconf-test --allow-loopback-pinentry &&
+ test -f "$GNUPGHOME/gpg-agent.conf" &&
+ ! grep -q allow-loopback-pinentry "$GNUPGHOME/gpg-agent.conf"; then
+ echo allow-loopback-pinentry >> "$GNUPGHOME/gpg-agent.conf"
+fi
+
+gpg-connect-agent --agent-program="${GPG_AGENT}|--debug-quick-random" putval\ $token\ set /bye
+if [ $? -ne 0 -o "$(gpg-connect-agent getval\ $token /bye 2>/dev/null | head -1)" \
+ != "D set" ]; then
+ echo "error starting gpg-agent" >&2
+ exit 1
+fi
+exit 0