|
|
@@ -95,7 +95,7 @@ void pkgAcquire::Item::Start(string /*Message*/,unsigned long Size)
|
|
|
// Acquire::Item::Done - Item downloaded OK /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
|
-void pkgAcquire::Item::Done(string Message,unsigned long Size,string,
|
|
|
+void pkgAcquire::Item::Done(string Message,unsigned long Size,string Hash,
|
|
|
pkgAcquire::MethodConfig *Cnf)
|
|
|
{
|
|
|
// We just downloaded something..
|
|
|
@@ -142,8 +142,9 @@ void pkgAcquire::Item::Rename(string From,string To)
|
|
|
*/
|
|
|
pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire *Owner,
|
|
|
string URI,string URIDesc,string ShortDesc,
|
|
|
- string ExpectedMD5)
|
|
|
- : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5), Description(URIDesc)
|
|
|
+ HashString ExpectedHash)
|
|
|
+ : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash),
|
|
|
+ Description(URIDesc)
|
|
|
{
|
|
|
|
|
|
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
|
|
|
@@ -271,11 +272,11 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile)
|
|
|
if(found)
|
|
|
{
|
|
|
// queue the diffs
|
|
|
- unsigned int last_space = Description.rfind(" ");
|
|
|
+ string::size_type last_space = Description.rfind(" ");
|
|
|
if(last_space != string::npos)
|
|
|
Description.erase(last_space, Description.size()-last_space);
|
|
|
new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
|
|
|
- ExpectedMD5, available_patches);
|
|
|
+ ExpectedHash, available_patches);
|
|
|
Complete = false;
|
|
|
Status = StatDone;
|
|
|
Dequeue();
|
|
|
@@ -298,7 +299,7 @@ void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
|
|
|
<< "Falling back to normal index file aquire" << std::endl;
|
|
|
|
|
|
new pkgAcqIndex(Owner, RealURI, Description, Desc.ShortDesc,
|
|
|
- ExpectedMD5);
|
|
|
+ ExpectedHash);
|
|
|
|
|
|
Complete = false;
|
|
|
Status = StatDone;
|
|
|
@@ -344,8 +345,9 @@ void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash,
|
|
|
*/
|
|
|
pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *Owner,
|
|
|
string URI,string URIDesc,string ShortDesc,
|
|
|
- string ExpectedMD5, vector<DiffInfo> diffs)
|
|
|
- : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5),
|
|
|
+ HashString ExpectedMD5,
|
|
|
+ vector<DiffInfo> diffs)
|
|
|
+ : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash),
|
|
|
available_patches(diffs)
|
|
|
{
|
|
|
|
|
|
@@ -378,7 +380,7 @@ void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
|
|
|
std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << std::endl
|
|
|
<< "Falling back to normal index file aquire" << std::endl;
|
|
|
new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc,
|
|
|
- ExpectedMD5);
|
|
|
+ ExpectedHash);
|
|
|
Finish();
|
|
|
}
|
|
|
|
|
|
@@ -393,14 +395,7 @@ void pkgAcqIndexDiffs::Finish(bool allDone)
|
|
|
DestFile = _config->FindDir("Dir::State::lists");
|
|
|
DestFile += URItoFileName(RealURI);
|
|
|
|
|
|
- // do the final md5sum checking
|
|
|
- MD5Summation sum;
|
|
|
- FileFd Fd(DestFile, FileFd::ReadOnly);
|
|
|
- sum.AddFD(Fd.Fd(), Fd.Size());
|
|
|
- Fd.Close();
|
|
|
- string MD5 = (string)sum.Result();
|
|
|
-
|
|
|
- if (!ExpectedMD5.empty() && MD5 != ExpectedMD5)
|
|
|
+ if(!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile))
|
|
|
{
|
|
|
Status = StatAuthError;
|
|
|
ErrorText = _("MD5Sum mismatch");
|
|
|
@@ -542,7 +537,7 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash,
|
|
|
// see if there is more to download
|
|
|
if(available_patches.size() > 0) {
|
|
|
new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
|
|
|
- ExpectedMD5, available_patches);
|
|
|
+ ExpectedHash, available_patches);
|
|
|
return Finish();
|
|
|
} else
|
|
|
return Finish(true);
|
|
|
@@ -556,8 +551,8 @@ void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash,
|
|
|
instantiated to fetch the revision file */
|
|
|
pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,
|
|
|
string URI,string URIDesc,string ShortDesc,
|
|
|
- string ExpectedMD5, string comprExt)
|
|
|
- : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5)
|
|
|
+ HashString ExpectedHash, string comprExt)
|
|
|
+ : Item(Owner), RealURI(URI), ExpectedHash(ExpectedHash)
|
|
|
{
|
|
|
Decompression = false;
|
|
|
Erase = false;
|
|
|
@@ -608,7 +603,7 @@ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
|
|
|
|
|
|
// retry with a gzip one
|
|
|
new pkgAcqIndex(Owner, RealURI, Desc.Description,Desc.ShortDesc,
|
|
|
- ExpectedMD5, string(".gz"));
|
|
|
+ ExpectedHash, string(".gz"));
|
|
|
Status = StatDone;
|
|
|
Complete = false;
|
|
|
Dequeue();
|
|
|
@@ -633,29 +628,20 @@ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
|
|
|
to the uncompressed version of the file. If this is so the file
|
|
|
is copied into the partial directory. In all other cases the file
|
|
|
is decompressed with a gzip uri. */
|
|
|
-void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5,
|
|
|
+void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash,
|
|
|
pkgAcquire::MethodConfig *Cfg)
|
|
|
{
|
|
|
- Item::Done(Message,Size,MD5,Cfg);
|
|
|
+ Item::Done(Message,Size,Hash,Cfg);
|
|
|
|
|
|
if (Decompression == true)
|
|
|
{
|
|
|
if (_config->FindB("Debug::pkgAcquire::Auth", false))
|
|
|
{
|
|
|
- std::cerr << std::endl << RealURI << ": Computed MD5: " << MD5;
|
|
|
- std::cerr << " Expected MD5: " << ExpectedMD5 << std::endl;
|
|
|
+ std::cerr << std::endl << RealURI << ": Computed Hash: " << Hash;
|
|
|
+ std::cerr << " Expected Hash: " << ExpectedHash.toStr() << std::endl;
|
|
|
}
|
|
|
|
|
|
- if (MD5.empty())
|
|
|
- {
|
|
|
- MD5Summation sum;
|
|
|
- FileFd Fd(DestFile, FileFd::ReadOnly);
|
|
|
- sum.AddFD(Fd.Fd(), Fd.Size());
|
|
|
- Fd.Close();
|
|
|
- MD5 = (string)sum.Result();
|
|
|
- }
|
|
|
-
|
|
|
- if (!ExpectedMD5.empty() && MD5 != ExpectedMD5)
|
|
|
+ if (!ExpectedHash.empty() && !ExpectedHash.VerifyFile(DestFile))
|
|
|
{
|
|
|
Status = StatAuthError;
|
|
|
ErrorText = _("MD5Sum mismatch");
|
|
|
@@ -737,8 +723,8 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5,
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* The Translation file is added to the queue */
|
|
|
pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner,
|
|
|
- string URI,string URIDesc,string ShortDesc) :
|
|
|
- pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, "", "")
|
|
|
+ string URI,string URIDesc,string ShortDesc)
|
|
|
+ : pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, HashString(), "")
|
|
|
{
|
|
|
}
|
|
|
|
|
|
@@ -915,10 +901,10 @@ string pkgAcqMetaIndex::Custom600Headers()
|
|
|
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
|
|
|
}
|
|
|
|
|
|
-void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string MD5,
|
|
|
+void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string Hash,
|
|
|
pkgAcquire::MethodConfig *Cfg)
|
|
|
{
|
|
|
- Item::Done(Message,Size,MD5,Cfg);
|
|
|
+ Item::Done(Message,Size,Hash,Cfg);
|
|
|
|
|
|
// MetaIndexes are done in two passes: one to download the
|
|
|
// metaindex with an appropriate method, and a second to verify it
|
|
|
@@ -1036,7 +1022,7 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify)
|
|
|
Target != IndexTargets->end();
|
|
|
Target++)
|
|
|
{
|
|
|
- string ExpectedIndexMD5;
|
|
|
+ HashString ExpectedIndexHash;
|
|
|
if (verify)
|
|
|
{
|
|
|
const indexRecords::checkSum *Record = MetaIndexParser->Lookup((*Target)->MetaKey);
|
|
|
@@ -1047,16 +1033,16 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify)
|
|
|
+ (*Target)->MetaKey + " in Meta-index file (malformed Release file?)";
|
|
|
return;
|
|
|
}
|
|
|
- ExpectedIndexMD5 = Record->MD5Hash;
|
|
|
+ ExpectedIndexHash = Record->Hash;
|
|
|
if (_config->FindB("Debug::pkgAcquire::Auth", false))
|
|
|
{
|
|
|
std::cerr << "Queueing: " << (*Target)->URI << std::endl;
|
|
|
- std::cerr << "Expected MD5: " << ExpectedIndexMD5 << std::endl;
|
|
|
+ std::cerr << "Expected Hash: " << ExpectedIndexHash.toStr() << std::endl;
|
|
|
}
|
|
|
- if (ExpectedIndexMD5.empty())
|
|
|
+ if (ExpectedIndexHash.empty())
|
|
|
{
|
|
|
Status = StatAuthError;
|
|
|
- ErrorText = "Unable to find MD5 sum for "
|
|
|
+ ErrorText = "Unable to find hash sum for "
|
|
|
+ (*Target)->MetaKey + " in Meta-index file";
|
|
|
return;
|
|
|
}
|
|
|
@@ -1066,10 +1052,10 @@ void pkgAcqMetaIndex::QueueIndexes(bool verify)
|
|
|
// on the users option)
|
|
|
if(_config->FindB("Acquire::PDiffs",true) == true)
|
|
|
new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description,
|
|
|
- (*Target)->ShortDesc, ExpectedIndexMD5);
|
|
|
+ (*Target)->ShortDesc, ExpectedIndexHash);
|
|
|
else
|
|
|
new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description,
|
|
|
- (*Target)->ShortDesc, ExpectedIndexMD5);
|
|
|
+ (*Target)->ShortDesc, ExpectedIndexHash);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1309,7 +1295,12 @@ bool pkgAcqArchive::QueueNext()
|
|
|
return false;
|
|
|
|
|
|
string PkgFile = Parse.FileName();
|
|
|
- MD5 = Parse.MD5Hash();
|
|
|
+ if(Parse.SHA256Hash() != "")
|
|
|
+ hash = HashString("SHA256", Parse.SHA256Hash());
|
|
|
+ else if (Parse.SHA1Hash() != "")
|
|
|
+ hash = HashString("SHA1", Parse.SHA1Hash());
|
|
|
+ else
|
|
|
+ hash = HashString("MD5Sum", Parse.MD5Hash());
|
|
|
if (PkgFile.empty() == true)
|
|
|
return _error->Error(_("The package index files are corrupted. No Filename: "
|
|
|
"field for package %s."),
|
|
|
@@ -1389,10 +1380,10 @@ bool pkgAcqArchive::QueueNext()
|
|
|
// AcqArchive::Done - Finished fetching /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
|
-void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash,
|
|
|
+void pkgAcqArchive::Done(string Message,unsigned long Size,string CalcHash,
|
|
|
pkgAcquire::MethodConfig *Cfg)
|
|
|
{
|
|
|
- Item::Done(Message,Size,Md5Hash,Cfg);
|
|
|
+ Item::Done(Message,Size,CalcHash,Cfg);
|
|
|
|
|
|
// Check the size
|
|
|
if (Size != Version->Size)
|
|
|
@@ -1402,17 +1393,14 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- // Check the md5
|
|
|
- if (Md5Hash.empty() == false && MD5.empty() == false)
|
|
|
+ // Check the hash
|
|
|
+ if(!hash.VerifyFile(DestFile))
|
|
|
{
|
|
|
- if (Md5Hash != MD5)
|
|
|
- {
|
|
|
- Status = StatError;
|
|
|
- ErrorText = _("MD5Sum mismatch");
|
|
|
- if(FileExists(DestFile))
|
|
|
- Rename(DestFile,DestFile + ".FAILED");
|
|
|
- return;
|
|
|
- }
|
|
|
+ Status = StatError;
|
|
|
+ ErrorText = _("MD5Sum mismatch");
|
|
|
+ if(FileExists(DestFile))
|
|
|
+ Rename(DestFile,DestFile + ".FAILED");
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
// Grab the output filename
|
|
|
@@ -1507,7 +1495,7 @@ void pkgAcqArchive::Finished()
|
|
|
pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,
|
|
|
unsigned long Size,string Dsc,string ShortDesc,
|
|
|
const string &DestDir, const string &DestFilename) :
|
|
|
- Item(Owner), Md5Hash(MD5)
|
|
|
+ Item(Owner), hash(MD5)
|
|
|
{
|
|
|
Retries = _config->FindI("Acquire::Retries",0);
|
|
|
|
|
|
@@ -1544,23 +1532,20 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,
|
|
|
// AcqFile::Done - Item downloaded OK /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
|
/* */
|
|
|
-void pkgAcqFile::Done(string Message,unsigned long Size,string MD5,
|
|
|
+void pkgAcqFile::Done(string Message,unsigned long Size,string CalcHash,
|
|
|
pkgAcquire::MethodConfig *Cnf)
|
|
|
{
|
|
|
+ Item::Done(Message,Size,CalcHash,Cnf);
|
|
|
+
|
|
|
// Check the md5
|
|
|
- if (Md5Hash.empty() == false && MD5.empty() == false)
|
|
|
+ if(!hash.VerifyFile(DestFile))
|
|
|
{
|
|
|
- if (Md5Hash != MD5)
|
|
|
- {
|
|
|
- Status = StatError;
|
|
|
- ErrorText = "MD5Sum mismatch";
|
|
|
- Rename(DestFile,DestFile + ".FAILED");
|
|
|
- return;
|
|
|
- }
|
|
|
+ Status = StatError;
|
|
|
+ ErrorText = "MD5Sum mismatch";
|
|
|
+ Rename(DestFile,DestFile + ".FAILED");
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- Item::Done(Message,Size,MD5,Cnf);
|
|
|
-
|
|
|
string FileName = LookupTag(Message,"Filename");
|
|
|
if (FileName.empty() == true)
|
|
|
{
|