4 # apt-key is a shell script, so relatively prune to be effected by 'crazy' things:
5 # confuses config parser as there exists no way of escaping " currently.
6 #TMPDIR="$(mktemp -d)/This is \"fü\$\$ing cràzy\", \$(man man | head -n1 | cut -d' ' -f 1)\$!"
7 # gpg doesn't like | in path names – documented e.g. in the man gpg2 --agent-program
8 #TMPDIR="$(mktemp -d)/This is fü\$\$ing cràzy, \$(man man | head -n1 | cut -d' ' -f 1)\$!"
9 TMPDIR_ADD
="This is fü\$\$ing cràzy, \$(apt -v)\$!"
11 TESTDIR
="$(readlink -f "$(dirname "$0")")"
12 . "$TESTDIR/framework
"
15 configarchitecture 'amd64'
17 # start from a clean plate again
19 rm -rf rootdir/etc/apt/trusted.gpg.d/ rootdir/etc/apt/trusted.gpg
20 mkdir rootdir/etc/apt/trusted.gpg.d/
23 echo 'APT::Key::ArchiveKeyring ".
/keys
/joesixpack.pub
";
24 APT::Key::RemovedKeys ".
/keys
/rexexpired.pub
";' > rootdir/etc/apt/apt.conf.d/aptkey.conf
28 ln -sf "${TMPWORKINGDIRECTORY}/keys
/joesixpack.pub
" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
30 msgtest 'Check that paths in list output are not' 'double-slashed'
31 aptkey list 2>&1 | grep -q '//' && msgfail || msgpass
33 msgtest 'Check that paths in finger output are not' 'double-slashed'
34 aptkey finger 2>&1 | grep -q '//' && msgfail || msgpass
35 testaptkeys 'Joe Sixpack'
37 testsuccessequal 'gpg: key DBAC8DAE: "Joe Sixpack
(APT Testcases Dummy
) <joe@example.org
>" not changed
38 gpg: Total number processed: 1
39 gpg: unchanged: 1' aptkey --fakeroot update
41 testaptkeys 'Joe Sixpack'
42 testfailure test -e rootdir/etc/apt/trusted.gpg
44 testsuccess aptkey --fakeroot add ./keys/rexexpired.pub
45 msgtest 'Check if trusted.gpg is created with permissions set to' '0644'
46 if [ "$(stat -c '%a' rootdir/etc/apt/trusted.gpg )" = '644' ]; then
52 testaptkeys 'Rex Expired' 'Joe Sixpack'
54 msgtest 'Check that Sixpack key can be' 'exported'
55 aptkey export 'Sixpack' > aptkey.export
56 aptkey --keyring rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg exportall > aptkey.exportall
57 testsuccess --nomsg cmp aptkey.export aptkey.exportall
58 testsuccess test -s aptkey.export
59 testsuccess test -s aptkey.exportall
61 msgtest 'Execute update again to trigger removal of' 'Rex Expired key'
62 testsuccess --nomsg aptkey --fakeroot update
64 testaptkeys 'Joe Sixpack'
66 msgtest "Try to remove a key
which exists
, but isn
't in the" 'forced keyring
'
67 testsuccess --nomsg aptkey --fakeroot --keyring rootdir/etc/apt/trusted.gpg del DBAC8DAE
69 testaptkeys 'Joe Sixpack
'
71 testsuccess aptkey --fakeroot del DBAC8DAE
74 msgtest 'Test key removal with
' 'lowercase key ID
' #keylength somewhere between 8byte and short
76 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
77 testsuccess --nomsg aptkey --fakeroot del d141dbac8dae
80 msgtest 'Test key removal with
' 'single key
in real
file'
82 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
83 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
85 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
86 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
88 msgtest 'Test key removal with
' 'long key ID
'
90 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
91 testsuccess --nomsg aptkey --fakeroot del 5A90D141DBAC8DAE
93 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
94 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
96 msgtest 'Test key removal with
' 'fingerprint
'
98 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
99 testsuccess --nomsg aptkey --fakeroot del 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
100 testempty aptkey list
101 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
102 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
104 msgtest 'Test key removal with
' 'single key
in softlink
'
106 ln -s "$(readlink -f ./keys/joesixpack.pub)" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
107 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
108 testempty aptkey list
109 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
110 testsuccess test -L rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
113 testsuccess aptkey --fakeroot add ./keys/joesixpack.pub
114 ln -sf "$(readlink -f ./keys/marvinparanoid.pub)" "./keys/marvin paránöid.pub"
115 testsuccess aptkey --fakeroot add "./keys/marvin paránöid.pub"
116 testaptkeys 'Joe Sixpack
' 'Marvin Paranoid
'
117 cp -a rootdir/etc/apt/trusted.gpg keys/testcase-multikey.pub # store for reuse
119 msgtest 'Test key removal with
' 'multi key
in real
file'
121 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
122 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
123 testaptkeys 'Marvin Paranoid
'
124 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
126 msgtest 'Test key removal with
' 'multi key
in softlink
'
128 ln -s "$(readlink -f ./keys/testcase-multikey.pub)" rootdir/etc/apt/trusted.gpg.d/multikey.gpg
129 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
130 testaptkeys 'Marvin Paranoid
'
131 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
132 testfailure test -L rootdir/etc/apt/trusted.gpg.d/multikey.gpg
133 testsuccess test -L rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
135 msgtest 'Test key removal with
' 'multiple files including key
'
137 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
138 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
139 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
140 testaptkeys 'Marvin Paranoid
'
141 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
142 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
143 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
146 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
147 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
148 testaptkeys 'Joe Sixpack
' 'Joe Sixpack
' 'Marvin Paranoid
'
149 msgtest 'Test merge
-back of
' 'added keys
'
150 testsuccess --nomsg aptkey adv --batch --yes --import keys/rexexpired.pub
151 testaptkeys 'Rex Expired
' 'Joe Sixpack
' 'Joe Sixpack
' 'Marvin Paranoid
'
153 msgtest 'Test merge
-back of
' 'removed keys
'
154 testsuccess --nomsg aptkey adv --batch --yes --delete-keys 27CE74F9
155 testaptkeys 'Joe Sixpack
' 'Joe Sixpack
' 'Marvin Paranoid
'
157 msgtest 'Test merge
-back of
' 'removed duplicate keys
'
158 testsuccess --nomsg aptkey adv --batch --yes --delete-keys DBAC8DAE
159 testaptkeys 'Marvin Paranoid
'
162 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
163 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
164 msgtest 'Test signing a
file' 'with a key
'
165 echo 'Verify me. This is my signature.
' > signature
166 testsuccess --nomsg aptkey --quiet --keyring keys/marvinparanoid.pub --secret-keyring keys/marvinparanoid.sec --readonly \
167 adv --batch --yes --default-key 'Marvin
' --armor --detach-sign --sign --output signature.gpg signature
168 testsuccess test -s signature.gpg -a -s signature
171 for GPGV in '' 'gpgv
' 'gpgv2
'; do
172 echo "APT::Key::GPGVCommand \"$GPGV\";" > rootdir/etc/apt/apt.conf.d/00gpgvcmd
174 msgtest 'Test verify a
file' 'with all keys
'
175 testsuccess --nomsg aptkey --quiet --readonly verify signature.gpg signature
177 msgtest 'Test verify a
file' 'with good keyring
'
178 testsuccess --nomsg aptkey --quiet --readonly --keyring keys/testcase-multikey.pub verify signature.gpg signature
180 msgtest 'Test fail verify a
file' 'with bad keyring
'
181 testfailure --nomsg aptkey --quiet --readonly --keyring keys/joesixpack.pub verify signature.gpg signature
183 msgtest 'Test fail verify a
file' 'with non
-existing keyring
'
184 testfailure --nomsg aptkey --quiet --readonly --keyring keys/does-not-exist.pub verify signature.gpg signature
185 testfailure test -e keys/does-not-exist.pub
187 # note: this isn't how apts gpgv method implements keyid
for verify
188 msgtest
'Test verify a file' 'with good keyid'
189 testsuccess
--nomsg aptkey
--quiet --readonly --keyid 'Paranoid' verify signature.gpg signature
191 msgtest
'Test fail verify a file' 'with bad keyid'
192 testfailure
--nomsg aptkey
--quiet --readonly --keyid 'Sixpack' verify signature.gpg signature
194 msgtest
'Test fail verify a file' 'with non-existing keyid'
195 testfailure
--nomsg aptkey
--quiet --readonly --keyid 'Kalnischkies' verify signature.gpg signature
197 msgtest
'Test verify fails on' 'bad file'
198 echo 'lalalalala' > signature2
199 testfailure
--nomsg aptkey
--quiet --readonly verify signature.gpg signature2
204 echo "APT::Key::GPGCommand \"$1\";" > rootdir
/etc
/apt
/apt.conf.d
/00gpgcmd
205 msgmsg
'Force tests to be run with' "$1"
206 testsuccess aptkey
--readonly adv
--version
207 cp rootdir
/tmp
/testsuccess.output aptkey.version
208 testsuccess
grep "^gpg (GnuPG) $2\." aptkey.version
211 # run with default (whatever this is)
214 setupgpgcommand
'gpg' '1'
216 setupgpgcommand
'gpg2' '2'