Просмотр исходного кода

ensure InRelease->Release is transactional as well

Michael Vogt лет назад: 12
Родитель
Сommit
c5fced3888
2 измененных файлов с 21 добавлено и 2 удалено
  1. 3 2
      apt-pkg/acquire-item.cc
  2. 18 0
      test/integration/test-apt-update-rollback

+ 3 - 2
apt-pkg/acquire-item.cc

@@ -1888,6 +1888,7 @@ void pkgAcqMetaIndex::Failed(string /*Message*/,
       ReportMirrorFailure("GPGFailure");
    }
 #endif
+
    /* Always move the meta index, even if gpgv failed. This ensures
     * that PackageFile objects are correctly filled in */
    if (FileExists(DestFile)) {
@@ -1902,9 +1903,9 @@ void pkgAcqMetaIndex::Failed(string /*Message*/,
 	                               "Release");
 	 SigFile = FinalFile;
       }
-      Rename(DestFile,FinalFile);
-      chmod(FinalFile.c_str(),0644);
 
+      // Done, queue for rename on transaction finished
+      PartialFile = DestFile;
       DestFile = FinalFile;
    }
 

+ 18 - 0
test/integration/test-apt-update-rollback

@@ -150,6 +150,22 @@ E: Some index files failed to download. They have been ignored, or old ones used
 E: There are problems and -y was used without --force-yes" aptget install -qq -y old
 }
 
+test_inrelease_to_unauth_inrelease() {
+    msgmsg "Test InRelease to InRelease without sig"
+    create_fresh_archive
+    signreleasefiles 'Marvin Paranoid'
+    avoid_ims_hit
+    
+    testsuccess aptget update -qq
+
+    testequal "WARNING: The following packages cannot be authenticated!
+  old
+E: There are problems and -y was used without --force-yes" aptget install -qq -y old
+
+    testfailure ls rootdir/var/lib/apt/lists/*_InRelease
+    testsuccess ls rootdir/var/lib/apt/lists/*_Release
+}
+
 TESTDIR=$(readlink -f $(dirname $0))
 . $TESTDIR/framework
 
@@ -179,3 +195,5 @@ test_inreleae_to_valid_release
 test_inreleae_to_release_reverts_all
 
 test_unauthenticated_to_invalid_inrelease
+
+test_inrelease_to_unauth_inrelease