diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/integration/exploid-keyring-with-dupe-keys.pub | bin | 0 -> 3986 bytes | |||
-rw-r--r-- | test/integration/exploid-keyring-with-dupe-subkeys.pub | bin | 0 -> 2016 bytes | |||
-rwxr-xr-x | test/integration/skip-aptwebserver | 25 | ||||
-rwxr-xr-x | test/integration/test-apt-key-net-update | 95 | ||||
-rwxr-xr-x | test/integration/test-bug-666772-multiarch-arch-all-build-deps | 118 | ||||
-rwxr-xr-x | test/integration/test-kernel-helper-autoremove | 55 | ||||
-rw-r--r-- | test/integration/test-kernel-helper-autoremove.fake-dpkg | 13 | ||||
-rw-r--r-- | test/interactive-helper/aptwebserver.cc | 20 | ||||
-rw-r--r-- | test/interactive-helper/makefile | 2 |
9 files changed, 325 insertions, 3 deletions
diff --git a/test/integration/exploid-keyring-with-dupe-keys.pub b/test/integration/exploid-keyring-with-dupe-keys.pub Binary files differnew file mode 100644 index 000000000..642952a40 --- /dev/null +++ b/test/integration/exploid-keyring-with-dupe-keys.pub diff --git a/test/integration/exploid-keyring-with-dupe-subkeys.pub b/test/integration/exploid-keyring-with-dupe-subkeys.pub Binary files differnew file mode 100644 index 000000000..02d4e6ee8 --- /dev/null +++ b/test/integration/exploid-keyring-with-dupe-subkeys.pub diff --git a/test/integration/skip-aptwebserver b/test/integration/skip-aptwebserver new file mode 100755 index 000000000..0622941ce --- /dev/null +++ b/test/integration/skip-aptwebserver @@ -0,0 +1,25 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'apt' 'all' '1.0' 'stable' + +setupaptarchive +changetowebserver + +rm -rf rootdir/var/lib/apt/lists +aptget update -qq +testequal 'Hit http://localhost stable InRelease +Hit http://localhost stable/main Sources +Hit http://localhost stable/main amd64 Packages +Hit http://localhost stable/main Translation-en +Reading package lists...' aptget update + +mv rootdir/var/lib/apt/lists/localhost* rootdir/var/lib/apt/lists/partial +aptget update + diff --git a/test/integration/test-apt-key-net-update b/test/integration/test-apt-key-net-update new file mode 100755 index 000000000..d5205836f --- /dev/null +++ b/test/integration/test-apt-key-net-update @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +# mock +requires_root() { + return 0 +} + +# extract net_update() and import it +func=$( sed -n -e '/^add_keys_with_verify_against_master_keyring/,/^}/p' ${BUILDDIRECTORY}/apt-key ) +eval "$func" + +mkdir -p ./etc/apt +TRUSTEDFILE=./etc/apt/trusted.gpg +mkdir -p ./var/lib/apt/keyrings +TMP_KEYRING=./var/lib/apt/keyrings/maybe-import-keyring.gpg +GPG_CMD="gpg --ignore-time-conflict --no-options --no-default-keyring" +GPG="$GPG_CMD --keyring $TRUSTEDFILE" +MASTER_KEYRING=/usr/share/keyrings/ubuntu-master-keyring.gpg + + +msgtest "add_keys_with_verify_against_master_keyring" +if [ ! -e $MASTER_KEYRING ]; then + echo -n "No $MASTER_KEYRING found" + msgskip + exit 0 +fi + +# test bad keyring and ensure its not added (LP: #857472) +ADD_KEYRING=./keys/exploid-keyring-with-dupe-keys.pub +if add_keys_with_verify_against_master_keyring $ADD_KEYRING $MASTER_KEYRING; then + msgfail +else + msgpass +fi + +# ensure the keyring is still empty +gpg_out=$($GPG --list-keys) +msgtest "Test if keyring is empty" +if [ -n "" ]; then + msgfail +else + msgpass +fi + + +# test another possible attack vector using subkeys (LP: #1013128) +msgtest "add_keys_with_verify_against_master_keyring with subkey attack" +ADD_KEYRING=./keys/exploid-keyring-with-dupe-subkeys.pub +if add_keys_with_verify_against_master_keyring $ADD_KEYRING $MASTER_KEYRING; then + msgfail +else + msgpass +fi + +# ensure the keyring is still empty +gpg_out=$($GPG --list-keys) +msgtest "Test if keyring is empty" +if [ -n "" ]; then + msgfail +else + msgpass +fi + + +# test good keyring and ensure we get no errors +ADD_KEYRING=/usr/share/keyrings/ubuntu-archive-keyring.gpg +if add_keys_with_verify_against_master_keyring $ADD_KEYRING $MASTER_KEYRING; then + msgpass +else + msgfail +fi + +testequal './etc/apt/trusted.gpg +--------------------- +pub 1024D/437D05B5 2004-09-12 +uid Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com> +sub 2048g/79164387 2004-09-12 + +pub 1024D/FBB75451 2004-12-30 +uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com> + +pub 4096R/C0B21F32 2012-05-11 +uid Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com> + +pub 4096R/EFE21092 2012-05-11 +uid Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com> +' $GPG --list-keys + diff --git a/test/integration/test-bug-666772-multiarch-arch-all-build-deps b/test/integration/test-bug-666772-multiarch-arch-all-build-deps new file mode 100755 index 000000000..cfae1fef3 --- /dev/null +++ b/test/integration/test-bug-666772-multiarch-arch-all-build-deps @@ -0,0 +1,118 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'armhf' + +insertinstalledpackage 'build-essential' 'all' '11.5' + +insertpackage 'unstable' 'doxygen' 'all' '1.0' 'Depends: language-support, language-tool' +insertpackage 'unstable' 'libc6' 'amd64,armhf' '1.0' 'Multi-Arch: same' +insertpackage 'unstable' 'libc6-dev' 'amd64,armhf' '1.0' 'Depends: libc6 +Multi-Arch: same' +insertpackage 'unstable' 'language-support' 'amd64,armhf' '1.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'language-tool' 'amd64,armhf' '1.0' + +insertsource 'unstable' 'apt' 'any' '0.8.15' 'Build-Depends: doxygen, libc6-dev' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + doxygen language-support language-tool libc6 libc6-dev +0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. +Inst language-support (1.0 unstable [amd64]) +Inst language-tool (1.0 unstable [amd64]) +Inst doxygen (1.0 unstable [all]) +Inst libc6 (1.0 unstable [amd64]) +Inst libc6-dev (1.0 unstable [amd64]) +Conf language-support (1.0 unstable [amd64]) +Conf language-tool (1.0 unstable [amd64]) +Conf doxygen (1.0 unstable [all]) +Conf libc6 (1.0 unstable [amd64]) +Conf libc6-dev (1.0 unstable [amd64])' aptget build-dep apt -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + doxygen language-support language-tool libc6:armhf libc6-dev:armhf +0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. +Inst language-support (1.0 unstable [amd64]) +Inst language-tool (1.0 unstable [amd64]) +Inst doxygen (1.0 unstable [all]) +Inst libc6:armhf (1.0 unstable [armhf]) +Inst libc6-dev:armhf (1.0 unstable [armhf]) +Conf language-support (1.0 unstable [amd64]) +Conf language-tool (1.0 unstable [amd64]) +Conf doxygen (1.0 unstable [all]) +Conf libc6:armhf (1.0 unstable [armhf]) +Conf libc6-dev:armhf (1.0 unstable [armhf])' aptget build-dep apt -s -a armhf + +configarchitecture 'armhf' 'amd64' + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + doxygen language-support language-tool libc6 libc6-dev +0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. +Inst language-support (1.0 unstable [armhf]) +Inst language-tool (1.0 unstable [armhf]) +Inst doxygen (1.0 unstable [all]) +Inst libc6 (1.0 unstable [armhf]) +Inst libc6-dev (1.0 unstable [armhf]) +Conf language-support (1.0 unstable [armhf]) +Conf language-tool (1.0 unstable [armhf]) +Conf doxygen (1.0 unstable [all]) +Conf libc6 (1.0 unstable [armhf]) +Conf libc6-dev (1.0 unstable [armhf])' aptget build-dep apt -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + doxygen language-support language-tool libc6:amd64 libc6-dev:amd64 +0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded. +Inst language-support (1.0 unstable [armhf]) +Inst language-tool (1.0 unstable [armhf]) +Inst doxygen (1.0 unstable [all]) +Inst libc6:amd64 (1.0 unstable [amd64]) +Inst libc6-dev:amd64 (1.0 unstable [amd64]) +Conf language-support (1.0 unstable [armhf]) +Conf language-tool (1.0 unstable [armhf]) +Conf doxygen (1.0 unstable [all]) +Conf libc6:amd64 (1.0 unstable [amd64]) +Conf libc6-dev:amd64 (1.0 unstable [amd64])' aptget build-dep apt -s -a amd64 + +configarchitecture 'amd64' 'armhf' + +insertinstalledpackage 'language-support' 'armhf' '0.5' 'Multi-Arch: foreign' + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + doxygen language-tool libc6 libc6-dev +0 upgraded, 4 newly installed, 0 to remove and 1 not upgraded. +Inst language-tool (1.0 unstable [amd64]) +Inst doxygen (1.0 unstable [all]) +Inst libc6 (1.0 unstable [amd64]) +Inst libc6-dev (1.0 unstable [amd64]) +Conf language-tool (1.0 unstable [amd64]) +Conf doxygen (1.0 unstable [all]) +Conf libc6 (1.0 unstable [amd64]) +Conf libc6-dev (1.0 unstable [amd64])' aptget build-dep apt -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + doxygen language-tool libc6:armhf libc6-dev:armhf +0 upgraded, 4 newly installed, 0 to remove and 1 not upgraded. +Inst language-tool (1.0 unstable [amd64]) +Inst doxygen (1.0 unstable [all]) +Inst libc6:armhf (1.0 unstable [armhf]) +Inst libc6-dev:armhf (1.0 unstable [armhf]) +Conf language-tool (1.0 unstable [amd64]) +Conf doxygen (1.0 unstable [all]) +Conf libc6:armhf (1.0 unstable [armhf]) +Conf libc6-dev:armhf (1.0 unstable [armhf])' aptget build-dep apt -s -a armhf diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove new file mode 100755 index 000000000..ffcd3963a --- /dev/null +++ b/test/integration/test-kernel-helper-autoremove @@ -0,0 +1,55 @@ +#!/bin/sh + +set -e + +# setup testdir +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +TMPDIR=$(mktemp -d) +cd $TMPDIR +addtrap "cd /; rm -rf $TMPDIR" + +# create mock environment +mkdir apt.conf.d +cat > aptconfig.conf <<EOF +Dir::Etc::parts "$TMPDIR/apt.conf.d"; +Dir::bin::dpkg "$TMPDIR/fake-dpkg"; +EOF +APT_CONFIG=aptconfig.conf +export APT_CONFIG + +# install fake-dpkg into it +install -m755 $TESTDIR/test-kernel-helper-autoremove.fake-dpkg $TMPDIR/fake-dpkg + +# run the helper +sh ${TESTDIR}/../../debian/apt.auto-removal.sh + +msgtest 'Check that kernel autoremoval list is correctly created' +# and ensure its there, valid and version 10.0.0-1 is there too +test -e $TMPDIR/apt.conf.d/01autoremove-kernels && msgpass || msgfail + +msgtest 'Check that most recent kernel is saved from autoremoval' +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" && msgpass || msgfail + +# ... and also that the running kernel is excluded +msgtest 'Check that running kernel is saved from autoremoval' +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" && msgpass || msgfail + +# and that the old kernel is *not* excluded from autoremoval +msgtest 'Check that older kernels are not excluded from autoremoval' +apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic\.\*" && msgfail || msgpass + +msgtest "Check that the older kernel is retained when it's being installed" +sh ${TESTDIR}/../../debian/apt.auto-removal.sh 1.0.01-2-generic +test -e $TMPDIR/apt.conf.d/01autoremove-kernels +if ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic\.\*" \ + || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)\.\*" \ + || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic\.\*" +then + msgfail +else + msgpass +fi + +# done diff --git a/test/integration/test-kernel-helper-autoremove.fake-dpkg b/test/integration/test-kernel-helper-autoremove.fake-dpkg new file mode 100644 index 000000000..a365c5370 --- /dev/null +++ b/test/integration/test-kernel-helper-autoremove.fake-dpkg @@ -0,0 +1,13 @@ +#!/bin/sh +set -e + +if [ "$1" = "-l" ]; then + echo "ii linux-image-1.0.0-2-generic 1.0.01-2 amd64" + echo "ii linux-image-$(uname -r) not-used amd64" + echo "ii linux-image-10.0.0-1-generic 10.0.0.1-1 amd64" +elif [ "$1" = "--compare-versions" ]; then + dpkg "$1" "$2" "$3" "$4" +else + dpkg $@ +fi + diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index a8d191d0e..dc17d4991 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -341,6 +341,8 @@ bool parseFirstLine(int const client, std::string const &request, /*{{{*/ int main(int const argc, const char * argv[]) { CommandLine::Args Args[] = { + {0, "simulate-paywall", "aptwebserver::Simulate-Paywall", + CommandLine::Boolean}, {0, "port", "aptwebserver::port", CommandLine::HasArg}, {'c',"config-file",0,CommandLine::ConfigFile}, {'o',"option",0,CommandLine::ArbItem}, @@ -365,7 +367,9 @@ int main(int const argc, const char * argv[]) return 1; } + // get the port int const port = _config->FindI("aptwebserver::port", 8080); + bool const simulate_broken_server = _config->FindB("aptwebserver::Simulate-Paywall", false); // ensure that we accept all connections: v4 or v6 int const iponly = 0; @@ -422,8 +426,12 @@ int main(int const argc, const char * argv[]) } } - std::clog << "Serving ANY file on port: " << port << std::endl; - + if (simulate_broken_server) { + std::clog << "Simulating a broken web server that return nonsense " + "for all querries" << std::endl; + } else { + std::clog << "Serving ANY file on port: " << port << std::endl; + } listen(sock, 1); /*}}}*/ @@ -455,6 +463,14 @@ int main(int const argc, const char * argv[]) continue; } + if (simulate_broken_server == true) { + std::string data("ni ni ni\n"); + addDataHeaders(headers, data); + sendHead(client, 200, headers); + sendData(client, data); + continue; + } + // string replacements in the requested filename ::Configuration::Item const *Replaces = _config->Tree("aptwebserver::redirect::replace"); if (Replaces != NULL) diff --git a/test/interactive-helper/makefile b/test/interactive-helper/makefile index f43df97e3..74659cf12 100644 --- a/test/interactive-helper/makefile +++ b/test/interactive-helper/makefile @@ -39,7 +39,7 @@ include $(PROGRAM_H) #SOURCE = rpmver.cc #include $(PROGRAM_H) -# Program for testing udevcdrom +# very simple webserver for APT testing PROGRAM=aptwebserver SLIBS = -lapt-pkg LIB_MAKES = apt-pkg/makefile |