From f7291f6215c1e52298d47438c297c3c319abca7e Mon Sep 17 00:00:00 2001 From: Arch Librarian Date: Mon, 20 Sep 2004 17:04:32 +0000 Subject: Add SHA1 support to "apt-ftparchive release" Author: mdz Date: 2003-12-26 20:50:01 GMT Add SHA1 support to "apt-ftparchive release" --- ftparchive/apt-ftparchive.cc | 4 +++- ftparchive/writer.cc | 44 ++++++++++++++++++++++++++++++++++++++------ ftparchive/writer.h | 19 ++++++++++++++++--- 3 files changed, 57 insertions(+), 10 deletions(-) (limited to 'ftparchive') diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index c811343b6..02e98bae6 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: apt-ftparchive.cc,v 1.9 2003/12/26 20:08:56 mdz Exp $ +// $Id: apt-ftparchive.cc,v 1.10 2003/12/26 20:50:01 mdz Exp $ /* ###################################################################### apt-scanpackages - Efficient work-alike for dpkg-scanpackages @@ -684,6 +684,8 @@ bool SimpleGenRelease(CommandLine &CmdL) if (Release.RecursiveScan(CmdL.FileList[1]) == false) return false; + Release.Finish(); + return true; } diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 68fd85091..3b1cb69f5 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: writer.cc,v 1.8 2003/12/26 20:08:56 mdz Exp $ +// $Id: writer.cc,v 1.9 2003/12/26 20:50:01 mdz Exp $ /* ###################################################################### Writer @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -829,8 +830,6 @@ ReleaseWriter::ReleaseWriter(string DB) fprintf(Output, "%s: %s\n", (*I).first.c_str(), Value.c_str()); } - - fprintf(Output, "MD5Sum:\n"); } /*}}}*/ // ReleaseWriter::DoPackage - Process a single package /*{{{*/ @@ -856,14 +855,47 @@ bool ReleaseWriter::DoPackage(string FileName) return false; } + CheckSums[FileName].size = fd.Size(); + MD5Summation MD5; MD5.AddFD(fd.Fd(), fd.Size()); + CheckSums[FileName].MD5 = MD5.Result(); - string MD5Sum = MD5.Result(); - fprintf(Output, " %s %16d %s\n", - MD5Sum.c_str(), fd.Size(), FileName.c_str()); + fd.Seek(0); + SHA1Summation SHA1; + SHA1.AddFD(fd.Fd(), fd.Size()); + CheckSums[FileName].SHA1 = SHA1.Result(); fd.Close(); return true; } + + /*}}}*/ +// ReleaseWriter::Finish - Output the checksums /*{{{*/ +// --------------------------------------------------------------------- +void ReleaseWriter::Finish() +{ + fprintf(Output, "MD5Sum:\n"); + for(map::iterator I = CheckSums.begin(); + I != CheckSums.end(); + ++I) + { + fprintf(Output, " %s %16ld %s\n", + (*I).second.MD5.c_str(), + (*I).second.size, + (*I).first.c_str()); + } + + fprintf(Output, "SHA1:\n"); + for(map::iterator I = CheckSums.begin(); + I != CheckSums.end(); + ++I) + { + fprintf(Output, " %s %16ld %s\n", + (*I).second.SHA1.c_str(), + (*I).second.size, + (*I).first.c_str()); + } +} + diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 6f728dd1b..f347ca3b3 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: writer.h,v 1.5 2003/12/26 20:08:56 mdz Exp $ +// $Id: writer.h,v 1.6 2003/12/26 20:50:01 mdz Exp $ /* ###################################################################### Writer @@ -21,6 +21,7 @@ #include #include #include +#include #include "cachedb.h" #include "override.h" @@ -30,6 +31,7 @@ using std::string; using std::cout; using std::endl; using std::vector; +using std::map; class FTWScanner { @@ -154,11 +156,22 @@ class ReleaseWriter : public FTWScanner public: ReleaseWriter(string DB); virtual bool DoPackage(string FileName); -protected: + void Finish(); + + FILE *Output; // General options string PathPrefix; string DirStrip; - FILE *Output; + +protected: + struct CheckSum + { + string MD5; + string SHA1; + // Limited by FileFd::Size() + unsigned long size; + }; + map CheckSums; }; #endif -- cgit v1.2.3