From 366021988e2c7a7a6ca29d4f6876bb1e6c8b181f Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 5 Jul 2016 20:04:27 +0200 Subject: don't change owner/perms/times through file:// symlinks If we have files in partial/ from a previous invocation or similar such those could be symlinks created by file:// sources. The code is expecting only real files through and happily changes owner, modification times and permission on the file the symlink points to which tend to be files we have no business in touching in this way. Permissions of symlinks shouldn't be changed, changing owner is usually pointless to, but just to be sure we pick the easy way out and use lchown, check for symlinks before chmod/utimes. Reported-By: Mattia Rizzolo on IRC (cherry picked from commit 3465138575e1fd0d5892d9b6be1ae232eb873460) --- test/integration/framework | 9 +++++++++ test/integration/test-apt-update-file | 6 +++++- test/integration/test-apt-update-ims | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/integration/framework b/test/integration/framework index ca0a3b5de..7fdf21bed 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -1862,6 +1862,11 @@ pause() { read IGNORE } +logcurrentarchivedirectory() { + find "${TMPWORKINGDIRECTORY}/aptarchive/dists" -type f | while read line; do + stat --format '%U:%G:%a:%n' "$line" + done | sort > "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst" +} listcurrentlistsdirectory() { { find rootdir/var/lib/apt/lists -maxdepth 1 -type d | while read line; do @@ -1940,6 +1945,10 @@ aptautotest_aptget_update() { # failure cases can retain partial files and such testempty find "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" -mindepth 1 ! \( -name 'lock' -o -name '*.FAILED' \) fi + if [ -s "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst" ]; then + testfileequal "${TMPWORKINGDIRECTORY}/rootdir/var/log/aptgetupdate.before.lst" \ + "$(find "${TMPWORKINGDIRECTORY}/aptarchive/dists" -type f | while read line; do stat --format '%U:%G:%a:%n' "$line"; done | sort)" + fi } aptautotest_apt_update() { aptautotest_aptget_update "$@"; } aptautotest_aptcdrom_add() { aptautotest_aptget_update "$@"; } diff --git a/test/integration/test-apt-update-file b/test/integration/test-apt-update-file index 20f604695..8da4ec35b 100755 --- a/test/integration/test-apt-update-file +++ b/test/integration/test-apt-update-file @@ -18,6 +18,7 @@ insertpackage 'unstable' 'bar' 'amd64' '1' insertsource 'unstable' 'foo' 'all' '1' setupaptarchive --no-update +logcurrentarchivedirectory # ensure the archive is not writable addtrap 'prefix' 'chmod 755 aptarchive/dists/unstable/main/binary-all;' @@ -37,8 +38,11 @@ if [ "$(id -u)" = '0' ]; then rm -rf rootdir/var/lib/apt/lists chmod 500 aptarchive/dists/ testsuccesswithnotice aptget update - exit + chmod 755 aptarchive/dists/ +else + testsuccess aptget update fi +mv rootdir/var/lib/apt/lists/_* rootdir/var/lib/apt/lists/partial chmod 555 aptarchive/dists/unstable/main/binary-all testsuccess aptget update -o Debug::pkgAcquire::Worker=1 cp -a rootdir/tmp/testsuccess.output rootdir/tmp/update.output diff --git a/test/integration/test-apt-update-ims b/test/integration/test-apt-update-ims index 241bf383b..5a44911a6 100755 --- a/test/integration/test-apt-update-ims +++ b/test/integration/test-apt-update-ims @@ -11,6 +11,7 @@ insertpackage 'unstable' 'unrelated2' 'amd64' '0.5~squeeze1' insertsource 'unstable' 'unrelated' 'all' '0.5~squeeze1' setupaptarchive --no-update +logcurrentarchivedirectory changetowebserver runtest() { @@ -70,6 +71,7 @@ EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease Hit:2 http://localhost:${APTHTTPPORT} unstable Release Reading package lists..." find aptarchive -name 'InRelease' -delete +logcurrentarchivedirectory echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex runtest echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex @@ -86,6 +88,7 @@ W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' is not sign 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." find aptarchive -name 'Release.gpg' -delete +logcurrentarchivedirectory echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex runtest 'warning' echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex @@ -98,6 +101,7 @@ find aptarchive -name '*Release' -exec sed -i \ -e '/^Valid-Until: / d' -e "/^Date: / a\ Valid-Until: $(date -d '-1 weeks' '+%a, %d %b %Y %H:%M:%S %Z')" '{}' \; signreleasefiles +logcurrentarchivedirectory msgmsg 'expired InRelease' EXPECT="Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease @@ -115,6 +119,7 @@ Hit:2 http://localhost:${APTHTTPPORT} unstable Release Reading package lists... E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/Release is expired (invalid since). Updates for this repository will not be applied." find aptarchive -name 'InRelease' -delete +logcurrentarchivedirectory echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex runtest 'failure' echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex @@ -132,6 +137,7 @@ N: Data from such a repository can't be authenticated and is therefore potential N: See apt-secure(8) manpage for repository creation and user configuration details. E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/Release is expired (invalid since). Updates for this repository will not be applied." find aptarchive -name 'Release.gpg' -delete +logcurrentarchivedirectory echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex runtest 'failure' 'warning' echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex @@ -176,6 +182,7 @@ W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' does not ha 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." find aptarchive -name '*Release*' -delete +logcurrentarchivedirectory echo 'Acquire::GzipIndexes "0"; Acquire::PDiffs "0";' > rootdir/etc/apt/apt.conf.d/02compressindex runtest 'warning' -- cgit v1.2.3