tests: Use 'gpg-agent --allow-loopback-pinentry' if applicable.
[gpgme.git] / tests / start-stop-agent
1 #!/bin/sh
2 # Copyright (C) 2013 g10 Code GmbH
3 #
4 # This file is free software; as a special exception the author gives
5 # unlimited permission to copy and/or distribute it, with or without
6 # modifications, as long as this notice is preserved.  This file is
7 # distributed in the hope that it will be useful, but WITHOUT ANY
8 # WARRANTY, to the extent permitted by law; without even the implied
9 # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
11 if [ -z "$(command -v gpg-connect-agent)" ]; then
12    echo "gpg-agent not installed and thus not started" >&2
13    exit 0;
14 fi
15
16 GPG_AGENT_INFO=
17 export GPG_AGENT_INFO
18 GPG_AGENT=$(which gpg-agent)
19
20 token=$(echo "gpgme-$(pwd)" | tr ' ' '_')
21
22 if [ "$1" = "--stop" ]; then
23   if [ "$(gpg-connect-agent --no-autostart getval\ $token /bye 2>/dev/null | head -1)" \
24         != "D set" ]; then
25     echo "gpg-agent not running" >&2
26     exit 0
27   fi
28   echo "stopping gpg-agent " >&2
29   gpg-connect-agent KILLAGENT /bye >/dev/null 2>&1
30   exit 0
31 fi
32
33 if [ "$(gpg-connect-agent --no-autostart getval\ $token /bye 2>/dev/null | head -1)" \
34       = "D set" ]; then
35   echo "gpg-agent already running" >&2
36   exit 0
37 fi
38
39 echo "starting gpg-agent.." >&2
40
41 # GnuPG prior to 2.1.12 needs --allow-loopback-pinentry for the
42 # loopback entry to work.  Old versions do not understand this though,
43 # so we need to be careful.
44 if "$GPG_AGENT" --gpgconf-test --allow-loopback-pinentry &&
45    ! grep -q allow-loopback-pinentry "$GNUPGHOME/gpg-agent.conf"; then
46     echo allow-loopback-pinentry >> "$GNUPGHOME/gpg-agent.conf"
47 fi
48
49 gpg-connect-agent --agent-program="${GPG_AGENT}|--debug-quick-random" putval\ $token\ set /bye
50 if [ $? -ne 0 -o "$(gpg-connect-agent getval\ $token /bye 2>/dev/null | head -1)" \
51       != "D set" ]; then
52   echo "error starting gpg-agent" >&2
53   exit 1
54 fi
55 exit 0