From f6f06a8f24185a55ca918b9c10a2d0c4ae4b49a5 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 31 Jan 2013 14:41:41 +0100 Subject: merge patch apt_0.9.7.7ubuntu2~md1.debdiff, thanks to Marc Deslauriers --- ftparchive/apt-ftparchive.cc | 5 +++-- ftparchive/writer.cc | 51 +++++++++++++++++++++++++++++++++++--------- ftparchive/writer.h | 4 +++- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index 4b2c3ba12..2639bc2f6 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -254,7 +254,8 @@ bool PackageMap::GenSources(Configuration &Setup,struct CacheDB::Stats &Stats) SrcDone = true; // Create a package writer object. - SourcesWriter Sources(flCombine(OverrideDir,BinOverride), + SourcesWriter Sources(_config->Find("APT::FTPArchive::DB"), + flCombine(OverrideDir,BinOverride), flCombine(OverrideDir,SrcOverride), flCombine(OverrideDir,SrcExtraOverride)); if (SrcExt.empty() == false && Sources.SetExts(SrcExt) == false) @@ -705,7 +706,7 @@ bool SimpleGenSources(CommandLine &CmdL) SOverride.c_str()); // Create a package writer object. - SourcesWriter Sources(Override,SOverride); + SourcesWriter Sources(_config->Find("APT::FTPArchive::DB"),Override,SOverride); if (_error->PendingError() == true) return false; diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 3065526ad..f58d4bc1f 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -562,8 +562,9 @@ TranslationWriter::~TranslationWriter() // SourcesWriter::SourcesWriter - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -SourcesWriter::SourcesWriter(string const &BOverrides,string const &SOverrides, - string const &ExtOverrides) +SourcesWriter::SourcesWriter(string const &DB, string const &BOverrides,string const &SOverrides, + string const &ExtOverrides) : + Db(DB), Stats(Db.Stats) { Output = stdout; AddPattern("*.dsc"); @@ -575,7 +576,9 @@ SourcesWriter::SourcesWriter(string const &BOverrides,string const &SOverrides, DoMD5 = _config->FindB("APT::FTPArchive::Sources::MD5",DoMD5); DoSHA1 = _config->FindB("APT::FTPArchive::Sources::SHA1",DoSHA1); DoSHA256 = _config->FindB("APT::FTPArchive::Sources::SHA256",DoSHA256); + DoSHA512 = _config->FindB("APT::FTPArchive::Sources::SHA512",DoSHA512); NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false); + DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false); // Read the override file if (BOverrides.empty() == false && BOver.ReadOverride(BOverrides) == false) @@ -740,19 +743,16 @@ bool SourcesWriter::DoPackage(string FileName) if (DoSHA1 == true && Tags.Exists("Checksums-Sha1")) ostreamSha1 << "\n " << string(SHA1.Result()) << " " << St.st_size << " " << strippedName << "\n " << Tags.FindS("Checksums-Sha1"); - string const ChecksumsSha1 = ostreamSha1.str(); std::ostringstream ostreamSha256; if (DoSHA256 == true && Tags.Exists("Checksums-Sha256")) ostreamSha256 << "\n " << string(SHA256.Result()) << " " << St.st_size << " " << strippedName << "\n " << Tags.FindS("Checksums-Sha256"); - string const ChecksumsSha256 = ostreamSha256.str(); std::ostringstream ostreamSha512; - if (Tags.Exists("Checksums-Sha512")) + if (DoSHA512 == true && Tags.Exists("Checksums-Sha512")) ostreamSha512 << "\n " << string(SHA512.Result()) << " " << St.st_size << " " << strippedName << "\n " << Tags.FindS("Checksums-Sha512"); - string const ChecksumsSha512 = ostreamSha512.str(); // Strip the DirStrip prefix from the FileName and add the PathPrefix string NewFileName; @@ -768,7 +768,7 @@ bool SourcesWriter::DoPackage(string FileName) string Directory = flNotFile(OriginalPath); string Package = Tags.FindS("Source"); - // Perform the delinking operation over all of the files + // Perform operation over all of the files string ParseJnk; const char *C = Files.c_str(); char *RealPath = NULL; @@ -780,9 +780,36 @@ bool SourcesWriter::DoPackage(string FileName) ParseQuoteWord(C,ParseJnk) == false || ParseQuoteWord(C,ParseJnk) == false) return _error->Error("Error parsing file record"); - - char Jnk[2]; + string OriginalPath = Directory + ParseJnk; + + // Add missing hashes to source files + if ((DoSHA1 == true && !Tags.Exists("Checksums-Sha1")) || + (DoSHA256 == true && !Tags.Exists("Checksums-Sha256")) || + (DoSHA512 == true && !Tags.Exists("Checksums-Sha512"))) + { + if (Db.GetFileInfo(OriginalPath, false, false, false, DoMD5, DoSHA1, DoSHA256, DoSHA512, DoAlwaysStat) + == false) + { + return _error->Error("Error getting file info"); + } + + if (DoSHA1 == true && !Tags.Exists("Checksums-Sha1")) + ostreamSha1 << "\n " << string(Db.SHA1Res) << " " + << Db.GetFileSize() << " " << ParseJnk; + + if (DoSHA256 == true && !Tags.Exists("Checksums-Sha256")) + ostreamSha256 << "\n " << string(Db.SHA256Res) << " " + << Db.GetFileSize() << " " << ParseJnk; + + if (DoSHA512 == true && !Tags.Exists("Checksums-Sha512")) + ostreamSha512 << "\n " << string(Db.SHA512Res) << " " + << Db.GetFileSize() << " " << ParseJnk; + } + + // Perform the delinking operation + char Jnk[2]; + if (readlink(OriginalPath.c_str(),Jnk,sizeof(Jnk)) != -1 && (RealPath = realpath(OriginalPath.c_str(),NULL)) != 0) { @@ -797,6 +824,10 @@ bool SourcesWriter::DoPackage(string FileName) if (Directory.length() > 2) Directory.erase(Directory.end()-1); + string const ChecksumsSha1 = ostreamSha1.str(); + string const ChecksumsSha256 = ostreamSha256.str(); + string const ChecksumsSha512 = ostreamSha512.str(); + // This lists all the changes to the fields we are going to make. // (5 hardcoded + checksums + maintainer + end marker) TFRewriteData Changes[5+2+1+SOverItem->FieldOverride.size()+1]; @@ -844,7 +875,7 @@ bool SourcesWriter::DoPackage(string FileName) Stats.Packages++; - return true; + return Db.Finish(); } /*}}}*/ diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 76a3dfd1e..4932b0cc8 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -157,6 +157,7 @@ class ContentsWriter : public FTWScanner class SourcesWriter : public FTWScanner { + CacheDB Db; Override BOver; Override SOver; char *Buffer; @@ -165,6 +166,7 @@ class SourcesWriter : public FTWScanner public: bool NoOverride; + bool DoAlwaysStat; // General options string PathPrefix; @@ -174,7 +176,7 @@ class SourcesWriter : public FTWScanner virtual bool DoPackage(string FileName); - SourcesWriter(string const &BOverrides,string const &SOverrides, + SourcesWriter(string const &DB,string const &BOverrides,string const &SOverrides, string const &ExtOverrides=string()); virtual ~SourcesWriter() {free(Buffer);}; }; -- cgit v1.2.3 From 0f2def05fc907a1349a0800dd0f4f7c3a0b99fca Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 1 Feb 2013 07:07:33 +0100 Subject: add a integration test for bug 1078697 --- .../test-bug-1078697-missing-source-hashes | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100755 test/integration/test-bug-1078697-missing-source-hashes diff --git a/test/integration/test-bug-1078697-missing-source-hashes b/test/integration/test-bug-1078697-missing-source-hashes new file mode 100755 index 000000000..6fcb856b5 --- /dev/null +++ b/test/integration/test-bug-1078697-missing-source-hashes @@ -0,0 +1,35 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +msgtest 'Test apt-ftparchive source with missing hashes in .dsc' + +touch aptarchive/foo_1.0.tar.gz +cat > aptarchive/foo_1.0.dsc << EOF +Format: 3.0 (native) +Source: foo +Binary: foo +Architecture: all +Version: 1.0 +Package-List: + foo deb admin extra +Files: + d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz +EOF + +# check for the SHA hashes +aptftparchive sources aptarchive/ > aptarchive/Sources 2>/dev/null || msgfail +test -n "$(grep Checksums-Sha512 aptarchive/Sources)" && msgpass || msgfail + +for hash in sha512sum sha256sum sha1sum; do + for f in foo_1.0.tar.gz foo_1.0.dsc; do + SUM=$($hash aptarchive/$f | cut -d' ' -f1) + msgtest "Test $hash hash matches for $f" + NEEDLE="$SUM $(stat -c%s aptarchive/$f) $f" + test -n "$SUM" && test -n "$(grep "$NEEDLE" aptarchive/Sources)" && msgpass || msgfail + done +done -- cgit v1.2.3 From 90ceb0b5113cc6b65416553fcebbf6d5fd8c6752 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 1 Mar 2013 12:17:08 +0100 Subject: add changelog --- debian/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/debian/changelog b/debian/changelog index 9632a7691..33efd5aa5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -30,6 +30,9 @@ apt (0.9.7.8) UNRELEASED; urgency=low (LP: #1003633) * apt-pkg/indexrecords.cc: - support '\r' in the Release file + + [ Marc Deslauriers ] + * make apt-ftparchive generate missing deb-src hashes (LP: #1078697) -- Christian Perrier Mon, 24 Dec 2012 07:01:20 +0100 -- cgit v1.2.3