tests: Fix distcheck.
[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 # Update 'agent-program' in the configuration files to make sure we
34 # will always start exactly this agent again if we ever need to.
35 for F in gpg.conf gpgsm.conf
36 do
37   if test -f "$GNUPGHOME/$F"
38   then
39       mv "$GNUPGHOME/$F" "$GNUPGHOME/$F~"
40       sed -e "s#^agent-program.*#agent-program ${GPG_AGENT}|--debug-quick-random#" \
41           >"$GNUPGHOME/$F" <"$GNUPGHOME/$F~"
42       rm "$GNUPGHOME/$F~"
43   fi
44 done
45
46 if [ "$(gpg-connect-agent --no-autostart getval\ $token /bye 2>/dev/null | head -1)" \
47       = "D set" ]; then
48   echo "gpg-agent already running" >&2
49   exit 0
50 fi
51
52 echo "starting gpg-agent.." >&2
53
54 # GnuPG prior to 2.1.12 needs --allow-loopback-pinentry for the
55 # loopback entry to work.  Old versions do not understand this though,
56 # so we need to be careful.
57 if "$GPG_AGENT" --gpgconf-test --allow-loopback-pinentry &&
58       test -f "$GNUPGHOME/gpg-agent.conf" &&
59       ! grep -q allow-loopback-pinentry "$GNUPGHOME/gpg-agent.conf"; then
60     echo allow-loopback-pinentry >> "$GNUPGHOME/gpg-agent.conf"
61 fi
62
63 gpg-connect-agent --agent-program="${GPG_AGENT}|--debug-quick-random" putval\ $token\ set /bye
64 if [ $? -ne 0 -o "$(gpg-connect-agent getval\ $token /bye 2>/dev/null | head -1)" \
65       != "D set" ]; then
66   echo "error starting gpg-agent" >&2
67   exit 1
68 fi
69 exit 0