123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- #!/bin/sh
- set -e
- TESTDIR="$(readlink -f "$(dirname "$0")")"
- . "$TESTDIR/framework"
- setupenvironment
- configarchitecture 'i386'
- confighashes 'MD5'
- export APT_DONT_SIGN=''
- insertpackage 'unstable' 'foo' 'i386' '1.0'
- insertsource 'unstable' 'foo' 'any' '1.0'
- setupaptarchive --no-update
- APTARCHIVE="$(readlink -f ./aptarchive)"
- testnopkg() {
- testnopackage "$@"
- testnosrcpackage "$@"
- }
- testbadpkg() {
- testempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*InRelease' -o -name '*Release.gpg'
- testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*Release'
- testnotempty apt show "$@"
- testnotempty apt showsrc "$@"
- testfailureequal "WARNING: The following packages cannot be authenticated!
- $*
- E: There were unauthenticated packages and -y was used without --allow-unauthenticated" aptget install -qq -y "$@"
- testfailureequal "WARNING: The following packages cannot be authenticated!
- $*
- E: Some packages could not be authenticated" aptget source -qq "$@"
- }
- testrun() {
- local TYPE="$1"
- local FILENAME="$2"
- shift 2
- local MANGLED="$(readlink -f ./rootdir)/var/lib/apt/lists/partial/$(echo "$FILENAME" | sed 's#/#_#g')"
- msgmsg "$TYPE contains only weak hashes"
- confighashes 'MD5'
- generatereleasefiles
- signreleasefiles
- preparetest
- if [ -z "$1" ]; then
- listcurrentlistsdirectory > lists.before
- testfailuremsg "W: No Hash entry in Release file ${MANGLED} which is considered strong enough for security purposes
- E: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
- N: Updating from such a repository can't be done securely, and is therefore disabled by default.
- N: See apt-secure(8) manpage for repository creation and user configuration details." apt update
- testfileequal lists.before "$(listcurrentlistsdirectory)"
- testnopkg 'foo'
- else
- testwarningmsg "W: No Hash entry in Release file ${MANGLED} which is considered strong enough for security purposes
- W: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
- N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
- N: See apt-secure(8) manpage for repository creation and user configuration details." apt update "$@"
- testbadpkg 'foo'
- fi
- msgmsg "$TYPE contains only weak hashes, but source allows weak"
- sed -i 's#^deb\(-src\)\? #deb\1 [allow-weak=yes] #' rootdir/etc/apt/sources.list.d/*
- genericprepare
- testwarningmsg "W: No Hash entry in Release file ${MANGLED} which is considered strong enough for security purposes
- W: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
- N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
- N: See apt-secure(8) manpage for repository creation and user configuration details." apt update "$@"
- testbadpkg 'foo'
- sed -i 's#^deb\(-src\)\? \[allow-weak=yes\] #deb\1 #' rootdir/etc/apt/sources.list.d/*
- msgmsg "$TYPE contains no hashes"
- generatereleasefiles
- sed -i -e '/^ / d' -e '/^MD5Sum:/ d' "$APTARCHIVE/dists/unstable/Release"
- signreleasefiles
- preparetest
- if [ -z "$1" ]; then
- listcurrentlistsdirectory > lists.before
- testfailuremsg "W: No Hash entry in Release file ${MANGLED}
- E: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
- N: Updating from such a repository can't be done securely, and is therefore disabled by default.
- N: See apt-secure(8) manpage for repository creation and user configuration details." apt update
- testfileequal lists.before "$(listcurrentlistsdirectory)"
- testnopkg 'foo'
- else
- testwarningmsg "W: No Hash entry in Release file ${MANGLED}
- W: The repository 'file:${APTARCHIVE} unstable $(basename "$FILENAME")' provides only weak security information.
- N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
- N: See apt-secure(8) manpage for repository creation and user configuration details." apt update "$@"
- testbadpkg 'foo'
- fi
- msgmsg "$TYPE contains only weak hashes for some files"
- confighashes 'MD5' 'SHA256'
- generatereleasefiles
- sed -i '/^ [0-9a-fA-Z]\{64\} .*Sources$/d' "$APTARCHIVE/dists/unstable/Release"
- signreleasefiles
- preparetest
- if [ -z "$1" ]; then
- testwarningmsg "W: Skipping acquire of configured file 'main/source/Sources' as repository 'file:${APTARCHIVE} unstable InRelease' provides only weak security information for it" apt update
- testnosrcpackage foo
- else
- rm -f rootdir/var/lib/apt/lists/partial/*
- testsuccess apt update "$@"
- testnotempty apt showsrc foo
- fi
- testsuccess apt show foo
- }
- genericprepare() {
- rm -rf rootdir/var/lib/apt/lists
- mkdir -p rootdir/var/lib/apt/lists/partial
- touch rootdir/var/lib/apt/lists/lock
- local RELEASEGPG="$(readlink -f ./rootdir)/var/lib/apt/lists/partial/$(echo "${APTARCHIVE}/dists/unstable/Release.gpg" | sed 's#/#_#g')"
- touch "$RELEASEGPG"
- chmod 644 "$RELEASEGPG"
- local INRELEASE="$(readlink -f ./rootdir)/var/lib/apt/lists/partial/$(echo "${APTARCHIVE}/dists/unstable/InRelease" | sed 's#/#_#g')"
- touch "$INRELEASE"
- chmod 644 "$INRELEASE"
- }
- preparetest() {
- rm -f "${APTARCHIVE}/dists/unstable/Release" "${APTARCHIVE}/dists/unstable/Release.gpg"
- genericprepare
- }
- testrun 'InRelease' "${APTARCHIVE}/dists/unstable/InRelease"
- testrun 'InRelease' "${APTARCHIVE}/dists/unstable/InRelease" --allow-weak-repositories -o APT::Get::List-Cleanup=0
- preparetest() {
- rm -f "${APTARCHIVE}/dists/unstable/InRelease"
- genericprepare
- }
- testrun 'Release+Release.gpg' "${APTARCHIVE}/dists/unstable/Release"
- testrun 'Release+Release.gpg' "${APTARCHIVE}/dists/unstable/Release" --allow-weak-repositories -o APT::Get::List-Cleanup=0
- preparetest() {
- rm -f "${APTARCHIVE}/dists/unstable/InRelease" "${APTARCHIVE}/dists/unstable/Release.gpg"
- genericprepare
- }
- msgmsg 'Moving between Release files with good and bad hashes'
- rm -rf rootdir/var/lib/apt/lists
- confighashes 'MD5'
- generatereleasefiles 'now - 7 days'
- signreleasefiles
- testfailure apt update
- testnopkg 'foo'
- testwarning apt update --allow-weak-repositories
- testbadpkg 'foo'
- confighashes 'MD5' 'SHA256'
- rm -rf aptarchive/dists
- insertpackage 'unstable' 'foo2' 'i386' '1.0'
- insertsource 'unstable' 'foo2' 'any' '1.0'
- setupaptarchive --no-update 'now - 5 days'
- testsuccess apt update
- testnopkg foo
- testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*InRelease' -o -name '*Release.gpg'
- testnotempty apt show foo2
- testnotempty apt showsrc foo2
- confighashes 'MD5'
- rm -rf aptarchive/dists
- insertpackage 'unstable' 'foo3' 'i386' '1.0'
- insertsource 'unstable' 'foo3' 'any' '1.0'
- setupaptarchive --no-update 'now - 3 days'
- testfailure apt update
- testnopkg foo
- testnopkg foo3
- testnotempty find rootdir/var/lib/apt/lists -maxdepth 1 -name '*InRelease' -o -name '*Release.gpg'
- testnotempty apt show foo2
- testnotempty apt showsrc foo2
- testwarning apt update --allow-weak-repositories
- testnopkg foo2
- testbadpkg foo3
- msgmsg 'Working with packages guarded only by weak hashes'
- confighashes 'MD5'
- rm -rf aptarchive/dists
- buildsimplenativepackage 'foo4' 'i386' '1' 'unstable'
- setupaptarchive --no-update
- testfailure apt update
- confighashes 'SHA256'
- generatereleasefiles 'now - 1 day'
- signreleasefiles
- testsuccess apt update
- cd downloaded
- testfailure apt download foo4
- cp ../rootdir/tmp/testfailure.output download.output
- testfailure grep 'Hash Sum mismatch' download.output
- testsuccess grep 'Insufficient information' download.output
- testsuccess apt install foo4 -s
- testfailure apt install foo4 -dy
- cp ../rootdir/tmp/testfailure.output install.output
- testfailure grep 'Hash Sum mismatch' install.output
- testsuccess grep 'Insufficient information' download.output
- testsuccess apt source foo4
- cp ../rootdir/tmp/testsuccess.output source.output
- testsuccess grep 'Skipping download of file' source.output
- testfailure test -e foo4_1.dsc
- testsuccess test -e foo4_1.tar.*
- cd ..
|