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
' 'different key specs
'
90 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
91 cp -a keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
92 testsuccess --nomsg aptkey --fakeroot del 0xDBAC8DAE 528144E2
94 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
95 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
96 testfailure test -e rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg
97 testsuccess cmp keys/marvinparanoid.pub rootdir/etc/apt/trusted.gpg.d/marvinparanoid.gpg~
99 msgtest 'Test key removal with
' 'long key ID
'
101 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
102 testsuccess --nomsg aptkey --fakeroot del 5A90D141DBAC8DAE
103 testempty aptkey list
104 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
105 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
107 msgtest 'Test key removal with
' 'fingerprint
'
109 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
110 testsuccess --nomsg aptkey --fakeroot del 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
111 testempty aptkey list
112 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
113 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
115 msgtest 'Test key removal with
' 'single key
in softlink
'
117 ln -s "$(readlink -f ./keys/joesixpack.pub)" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
118 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
119 testempty aptkey list
120 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
121 testsuccess test -L rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
124 testsuccess aptkey --fakeroot add ./keys/joesixpack.pub
125 ln -sf "$(readlink -f ./keys/marvinparanoid.pub)" "./keys/marvin paránöid.pub"
126 testsuccess aptkey --fakeroot add "./keys/marvin paránöid.pub"
127 testaptkeys 'Joe Sixpack
' 'Marvin Paranoid
'
128 cp -a rootdir/etc/apt/trusted.gpg keys/testcase-multikey.pub # store for reuse
130 msgtest 'Test key removal with
' 'multi key
in real
file'
132 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
133 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
134 testaptkeys 'Marvin Paranoid
'
135 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
137 msgtest 'Test key removal with
' 'multi key
in softlink
'
139 ln -s "$(readlink -f ./keys/testcase-multikey.pub)" rootdir/etc/apt/trusted.gpg.d/multikey.gpg
140 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
141 testaptkeys 'Marvin Paranoid
'
142 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
143 testfailure test -L rootdir/etc/apt/trusted.gpg.d/multikey.gpg
144 testsuccess test -L rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
146 msgtest 'Test key removal with
' 'multiple files including key
'
148 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
149 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
150 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
151 testaptkeys 'Marvin Paranoid
'
152 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
153 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
154 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
157 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
158 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
159 testaptkeys 'Joe Sixpack
' 'Joe Sixpack
' 'Marvin Paranoid
'
160 msgtest 'Test merge
-back of
' 'added keys
'
161 testsuccess --nomsg aptkey adv --batch --yes --import keys/rexexpired.pub
162 testaptkeys 'Rex Expired
' 'Joe Sixpack
' 'Joe Sixpack
' 'Marvin Paranoid
'
164 msgtest 'Test merge
-back of
' 'removed keys
'
165 testsuccess --nomsg aptkey adv --batch --yes --delete-keys 27CE74F9
166 testaptkeys 'Joe Sixpack
' 'Joe Sixpack
' 'Marvin Paranoid
'
168 msgtest 'Test merge
-back of
' 'removed duplicate keys
'
169 testsuccess --nomsg aptkey adv --batch --yes --delete-keys DBAC8DAE
170 testaptkeys 'Marvin Paranoid
'
173 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
174 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
175 msgtest 'Test signing a
file' 'with a key
'
176 echo 'Verify me. This is my signature.
' > signature
177 testsuccess --nomsg aptkey --quiet --keyring keys/marvinparanoid.pub --secret-keyring keys/marvinparanoid.sec --readonly \
178 adv --batch --yes --default-key 'Marvin
' --armor --detach-sign --sign --output signature.gpg signature
179 testsuccess test -s signature.gpg -a -s signature
182 for GPGV in '' 'gpgv
' 'gpgv2
'; do
183 echo "APT::Key::GPGVCommand \"$GPGV\";" > rootdir/etc/apt/apt.conf.d/00gpgvcmd
185 msgtest 'Test verify a
file' 'with all keys
'
186 testsuccess --nomsg aptkey --quiet --readonly verify signature.gpg signature
188 msgtest 'Test verify a
file' 'with good keyring
'
189 testsuccess --nomsg aptkey --quiet --readonly --keyring keys/testcase-multikey.pub verify signature.gpg signature
191 msgtest 'Test fail verify a
file' 'with bad keyring
'
192 testfailure --nomsg aptkey --quiet --readonly --keyring keys/joesixpack.pub verify signature.gpg signature
194 msgtest 'Test fail verify a
file' 'with non
-existing keyring
'
195 testfailure --nomsg aptkey --quiet --readonly --keyring keys/does-not-exist.pub verify signature.gpg signature
196 testfailure test -e keys/does-not-exist.pub
198 # note: this isn't how apts gpgv method implements keyid
for verify
199 msgtest
'Test verify a file' 'with good keyid'
200 testsuccess
--nomsg aptkey
--quiet --readonly --keyid 'Paranoid' verify signature.gpg signature
202 msgtest
'Test fail verify a file' 'with bad keyid'
203 testfailure
--nomsg aptkey
--quiet --readonly --keyid 'Sixpack' verify signature.gpg signature
205 msgtest
'Test fail verify a file' 'with non-existing keyid'
206 testfailure
--nomsg aptkey
--quiet --readonly --keyid 'Kalnischkies' verify signature.gpg signature
208 msgtest
'Test verify fails on' 'bad file'
209 echo 'lalalalala' > signature2
210 testfailure
--nomsg aptkey
--quiet --readonly verify signature.gpg signature2
215 echo "APT::Key::GPGCommand \"$1\";" > rootdir
/etc
/apt
/apt.conf.d
/00gpgcmd
216 msgmsg
'Force tests to be run with' "$1"
217 testsuccess aptkey
--readonly adv
--version
218 cp rootdir
/tmp
/testsuccess.output aptkey.version
219 testsuccess
grep "^gpg (GnuPG) $2\." aptkey.version
222 # run with default (whatever this is)
225 setupgpgcommand
'gpg' '1'
227 setupgpgcommand
'gpg2' '2'