Selaa lähdekoodia

merge with debian-experimental 0.8.16~exp2 release

David Kalnischkies 15 vuotta sitten
vanhempi
commit
8f8ed8f4e5
85 muutettua tiedostoa jossa 7431 lisäystä ja 3969 poistoa
  1. 1 1
      apt-inst/makefile
  2. 53 1
      apt-pkg/acquire-item.cc
  3. 6 1
      apt-pkg/acquire-method.cc
  4. 1 0
      apt-pkg/acquire-method.h
  5. 4 1
      apt-pkg/acquire-worker.h
  6. 23 4
      apt-pkg/acquire.h
  7. 3 0
      apt-pkg/algorithms.h
  8. 1 1
      apt-pkg/aptconfiguration.cc
  9. 3 0
      apt-pkg/cachefile.h
  10. 2 0
      apt-pkg/cachefilter.h
  11. 3 0
      apt-pkg/clean.h
  12. 8 1
      apt-pkg/contrib/hashes.cc
  13. 3 2
      apt-pkg/contrib/hashes.h
  14. 87 0
      apt-pkg/contrib/hashsum_template.h
  15. 1 56
      apt-pkg/contrib/md5.cc
  16. 3 20
      apt-pkg/contrib/md5.h
  17. 3 62
      apt-pkg/contrib/sha1.cc
  18. 3 20
      apt-pkg/contrib/sha1.h
  19. 43 0
      apt-pkg/contrib/sha2.cc
  20. 114 0
      apt-pkg/contrib/sha2.h
  21. 0 424
      apt-pkg/contrib/sha256.cc
  22. 2 66
      apt-pkg/contrib/sha256.h
  23. 1065 0
      apt-pkg/contrib/sha2_internal.cc
  24. 197 0
      apt-pkg/contrib/sha2_internal.h
  25. 5 10
      apt-pkg/deb/debindexfile.cc
  26. 16 0
      apt-pkg/deb/debindexfile.h
  27. 1 1
      apt-pkg/deb/deblistparser.cc
  28. 5 1
      apt-pkg/deb/deblistparser.h
  29. 3 1
      apt-pkg/deb/debmetaindex.h
  30. 9 1
      apt-pkg/deb/debrecords.cc
  31. 5 0
      apt-pkg/deb/debrecords.h
  32. 4 1
      apt-pkg/deb/debsrcrecords.h
  33. 36 26
      apt-pkg/deb/debsystem.cc
  34. 6 7
      apt-pkg/deb/debsystem.h
  35. 118 66
      apt-pkg/deb/dpkgpm.cc
  36. 2 9
      apt-pkg/deb/dpkgpm.h
  37. 2 0
      apt-pkg/depcache.h
  38. 3 0
      apt-pkg/edsp/edspindexfile.h
  39. 3 0
      apt-pkg/edsp/edspsystem.h
  40. 6 2
      apt-pkg/indexcopy.h
  41. 0 3
      apt-pkg/init.cc
  42. 2 2
      apt-pkg/init.h
  43. 6 2
      apt-pkg/makefile
  44. 6 0
      apt-pkg/orderlist.cc
  45. 4 2
      apt-pkg/pkgrecords.h
  46. 3 1
      apt-pkg/srcrecords.h
  47. 73 51
      apt-pkg/tagfile.cc
  48. 8 13
      apt-pkg/tagfile.h
  49. 13 0
      cmdline/apt-config.cc
  50. 2 0
      cmdline/apt-get.cc
  51. 1 1
      configure.in
  52. 1 1
      debian/apt-utils.install
  53. 1 2
      debian/apt.install
  54. 228 3
      debian/changelog
  55. 63 22
      debian/control
  56. 2 0
      debian/libapt-inst1.3.install
  57. 2 3
      debian/apt-utils.symbols
  58. 2 0
      debian/libapt-pkg4.11.install
  59. 49 47
      debian/apt.symbols
  60. 53 12
      debian/rules
  61. 1 1
      doc/apt-cache.8.xml
  62. 3 2
      doc/apt-ftparchive.1.xml
  63. 1 1
      doc/apt-get.8.xml
  64. 3 3
      doc/apt.conf.5.xml
  65. 4 4
      doc/apt_preferences.5.xml
  66. 300 199
      doc/po/apt-doc.pot
  67. 575 410
      doc/po/de.po
  68. 465 225
      doc/po/es.po
  69. 459 223
      doc/po/fr.po
  70. 310 206
      doc/po/it.po
  71. 454 228
      doc/po/ja.po
  72. 414 221
      doc/po/pl.po
  73. 464 224
      doc/po/pt.po
  74. 322 208
      doc/po/pt_BR.po
  75. 37 3
      ftparchive/cachedb.cc
  76. 16 4
      ftparchive/cachedb.h
  77. 35 2
      ftparchive/writer.cc
  78. 2 0
      ftparchive/writer.h
  79. 17 2
      methods/mirror.cc
  80. 1 0
      methods/mirror.h
  81. 560 413
      po/apt-all.pot
  82. 577 428
      po/ca.po
  83. 14 5
      po/it.po
  84. 19 7
      test/hash.cc
  85. 6 0
      test/integration/test-bug-611729-mark-as-manual

+ 1 - 1
apt-inst/makefile

@@ -14,7 +14,7 @@ include ../buildlib/libversion.mak
 
 
 # The library name
 # The library name
 LIBRARY=apt-inst
 LIBRARY=apt-inst
-MAJOR=1.2
+MAJOR=1.3
 MINOR=0
 MINOR=0
 SLIBS=$(PTHREADLIB) -lapt-pkg
 SLIBS=$(PTHREADLIB) -lapt-pkg
 APT_DOMAIN:=libapt-inst$(MAJOR)
 APT_DOMAIN:=libapt-inst$(MAJOR)

+ 53 - 1
apt-pkg/acquire-item.cc

@@ -271,6 +271,14 @@ void pkgAcqSubIndex::Done(string Message,unsigned long Size,string Md5Hash,	/*{{
 
 
    string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI);
    string FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(Desc.URI);
 
 
+   /* Downloaded invalid transindex => Error (LP: #346386) (Closes: #627642) */
+   indexRecords SubIndexParser;
+   if (FileExists(DestFile) == true && !SubIndexParser.Load(DestFile)) {
+      Status = StatError;
+      ErrorText = SubIndexParser.ErrorText;
+      return;
+   }
+
    // sucess in downloading the index
    // sucess in downloading the index
    // rename the index
    // rename the index
    if(Debug)
    if(Debug)
@@ -894,6 +902,30 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string Hash,
 	 ReportMirrorFailure("HashChecksumFailure");
 	 ReportMirrorFailure("HashChecksumFailure");
          return;
          return;
       }
       }
+
+      /* Verify the index file for correctness (all indexes must
+       * have a Package field) (LP: #346386) (Closes: #627642) */
+      {
+	 FileFd fd(DestFile, FileFd::ReadOnly);
+	 pkgTagSection sec;
+	 pkgTagFile tag(&fd);
+
+         // Only test for correctness if the file is not empty (empty is ok)
+         if (fd.Size() > 0) {
+            if (_error->PendingError() || !tag.Step(sec)) {
+               Status = StatError;
+               _error->DumpErrors();
+               Rename(DestFile,DestFile + ".FAILED");
+               return;
+            } else if (!sec.Exists("Package")) {
+               Status = StatError;
+               ErrorText = ("Encountered a section with no Package: header");
+               Rename(DestFile,DestFile + ".FAILED");
+               return;
+            }
+         }
+      }
+       
       // Done, move it into position
       // Done, move it into position
       string FinalFile = _config->FindDir("Dir::State::lists");
       string FinalFile = _config->FindDir("Dir::State::lists");
       FinalFile += URItoFileName(RealURI);
       FinalFile += URItoFileName(RealURI);
@@ -1330,6 +1362,16 @@ void pkgAcqMetaIndex::AuthDone(string Message)				/*{{{*/
 									/*}}}*/
 									/*}}}*/
 void pkgAcqMetaIndex::QueueIndexes(bool verify)				/*{{{*/
 void pkgAcqMetaIndex::QueueIndexes(bool verify)				/*{{{*/
 {
 {
+#if 0
+   /* Reject invalid, existing Release files (LP: #346386) (Closes: #627642)
+    * FIXME: Disabled; it breaks unsigned repositories without hashes */
+   if (!verify && FileExists(DestFile) && !MetaIndexParser->Load(DestFile))
+   {
+      Status = StatError;
+      ErrorText = MetaIndexParser->ErrorText;
+      return;
+   }
+#endif
    for (vector <struct IndexTarget*>::const_iterator Target = IndexTargets->begin();
    for (vector <struct IndexTarget*>::const_iterator Target = IndexTargets->begin();
         Target != IndexTargets->end();
         Target != IndexTargets->end();
         Target++)
         Target++)
@@ -1493,6 +1535,12 @@ void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
 			 LookupTag(Message,"Message").c_str());
 			 LookupTag(Message,"Message").c_str());
 	 RunScripts("APT::Update::Auth-Failure");
 	 RunScripts("APT::Update::Auth-Failure");
 	 return;
 	 return;
+      } else if (LookupTag(Message,"Message").find("NODATA") != string::npos) {
+	 /* Invalid signature file, reject (LP: #346386) (Closes: #627642) */
+	 _error->Error(_("GPG error: %s: %s"),
+			 Desc.Description.c_str(),
+			 LookupTag(Message,"Message").c_str());
+	 return;
       } else {
       } else {
 	 _error->Warning(_("GPG error: %s: %s"),
 	 _error->Warning(_("GPG error: %s: %s"),
 			 Desc.Description.c_str(),
 			 Desc.Description.c_str(),
@@ -1682,6 +1730,8 @@ bool pkgAcqArchive::QueueNext()
       string PkgFile = Parse.FileName();
       string PkgFile = Parse.FileName();
       if (ForceHash.empty() == false)
       if (ForceHash.empty() == false)
       {
       {
+	 if(stringcasecmp(ForceHash, "sha512") == 0)
+	    ExpectedHash = HashString("SHA512", Parse.SHA512Hash());
 	 if(stringcasecmp(ForceHash, "sha256") == 0)
 	 if(stringcasecmp(ForceHash, "sha256") == 0)
 	    ExpectedHash = HashString("SHA256", Parse.SHA256Hash());
 	    ExpectedHash = HashString("SHA256", Parse.SHA256Hash());
 	 else if (stringcasecmp(ForceHash, "sha1") == 0)
 	 else if (stringcasecmp(ForceHash, "sha1") == 0)
@@ -1692,7 +1742,9 @@ bool pkgAcqArchive::QueueNext()
       else
       else
       {
       {
 	 string Hash;
 	 string Hash;
-	 if ((Hash = Parse.SHA256Hash()).empty() == false)
+	 if ((Hash = Parse.SHA512Hash()).empty() == false)
+	    ExpectedHash = HashString("SHA512", Hash);
+	 else if ((Hash = Parse.SHA256Hash()).empty() == false)
 	    ExpectedHash = HashString("SHA256", Hash);
 	    ExpectedHash = HashString("SHA256", Hash);
 	 else if ((Hash = Parse.SHA1Hash()).empty() == false)
 	 else if ((Hash = Parse.SHA1Hash()).empty() == false)
 	    ExpectedHash = HashString("SHA1", Hash);
 	    ExpectedHash = HashString("SHA1", Hash);

+ 6 - 1
apt-pkg/acquire-method.cc

@@ -166,6 +166,8 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
       std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n";
       std::cout << "SHA1-Hash: " << Res.SHA1Sum << "\n";
    if (Res.SHA256Sum.empty() == false)
    if (Res.SHA256Sum.empty() == false)
       std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n";
       std::cout << "SHA256-Hash: " << Res.SHA256Sum << "\n";
+   if (Res.SHA512Sum.empty() == false)
+      std::cout << "SHA512-Hash: " << Res.SHA512Sum << "\n";
    if (UsedMirror.empty() == false)
    if (UsedMirror.empty() == false)
       std::cout << "UsedMirror: " << UsedMirror << "\n";
       std::cout << "UsedMirror: " << UsedMirror << "\n";
    if (Res.GPGVOutput.empty() == false)
    if (Res.GPGVOutput.empty() == false)
@@ -199,7 +201,9 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
 	 std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n";
 	 std::cout << "Alt-SHA1-Hash: " << Alt->SHA1Sum << "\n";
       if (Alt->SHA256Sum.empty() == false)
       if (Alt->SHA256Sum.empty() == false)
 	 std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n";
 	 std::cout << "Alt-SHA256-Hash: " << Alt->SHA256Sum << "\n";
-
+      if (Alt->SHA512Sum.empty() == false)
+         std::cout << "Alt-SHA512-Hash: " << Alt->SHA512Sum << "\n";
+     
       if (Alt->IMSHit == true)
       if (Alt->IMSHit == true)
 	 std::cout << "Alt-IMS-Hit: true\n";
 	 std::cout << "Alt-IMS-Hit: true\n";
    }
    }
@@ -460,5 +464,6 @@ void pkgAcqMethod::FetchResult::TakeHashes(Hashes &Hash)
    MD5Sum = Hash.MD5.Result();
    MD5Sum = Hash.MD5.Result();
    SHA1Sum = Hash.SHA1.Result();
    SHA1Sum = Hash.SHA1.Result();
    SHA256Sum = Hash.SHA256.Result();
    SHA256Sum = Hash.SHA256.Result();
+   SHA512Sum = Hash.SHA512.Result();
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 1 - 0
apt-pkg/acquire-method.h

@@ -46,6 +46,7 @@ class pkgAcqMethod
       string MD5Sum;
       string MD5Sum;
       string SHA1Sum;
       string SHA1Sum;
       string SHA256Sum;
       string SHA256Sum;
+      string SHA512Sum;
       vector<string> GPGVOutput;
       vector<string> GPGVOutput;
       time_t LastModified;
       time_t LastModified;
       bool IMSHit;
       bool IMSHit;

+ 4 - 1
apt-pkg/acquire-worker.h

@@ -44,6 +44,9 @@
  */
  */
 class pkgAcquire::Worker : public WeakPointable
 class pkgAcquire::Worker : public WeakPointable
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+  
    friend class pkgAcquire;
    friend class pkgAcquire;
    
    
    protected:
    protected:
@@ -314,7 +317,7 @@ class pkgAcquire::Worker : public WeakPointable
     *  Closes the file descriptors; if MethodConfig::NeedsCleanup is
     *  Closes the file descriptors; if MethodConfig::NeedsCleanup is
     *  \b false, also rudely interrupts the worker with a SIGINT.
     *  \b false, also rudely interrupts the worker with a SIGINT.
     */
     */
-   ~Worker();
+   virtual ~Worker();
 };
 };
 
 
 /** @} */
 /** @} */

+ 23 - 4
apt-pkg/acquire.h

@@ -91,6 +91,12 @@ class pkgAcquireStatus;
  */
  */
 class pkgAcquire
 class pkgAcquire
 {   
 {   
+   private:
+   /** \brief FD of the Lock file we acquire in Setup (if any) */
+   int LockFD;
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    public:
    public:
    
    
    class Item;
    class Item;
@@ -359,9 +365,6 @@ class pkgAcquire
     */
     */
    virtual ~pkgAcquire();
    virtual ~pkgAcquire();
 
 
-   private:
-   /** \brief FD of the Lock file we acquire in Setup (if any) */
-   int LockFD;
 };
 };
 
 
 /** \brief Represents a single download source from which an item
 /** \brief Represents a single download source from which an item
@@ -391,6 +394,9 @@ class pkgAcquire::Queue
    friend class pkgAcquire::UriIterator;
    friend class pkgAcquire::UriIterator;
    friend class pkgAcquire::Worker;
    friend class pkgAcquire::Worker;
 
 
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    /** \brief The next queue in the pkgAcquire object's list of queues. */
    /** \brief The next queue in the pkgAcquire object's list of queues. */
    Queue *Next;
    Queue *Next;
    
    
@@ -540,12 +546,15 @@ class pkgAcquire::Queue
    /** Shut down all the worker processes associated with this queue
    /** Shut down all the worker processes associated with this queue
     *  and empty the queue.
     *  and empty the queue.
     */
     */
-   ~Queue();
+   virtual ~Queue();
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief Iterates over all the URIs being fetched by a pkgAcquire object.	{{{*/
 /** \brief Iterates over all the URIs being fetched by a pkgAcquire object.	{{{*/
 class pkgAcquire::UriIterator
 class pkgAcquire::UriIterator
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    /** The next queue to iterate over. */
    /** The next queue to iterate over. */
    pkgAcquire::Queue *CurQ;
    pkgAcquire::Queue *CurQ;
    /** The item that we currently point at. */
    /** The item that we currently point at. */
@@ -581,11 +590,15 @@ class pkgAcquire::UriIterator
 	 CurQ = CurQ->Next;
 	 CurQ = CurQ->Next;
       }
       }
    }   
    }   
+   virtual ~UriIterator() {};
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief Information about the properties of a single acquire method.	{{{*/
 /** \brief Information about the properties of a single acquire method.	{{{*/
 struct pkgAcquire::MethodConfig
 struct pkgAcquire::MethodConfig
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+   
    /** \brief The next link on the acquire method list.
    /** \brief The next link on the acquire method list.
     *
     *
     *  \todo Why not an STL container?
     *  \todo Why not an STL container?
@@ -634,6 +647,9 @@ struct pkgAcquire::MethodConfig
     *  appropriate.
     *  appropriate.
     */
     */
    MethodConfig();
    MethodConfig();
+
+   /* \brief Destructor, empty currently */
+   virtual ~MethodConfig() {};
 };
 };
 									/*}}}*/
 									/*}}}*/
 /** \brief A monitor object for downloads controlled by the pkgAcquire class.	{{{
 /** \brief A monitor object for downloads controlled by the pkgAcquire class.	{{{
@@ -644,6 +660,9 @@ struct pkgAcquire::MethodConfig
  */
  */
 class pkgAcquireStatus
 class pkgAcquireStatus
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    /** \brief The last time at which this monitor object was updated. */
    /** \brief The last time at which this monitor object was updated. */

+ 3 - 0
apt-pkg/algorithms.h

@@ -78,6 +78,9 @@ private:
 									/*}}}*/
 									/*}}}*/
 class pkgProblemResolver						/*{{{*/
 class pkgProblemResolver						/*{{{*/
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    pkgDepCache &Cache;
    pkgDepCache &Cache;
    typedef pkgCache::PkgIterator PkgIterator;
    typedef pkgCache::PkgIterator PkgIterator;
    typedef pkgCache::VerIterator VerIterator;
    typedef pkgCache::VerIterator VerIterator;

+ 1 - 1
apt-pkg/aptconfiguration.cc

@@ -224,7 +224,7 @@ std::vector<std::string> const Configuration::getLanguages(bool const &All,
 		environment.push_back("en");
 		environment.push_back("en");
 	}
 	}
 
 
-	// Support settings like Acquire::Translation=none on the command line to
+	// Support settings like Acquire::Languages=none on the command line to
 	// override the configuration settings vector of languages.
 	// override the configuration settings vector of languages.
 	string const forceLang = _config->Find("Acquire::Languages","");
 	string const forceLang = _config->Find("Acquire::Languages","");
 	if (forceLang.empty() == false) {
 	if (forceLang.empty() == false) {

+ 3 - 0
apt-pkg/cachefile.h

@@ -25,6 +25,9 @@
 
 
 class pkgCacheFile
 class pkgCacheFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    MMap *Map;
    MMap *Map;

+ 2 - 0
apt-pkg/cachefilter.h

@@ -16,6 +16,8 @@ namespace APT {
 namespace CacheFilter {
 namespace CacheFilter {
 // PackageNameMatchesRegEx						/*{{{*/
 // PackageNameMatchesRegEx						/*{{{*/
 class PackageNameMatchesRegEx {
 class PackageNameMatchesRegEx {
+         /** \brief dpointer placeholder (for later in case we need it) */
+         void *d;
 	regex_t* pattern;
 	regex_t* pattern;
 public:
 public:
 	PackageNameMatchesRegEx(std::string const &Pattern);
 	PackageNameMatchesRegEx(std::string const &Pattern);

+ 3 - 0
apt-pkg/clean.h

@@ -15,6 +15,9 @@
 
 
 class pkgArchiveCleaner
 class pkgArchiveCleaner
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    virtual void Erase(const char * /*File*/,string /*Pkg*/,string /*Ver*/,struct stat & /*St*/) {};
    virtual void Erase(const char * /*File*/,string /*Pkg*/,string /*Ver*/,struct stat & /*St*/) {};

+ 8 - 1
apt-pkg/contrib/hashes.cc

@@ -23,7 +23,7 @@
 
 
 const char* HashString::_SupportedHashes[] = 
 const char* HashString::_SupportedHashes[] = 
 {
 {
-   "SHA256", "SHA1", "MD5Sum", NULL
+   "SHA512", "SHA256", "SHA1", "MD5Sum", NULL
 };
 };
 
 
 HashString::HashString()
 HashString::HashString()
@@ -57,6 +57,7 @@ bool HashString::VerifyFile(string filename) const			/*{{{*/
    MD5Summation MD5;
    MD5Summation MD5;
    SHA1Summation SHA1;
    SHA1Summation SHA1;
    SHA256Summation SHA256;
    SHA256Summation SHA256;
+   SHA256Summation SHA512;
    string fileHash;
    string fileHash;
 
 
    FileFd Fd(filename, FileFd::ReadOnly);
    FileFd Fd(filename, FileFd::ReadOnly);
@@ -75,6 +76,11 @@ bool HashString::VerifyFile(string filename) const			/*{{{*/
       SHA256.AddFD(Fd.Fd(), Fd.Size());
       SHA256.AddFD(Fd.Fd(), Fd.Size());
       fileHash = (string)SHA256.Result();
       fileHash = (string)SHA256.Result();
    }
    }
+   else if (Type == "SHA512") 
+   {
+      SHA512.AddFD(Fd.Fd(), Fd.Size());
+      fileHash = (string)SHA512.Result();
+   }
    Fd.Close();
    Fd.Close();
 
 
    if(_config->FindB("Debug::Hashes",false) == true)
    if(_config->FindB("Debug::Hashes",false) == true)
@@ -119,6 +125,7 @@ bool Hashes::AddFD(int Fd,unsigned long Size)
       MD5.Add(Buf,Res);
       MD5.Add(Buf,Res);
       SHA1.Add(Buf,Res);
       SHA1.Add(Buf,Res);
       SHA256.Add(Buf,Res);
       SHA256.Add(Buf,Res);
+      SHA512.Add(Buf,Res);
    }
    }
    return true;
    return true;
 }
 }

+ 3 - 2
apt-pkg/contrib/hashes.h

@@ -16,7 +16,7 @@
 
 
 #include <apt-pkg/md5.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha1.h>
-#include <apt-pkg/sha256.h>
+#include <apt-pkg/sha2.h>
 
 
 #include <algorithm>
 #include <algorithm>
 #include <vector>
 #include <vector>
@@ -60,10 +60,11 @@ class Hashes
    MD5Summation MD5;
    MD5Summation MD5;
    SHA1Summation SHA1;
    SHA1Summation SHA1;
    SHA256Summation SHA256;
    SHA256Summation SHA256;
+   SHA512Summation SHA512;
    
    
    inline bool Add(const unsigned char *Data,unsigned long Size)
    inline bool Add(const unsigned char *Data,unsigned long Size)
    {
    {
-      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size);
+      return MD5.Add(Data,Size) && SHA1.Add(Data,Size) && SHA256.Add(Data,Size) && SHA512.Add(Data,Size);
    };
    };
    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
    inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
    bool AddFD(int Fd,unsigned long Size);
    bool AddFD(int Fd,unsigned long Size);

+ 87 - 0
apt-pkg/contrib/hashsum_template.h

@@ -0,0 +1,87 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                          /*{{{*/
+// $Id: hashsum_template.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
+/* ######################################################################
+
+   HashSumValueTemplate - Generic Storage for a hash value
+   
+   ##################################################################### */
+                                                                        /*}}}*/
+#ifndef APTPKG_HASHSUM_TEMPLATE_H
+#define APTPKG_HASHSUM_TEMPLATE_H
+
+#include <string>
+#include <cstring>
+#include <algorithm>
+#include <stdint.h>
+
+using std::string;
+using std::min;
+
+template<int N>
+class HashSumValue
+{
+   unsigned char Sum[N/8];
+   
+   public:
+
+   // Accessors
+   bool operator ==(const HashSumValue &rhs) const
+   {
+      return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
+   }; 
+
+   string Value() const
+   {
+      char Conv[16] =
+      { '0','1','2','3','4','5','6','7','8','9','a','b',
+        'c','d','e','f'
+      };
+      char Result[((N/8)*2)+1];
+      Result[(N/8)*2] = 0;
+      
+      // Convert each char into two letters
+      int J = 0;
+      int I = 0;
+      for (; I != (N/8)*2; J++,I += 2)
+      {
+         Result[I] = Conv[Sum[J] >> 4];
+         Result[I + 1] = Conv[Sum[J] & 0xF];
+      }
+      return string(Result);
+   };
+   
+   inline void Value(unsigned char S[N/8])
+   {
+      for (int I = 0; I != sizeof(Sum); I++) 
+         S[I] = Sum[I];
+   };
+
+   inline operator string() const 
+   {
+      return Value();
+   };
+
+   bool Set(string Str) 
+   {
+      return Hex2Num(Str,Sum,sizeof(Sum));
+   };
+
+   inline void Set(unsigned char S[N/8]) 
+   {
+      for (int I = 0; I != sizeof(Sum); I++) 
+         Sum[I] = S[I];
+   };
+
+   HashSumValue(string Str) 
+   {
+         memset(Sum,0,sizeof(Sum));
+         Set(Str);
+   }
+   HashSumValue()
+   {
+      memset(Sum,0,sizeof(Sum));
+   }
+};
+
+#endif

+ 1 - 56
apt-pkg/contrib/md5.cc

@@ -165,61 +165,6 @@ static void MD5Transform(uint32_t buf[4], uint32_t const in[16])
    buf[3] += d;
    buf[3] += d;
 }
 }
 									/*}}}*/
 									/*}}}*/
-// MD5SumValue::MD5SumValue - Constructs the summation from a string	/*{{{*/
-// ---------------------------------------------------------------------
-/* The string form of a MD5 is a 32 character hex number */
-MD5SumValue::MD5SumValue(string Str)
-{
-   memset(Sum,0,sizeof(Sum));
-   Set(Str);
-}
-									/*}}}*/
-// MD5SumValue::MD5SumValue - Default constructor			/*{{{*/
-// ---------------------------------------------------------------------
-/* Sets the value to 0 */
-MD5SumValue::MD5SumValue()
-{
-   memset(Sum,0,sizeof(Sum));
-}
-									/*}}}*/
-// MD5SumValue::Set - Set the sum from a string				/*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the hex string into a set of chars */
-bool MD5SumValue::Set(string Str)
-{
-   return Hex2Num(Str,Sum,sizeof(Sum));
-}
-									/*}}}*/
-// MD5SumValue::Value - Convert the number into a string		/*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the set of chars into a hex string in lower case */
-string MD5SumValue::Value() const
-{
-   char Conv[16] = {'0','1','2','3','4','5','6','7','8','9','a','b',
-                    'c','d','e','f'};
-   char Result[33];
-   Result[32] = 0;
-   
-   // Convert each char into two letters
-   int J = 0;
-   int I = 0;
-   for (; I != 32; J++, I += 2)
-   {
-      Result[I] = Conv[Sum[J] >> 4];
-      Result[I + 1] = Conv[Sum[J] & 0xF];
-   } 
-
-   return string(Result);
-}
-									/*}}}*/
-// MD5SumValue::operator == - Comparitor				/*{{{*/
-// ---------------------------------------------------------------------
-/* Call memcmp on the buffer */
-bool MD5SumValue::operator ==(const MD5SumValue &rhs) const
-{
-   return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
-}
-									/*}}}*/
 // MD5Summation::MD5Summation - Initialize the summer			/*{{{*/
 // MD5Summation::MD5Summation - Initialize the summer			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* This assigns the deep magic initial values */
 /* This assigns the deep magic initial values */
@@ -353,7 +298,7 @@ MD5SumValue MD5Summation::Result()
    }
    }
    
    
    MD5SumValue V;
    MD5SumValue V;
-   memcpy(V.Sum,buf,16);
+   V.Set((char *)buf);
    return V;
    return V;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 3 - 20
apt-pkg/contrib/md5.h

@@ -32,28 +32,11 @@
 using std::string;
 using std::string;
 using std::min;
 using std::min;
 
 
-class MD5Summation;
+#include "hashsum_template.h"
 
 
-class MD5SumValue
-{
-   friend class MD5Summation;
-   unsigned char Sum[4*4];
-   
-   public:
-
-   // Accessors
-   bool operator ==(const MD5SumValue &rhs) const; 
-   string Value() const;
-   inline void Value(unsigned char S[16]) 
-         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
-   inline operator string() const {return Value();};
-   bool Set(string Str);
-   inline void Set(unsigned char S[16]) 
-         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
+class MD5Summation;
 
 
-   MD5SumValue(string Str);
-   MD5SumValue();
-};
+typedef HashSumValue<128> MD5SumValue;
 
 
 class MD5Summation
 class MD5Summation
 {
 {

+ 3 - 62
apt-pkg/contrib/sha1.cc

@@ -178,67 +178,6 @@ static void SHA1Transform(uint32_t state[5],uint8_t const buffer[64])
 }
 }
 									/*}}}*/
 									/*}}}*/
 
 
-// SHA1SumValue::SHA1SumValue - Constructs the summation from a string  /*{{{*/
-// ---------------------------------------------------------------------
-/* The string form of a SHA1 is a 40 character hex number */
-SHA1SumValue::SHA1SumValue(string Str)
-{
-   memset(Sum,0,sizeof(Sum));
-   Set(Str);
-}
-
-									/*}}} */
-// SHA1SumValue::SHA1SumValue - Default constructor                     /*{{{*/
-// ---------------------------------------------------------------------
-/* Sets the value to 0 */
-SHA1SumValue::SHA1SumValue()
-{
-   memset(Sum,0,sizeof(Sum));
-}
-
-									/*}}} */
-// SHA1SumValue::Set - Set the sum from a string                        /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the hex string into a set of chars */
-bool SHA1SumValue::Set(string Str)
-{
-   return Hex2Num(Str,Sum,sizeof(Sum));
-}
-
-									/*}}} */
-// SHA1SumValue::Value - Convert the number into a string               /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the set of chars into a hex string in lower case */
-string SHA1SumValue::Value() const
-{
-   char Conv[16] =
-      { '0','1','2','3','4','5','6','7','8','9','a','b',
-      'c','d','e','f'
-   };
-   char Result[41];
-   Result[40] = 0;
-
-   // Convert each char into two letters
-   int J = 0;
-   int I = 0;
-   for (; I != 40; J++,I += 2)
-   {
-      Result[I] = Conv[Sum[J] >> 4];
-      Result[I + 1] = Conv[Sum[J] & 0xF];
-   }
-
-   return string(Result);
-}
-
-									/*}}} */
-// SHA1SumValue::operator == - Comparator                               /*{{{*/
-// ---------------------------------------------------------------------
-/* Call memcmp on the buffer */
-bool SHA1SumValue::operator == (const SHA1SumValue & rhs) const
-{
-   return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
-}
-									/*}}}*/
 // SHA1Summation::SHA1Summation - Constructor                           /*{{{*/
 // SHA1Summation::SHA1Summation - Constructor                           /*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
@@ -290,11 +229,13 @@ SHA1SumValue SHA1Summation::Result()
 
 
    // Transfer over the result
    // Transfer over the result
    SHA1SumValue Value;
    SHA1SumValue Value;
+   char res[20];
    for (unsigned i = 0; i < 20; i++)
    for (unsigned i = 0; i < 20; i++)
    {
    {
-      Value.Sum[i] = (unsigned char)
+      res[i] = (unsigned char)
 	 ((state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
 	 ((state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255);
    }
    }
+   Value.Set(res);
    return Value;
    return Value;
 }
 }
 									/*}}}*/
 									/*}}}*/

+ 3 - 20
apt-pkg/contrib/sha1.h

@@ -21,28 +21,11 @@
 using std::string;
 using std::string;
 using std::min;
 using std::min;
 
 
-class SHA1Summation;
+#include "hashsum_template.h"
 
 
-class SHA1SumValue
-{
-   friend class SHA1Summation;
-   unsigned char Sum[20];
-   
-   public:
-
-   // Accessors
-   bool operator ==(const SHA1SumValue &rhs) const; 
-   string Value() const;
-   inline void Value(unsigned char S[20])
-         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
-   inline operator string() const {return Value();};
-   bool Set(string Str);
-   inline void Set(unsigned char S[20]) 
-         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
+class SHA1Summation;
 
 
-   SHA1SumValue(string Str);
-   SHA1SumValue();
-};
+typedef  HashSumValue<160> SHA1SumValue;
 
 
 class SHA1Summation
 class SHA1Summation
 {
 {

+ 43 - 0
apt-pkg/contrib/sha2.cc

@@ -0,0 +1,43 @@
+/*
+ * Cryptographic API.							{{{
+ *
+ * SHA-512, as specified in
+ * http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option) 
+ * any later version.
+ *
+ */									/*}}}*/
+
+#ifdef __GNUG__
+#pragma implementation "apt-pkg/sha2.h"
+#endif
+
+#include <apt-pkg/sha2.h>
+#include <apt-pkg/strutl.h>
+
+// SHA2Summation::AddFD - Add content of file into the checksum      /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool SHA2SummationBase::AddFD(int Fd,unsigned long Size){
+   unsigned char Buf[64 * 64];
+   int Res = 0;
+   int ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF)
+   {
+      unsigned n = sizeof(Buf);
+      if (!ToEOF) n = min(Size,(unsigned long)n);
+      Res = read(Fd,Buf,n);
+      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
+         return false;
+      if (ToEOF && Res == 0) // EOF
+         break;
+      Size -= Res;
+      Add(Buf,Res);
+   }
+   return true;
+}
+                                                                       /*}}}*/
+

+ 114 - 0
apt-pkg/contrib/sha2.h

@@ -0,0 +1,114 @@
+// -*- mode: cpp; mode: fold -*-
+// Description                                                          /*{{{*/
+// $Id: sha512.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
+/* ######################################################################
+
+   SHA{512,256}SumValue - Storage for a SHA-{512,256} hash.
+   SHA{512,256}Summation - SHA-{512,256} Secure Hash Algorithm.
+   
+   This is a C++ interface to a set of SHA{512,256}Sum functions, that mirrors
+   the equivalent MD5 & SHA1 classes. 
+
+   ##################################################################### */
+                                                                        /*}}}*/
+#ifndef APTPKG_SHA2_H
+#define APTPKG_SHA2_H
+
+#include <string>
+#include <cstring>
+#include <algorithm>
+#include <stdint.h>
+
+#include "sha2_internal.h"
+#include "hashsum_template.h"
+
+using std::string;
+using std::min;
+
+class SHA512Summation;
+class SHA256Summation;
+
+typedef HashSumValue<512> SHA512SumValue;
+typedef HashSumValue<256> SHA256SumValue;
+
+class SHA2SummationBase
+{
+ protected:
+   bool Done;
+ public:
+   virtual bool Add(const unsigned char *inbuf,unsigned long inlen) = 0;
+   virtual bool AddFD(int Fd,unsigned long Size);
+
+   inline bool Add(const char *Data) 
+   {
+      return Add((unsigned char *)Data,strlen(Data));
+   };
+   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
+   {
+      return Add(Beg,End-Beg);
+   };
+   void Result();
+};
+
+class SHA256Summation : public SHA2SummationBase
+{
+   SHA256_CTX ctx;
+   unsigned char Sum[32];
+
+   public:
+   virtual bool Add(const unsigned char *inbuf, unsigned long len)
+   {
+      if (Done) 
+         return false;
+      SHA256_Update(&ctx, inbuf, len);
+      return true;
+   };
+   SHA256SumValue Result()
+   {
+      if (!Done) {
+         SHA256_Final(Sum, &ctx);
+         Done = true;
+      }
+      SHA256SumValue res;
+      res.Set(Sum);
+      return res;
+   };
+   SHA256Summation() 
+   {
+      SHA256_Init(&ctx);
+      Done = false;
+   };
+};
+
+class SHA512Summation : public SHA2SummationBase
+{
+   SHA512_CTX ctx;
+   unsigned char Sum[64];
+
+   public:
+   virtual bool Add(const unsigned char *inbuf, unsigned long len)
+   {
+      if (Done) 
+         return false;
+      SHA512_Update(&ctx, inbuf, len);
+      return true;
+   };
+   SHA512SumValue Result()
+   {
+      if (!Done) {
+         SHA512_Final(Sum, &ctx);
+         Done = true;
+      }
+      SHA512SumValue res;
+      res.Set(Sum);
+      return res;
+   };
+   SHA512Summation()
+   {
+      SHA512_Init(&ctx);
+      Done = false;
+   };
+};
+
+
+#endif

+ 0 - 424
apt-pkg/contrib/sha256.cc

@@ -1,424 +0,0 @@
-/*
- * Cryptographic API.							{{{
- *
- * SHA-256, as specified in
- * http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf
- *
- * SHA-256 code by Jean-Luc Cooke <jlcooke@certainkey.com>.
- *
- * Copyright (c) Jean-Luc Cooke <jlcooke@certainkey.com>
- * Copyright (c) Andrew McDonald <andrew@mcdonald.org.uk>
- * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
- *
- * Ported from the Linux kernel to Apt by Anthony Towns <ajt@debian.org>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) 
- * any later version.
- *
- */									/*}}}*/
-
-#ifdef __GNUG__
-#pragma implementation "apt-pkg/sha256.h"
-#endif
-
-
-#define SHA256_DIGEST_SIZE      32
-#define SHA256_HMAC_BLOCK_SIZE  64
-
-#define ror32(value,bits) (((value) >> (bits)) | ((value) << (32 - (bits))))
-
-#include <apt-pkg/sha256.h>
-#include <apt-pkg/strutl.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <arpa/inet.h>
-
-typedef uint32_t u32;
-typedef uint8_t  u8;
-
-static inline u32 Ch(u32 x, u32 y, u32 z)
-{
-        return z ^ (x & (y ^ z));
-}
-
-static inline u32 Maj(u32 x, u32 y, u32 z)
-{
-        return (x & y) | (z & (x | y));
-}
-
-#define e0(x)       (ror32(x, 2) ^ ror32(x,13) ^ ror32(x,22))
-#define e1(x)       (ror32(x, 6) ^ ror32(x,11) ^ ror32(x,25))
-#define s0(x)       (ror32(x, 7) ^ ror32(x,18) ^ (x >> 3))
-#define s1(x)       (ror32(x,17) ^ ror32(x,19) ^ (x >> 10))
-
-#define H0         0x6a09e667
-#define H1         0xbb67ae85
-#define H2         0x3c6ef372
-#define H3         0xa54ff53a
-#define H4         0x510e527f
-#define H5         0x9b05688c
-#define H6         0x1f83d9ab
-#define H7         0x5be0cd19
-
-static inline void LOAD_OP(int I, u32 *W, const u8 *input)		/*{{{*/
-{
-	W[I] = (  ((u32) input[I * 4 + 0] << 24)
-		| ((u32) input[I * 4 + 1] << 16)
-		| ((u32) input[I * 4 + 2] << 8)
-		| ((u32) input[I * 4 + 3]));
-}
-									/*}}}*/
-static inline void BLEND_OP(int I, u32 *W)
-{
-        W[I] = s1(W[I-2]) + W[I-7] + s0(W[I-15]) + W[I-16];
-}
-
-static void sha256_transform(u32 *state, const u8 *input)		/*{{{*/
-{
-        u32 a, b, c, d, e, f, g, h, t1, t2;
-        u32 W[64];
-        int i;
-
-        /* load the input */
-        for (i = 0; i < 16; i++)
-                LOAD_OP(i, W, input);
-
-        /* now blend */
-        for (i = 16; i < 64; i++)
-                BLEND_OP(i, W);
-    
-        /* load the state into our registers */
-        a=state[0];  b=state[1];  c=state[2];  d=state[3];
-        e=state[4];  f=state[5];  g=state[6];  h=state[7];
-
-        /* now iterate */
-        t1 = h + e1(e) + Ch(e,f,g) + 0x428a2f98 + W[ 0];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x71374491 + W[ 1];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0xb5c0fbcf + W[ 2];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0xe9b5dba5 + W[ 3];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x3956c25b + W[ 4];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x59f111f1 + W[ 5];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x923f82a4 + W[ 6];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0xab1c5ed5 + W[ 7];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0xd807aa98 + W[ 8];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x12835b01 + W[ 9];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x243185be + W[10];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x550c7dc3 + W[11];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x72be5d74 + W[12];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x80deb1fe + W[13];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x9bdc06a7 + W[14];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0xc19bf174 + W[15];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0xe49b69c1 + W[16];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0xefbe4786 + W[17];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x0fc19dc6 + W[18];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x240ca1cc + W[19];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x2de92c6f + W[20];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x4a7484aa + W[21];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x5cb0a9dc + W[22];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x76f988da + W[23];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x983e5152 + W[24];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0xa831c66d + W[25];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0xb00327c8 + W[26];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0xbf597fc7 + W[27];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0xc6e00bf3 + W[28];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0xd5a79147 + W[29];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x06ca6351 + W[30];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x14292967 + W[31];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x27b70a85 + W[32];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x2e1b2138 + W[33];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x4d2c6dfc + W[34];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x53380d13 + W[35];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x650a7354 + W[36];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x766a0abb + W[37];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x81c2c92e + W[38];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x92722c85 + W[39];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0xa2bfe8a1 + W[40];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0xa81a664b + W[41];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0xc24b8b70 + W[42];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0xc76c51a3 + W[43];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0xd192e819 + W[44];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0xd6990624 + W[45];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0xf40e3585 + W[46];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x106aa070 + W[47];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x19a4c116 + W[48];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x1e376c08 + W[49];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x2748774c + W[50];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x34b0bcb5 + W[51];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x391c0cb3 + W[52];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0x4ed8aa4a + W[53];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0x5b9cca4f + W[54];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0x682e6ff3 + W[55];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        t1 = h + e1(e) + Ch(e,f,g) + 0x748f82ee + W[56];
-        t2 = e0(a) + Maj(a,b,c);    d+=t1;    h=t1+t2;
-        t1 = g + e1(d) + Ch(d,e,f) + 0x78a5636f + W[57];
-        t2 = e0(h) + Maj(h,a,b);    c+=t1;    g=t1+t2;
-        t1 = f + e1(c) + Ch(c,d,e) + 0x84c87814 + W[58];
-        t2 = e0(g) + Maj(g,h,a);    b+=t1;    f=t1+t2;
-        t1 = e + e1(b) + Ch(b,c,d) + 0x8cc70208 + W[59];
-        t2 = e0(f) + Maj(f,g,h);    a+=t1;    e=t1+t2;
-        t1 = d + e1(a) + Ch(a,b,c) + 0x90befffa + W[60];
-        t2 = e0(e) + Maj(e,f,g);    h+=t1;    d=t1+t2;
-        t1 = c + e1(h) + Ch(h,a,b) + 0xa4506ceb + W[61];
-        t2 = e0(d) + Maj(d,e,f);    g+=t1;    c=t1+t2;
-        t1 = b + e1(g) + Ch(g,h,a) + 0xbef9a3f7 + W[62];
-        t2 = e0(c) + Maj(c,d,e);    f+=t1;    b=t1+t2;
-        t1 = a + e1(f) + Ch(f,g,h) + 0xc67178f2 + W[63];
-        t2 = e0(b) + Maj(b,c,d);    e+=t1;    a=t1+t2;
-
-        state[0] += a; state[1] += b; state[2] += c; state[3] += d;
-        state[4] += e; state[5] += f; state[6] += g; state[7] += h;
-
-        /* clear any sensitive info... */
-        a = b = c = d = e = f = g = h = t1 = t2 = 0;
-        memset(W, 0, 64 * sizeof(u32));
-}
-									/*}}}*/
-SHA256Summation::SHA256Summation()					/*{{{*/
-{
-        Sum.state[0] = H0;
-        Sum.state[1] = H1;
-        Sum.state[2] = H2;
-        Sum.state[3] = H3;
-        Sum.state[4] = H4;
-        Sum.state[5] = H5;
-        Sum.state[6] = H6;
-        Sum.state[7] = H7;
-        Sum.count[0] = Sum.count[1] = 0;
-        memset(Sum.buf, 0, sizeof(Sum.buf));
-        Done = false;
-}
-									/*}}}*/
-bool SHA256Summation::Add(const u8 *data, unsigned long len)		/*{{{*/
-{
-        struct sha256_ctx *sctx = &Sum;
-        unsigned int i, index, part_len;
-
-        if (Done) return false;
-
-        /* Compute number of bytes mod 128 */
-        index = (unsigned int)((sctx->count[0] >> 3) & 0x3f);
-
-        /* Update number of bits */
-        if ((sctx->count[0] += (len << 3)) < (len << 3)) {
-                sctx->count[1]++;
-                sctx->count[1] += (len >> 29);
-        }
-
-        part_len = 64 - index;
-
-        /* Transform as many times as possible. */
-        if (len >= part_len) {
-                memcpy(&sctx->buf[index], data, part_len);
-                sha256_transform(sctx->state, sctx->buf);
-
-                for (i = part_len; i + 63 < len; i += 64)
-                        sha256_transform(sctx->state, &data[i]);
-                index = 0;
-        } else {
-                i = 0;
-        }
-
-        /* Buffer remaining input */
-        memcpy(&sctx->buf[index], &data[i], len-i);
-
-        return true;
-}
-									/*}}}*/
-SHA256SumValue SHA256Summation::Result()				/*{{{*/
-{
-   struct sha256_ctx *sctx = &Sum;
-   if (!Done) {
-        u8 bits[8];
-        unsigned int index, pad_len, t;
-        static const u8 padding[64] = { 0x80, };
-
-        /* Save number of bits */
-        t = sctx->count[0];
-        bits[7] = t; t >>= 8;
-        bits[6] = t; t >>= 8;
-        bits[5] = t; t >>= 8;
-        bits[4] = t;
-        t = sctx->count[1];
-        bits[3] = t; t >>= 8;
-        bits[2] = t; t >>= 8;
-        bits[1] = t; t >>= 8;
-        bits[0] = t;
-
-        /* Pad out to 56 mod 64. */
-        index = (sctx->count[0] >> 3) & 0x3f;
-        pad_len = (index < 56) ? (56 - index) : ((64+56) - index);
-        Add(padding, pad_len);
-
-        /* Append length (before padding) */
-        Add(bits, 8);
-   }
-
-   Done = true;
-
-   /* Store state in digest */
-
-   SHA256SumValue res;
-   u8 *out = res.Sum;
-
-   int i, j;
-   unsigned int t;
-   for (i = j = 0; i < 8; i++, j += 4) {
-      t = sctx->state[i];
-      out[j+3] = t; t >>= 8;
-      out[j+2] = t; t >>= 8;
-      out[j+1] = t; t >>= 8;
-      out[j  ] = t;
-   }
-
-   return res;
-}
-									/*}}}*/
-// SHA256SumValue::SHA256SumValue - Constructs the sum from a string   /*{{{*/
-// ---------------------------------------------------------------------
-/* The string form of a SHA256 is a 64 character hex number */
-SHA256SumValue::SHA256SumValue(string Str)
-{
-   memset(Sum,0,sizeof(Sum));
-   Set(Str);
-}
-                                                                       /*}}}*/
-// SHA256SumValue::SHA256SumValue - Default constructor                /*{{{*/
-// ---------------------------------------------------------------------
-/* Sets the value to 0 */
-SHA256SumValue::SHA256SumValue()
-{
-   memset(Sum,0,sizeof(Sum));
-}
-                                                                       /*}}}*/
-// SHA256SumValue::Set - Set the sum from a string                     /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the hex string into a set of chars */
-bool SHA256SumValue::Set(string Str)
-{
-   return Hex2Num(Str,Sum,sizeof(Sum));
-}
-                                                                       /*}}}*/
-// SHA256SumValue::Value - Convert the number into a string            /*{{{*/
-// ---------------------------------------------------------------------
-/* Converts the set of chars into a hex string in lower case */
-string SHA256SumValue::Value() const
-{
-   char Conv[16] =
-      { '0','1','2','3','4','5','6','7','8','9','a','b',
-      'c','d','e','f'
-   };
-   char Result[65];
-   Result[64] = 0;
-
-   // Convert each char into two letters
-   int J = 0;
-   int I = 0;
-   for (; I != 64; J++,I += 2)
-   {
-      Result[I] = Conv[Sum[J] >> 4];
-      Result[I + 1] = Conv[Sum[J] & 0xF];
-   }
-
-   return string(Result);
-}
-									/*}}}*/
-// SHA256SumValue::operator == - Comparator                            /*{{{*/
-// ---------------------------------------------------------------------
-/* Call memcmp on the buffer */
-bool SHA256SumValue::operator == (const SHA256SumValue & rhs) const
-{
-   return memcmp(Sum,rhs.Sum,sizeof(Sum)) == 0;
-}
-                                                                       /*}}}*/
-// SHA256Summation::AddFD - Add content of file into the checksum      /*{{{*/
-// ---------------------------------------------------------------------
-/* */
-bool SHA256Summation::AddFD(int Fd,unsigned long Size)
-{
-   unsigned char Buf[64 * 64];
-   int Res = 0;
-   int ToEOF = (Size == 0);
-   while (Size != 0 || ToEOF)
-   {
-      unsigned n = sizeof(Buf);
-      if (!ToEOF) n = min(Size,(unsigned long)n);
-      Res = read(Fd,Buf,n);
-      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
-         return false;
-      if (ToEOF && Res == 0) // EOF
-         break;
-      Size -= Res;
-      Add(Buf,Res);
-   }
-   return true;
-}
-                                                                       /*}}}*/
-

+ 2 - 66
apt-pkg/contrib/sha256.h

@@ -1,72 +1,8 @@
-// -*- mode: cpp; mode: fold -*-
-// Description                                                          /*{{{*/
-// $Id: sha1.h,v 1.3 2001/05/07 05:05:47 jgg Exp $
-/* ######################################################################
-
-   SHA256SumValue - Storage for a SHA-256 hash.
-   SHA256Summation - SHA-256 Secure Hash Algorithm.
-   
-   This is a C++ interface to a set of SHA256Sum functions, that mirrors
-   the equivalent MD5 & SHA1 classes. 
-
-   ##################################################################### */
-                                                                        /*}}}*/
 #ifndef APTPKG_SHA256_H
 #ifndef APTPKG_SHA256_H
 #define APTPKG_SHA256_H
 #define APTPKG_SHA256_H
 
 
-#include <string>
-#include <cstring>
-#include <algorithm>
-#include <stdint.h>
-
-using std::string;
-using std::min;
-
-class SHA256Summation;
-
-class SHA256SumValue
-{
-   friend class SHA256Summation;
-   unsigned char Sum[32];
-   
-   public:
-
-   // Accessors
-   bool operator ==(const SHA256SumValue &rhs) const; 
-   string Value() const;
-   inline void Value(unsigned char S[32])
-         {for (int I = 0; I != sizeof(Sum); I++) S[I] = Sum[I];};
-   inline operator string() const {return Value();};
-   bool Set(string Str);
-   inline void Set(unsigned char S[32]) 
-         {for (int I = 0; I != sizeof(Sum); I++) Sum[I] = S[I];};
-
-   SHA256SumValue(string Str);
-   SHA256SumValue();
-};
-
-struct sha256_ctx {
-    uint32_t count[2];
-    uint32_t state[8];
-    uint8_t buf[128];
-};
-
-class SHA256Summation
-{
-   struct sha256_ctx Sum;
-
-   bool Done;
-
-   public:
+#include "sha2.h"
 
 
-   bool Add(const unsigned char *inbuf,unsigned long inlen);
-   inline bool Add(const char *Data) {return Add((unsigned char *)Data,strlen(Data));};
-   bool AddFD(int Fd,unsigned long Size);
-   inline bool Add(const unsigned char *Beg,const unsigned char *End) 
-                  {return Add(Beg,End-Beg);};
-   SHA256SumValue Result();
-   
-   SHA256Summation();
-};
+#warn "This header is deprecated, please include sha2.h instead"
 
 
 #endif
 #endif

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1065 - 0
apt-pkg/contrib/sha2_internal.cc


+ 197 - 0
apt-pkg/contrib/sha2_internal.h

@@ -0,0 +1,197 @@
+/*
+ * FILE:	sha2.h
+ * AUTHOR:	Aaron D. Gifford - http://www.aarongifford.com/
+ * 
+ * Copyright (c) 2000-2001, Aaron D. Gifford
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holder nor the names of contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
+ */
+
+#ifndef __SHA2_H__
+#define __SHA2_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Import u_intXX_t size_t type definitions from system headers.  You
+ * may need to change this, or define these things yourself in this
+ * file.
+ */
+#include <sys/types.h>
+
+#ifdef SHA2_USE_INTTYPES_H
+
+#include <inttypes.h>
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+
+/*** SHA-256/384/512 Various Length Definitions ***********************/
+#define SHA256_BLOCK_LENGTH		64
+#define SHA256_DIGEST_LENGTH		32
+#define SHA256_DIGEST_STRING_LENGTH	(SHA256_DIGEST_LENGTH * 2 + 1)
+#define SHA384_BLOCK_LENGTH		128
+#define SHA384_DIGEST_LENGTH		48
+#define SHA384_DIGEST_STRING_LENGTH	(SHA384_DIGEST_LENGTH * 2 + 1)
+#define SHA512_BLOCK_LENGTH		128
+#define SHA512_DIGEST_LENGTH		64
+#define SHA512_DIGEST_STRING_LENGTH	(SHA512_DIGEST_LENGTH * 2 + 1)
+
+
+/*** SHA-256/384/512 Context Structures *******************************/
+/* NOTE: If your architecture does not define either u_intXX_t types or
+ * uintXX_t (from inttypes.h), you may need to define things by hand
+ * for your system:
+ */
+#if 0
+typedef unsigned char u_int8_t;		/* 1-byte  (8-bits)  */
+typedef unsigned int u_int32_t;		/* 4-bytes (32-bits) */
+typedef unsigned long long u_int64_t;	/* 8-bytes (64-bits) */
+#endif
+/*
+ * Most BSD systems already define u_intXX_t types, as does Linux.
+ * Some systems, however, like Compaq's Tru64 Unix instead can use
+ * uintXX_t types defined by very recent ANSI C standards and included
+ * in the file:
+ *
+ *   #include <inttypes.h>
+ *
+ * If you choose to use <inttypes.h> then please define: 
+ *
+ *   #define SHA2_USE_INTTYPES_H
+ *
+ * Or on the command line during compile:
+ *
+ *   cc -DSHA2_USE_INTTYPES_H ...
+ */
+#ifdef SHA2_USE_INTTYPES_H
+
+typedef struct _SHA256_CTX {
+	uint32_t	state[8];
+	uint64_t	bitcount;
+	uint8_t	buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+	uint64_t	state[8];
+	uint64_t	bitcount[2];
+	uint8_t	buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+#else /* SHA2_USE_INTTYPES_H */
+
+typedef struct _SHA256_CTX {
+	u_int32_t	state[8];
+	u_int64_t	bitcount;
+	u_int8_t	buffer[SHA256_BLOCK_LENGTH];
+} SHA256_CTX;
+typedef struct _SHA512_CTX {
+	u_int64_t	state[8];
+	u_int64_t	bitcount[2];
+	u_int8_t	buffer[SHA512_BLOCK_LENGTH];
+} SHA512_CTX;
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+typedef SHA512_CTX SHA384_CTX;
+
+
+/*** SHA-256/384/512 Function Prototypes ******************************/
+#ifndef NOPROTO
+#ifdef SHA2_USE_INTTYPES_H
+
+void SHA256_Init(SHA256_CTX *);
+void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
+void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void SHA384_Init(SHA384_CTX*);
+void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
+void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void SHA512_Init(SHA512_CTX*);
+void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
+void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+
+#else /* SHA2_USE_INTTYPES_H */
+
+void SHA256_Init(SHA256_CTX *);
+void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
+void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
+char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
+char* SHA256_Data(const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
+
+void SHA384_Init(SHA384_CTX*);
+void SHA384_Update(SHA384_CTX*, const u_int8_t*, size_t);
+void SHA384_Final(u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
+char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
+char* SHA384_Data(const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
+
+void SHA512_Init(SHA512_CTX*);
+void SHA512_Update(SHA512_CTX*, const u_int8_t*, size_t);
+void SHA512_Final(u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
+char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
+char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
+
+#endif /* SHA2_USE_INTTYPES_H */
+
+#else /* NOPROTO */
+
+void SHA256_Init();
+void SHA256_Update();
+void SHA256_Final();
+char* SHA256_End();
+char* SHA256_Data();
+
+void SHA384_Init();
+void SHA384_Update();
+void SHA384_Final();
+char* SHA384_End();
+char* SHA384_Data();
+
+void SHA512_Init();
+void SHA512_Update();
+void SHA512_Final();
+char* SHA512_End();
+char* SHA512_Data();
+
+#endif /* NOPROTO */
+
+#ifdef	__cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __SHA2_H__ */
+

+ 5 - 10
apt-pkg/deb/debindexfile.cc

@@ -423,12 +423,10 @@ string debTranslationsIndex::IndexURI(const char *Type) const
 /* */
 /* */
 bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const
 bool debTranslationsIndex::GetIndexes(pkgAcquire *Owner) const
 {
 {
-   if (TranslationsAvailable()) {
-     string const TranslationFile = string("Translation-").append(Language);
-     new pkgAcqIndexTrans(Owner, IndexURI(Language),
-			  Info(TranslationFile.c_str()),
-			  TranslationFile);
-   }
+   string const TranslationFile = string("Translation-").append(Language);
+   new pkgAcqIndexTrans(Owner, IndexURI(Language),
+                        Info(TranslationFile.c_str()),
+                        TranslationFile);
 
 
    return true;
    return true;
 }
 }
@@ -468,9 +466,6 @@ string debTranslationsIndex::Info(const char *Type) const
 									/*}}}*/
 									/*}}}*/
 bool debTranslationsIndex::HasPackages() const				/*{{{*/
 bool debTranslationsIndex::HasPackages() const				/*{{{*/
 {
 {
-   if(!TranslationsAvailable())
-      return false;
-   
    return FileExists(IndexFile(Language));
    return FileExists(IndexFile(Language));
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -510,7 +505,7 @@ bool debTranslationsIndex::Merge(pkgCacheGenerator &Gen,OpProgress *Prog) const
 {
 {
    // Check the translation file, if in use
    // Check the translation file, if in use
    string TranslationFile = IndexFile(Language);
    string TranslationFile = IndexFile(Language);
-   if (TranslationsAvailable() && FileExists(TranslationFile))
+   if (FileExists(TranslationFile))
    {
    {
      FileFd Trans(TranslationFile,FileFd::ReadOnlyGzip);
      FileFd Trans(TranslationFile,FileFd::ReadOnlyGzip);
      debListParser TransParser(&Trans);
      debListParser TransParser(&Trans);

+ 16 - 0
apt-pkg/deb/debindexfile.h

@@ -22,6 +22,9 @@
 
 
 class debStatusIndex : public pkgIndexFile
 class debStatusIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    string File;
    string File;
 
 
@@ -41,10 +44,14 @@ class debStatusIndex : public pkgIndexFile
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
 
    debStatusIndex(string File);
    debStatusIndex(string File);
+   virtual ~debStatusIndex() {};
 };
 };
     
     
 class debPackagesIndex : public pkgIndexFile
 class debPackagesIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    string URI;
    string URI;
    string Dist;
    string Dist;
    string Section;
    string Section;
@@ -74,10 +81,14 @@ class debPackagesIndex : public pkgIndexFile
 
 
    debPackagesIndex(string const &URI, string const &Dist, string const &Section,
    debPackagesIndex(string const &URI, string const &Dist, string const &Section,
 			bool const &Trusted, string const &Arch = "native");
 			bool const &Trusted, string const &Arch = "native");
+   virtual ~debPackagesIndex() {};
 };
 };
 
 
 class debTranslationsIndex : public pkgIndexFile
 class debTranslationsIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    string URI;
    string URI;
    string Dist;
    string Dist;
    string Section;
    string Section;
@@ -105,10 +116,14 @@ class debTranslationsIndex : public pkgIndexFile
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
    virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
 
 
    debTranslationsIndex(string URI,string Dist,string Section, char const * const Language);
    debTranslationsIndex(string URI,string Dist,string Section, char const * const Language);
+   virtual ~debTranslationsIndex() {};
 };
 };
 
 
 class debSourcesIndex : public pkgIndexFile
 class debSourcesIndex : public pkgIndexFile
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    string URI;
    string URI;
    string Dist;
    string Dist;
    string Section;
    string Section;
@@ -138,6 +153,7 @@ class debSourcesIndex : public pkgIndexFile
    virtual unsigned long Size() const;
    virtual unsigned long Size() const;
    
    
    debSourcesIndex(string URI,string Dist,string Section,bool Trusted);
    debSourcesIndex(string URI,string Dist,string Section,bool Trusted);
+   virtual ~debSourcesIndex() {};
 };
 };
 
 
 #endif
 #endif

+ 1 - 1
apt-pkg/deb/deblistparser.cc

@@ -196,7 +196,7 @@ string debListParser::DescriptionLanguage()
    if (Section.FindS("Description").empty() == false)
    if (Section.FindS("Description").empty() == false)
       return "";
       return "";
 
 
-   std::vector<string> const lang = APT::Configuration::getLanguages();
+   std::vector<string> const lang = APT::Configuration::getLanguages(true);
    for (std::vector<string>::const_iterator l = lang.begin();
    for (std::vector<string>::const_iterator l = lang.begin();
 	l != lang.end(); l++)
 	l != lang.end(); l++)
       if (Section.FindS(string("Description-").append(*l).c_str()).empty() == false)
       if (Section.FindS(string("Description-").append(*l).c_str()).empty() == false)

+ 5 - 1
apt-pkg/deb/deblistparser.h

@@ -26,8 +26,11 @@ class debListParser : public pkgCacheGenerator::ListParser
       unsigned char Val;
       unsigned char Val;
    };
    };
 
 
-   protected:
+   private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
 
 
+   protected:
    pkgTagFile Tags;
    pkgTagFile Tags;
    pkgTagSection Section;
    pkgTagSection Section;
    unsigned long iOffset;
    unsigned long iOffset;
@@ -74,6 +77,7 @@ class debListParser : public pkgCacheGenerator::ListParser
    static const char *ConvertRelation(const char *I,unsigned int &Op);
    static const char *ConvertRelation(const char *I,unsigned int &Op);
 
 
    debListParser(FileFd *File, string const &Arch = "");
    debListParser(FileFd *File, string const &Arch = "");
+   virtual ~debListParser() {};
 };
 };
 
 
 #endif
 #endif

+ 3 - 1
apt-pkg/deb/debmetaindex.h

@@ -19,12 +19,14 @@ class debReleaseIndex : public metaIndex {
    };
    };
 
 
    private:
    private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
    std::map<string, vector<debSectionEntry const*> > ArchEntries;
    std::map<string, vector<debSectionEntry const*> > ArchEntries;
 
 
    public:
    public:
 
 
    debReleaseIndex(string const &URI, string const &Dist);
    debReleaseIndex(string const &URI, string const &Dist);
-   ~debReleaseIndex();
+   virtual ~debReleaseIndex();
 
 
    virtual string ArchiveURI(string const &File) const {return URI + File;};
    virtual string ArchiveURI(string const &File) const {return URI + File;};
    virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const;
    virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const;

+ 9 - 1
apt-pkg/deb/debrecords.cc

@@ -77,7 +77,7 @@ string debRecordParser::SHA1Hash()
    return Section.FindS("SHA1");
    return Section.FindS("SHA1");
 }
 }
 									/*}}}*/
 									/*}}}*/
-// RecordParser::SHA1Hash - Return the archive hash			/*{{{*/
+// RecordParser::SHA256Hash - Return the archive hash			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 string debRecordParser::SHA256Hash()
 string debRecordParser::SHA256Hash()
@@ -85,6 +85,14 @@ string debRecordParser::SHA256Hash()
    return Section.FindS("SHA256");
    return Section.FindS("SHA256");
 }
 }
 									/*}}}*/
 									/*}}}*/
+// RecordParser::SHA512Hash - Return the archive hash			/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+string debRecordParser::SHA512Hash()
+{
+   return Section.FindS("SHA512");
+}
+									/*}}}*/
 // RecordParser::Maintainer - Return the maintainer email		/*{{{*/
 // RecordParser::Maintainer - Return the maintainer email		/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */

+ 5 - 0
apt-pkg/deb/debrecords.h

@@ -20,6 +20,9 @@
 
 
 class debRecordParser : public pkgRecords::Parser
 class debRecordParser : public pkgRecords::Parser
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    FileFd File;
    FileFd File;
    pkgTagFile Tags;
    pkgTagFile Tags;
    pkgTagSection Section;
    pkgTagSection Section;
@@ -36,6 +39,7 @@ class debRecordParser : public pkgRecords::Parser
    virtual string MD5Hash();
    virtual string MD5Hash();
    virtual string SHA1Hash();
    virtual string SHA1Hash();
    virtual string SHA256Hash();
    virtual string SHA256Hash();
+   virtual string SHA512Hash();
    virtual string SourcePkg();
    virtual string SourcePkg();
    virtual string SourceVer();
    virtual string SourceVer();
    
    
@@ -49,6 +53,7 @@ class debRecordParser : public pkgRecords::Parser
    virtual void GetRec(const char *&Start,const char *&Stop);
    virtual void GetRec(const char *&Start,const char *&Stop);
    
    
    debRecordParser(string FileName,pkgCache &Cache);
    debRecordParser(string FileName,pkgCache &Cache);
+   virtual ~debRecordParser() {};
 };
 };
 
 
 #endif
 #endif

+ 4 - 1
apt-pkg/deb/debsrcrecords.h

@@ -18,6 +18,9 @@
 
 
 class debSrcRecordParser : public pkgSrcRecords::Parser
 class debSrcRecordParser : public pkgSrcRecords::Parser
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    FileFd Fd;
    FileFd Fd;
    pkgTagFile Tags;
    pkgTagFile Tags;
    pkgTagSection Sect;
    pkgTagSection Sect;
@@ -50,7 +53,7 @@ class debSrcRecordParser : public pkgSrcRecords::Parser
    debSrcRecordParser(string const &File,pkgIndexFile const *Index) 
    debSrcRecordParser(string const &File,pkgIndexFile const *Index) 
       : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), 
       : Parser(Index), Fd(File,FileFd::ReadOnlyGzip), Tags(&Fd,102400), 
         Buffer(0), BufSize(0) {}
         Buffer(0), BufSize(0) {}
-   ~debSrcRecordParser();
+   virtual ~debSrcRecordParser();
 };
 };
 
 
 #endif
 #endif

+ 36 - 26
apt-pkg/deb/debsystem.cc

@@ -26,15 +26,24 @@
 
 
 debSystem debSys;
 debSystem debSys;
 
 
+class debSystemPrivate {
+public:
+   debSystemPrivate() : LockFD(-1), LockCount(0), StatusFile(0)
+   {
+   }
+   // For locking support
+   int LockFD;
+   unsigned LockCount;
+   
+   debStatusIndex *StatusFile;
+};
+
 // System::debSystem - Constructor					/*{{{*/
 // System::debSystem - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 debSystem::debSystem()
 debSystem::debSystem()
 {
 {
-   LockFD = -1;
-   LockCount = 0;
-   StatusFile = 0;
-   
+   d = new debSystemPrivate();
    Label = "Debian dpkg interface";
    Label = "Debian dpkg interface";
    VS = &debVS;
    VS = &debVS;
 }
 }
@@ -44,7 +53,8 @@ debSystem::debSystem()
 /* */
 /* */
 debSystem::~debSystem()
 debSystem::~debSystem()
 {
 {
-   delete StatusFile;
+   delete d->StatusFile;
+   delete d;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // System::Lock - Get the lock						/*{{{*/
 // System::Lock - Get the lock						/*{{{*/
@@ -54,16 +64,16 @@ debSystem::~debSystem()
 bool debSystem::Lock()
 bool debSystem::Lock()
 {
 {
    // Disable file locking
    // Disable file locking
-   if (_config->FindB("Debug::NoLocking",false) == true || LockCount > 1)
+   if (_config->FindB("Debug::NoLocking",false) == true || d->LockCount > 1)
    {
    {
-      LockCount++;
+      d->LockCount++;
       return true;
       return true;
    }
    }
 
 
    // Create the lockfile
    // Create the lockfile
    string AdminDir = flNotFile(_config->Find("Dir::State::status"));
    string AdminDir = flNotFile(_config->Find("Dir::State::status"));
-   LockFD = GetLock(AdminDir + "lock");
-   if (LockFD == -1)
+   d->LockFD = GetLock(AdminDir + "lock");
+   if (d->LockFD == -1)
    {
    {
       if (errno == EACCES || errno == EAGAIN)
       if (errno == EACCES || errno == EAGAIN)
 	 return _error->Error(_("Unable to lock the administration directory (%s), "
 	 return _error->Error(_("Unable to lock the administration directory (%s), "
@@ -76,8 +86,8 @@ bool debSystem::Lock()
    // See if we need to abort with a dirty journal
    // See if we need to abort with a dirty journal
    if (CheckUpdates() == true)
    if (CheckUpdates() == true)
    {
    {
-      close(LockFD);
-      LockFD = -1;
+      close(d->LockFD);
+      d->LockFD = -1;
       const char *cmd;
       const char *cmd;
       if (getenv("SUDO_USER") != NULL)
       if (getenv("SUDO_USER") != NULL)
 	 cmd = "sudo dpkg --configure -a";
 	 cmd = "sudo dpkg --configure -a";
@@ -89,7 +99,7 @@ bool debSystem::Lock()
                              "run '%s' to correct the problem. "), cmd);
                              "run '%s' to correct the problem. "), cmd);
    }
    }
 
 
-	 LockCount++;
+	 d->LockCount++;
       
       
    return true;
    return true;
 }
 }
@@ -99,15 +109,15 @@ bool debSystem::Lock()
 /* */
 /* */
 bool debSystem::UnLock(bool NoErrors)
 bool debSystem::UnLock(bool NoErrors)
 {
 {
-   if (LockCount == 0 && NoErrors == true)
+   if (d->LockCount == 0 && NoErrors == true)
       return false;
       return false;
    
    
-   if (LockCount < 1)
+   if (d->LockCount < 1)
       return _error->Error(_("Not locked"));
       return _error->Error(_("Not locked"));
-   if (--LockCount == 0)
+   if (--d->LockCount == 0)
    {
    {
-      close(LockFD);
-      LockCount = 0;
+      close(d->LockFD);
+      d->LockCount = 0;
    }
    }
    
    
    return true;
    return true;
@@ -168,9 +178,9 @@ bool debSystem::Initialize(Configuration &Cnf)
    Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
    Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
    Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
    Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
 
 
-   if (StatusFile) {
-     delete StatusFile;
-     StatusFile = 0;
+   if (d->StatusFile) {
+     delete d->StatusFile;
+     d->StatusFile = 0;
    }
    }
 
 
    return true;
    return true;
@@ -208,9 +218,9 @@ signed debSystem::Score(Configuration const &Cnf)
 /* */
 /* */
 bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 {
 {
-   if (StatusFile == 0)
-      StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
-   List.push_back(StatusFile);
+   if (d->StatusFile == 0)
+      d->StatusFile = new debStatusIndex(_config->FindFile("Dir::State::status"));
+   List.push_back(d->StatusFile);
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -220,11 +230,11 @@ bool debSystem::AddStatusFiles(vector<pkgIndexFile *> &List)
 bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
 bool debSystem::FindIndex(pkgCache::PkgFileIterator File,
 			  pkgIndexFile *&Found) const
 			  pkgIndexFile *&Found) const
 {
 {
-   if (StatusFile == 0)
+   if (d->StatusFile == 0)
       return false;
       return false;
-   if (StatusFile->FindInCache(*File.Cache()) == File)
+   if (d->StatusFile->FindInCache(*File.Cache()) == File)
    {
    {
-      Found = StatusFile;
+      Found = d->StatusFile;
       return true;
       return true;
    }
    }
    
    

+ 6 - 7
apt-pkg/deb/debsystem.h

@@ -12,16 +12,15 @@
 
 
 #include <apt-pkg/pkgsystem.h>
 #include <apt-pkg/pkgsystem.h>
 
 
+class debSystemPrivate;
+
 class debStatusIndex;
 class debStatusIndex;
 class debSystem : public pkgSystem
 class debSystem : public pkgSystem
 {
 {
-   // For locking support
-   int LockFD;
-   unsigned LockCount;
+   // private d-pointer
+   debSystemPrivate *d;
    bool CheckUpdates();
    bool CheckUpdates();
-   
-   debStatusIndex *StatusFile;
-   
+
    public:
    public:
 
 
    virtual bool Lock();
    virtual bool Lock();
@@ -35,7 +34,7 @@ class debSystem : public pkgSystem
 			  pkgIndexFile *&Found) const;
 			  pkgIndexFile *&Found) const;
 
 
    debSystem();
    debSystem();
-   ~debSystem();
+   virtual ~debSystem();
 };
 };
 
 
 extern debSystem debSys;
 extern debSystem debSys;

+ 118 - 66
apt-pkg/deb/dpkgpm.cc

@@ -14,8 +14,8 @@
 #include <apt-pkg/depcache.h>
 #include <apt-pkg/depcache.h>
 #include <apt-pkg/pkgrecords.h>
 #include <apt-pkg/pkgrecords.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/strutl.h>
-#include <apti18n.h>
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/fileutl.h>
+#include <apt-pkg/cachefile.h>
 
 
 #include <unistd.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <stdlib.h>
@@ -32,6 +32,8 @@
 #include <algorithm>
 #include <algorithm>
 #include <sstream>
 #include <sstream>
 #include <map>
 #include <map>
+#include <pwd.h>
+#include <grp.h>
 
 
 #include <termios.h>
 #include <termios.h>
 #include <unistd.h>
 #include <unistd.h>
@@ -44,6 +46,21 @@
 
 
 using namespace std;
 using namespace std;
 
 
+class pkgDPkgPMPrivate 
+{
+public:
+   pkgDPkgPMPrivate() : dpkgbuf_pos(0), term_out(NULL), history_out(NULL)
+   {
+   }
+   bool stdin_is_dev_null;
+   // the buffer we use for the dpkg status-fd reading
+   char dpkgbuf[1024];
+   int dpkgbuf_pos;
+   FILE *term_out;
+   FILE *history_out;
+   string dpkg_error;
+};
+
 namespace
 namespace
 {
 {
   // Maps the dpkg "processing" info to human readable names.  Entry 0
   // Maps the dpkg "processing" info to human readable names.  Entry 0
@@ -108,9 +125,9 @@ ionice(int PID)
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
 pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache) 
 pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache) 
-   : pkgPackageManager(Cache), dpkgbuf_pos(0),
-     term_out(NULL), history_out(NULL), PackagesDone(0), PackagesTotal(0)
+   : pkgPackageManager(Cache), PackagesDone(0), PackagesTotal(0)
 {
 {
+   d = new pkgDPkgPMPrivate();
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::pkgDPkgPM - Destructor					/*{{{*/
 // DPkgPM::pkgDPkgPM - Destructor					/*{{{*/
@@ -118,6 +135,7 @@ pkgDPkgPM::pkgDPkgPM(pkgDepCache *Cache)
 /* */
 /* */
 pkgDPkgPM::~pkgDPkgPM()
 pkgDPkgPM::~pkgDPkgPM()
 {
 {
+   delete d;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::Install - Install a package					/*{{{*/
 // DPkgPM::Install - Install a package					/*{{{*/
@@ -374,7 +392,7 @@ void pkgDPkgPM::DoStdin(int master)
    if (len)
    if (len)
       write(master, input_buf, len);
       write(master, input_buf, len);
    else
    else
-      stdin_is_dev_null = true;
+      d->stdin_is_dev_null = true;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::DoTerminalPty - Read the terminal pty and write log		/*{{{*/
 // DPkgPM::DoTerminalPty - Read the terminal pty and write log		/*{{{*/
@@ -399,8 +417,8 @@ void pkgDPkgPM::DoTerminalPty(int master)
    if(len <= 0) 
    if(len <= 0) 
       return;
       return;
    write(1, term_buf, len);
    write(1, term_buf, len);
-   if(term_out)
-      fwrite(term_buf, len, sizeof(char), term_out);
+   if(d->term_out)
+      fwrite(term_buf, len, sizeof(char), d->term_out);
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::ProcessDpkgStatusBuf                                        	/*{{{*/
 // DPkgPM::ProcessDpkgStatusBuf                                        	/*{{{*/
@@ -604,14 +622,14 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
    char *p, *q;
    char *p, *q;
    int len;
    int len;
 
 
-   len=read(statusfd, &dpkgbuf[dpkgbuf_pos], sizeof(dpkgbuf)-dpkgbuf_pos);
-   dpkgbuf_pos += len;
+   len=read(statusfd, &d->dpkgbuf[d->dpkgbuf_pos], sizeof(d->dpkgbuf)-d->dpkgbuf_pos);
+   d->dpkgbuf_pos += len;
    if(len <= 0)
    if(len <= 0)
       return;
       return;
 
 
    // process line by line if we have a buffer
    // process line by line if we have a buffer
-   p = q = dpkgbuf;
-   while((q=(char*)memchr(p, '\n', dpkgbuf+dpkgbuf_pos-p)) != NULL)
+   p = q = d->dpkgbuf;
+   while((q=(char*)memchr(p, '\n', d->dpkgbuf+d->dpkgbuf_pos-p)) != NULL)
    {
    {
       *q = 0;
       *q = 0;
       ProcessDpkgStatusLine(OutStatusFd, p);
       ProcessDpkgStatusLine(OutStatusFd, p);
@@ -619,8 +637,8 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
    }
    }
 
 
    // now move the unprocessed bits (after the final \n that is now a 0x0) 
    // now move the unprocessed bits (after the final \n that is now a 0x0) 
-   // to the start and update dpkgbuf_pos
-   p = (char*)memrchr(dpkgbuf, 0, dpkgbuf_pos);
+   // to the start and update d->dpkgbuf_pos
+   p = (char*)memrchr(d->dpkgbuf, 0, d->dpkgbuf_pos);
    if(p == NULL)
    if(p == NULL)
       return;
       return;
 
 
@@ -628,8 +646,8 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd)
    p++;
    p++;
 
 
    // move the unprocessed tail to the start and update pos
    // move the unprocessed tail to the start and update pos
-   memmove(dpkgbuf, p, p-dpkgbuf);
-   dpkgbuf_pos = dpkgbuf+dpkgbuf_pos-p;
+   memmove(d->dpkgbuf, p, p-d->dpkgbuf);
+   d->dpkgbuf_pos = d->dpkgbuf+d->dpkgbuf_pos-p;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // DPkgPM::WriteHistoryTag						/*{{{*/
 // DPkgPM::WriteHistoryTag						/*{{{*/
@@ -641,7 +659,7 @@ void pkgDPkgPM::WriteHistoryTag(string const &tag, string value)
    // poor mans rstrip(", ")
    // poor mans rstrip(", ")
    if (value[length-2] == ',' && value[length-1] == ' ')
    if (value[length-2] == ',' && value[length-1] == ' ')
       value.erase(length - 2, 2);
       value.erase(length - 2, 2);
-   fprintf(history_out, "%s: %s\n", tag.c_str(), value.c_str());
+   fprintf(d->history_out, "%s: %s\n", tag.c_str(), value.c_str());
 }									/*}}}*/
 }									/*}}}*/
 // DPkgPM::OpenLog							/*{{{*/
 // DPkgPM::OpenLog							/*{{{*/
 bool pkgDPkgPM::OpenLog()
 bool pkgDPkgPM::OpenLog()
@@ -662,13 +680,19 @@ bool pkgDPkgPM::OpenLog()
 				   _config->Find("Dir::Log::Terminal"));
 				   _config->Find("Dir::Log::Terminal"));
    if (!logfile_name.empty())
    if (!logfile_name.empty())
    {
    {
-      term_out = fopen(logfile_name.c_str(),"a");
-      if (term_out == NULL)
+      d->term_out = fopen(logfile_name.c_str(),"a");
+      if (d->term_out == NULL)
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), logfile_name.c_str());
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), logfile_name.c_str());
-      setvbuf(term_out, NULL, _IONBF, 0);
-      SetCloseExec(fileno(term_out), true);
-      chmod(logfile_name.c_str(), 0600);
-      fprintf(term_out, "\nLog started: %s\n", timestr);
+      setvbuf(d->term_out, NULL, _IONBF, 0);
+      SetCloseExec(fileno(d->term_out), true);
+      struct passwd *pw;
+      struct group *gr;
+      pw = getpwnam("root");
+      gr = getgrnam("adm");
+      if (pw != NULL && gr != NULL)
+	  chown(logfile_name.c_str(), pw->pw_uid, gr->gr_gid);
+      chmod(logfile_name.c_str(), 0644);
+      fprintf(d->term_out, "\nLog started: %s\n", timestr);
    }
    }
 
 
    // write your history
    // write your history
@@ -676,41 +700,52 @@ bool pkgDPkgPM::OpenLog()
 				   _config->Find("Dir::Log::History"));
 				   _config->Find("Dir::Log::History"));
    if (!history_name.empty())
    if (!history_name.empty())
    {
    {
-      history_out = fopen(history_name.c_str(),"a");
-      if (history_out == NULL)
+      d->history_out = fopen(history_name.c_str(),"a");
+      if (d->history_out == NULL)
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), history_name.c_str());
 	 return _error->WarningE("OpenLog", _("Could not open file '%s'"), history_name.c_str());
       chmod(history_name.c_str(), 0644);
       chmod(history_name.c_str(), 0644);
-      fprintf(history_out, "\nStart-Date: %s\n", timestr);
-      string remove, purge, install, upgrade, downgrade;
+      fprintf(d->history_out, "\nStart-Date: %s\n", timestr);
+      string remove, purge, install, reinstall, upgrade, downgrade;
       for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
       for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++)
       {
       {
-	 if (Cache[I].NewInstall())
-	 {
-	    install += I.FullName(false) + string(" (") + Cache[I].CandVersion;
-	    if (Cache[I].Flags & pkgCache::Flag::Auto)
-	       install+= ", automatic";
-	    install += string("), ");
-	 }
-	 else if (Cache[I].Upgrade())
-	    upgrade += I.FullName(false) + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string("), ");
-	 else if (Cache[I].Downgrade())
-	    downgrade += I.FullName(false) + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string("), ");
-	 else if (Cache[I].Delete())
-	 {
-	    if ((Cache[I].iFlags & pkgDepCache::Purge) == pkgDepCache::Purge)
-	       purge += I.FullName(false) + string(" (") + Cache[I].CurVersion + string("), ");	    
-	    else
-	       remove += I.FullName(false) + string(" (") + Cache[I].CurVersion + string("), ");	    
+	 enum { CANDIDATE, CANDIDATE_AUTO, CURRENT_CANDIDATE, CURRENT } infostring;
+	 string *line = NULL;
+	 #define HISTORYINFO(X, Y) { line = &X; infostring = Y; }
+	 if (Cache[I].NewInstall() == true)
+	    HISTORYINFO(install, CANDIDATE_AUTO)
+	 else if (Cache[I].ReInstall() == true)
+	    HISTORYINFO(reinstall, CANDIDATE)
+	 else if (Cache[I].Upgrade() == true)
+	    HISTORYINFO(upgrade, CURRENT_CANDIDATE)
+	 else if (Cache[I].Downgrade() == true)
+	    HISTORYINFO(downgrade, CURRENT_CANDIDATE)
+	 else if (Cache[I].Delete() == true)
+	    HISTORYINFO((Cache[I].Purge() ? purge : remove), CURRENT)
+	 else
+	    continue;
+	 #undef HISTORYINFO
+	 line->append(I.FullName(false)).append(" (");
+	 switch (infostring) {
+	 case CANDIDATE: line->append(Cache[I].CandVersion); break;
+	 case CANDIDATE_AUTO:
+	    line->append(Cache[I].CandVersion);
+	    if ((Cache[I].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+	       line->append(", automatic");
+	    break;
+	 case CURRENT_CANDIDATE: line->append(Cache[I].CurVersion).append(", ").append(Cache[I].CandVersion); break;
+	 case CURRENT: line->append(Cache[I].CurVersion); break;
 	 }
 	 }
+	 line->append("), ");
       }
       }
       if (_config->Exists("Commandline::AsString") == true)
       if (_config->Exists("Commandline::AsString") == true)
 	 WriteHistoryTag("Commandline", _config->Find("Commandline::AsString"));
 	 WriteHistoryTag("Commandline", _config->Find("Commandline::AsString"));
       WriteHistoryTag("Install", install);
       WriteHistoryTag("Install", install);
+      WriteHistoryTag("Reinstall", reinstall);
       WriteHistoryTag("Upgrade", upgrade);
       WriteHistoryTag("Upgrade", upgrade);
       WriteHistoryTag("Downgrade",downgrade);
       WriteHistoryTag("Downgrade",downgrade);
       WriteHistoryTag("Remove",remove);
       WriteHistoryTag("Remove",remove);
       WriteHistoryTag("Purge",purge);
       WriteHistoryTag("Purge",purge);
-      fflush(history_out);
+      fflush(d->history_out);
    }
    }
    
    
    return true;
    return true;
@@ -724,16 +759,16 @@ bool pkgDPkgPM::CloseLog()
    struct tm *tmp = localtime(&t);
    struct tm *tmp = localtime(&t);
    strftime(timestr, sizeof(timestr), "%F  %T", tmp);
    strftime(timestr, sizeof(timestr), "%F  %T", tmp);
 
 
-   if(term_out)
+   if(d->term_out)
    {
    {
-      fprintf(term_out, "Log ended: ");
-      fprintf(term_out, "%s", timestr);
-      fprintf(term_out, "\n");
-      fclose(term_out);
+      fprintf(d->term_out, "Log ended: ");
+      fprintf(d->term_out, "%s", timestr);
+      fprintf(d->term_out, "\n");
+      fclose(d->term_out);
    }
    }
-   term_out = NULL;
+   d->term_out = NULL;
 
 
-   if(history_out)
+   if(d->history_out)
    {
    {
       if (disappearedPkgs.empty() == false)
       if (disappearedPkgs.empty() == false)
       {
       {
@@ -750,12 +785,12 @@ bool pkgDPkgPM::CloseLog()
 	 }
 	 }
 	 WriteHistoryTag("Disappeared", disappear);
 	 WriteHistoryTag("Disappeared", disappear);
       }
       }
-      if (dpkg_error.empty() == false)
-	 fprintf(history_out, "Error: %s\n", dpkg_error.c_str());
-      fprintf(history_out, "End-Date: %s\n", timestr);
-      fclose(history_out);
+      if (d->dpkg_error.empty() == false)
+	 fprintf(d->history_out, "Error: %s\n", d->dpkg_error.c_str());
+      fprintf(d->history_out, "End-Date: %s\n", timestr);
+      fclose(d->history_out);
    }
    }
-   history_out = NULL;
+   d->history_out = NULL;
 
 
    return true;
    return true;
 }
 }
@@ -863,7 +898,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       }
       }
    }
    }
 
 
-   stdin_is_dev_null = false;
+   d->stdin_is_dev_null = false;
 
 
    // create log
    // create log
    OpenLog();
    OpenLog();
@@ -1063,8 +1098,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    const char *s = _("Can not write log, openpty() "
 	    const char *s = _("Can not write log, openpty() "
 	                      "failed (/dev/pts not mounted?)\n");
 	                      "failed (/dev/pts not mounted?)\n");
 	    fprintf(stderr, "%s",s);
 	    fprintf(stderr, "%s",s);
-            if(term_out)
-              fprintf(term_out, "%s",s);
+            if(d->term_out)
+              fprintf(d->term_out, "%s",s);
 	    master = slave = -1;
 	    master = slave = -1;
 	 }  else {
 	 }  else {
 	    struct termios rtt;
 	    struct termios rtt;
@@ -1194,7 +1229,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 
 
 	 // wait for input or output here
 	 // wait for input or output here
 	 FD_ZERO(&rfds);
 	 FD_ZERO(&rfds);
-	 if (master >= 0 && !stdin_is_dev_null)
+	 if (master >= 0 && !d->stdin_is_dev_null)
 	    FD_SET(0, &rfds); 
 	    FD_SET(0, &rfds); 
 	 FD_SET(_dpkgin, &rfds);
 	 FD_SET(_dpkgin, &rfds);
 	 if(master >= 0)
 	 if(master >= 0)
@@ -1248,14 +1283,14 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    RunScripts("DPkg::Post-Invoke");
 	    RunScripts("DPkg::Post-Invoke");
 
 
 	 if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) 
 	 if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) 
-	    strprintf(dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]);
+	    strprintf(d->dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]);
 	 else if (WIFEXITED(Status) != 0)
 	 else if (WIFEXITED(Status) != 0)
-	    strprintf(dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status));
+	    strprintf(d->dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status));
 	 else 
 	 else 
-	    strprintf(dpkg_error, "Sub-process %s exited unexpectedly",Args[0]);
+	    strprintf(d->dpkg_error, "Sub-process %s exited unexpectedly",Args[0]);
 
 
-	 if(dpkg_error.size() > 0)
-	    _error->Error("%s", dpkg_error.c_str());
+	 if(d->dpkg_error.size() > 0)
+	    _error->Error("%s", d->dpkg_error.c_str());
 
 
 	 if(stopOnError) 
 	 if(stopOnError) 
 	 {
 	 {
@@ -1269,6 +1304,23 @@ bool pkgDPkgPM::Go(int OutStatusFd)
    if (RunScripts("DPkg::Post-Invoke") == false)
    if (RunScripts("DPkg::Post-Invoke") == false)
       return false;
       return false;
 
 
+   if (_config->FindB("Debug::pkgDPkgPM",false) == false)
+   {
+      std::string const oldpkgcache = _config->FindFile("Dir::cache::pkgcache");
+      if (oldpkgcache.empty() == false && RealFileExists(oldpkgcache) == true &&
+	  unlink(oldpkgcache.c_str()) == 0)
+      {
+	 std::string const srcpkgcache = _config->FindFile("Dir::cache::srcpkgcache");
+	 if (srcpkgcache.empty() == false && RealFileExists(srcpkgcache) == true)
+	 {
+	    _error->PushToStack();
+	    pkgCacheFile CacheFile;
+	    CacheFile.BuildCaches(NULL, true);
+	    _error->RevertToStack();
+	 }
+      }
+   }
+
    Cache.writeStateFile(NULL);
    Cache.writeStateFile(NULL);
    return true;
    return true;
 }
 }
@@ -1402,8 +1454,8 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
    fprintf(report, "ErrorMessage:\n %s\n", errormsg);
    fprintf(report, "ErrorMessage:\n %s\n", errormsg);
 
 
    // ensure that the log is flushed
    // ensure that the log is flushed
-   if(term_out)
-      fflush(term_out);
+   if(d->term_out)
+      fflush(d->term_out);
 
 
    // attach terminal log it if we have it
    // attach terminal log it if we have it
    string logfile_name = _config->FindFile("Dir::Log::Terminal");
    string logfile_name = _config->FindFile("Dir::Log::Terminal");

+ 2 - 9
apt-pkg/deb/dpkgpm.h

@@ -18,19 +18,12 @@
 using std::vector;
 using std::vector;
 using std::map;
 using std::map;
 
 
+class pkgDPkgPMPrivate;
 
 
 class pkgDPkgPM : public pkgPackageManager
 class pkgDPkgPM : public pkgPackageManager
 {
 {
    private:
    private:
-
-   bool stdin_is_dev_null;
-
-   // the buffer we use for the dpkg status-fd reading
-   char dpkgbuf[1024];
-   int dpkgbuf_pos;
-   FILE *term_out;
-   FILE *history_out;
-   string dpkg_error;
+   pkgDPkgPMPrivate *d;
 
 
    /** \brief record the disappear action and handle accordingly
    /** \brief record the disappear action and handle accordingly
 
 

+ 2 - 0
apt-pkg/depcache.h

@@ -231,6 +231,7 @@ class pkgDepCache : protected pkgCache::Namespace
       // Various test members for the current status of the package
       // Various test members for the current status of the package
       inline bool NewInstall() const {return Status == 2 && Mode == ModeInstall;};
       inline bool NewInstall() const {return Status == 2 && Mode == ModeInstall;};
       inline bool Delete() const {return Mode == ModeDelete;};
       inline bool Delete() const {return Mode == ModeDelete;};
+      inline bool Purge() const {return Delete() == true && (iFlags & pkgDepCache::Purge) == pkgDepCache::Purge; };
       inline bool Keep() const {return Mode == ModeKeep;};
       inline bool Keep() const {return Mode == ModeKeep;};
       inline bool Protect() const {return (iFlags & Protected) == Protected;};
       inline bool Protect() const {return (iFlags & Protected) == Protected;};
       inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
       inline bool Upgrade() const {return Status > 0 && Mode == ModeInstall;};
@@ -242,6 +243,7 @@ class pkgDepCache : protected pkgCache::Namespace
       inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;};
       inline bool InstBroken() const {return (DepState & DepInstMin) != DepInstMin;};
       inline bool InstPolicyBroken() const {return (DepState & DepInstPolicy) != DepInstPolicy;};
       inline bool InstPolicyBroken() const {return (DepState & DepInstPolicy) != DepInstPolicy;};
       inline bool Install() const {return Mode == ModeInstall;};
       inline bool Install() const {return Mode == ModeInstall;};
+      inline bool ReInstall() const {return Delete() == false && (iFlags & pkgDepCache::ReInstall) == pkgDepCache::ReInstall;};
       inline VerIterator InstVerIter(pkgCache &Cache)
       inline VerIterator InstVerIter(pkgCache &Cache)
                 {return VerIterator(Cache,InstallVer);};
                 {return VerIterator(Cache,InstallVer);};
       inline VerIterator CandidateVerIter(pkgCache &Cache)
       inline VerIterator CandidateVerIter(pkgCache &Cache)

+ 3 - 0
apt-pkg/edsp/edspindexfile.h

@@ -13,6 +13,9 @@
 
 
 class edspIndex : public debStatusIndex
 class edspIndex : public debStatusIndex
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    public:
    public:
 
 
    virtual const Type *GetType() const;
    virtual const Type *GetType() const;

+ 3 - 0
apt-pkg/edsp/edspsystem.h

@@ -15,6 +15,9 @@
 class edspIndex;
 class edspIndex;
 class edspSystem : public pkgSystem
 class edspSystem : public pkgSystem
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    edspIndex *StatusFile;
    edspIndex *StatusFile;
 
 
    public:
    public:

+ 6 - 2
apt-pkg/indexcopy.h

@@ -24,6 +24,9 @@ class pkgCdromStatus;
 
 
 class IndexCopy								/*{{{*/
 class IndexCopy								/*{{{*/
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    protected:
    protected:
    
    
    pkgTagSection *Section;
    pkgTagSection *Section;
@@ -55,7 +58,6 @@ class PackageCopy : public IndexCopy					/*{{{*/
    virtual const char *GetFileName() {return "Packages";};
    virtual const char *GetFileName() {return "Packages";};
    virtual const char *Type() {return "Package";};
    virtual const char *Type() {return "Package";};
    
    
-   public:
 };
 };
 									/*}}}*/
 									/*}}}*/
 class SourceCopy : public IndexCopy					/*{{{*/
 class SourceCopy : public IndexCopy					/*{{{*/
@@ -67,7 +69,6 @@ class SourceCopy : public IndexCopy					/*{{{*/
    virtual const char *GetFileName() {return "Sources";};
    virtual const char *GetFileName() {return "Sources";};
    virtual const char *Type() {return "Source";};
    virtual const char *Type() {return "Source";};
    
    
-   public:
 };
 };
 									/*}}}*/
 									/*}}}*/
 class TranslationsCopy							/*{{{*/
 class TranslationsCopy							/*{{{*/
@@ -82,6 +83,9 @@ class TranslationsCopy							/*{{{*/
 									/*}}}*/
 									/*}}}*/
 class SigVerify								/*{{{*/
 class SigVerify								/*{{{*/
 {
 {
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
+
    bool Verify(string prefix,string file, indexRecords *records);
    bool Verify(string prefix,string file, indexRecords *records);
    bool CopyMetaIndex(string CDROM, string CDName, 
    bool CopyMetaIndex(string CDROM, string CDName, 
 		      string prefix, string file);
 		      string prefix, string file);

+ 0 - 3
apt-pkg/init.cc

@@ -87,9 +87,6 @@ bool pkgInitConfig(Configuration &Cnf)
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.bak$");
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.bak$");
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.dpkg-[a-z]+$");
    Cnf.Set("Dir::Ignore-Files-Silently::", "\\.dpkg-[a-z]+$");
 
 
-   // Translation
-   Cnf.Set("APT::Acquire::Translation", "environment");
-
    // Default cdrom mount point
    // Default cdrom mount point
    Cnf.Set("Acquire::cdrom::mount", "/media/cdrom/");
    Cnf.Set("Acquire::cdrom::mount", "/media/cdrom/");
 
 

+ 2 - 2
apt-pkg/init.h

@@ -22,8 +22,8 @@
 // Non-ABI-Breaks should only increase RELEASE number.
 // Non-ABI-Breaks should only increase RELEASE number.
 // See also buildlib/libversion.mak
 // See also buildlib/libversion.mak
 #define APT_PKG_MAJOR 4
 #define APT_PKG_MAJOR 4
-#define APT_PKG_MINOR 10
-#define APT_PKG_RELEASE 1
+#define APT_PKG_MINOR 11
+#define APT_PKG_RELEASE 0
     
     
 extern const char *pkgVersion;
 extern const char *pkgVersion;
 extern const char *pkgLibVersion;
 extern const char *pkgLibVersion;

+ 6 - 2
apt-pkg/makefile

@@ -20,11 +20,15 @@ APT_DOMAIN:=libapt-pkg$(LIBAPTPKG_MAJOR)
 # Source code for the contributed non-core things
 # Source code for the contributed non-core things
 SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \
 SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \
          contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \
          contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \
-	 contrib/md5.cc contrib/sha1.cc contrib/sha256.cc contrib/hashes.cc \
+	 contrib/md5.cc contrib/sha1.cc contrib/sha2.cc  \
+	 contrib/sha2_internal.cc\
+         contrib/hashes.cc \
 	 contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \
 	 contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \
 	 contrib/fileutl.cc 
 	 contrib/fileutl.cc 
 HEADERS = mmap.h error.h configuration.h fileutl.h  cmndline.h netrc.h\
 HEADERS = mmap.h error.h configuration.h fileutl.h  cmndline.h netrc.h\
-	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h hashes.h \
+	  md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha2.h \
+	  sha2_internal.h \
+          hashes.h hashsum_template.h\
 	  macros.h weakptr.h
 	  macros.h weakptr.h
 
 
 # Source code for the core main library
 # Source code for the core main library

+ 6 - 0
apt-pkg/orderlist.cc

@@ -1073,6 +1073,12 @@ bool pkgOrderList::CheckDep(DepIterator D)
          just needs one */
          just needs one */
       if (D.IsNegative() == false)
       if (D.IsNegative() == false)
       {
       {
+	 // ignore provides by older versions of this package
+	 if (((D.Reverse() == false && Pkg == D.ParentPkg()) ||
+	      (D.Reverse() == true && Pkg == D.TargetPkg())) &&
+	     Cache[Pkg].InstallVer != *I)
+	    continue;
+
 	 /* Try to find something that does not have the after flag set
 	 /* Try to find something that does not have the after flag set
 	    if at all possible */
 	    if at all possible */
 	 if (IsFlag(Pkg,After) == true)
 	 if (IsFlag(Pkg,After) == true)

+ 4 - 2
apt-pkg/pkgrecords.h

@@ -28,12 +28,13 @@ class pkgRecords							/*{{{*/
    class Parser;
    class Parser;
    
    
    private:
    private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
    
    
    pkgCache &Cache;
    pkgCache &Cache;
    std::vector<Parser *>Files;
    std::vector<Parser *>Files;
 
 
-   public:
-
+    public:
    // Lookup function
    // Lookup function
    Parser &Lookup(pkgCache::VerFileIterator const &Ver);
    Parser &Lookup(pkgCache::VerFileIterator const &Ver);
    Parser &Lookup(pkgCache::DescFileIterator const &Desc);
    Parser &Lookup(pkgCache::DescFileIterator const &Desc);
@@ -58,6 +59,7 @@ class pkgRecords::Parser						/*{{{*/
    virtual string MD5Hash() {return string();};
    virtual string MD5Hash() {return string();};
    virtual string SHA1Hash() {return string();};
    virtual string SHA1Hash() {return string();};
    virtual string SHA256Hash() {return string();};
    virtual string SHA256Hash() {return string();};
+   virtual string SHA512Hash() {return string();};
    virtual string SourcePkg() {return string();};
    virtual string SourcePkg() {return string();};
    virtual string SourceVer() {return string();};
    virtual string SourceVer() {return string();};
 
 

+ 3 - 1
apt-pkg/srcrecords.h

@@ -79,6 +79,8 @@ class pkgSrcRecords
    };
    };
    
    
    private:
    private:
+   /** \brief dpointer placeholder (for later in case we need it) */
+   void *d;
    
    
    // The list of files and the current parser pointer
    // The list of files and the current parser pointer
    vector<Parser*> Files;
    vector<Parser*> Files;
@@ -93,7 +95,7 @@ class pkgSrcRecords
    Parser *Find(const char *Package,bool const &SrcOnly = false);
    Parser *Find(const char *Package,bool const &SrcOnly = false);
    
    
    pkgSrcRecords(pkgSourceList &List);
    pkgSrcRecords(pkgSourceList &List);
-   ~pkgSrcRecords();
+   virtual ~pkgSrcRecords();
 };
 };
 
 
 #endif
 #endif

+ 73 - 51
apt-pkg/tagfile.cc

@@ -24,26 +24,40 @@
 
 
 using std::string;
 using std::string;
 
 
+class pkgTagFilePrivate
+{
+public:
+   pkgTagFilePrivate(FileFd *pFd, unsigned long Size) : Fd(*pFd), Size(Size)
+   {
+   }
+   FileFd &Fd;
+   char *Buffer;
+   char *Start;
+   char *End;
+   bool Done;
+   unsigned long iOffset;
+   unsigned long Size;
+};
+
 // TagFile::pkgTagFile - Constructor					/*{{{*/
 // TagFile::pkgTagFile - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */
-pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
-     Fd(*pFd),
-     Size(Size)
+pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size)
 {
 {
-   if (Fd.IsOpen() == false)
+   d = new pkgTagFilePrivate(pFd, Size);
+
+   if (d->Fd.IsOpen() == false)
    {
    {
-      Buffer = 0;
-      Start = End = Buffer = 0;
-      Done = true;
-      iOffset = 0;
+      d->Start = d->End = d->Buffer = 0;
+      d->Done = true;
+      d->iOffset = 0;
       return;
       return;
    }
    }
    
    
-   Buffer = new char[Size];
-   Start = End = Buffer;
-   Done = false;
-   iOffset = 0;
+   d->Buffer = new char[Size];
+   d->Start = d->End = d->Buffer;
+   d->Done = false;
+   d->iOffset = 0;
    Fill();
    Fill();
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -52,7 +66,14 @@ pkgTagFile::pkgTagFile(FileFd *pFd,unsigned long Size) :
 /* */
 /* */
 pkgTagFile::~pkgTagFile()
 pkgTagFile::~pkgTagFile()
 {
 {
-   delete [] Buffer;
+   delete [] d->Buffer;
+   delete d;
+}
+									/*}}}*/
+// TagFile::Offset - Return the current offset in the buffer     	/*{{{*/
+unsigned long pkgTagFile::Offset()
+{
+   return d->iOffset;
 }
 }
 									/*}}}*/
 									/*}}}*/
 // TagFile::Resize - Resize the internal buffer				/*{{{*/
 // TagFile::Resize - Resize the internal buffer				/*{{{*/
@@ -63,22 +84,22 @@ pkgTagFile::~pkgTagFile()
 bool pkgTagFile::Resize()
 bool pkgTagFile::Resize()
 {
 {
    char *tmp;
    char *tmp;
-   unsigned long EndSize = End - Start;
+   unsigned long EndSize = d->End - d->Start;
 
 
    // fail is the buffer grows too big
    // fail is the buffer grows too big
-   if(Size > 1024*1024+1)
+   if(d->Size > 1024*1024+1)
       return false;
       return false;
 
 
    // get new buffer and use it
    // get new buffer and use it
-   tmp = new char[2*Size];
-   memcpy(tmp, Buffer, Size);
-   Size = Size*2;
-   delete [] Buffer;
-   Buffer = tmp;
+   tmp = new char[2*d->Size];
+   memcpy(tmp, d->Buffer, d->Size);
+   d->Size = d->Size*2;
+   delete [] d->Buffer;
+   d->Buffer = tmp;
 
 
    // update the start/end pointers to the new buffer
    // update the start/end pointers to the new buffer
-   Start = Buffer;
-   End = Start + EndSize;
+   d->Start = d->Buffer;
+   d->End = d->Start + EndSize;
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -90,20 +111,20 @@ bool pkgTagFile::Resize()
  */
  */
 bool pkgTagFile::Step(pkgTagSection &Tag)
 bool pkgTagFile::Step(pkgTagSection &Tag)
 {
 {
-   while (Tag.Scan(Start,End - Start) == false)
+   while (Tag.Scan(d->Start,d->End - d->Start) == false)
    {
    {
       if (Fill() == false)
       if (Fill() == false)
 	 return false;
 	 return false;
       
       
-      if(Tag.Scan(Start,End - Start))
+      if(Tag.Scan(d->Start,d->End - d->Start))
 	 break;
 	 break;
 
 
       if (Resize() == false)
       if (Resize() == false)
 	 return _error->Error(_("Unable to parse package file %s (1)"),
 	 return _error->Error(_("Unable to parse package file %s (1)"),
-				 Fd.Name().c_str());
+                              d->Fd.Name().c_str());
    }
    }
-   Start += Tag.size();
-   iOffset += Tag.size();
+   d->Start += Tag.size();
+   d->iOffset += Tag.size();
 
 
    Tag.Trim();
    Tag.Trim();
    return true;
    return true;
@@ -115,37 +136,37 @@ bool pkgTagFile::Step(pkgTagSection &Tag)
    then fills the rest from the file */
    then fills the rest from the file */
 bool pkgTagFile::Fill()
 bool pkgTagFile::Fill()
 {
 {
-   unsigned long EndSize = End - Start;
+   unsigned long EndSize = d->End - d->Start;
    unsigned long Actual = 0;
    unsigned long Actual = 0;
    
    
-   memmove(Buffer,Start,EndSize);
-   Start = Buffer;
-   End = Buffer + EndSize;
+   memmove(d->Buffer,d->Start,EndSize);
+   d->Start = d->Buffer;
+   d->End = d->Buffer + EndSize;
    
    
-   if (Done == false)
+   if (d->Done == false)
    {
    {
       // See if only a bit of the file is left
       // See if only a bit of the file is left
-      if (Fd.Read(End,Size - (End - Buffer),&Actual) == false)
+      if (d->Fd.Read(d->End, d->Size - (d->End - d->Buffer),&Actual) == false)
 	 return false;
 	 return false;
-      if (Actual != Size - (End - Buffer))
-	 Done = true;
-      End += Actual;
+      if (Actual != d->Size - (d->End - d->Buffer))
+	 d->Done = true;
+      d->End += Actual;
    }
    }
    
    
-   if (Done == true)
+   if (d->Done == true)
    {
    {
       if (EndSize <= 3 && Actual == 0)
       if (EndSize <= 3 && Actual == 0)
 	 return false;
 	 return false;
-      if (Size - (End - Buffer) < 4)
+      if (d->Size - (d->End - d->Buffer) < 4)
 	 return true;
 	 return true;
       
       
       // Append a double new line if one does not exist
       // Append a double new line if one does not exist
       unsigned int LineCount = 0;
       unsigned int LineCount = 0;
-      for (const char *E = End - 1; E - End < 6 && (*E == '\n' || *E == '\r'); E--)
+      for (const char *E = d->End - 1; E - d->End < 6 && (*E == '\n' || *E == '\r'); E--)
 	 if (*E == '\n')
 	 if (*E == '\n')
 	    LineCount++;
 	    LineCount++;
       for (; LineCount < 2; LineCount++)
       for (; LineCount < 2; LineCount++)
-	 *End++ = '\n';
+	 *d->End++ = '\n';
       
       
       return true;
       return true;
    }
    }
@@ -160,33 +181,33 @@ bool pkgTagFile::Fill()
 bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
 bool pkgTagFile::Jump(pkgTagSection &Tag,unsigned long Offset)
 {
 {
    // We are within a buffer space of the next hit..
    // We are within a buffer space of the next hit..
-   if (Offset >= iOffset && iOffset + (End - Start) > Offset)
+   if (Offset >= d->iOffset && d->iOffset + (d->End - d->Start) > Offset)
    {
    {
-      unsigned long Dist = Offset - iOffset;
-      Start += Dist;
-      iOffset += Dist;
+      unsigned long Dist = Offset - d->iOffset;
+      d->Start += Dist;
+      d->iOffset += Dist;
       return Step(Tag);
       return Step(Tag);
    }
    }
 
 
    // Reposition and reload..
    // Reposition and reload..
-   iOffset = Offset;
-   Done = false;
-   if (Fd.Seek(Offset) == false)
+   d->iOffset = Offset;
+   d->Done = false;
+   if (d->Fd.Seek(Offset) == false)
       return false;
       return false;
-   End = Start = Buffer;
+   d->End = d->Start = d->Buffer;
    
    
    if (Fill() == false)
    if (Fill() == false)
       return false;
       return false;
 
 
-   if (Tag.Scan(Start,End - Start) == true)
+   if (Tag.Scan(d->Start, d->End - d->Start) == true)
       return true;
       return true;
    
    
    // This appends a double new line (for the real eof handling)
    // This appends a double new line (for the real eof handling)
    if (Fill() == false)
    if (Fill() == false)
       return false;
       return false;
    
    
-   if (Tag.Scan(Start,End - Start) == false)
-      return _error->Error(_("Unable to parse package file %s (2)"),Fd.Name().c_str());
+   if (Tag.Scan(d->Start, d->End - d->Start) == false)
+      return _error->Error(_("Unable to parse package file %s (2)"),d->Fd.Name().c_str());
    
    
    return true;
    return true;
 }
 }
@@ -457,6 +478,7 @@ static const char *iTFRewritePackageOrder[] = {
                           "MD5Sum",
                           "MD5Sum",
                           "SHA1",
                           "SHA1",
                           "SHA256",
                           "SHA256",
+                          "SHA512",
                            "MSDOS-Filename",   // Obsolete
                            "MSDOS-Filename",   // Obsolete
                           "Description",
                           "Description",
                           0};
                           0};

+ 8 - 13
apt-pkg/tagfile.h

@@ -23,16 +23,16 @@
 
 
 #include <apt-pkg/fileutl.h>
 #include <apt-pkg/fileutl.h>
 #include <stdio.h>
 #include <stdio.h>
-    
+
 class pkgTagSection
 class pkgTagSection
 {
 {
    const char *Section;
    const char *Section;
-   
    // We have a limit of 256 tags per section.
    // We have a limit of 256 tags per section.
    unsigned int Indexes[256];
    unsigned int Indexes[256];
    unsigned int AlphaIndexes[0x100];
    unsigned int AlphaIndexes[0x100];
-   
    unsigned int TagCount;
    unsigned int TagCount;
+   // dpointer placeholder (for later in case we need it)
+   void *d;
 
 
    /* This very simple hash function for the last 8 letters gives
    /* This very simple hash function for the last 8 letters gives
       very good performance on the debian package files */
       very good performance on the debian package files */
@@ -44,7 +44,6 @@ class pkgTagSection
       return Res & 0xFF;
       return Res & 0xFF;
    }
    }
 
 
-
    protected:
    protected:
    const char *Stop;
    const char *Stop;
 
 
@@ -80,17 +79,13 @@ class pkgTagSection
    };
    };
    
    
    pkgTagSection() : Section(0), Stop(0) {};
    pkgTagSection() : Section(0), Stop(0) {};
+   virtual ~pkgTagSection() {};
 };
 };
 
 
+class pkgTagFilePrivate;
 class pkgTagFile
 class pkgTagFile
 {
 {
-   FileFd &Fd;
-   char *Buffer;
-   char *Start;
-   char *End;
-   bool Done;
-   unsigned long iOffset;
-   unsigned long Size;
+   pkgTagFilePrivate *d;
 
 
    bool Fill();
    bool Fill();
    bool Resize();
    bool Resize();
@@ -98,11 +93,11 @@ class pkgTagFile
    public:
    public:
 
 
    bool Step(pkgTagSection &Section);
    bool Step(pkgTagSection &Section);
-   inline unsigned long Offset() {return iOffset;};
+   unsigned long Offset();
    bool Jump(pkgTagSection &Tag,unsigned long Offset);
    bool Jump(pkgTagSection &Tag,unsigned long Offset);
 
 
    pkgTagFile(FileFd *F,unsigned long Size = 32*1024);
    pkgTagFile(FileFd *F,unsigned long Size = 32*1024);
-   ~pkgTagFile();
+   virtual ~pkgTagFile();
 };
 };
 
 
 /* This is the list of things to rewrite. The rewriter
 /* This is the list of things to rewrite. The rewriter

+ 13 - 0
cmdline/apt-config.cc

@@ -20,6 +20,8 @@
 #include <apt-pkg/error.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/init.h>
 #include <apt-pkg/init.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/strutl.h>
+#include <apt-pkg/configuration.h>
+#include <apt-pkg/aptconfiguration.h>
 
 
 #include <config.h>
 #include <config.h>
 #include <apti18n.h>
 #include <apti18n.h>
@@ -27,6 +29,7 @@
 #include <locale.h>
 #include <locale.h>
 #include <iostream>
 #include <iostream>
 #include <string>
 #include <string>
+#include <vector>
 									/*}}}*/
 									/*}}}*/
 using namespace std;
 using namespace std;
 
 
@@ -119,6 +122,16 @@ int main(int argc,const char *argv[])					/*{{{*/
        CmdL.FileSize() == 0)
        CmdL.FileSize() == 0)
       return ShowHelp();
       return ShowHelp();
 
 
+   std::vector<std::string> const langs = APT::Configuration::getLanguages(true);
+   _config->Clear("Acquire::Languages");
+   for (std::vector<std::string>::const_iterator l = langs.begin(); l != langs.end(); ++l)
+      _config->Set("Acquire::Languages::", *l);
+
+   std::vector<std::string> const archs = APT::Configuration::getArchitectures();
+   _config->Clear("APT::Architectures");
+   for (std::vector<std::string>::const_iterator a = archs.begin(); a != archs.end(); ++a)
+      _config->Set("APT::Architectures::", *a);
+
    // Match the operation
    // Match the operation
    CmdL.DispatchArg(Cmds);
    CmdL.DispatchArg(Cmds);
    
    

+ 2 - 0
cmdline/apt-get.cc

@@ -2299,6 +2299,8 @@ bool DoDownload(CommandLine &CmdL)
       strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
       strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
       // get the most appropriate hash
       // get the most appropriate hash
       HashString hash;
       HashString hash;
+      if (rec.SHA512Hash() != "")
+         hash = HashString("sha512", rec.SHA512Hash());
       if (rec.SHA256Hash() != "")
       if (rec.SHA256Hash() != "")
          hash = HashString("sha256", rec.SHA256Hash());
          hash = HashString("sha256", rec.SHA256Hash());
       else if (rec.SHA1Hash() != "")
       else if (rec.SHA1Hash() != "")

+ 1 - 1
configure.in

@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 
 dnl -- SET THIS TO THE RELEASE VERSION --
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.8.2")
+AC_DEFINE_UNQUOTED(VERSION,"0.8.15")
 PACKAGE="apt"
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)
 AC_SUBST(PACKAGE)

+ 1 - 1
debian/apt-utils.install

@@ -1 +1 @@
-bin/libapt-inst*.so.* usr/lib/
+

+ 1 - 2
debian/apt.install

@@ -1,5 +1,4 @@
 bin/apt-* usr/bin/
 bin/apt-* usr/bin/
-bin/libapt-pkg*.so.* usr/lib/
 bin/methods/* usr/lib/apt/methods/
 bin/methods/* usr/lib/apt/methods/
 scripts/dselect/* usr/lib/dpkg/methods/apt/
 scripts/dselect/* usr/lib/dpkg/methods/apt/
-locale usr/share/
+usr/share/locale/*/*/apt.mo

+ 228 - 3
debian/changelog

@@ -1,7 +1,7 @@
-apt (0.8.15) UNRELEASED; urgency=low
+apt (0.8.16~exp2) experimental; urgency=low
 
 
   [ David Kalnischkies ]
   [ David Kalnischkies ]
-  * Implement EDSP in libapt-pkg so that all front-ends which
+  * [ABI-Break] Implement EDSP in libapt-pkg so that all front-ends which
     use the internal resolver can now be used also with external
     use the internal resolver can now be used also with external
     ones as the usage is hidden in between the old API
     ones as the usage is hidden in between the old API
   * provide two edsp solvers in apt-utils:
   * provide two edsp solvers in apt-utils:
@@ -23,8 +23,233 @@ apt (0.8.15) UNRELEASED; urgency=low
   [ Stefano Zacchiroli ]
   [ Stefano Zacchiroli ]
   * doc/external-dependency-solver-protocol.txt:
   * doc/external-dependency-solver-protocol.txt:
     - describe EDSP and the configuration interface around it
     - describe EDSP and the configuration interface around it
+  
+  [ Michael Vogt ]
+  * [ABI-Break] merge lp:~mvo/apt/sha512-template to add support for sha512
+  * [ABI-Break] merge lp:~mvo/apt/dpointer to support easier extending
+    without breaking the ABI
+  * increase ABI version and update package names
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 29 Jun 2011 13:57:28 +0200
+
+apt (0.8.16~exp1) experimental; urgency=low
+
+  * merged with the debian/unstable upload
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 29 Jun 2011 12:40:31 +0200
+
+apt (0.8.15) unstable; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/depcache.cc:
+    - Really release action groups only once (Closes: #622744)
+    - Make purge work again for config-files (LP: #244598) (Closes: #150831)
+  * apt-pkg/acquire-item.cc:
+    - Reject files known to be invalid (LP: #346386) (Closes: #627642)
+  * debian/apt.cron.daily:
+    - Check power after wait, patch by manuel-soto (LP: #705269)
+  * debian/control:
+    - Move ${shlibs:Depends} to Pre-Depends, as we do not want APT
+      unpacked if a library is too old and thus break upgrades
+  * doc/apt-key.8.xml:
+    - Document apt-key net-update (LP: #192810)
+
+  [ Christian Perrier ]
+  * Galician translation update (Miguel Anxo Bouzada). Closes: #626505
+  * Italian translation update (Milo Casagrande). Closes: #627834
+  * German documentation translation update (Chris Leick). Closes: #629949
+  * Catalan translation update (Jordi Mallach). Closes: #630657
+
+  [ David Kalnischkies ]
+  * fix a bunch of cppcheck warnings/errors based on a patch by
+    Niels Thykier, thanks! (Closes: #622805)
+  * apt-pkg/depcache.cc:
+    - really include 'rc' packages in the delete count by fixing a
+      typo which exists since 1999 in the source… (LP: #761175)
+    - if critical or-group can't be satisfied, exit directly.
+  * apt-pkg/acquire-method.cc:
+    - write directly to stdout instead of creating the message in
+      memory first before writing to avoid hitting limits
+    - fix order of CurrentURI and UsedMirror in Status() and Log()
+  * apt-pkg/orderlist.cc:
+    - let VisitRProvides report if the calls were successful
+  * apt-pkg/deb/dpkgpm.cc:
+    - replace obsolete usleep with nanosleep
+    - remove invalid pkgcache.bin and rebuild it if possible
+    - log reinstall commands in history.log
+  * debian/apt{,-utils}.symbols:
+    - update both experimental symbol-files to reflect 0.8.14 state
+  * debian/rules:
+    - remove unused embedded jquery by doxygen from libapt-pkg-doc
+  * cmdline/apt-mark.cc:
+    - reimplement apt-mark in c++
+    - provide a 'showmanual' command (Closes: #582791)
+    - provide a 'dpkg --set-selections' wrapper to set/release holds
+  * cmdline/apt-get.cc:
+    - deprecate mostly undocumented 'markauto' in favor of 'apt-mark'
+  * cmdline/apt-cache.cc:
+    - deprecate mostly undocumented 'showauto' in favor of 'apt-mark'
+  * apt-pkg/pkgcache.cc:
+    - really ignore :arch in FindPkg() in non-multiarch environment
+  * doc/po/de.po:
+    - undo the translation of the command 'dump' in manpage of apt-config
+      as report by Burghard Grossmann on debian-l10n-german, thanks!
+  * apt-pkg/deb/debmetaindex.cc:
+    - do not download TranslationIndex if no Translation-* will be
+      downloaded later on anyway (Closes: #624218)
+  * test/versions.lst:
+    - disable obscure version number tests with versions dpkg doesn't
+      allow any more as they don't start with a number
+  * apt-pkg/acquire-worker.cc:
+    - print filename in the unmatching size warning (Closes: #623137)
+  * apt-pkg/acquire-item.cc:
+    - apply fix for poorly worded 'locate file' error message from
+      Ben Finney, thanks! (Closes: #623171)
+  * methods/http.cc:
+    - add config option to ignore a closed stdin to be able to easily
+      use the method as a simple standalone downloader
+    - Location header in redirects should be absolute URI, but some
+      servers just send an absolute path so still deal with it properly
+    - dequote URL taken from Location in redirects as we will otherwise
+      quote an already quoted string in the request later (Closes: #602412)
+  * apt-pkg/contrib/netrc.cc:
+    - replace non-posix gnu-extension strdupa with strdup
+  * apt-pkg/packagemanager.cc:
+    - ensure for Multi-Arch:same packages that they are unpacked in
+      lock step even in immediate configuration (Closes: #618288)
+  * apt-pkg/init.cc:
+    - don't set deprecated APT::Acquire::Translation, thanks Jörg Sommer!
+  * cmdline/apt-config.cc:
+    - show Acquire::Languages and APT::Architectures settings
+      in 'dump' (Closes: 626739)
+  * apt-pkg/orderlist.cc:
+    - ensure that an old version of a package with a provides can
+      never satisfy a dependency of a newer version of this package
+
+  [ Michael Vogt ]
+  * methods/mirror.cc:
+    - ignore lines starting with "#" in the mirror file
+    - ignore non http urls in the mirrors
+    - append the dist (e.g. sid, wheezy) as a query string when
+      asking for a suitable mirror 
+  * apt-pkg/deb/deblistparser.cc:
+    - include all known languages when building the apt cache
+      (LP: #794907)
+  * apt-pkg/deb/debindexfile.cc:
+    - remove some no longer valid checks for "TranslationsAvailable()"
+
+  [ Kenneth Solbø Andersen ]
+  * apt-pkg/deb/dpkgpm.cc:
+    - set permissions of term.log to root.adm and 644 (LP: #404724)
+  
+  [ Chris Leick ]
+  * various typo and syntax corrections in doc/*.xml
+
+ -- Michael Vogt <mvo@debian.org>  Tue, 28 Jun 2011 18:00:48 +0200
+
+apt (0.8.15~exp3) experimental; urgency=low
+
+  * debian/control:
+    - add Breaks: 0.8.15~exp3) for libapt-pkg4.10 and 
+     libapt-inst1.2 (thanks to Jonathan Nieder, closes: #630214)
+    - use depends for the ${shlibs:Depends} to make the breaks work
+
+ -- Michael Vogt <mvo@debian.org>  Fri, 17 Jun 2011 21:51:41 +0200
+
+apt (0.8.15~exp2) experimental; urgency=low
+
+  * debian/control:
+    - fix incorrect Replaces (closes: #630204) for libapt-inst1.2
+
+ -- Michael Vogt <mvo@debian.org>  Wed, 15 Jun 2011 16:51:14 +0200
+
+apt (0.8.15~exp1) experimental; urgency=low
+
+  [ Julian Andres Klode ]
+  * apt-pkg/depcache.cc:
+    - Really release action groups only once (Closes: #622744)
+    - Make purge work again for config-files (LP: #244598) (Closes: #150831)
+  * apt-pkg/acquire-item.cc:
+    - Reject files known to be invalid (LP: #346386) (Closes: #627642)
+  * debian/apt.cron.daily:
+    - Check power after wait, patch by manuel-soto (LP: #705269)
+  * debian/control:
+    - Move ${shlibs:Depends} to Pre-Depends, as we do not want APT
+      unpacked if a library is too old and thus break upgrades
+  * doc/apt-key.8.xml:
+    - Document apt-key net-update (LP: #192810)
+
+  [ Christian Perrier ]
+  * Galician translation update (Miguel Anxo Bouzada). Closes: #626505
+  * Italian translation update (Milo Casagrande). Closes: #627834
+  * German documentation translation update (Chris Leick). Closes: #629949
+
+  [ David Kalnischkies ]
+  * fix a bunch of cppcheck warnings/errors based on a patch by
+    Niels Thykier, thanks! (Closes: #622805)
+  * apt-pkg/depcache.cc:
+    - really include 'rc' packages in the delete count by fixing a
+      typo which exists since 1999 in the source… (LP: #761175)
+    - if critical or-group can't be satisfied, exit directly.
+  * apt-pkg/acquire-method.cc:
+    - write directly to stdout instead of creating the message in
+      memory first before writing to avoid hitting limits
+    - fix order of CurrentURI and UsedMirror in Status() and Log()
+  * apt-pkg/orderlist.cc:
+    - let VisitRProvides report if the calls were successful
+  * apt-pkg/deb/dpkgpm.cc:
+    - replace obsolete usleep with nanosleep
+  * debian/apt{,-utils}.symbols:
+    - update both experimental symbol-files to reflect 0.8.14 state
+  * debian/rules:
+    - remove unused embedded jquery by doxygen from libapt-pkg-doc
+  * cmdline/apt-mark.cc:
+    - reimplement apt-mark in c++
+    - provide a 'showmanual' command (Closes: #582791)
+    - provide a 'dpkg --set-selections' wrapper to set/release holds
+  * cmdline/apt-get.cc:
+    - deprecate mostly undocumented 'markauto' in favor of 'apt-mark'
+  * cmdline/apt-cache.cc:
+    - deprecate mostly undocumented 'showauto' in favor of 'apt-mark'
+  * apt-pkg/pkgcache.cc:
+    - really ignore :arch in FindPkg() in non-multiarch environment
+  * doc/po/de.po:
+    - undo the translation of the command 'dump' in manpage of apt-config
+      as report by Burghard Grossmann on debian-l10n-german, thanks!
+  * apt-pkg/deb/debmetaindex.cc:
+    - do not download TranslationIndex if no Translation-* will be
+      downloaded later on anyway (Closes: #624218)
+  * test/versions.lst:
+    - disable obscure version number tests with versions dpkg doesn't
+      allow any more as they don't start with a number
+  * apt-pkg/acquire-worker.cc:
+    - print filename in the unmatching size warning (Closes: #623137)
+  * apt-pkg/acquire-item.cc:
+    - apply fix for poorly worded 'locate file' error message from
+      Ben Finney, thanks! (Closes: #623171)
+  * methods/http.cc:
+    - add config option to ignore a closed stdin to be able to easily
+      use the method as a simple standalone downloader
+    - Location header in redirects should be absolute URI, but some
+      servers just send an absolute path so still deal with it properly
+    - dequote URL taken from Location in redirects as we will otherwise
+      quote an already quoted string in the request later (Closes: #602412)
+  * apt-pkg/contrib/netrc.cc:
+    - replace non-posix gnu-extension strdupa with strdup
+  * apt-pkg/packagemanager.cc:
+    - ensure for Multi-Arch:same packages that they are unpacked in
+      lock step even in immediate configuration (Closes: #618288)
+
+  [ Michael Vogt ]
+  * methods/mirror.cc:
+    - ignore lines starting with "#" in the mirror file
+    - ignore non http urls in the mirrors
+    - append the dist (e.g. sid, wheezy) as a query string when
+      asking for a suitable mirror 
+  * debian/control:
+    - add libapt-pkg4.10 and libapt-inst1.2 library packages
 
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Tue, 17 May 2011 18:43:21 +0200
+ -- Michael Vogt <mvo@debian.org>  Fri, 10 Jun 2011 15:32:07 +0200
 
 
 apt (0.8.14.2) UNRELEASED; urgency=low
 apt (0.8.14.2) UNRELEASED; urgency=low
 
 

+ 63 - 22
debian/control

@@ -6,26 +6,61 @@ Uploaders: Michael Vogt <mvo@debian.org>, Otavio Salvador <otavio@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Christian Perrier <bubulle@debian.org>, Daniel Burrows <dburrows@debian.org>,
  Julian Andres Klode <jak@debian.org>
  Julian Andres Klode <jak@debian.org>
 Standards-Version: 3.9.2
 Standards-Version: 3.9.2
-Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev, gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen
+Build-Depends: dpkg-dev (>= 1.15.8), debhelper (>= 7.2.3~), libdb-dev,
+ gettext (>= 0.12), libcurl4-gnutls-dev (>= 7.19.0), 
+ zlib1g-dev | libz-dev, debiandoc-sgml, xsltproc, docbook-xsl, docbook-xml, 
+ po4a (>= 0.34-2), autotools-dev, autoconf, automake, doxygen
 Build-Conflicts: autoconf2.13, automake1.4
 Build-Conflicts: autoconf2.13, automake1.4
 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/
 Vcs-Bzr: http://bzr.debian.org/apt/debian-sid/
 Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/
 Vcs-Browser: http://bzr.debian.org/loggerhead/apt/debian-sid/
 
 
 Package: apt
 Package: apt
 Architecture: any
 Architecture: any
-Pre-Depends: ${shlibs:Depends}
-Depends: debian-archive-keyring, ${misc:Depends}, gnupg
+Depends: ${shlibs:Depends}, ${misc:Depends}, debian-archive-keyring, gnupg
 Replaces: manpages-pl (<< 20060617-3~)
 Replaces: manpages-pl (<< 20060617-3~)
-Provides: ${libapt-pkg:provides}
 Conflicts: python-apt (<< 0.7.93.2~)
 Conflicts: python-apt (<< 0.7.93.2~)
 Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
 Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt
-Description: Advanced front-end for dpkg
- This is Debian's next generation front-end for the dpkg package manager.
- It provides the apt-get utility and APT dselect method that provides a 
- simpler, safer way to install and upgrade packages.
+Description: APT's commandline package manager
+ This package provides commandline tools for searching and
+ managing as well as querying information about packages
+ as a low-level access to all features of the libapt-pkg library.
  .
  .
- APT features complete installation ordering, multiple source capability
- and several other unique features, see the Users Guide in apt-doc.
+ These include:
+  * apt-get for retrieval of packages and information about them
+    from authenticated sources and for installation, upgrade and
+    removal of packages together with their dependencies
+  * apt-cache for querying available information about installed
+    as well as installable packages
+  * apt-cdrom to use removable media as a source for packages
+  * apt-config as an interface to the configuration settings
+  * apt-key as an interface to manage authentication keys
+
+Package: libapt-pkg4.11
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: APT's package managment runtime library
+ This library provides the common functionality for searching and
+ managing packages as well as information about packages.
+ Higher-level package managers can depend upon this library.
+ .
+ This includes:
+  * retrieval of information about packages from multiple sources
+  * retrieval of packages and all dependent packages
+    needed to satisfy a request either through an internal
+    solver or by interfacing with an external one
+  * authenticating the sources and validating the retrieved data
+  * installation and removal of packages in the system
+  * providing different transports to retrieve data over cdrom, ftp,
+    http, rsh as well as an interface to add more transports like
+    https (apt-transport-https) and debtorrent (apt-transport-debtorrent).
+
+Package: libapt-inst1.3
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: APT's deb package format runtime library
+ This library provides methods to query and extract information 
+ from deb packages. This includes the control data and the package
+ file content.
 
 
 Package: apt-doc
 Package: apt-doc
 Architecture: all
 Architecture: all
@@ -33,13 +68,13 @@ Priority: optional
 Depends: ${misc:Depends}
 Depends: ${misc:Depends}
 Section: doc
 Section: doc
 Description: Documentation for APT
 Description: Documentation for APT
- This package contains the user guide and offline guide, for APT, an
- Advanced Package Tool.
+ This package contains the user guide and offline guide for various
+ APT tools which are provided in a html and a text-only version.
 
 
 Package: libapt-pkg-dev
 Package: libapt-pkg-dev
 Architecture: any
 Architecture: any
 Priority: optional
 Priority: optional
-Depends: apt (= ${binary:Version}), apt-utils (= ${binary:Version}), ${libapt-pkg:provides}, ${libapt-inst:provides}, ${misc:Depends}, zlib1g-dev | zlib-dev
+Depends: ${libapt-pkg-name} (= ${binary:Version}), ${libapt-inst-name} (= ${binary:Version}), ${misc:Depends}, zlib1g-dev | zlib-dev
 Section: libdevel
 Section: libdevel
 Description: Development files for APT's libapt-pkg and libapt-inst
 Description: Development files for APT's libapt-pkg and libapt-inst
  This package contains the header files and libraries for
  This package contains the header files and libraries for
@@ -61,19 +96,25 @@ Description: Documentation for APT development
 Package: apt-utils
 Package: apt-utils
 Architecture: any
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
-Provides: ${libapt-inst:provides}
 Description: APT utility programs
 Description: APT utility programs
- This package contains some APT utility programs such as apt-ftparchive,
- apt-sortpkgs and apt-extracttemplates.
+ This package contains some less used commandline utilities related
+ to package managment with APT.
  .
  .
- apt-extracttemplates is used by debconf to prompt for configuration 
- questions before installation. apt-ftparchive is used to create Package
- and other index files. apt-sortpkgs is a Package/Source file normalizer.
+  * apt-extracttemplates is used by debconf to prompt for configuration
+    questions before installation.
+  * apt-ftparchive is used to create Packages and other index files
+    needed to publish an archive of debian packages
+  * apt-sortpkgs is a Packages/Sources file normalizer.
 
 
 Package: apt-transport-https
 Package: apt-transport-https
 Architecture: any
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}
 Priority: optional
 Priority: optional
-Description: APT https transport
- This package contains a APT https transport. It makes it possible to
- use 'deb https://foo distro main' lines in the sources.list.
+Description: https download transport for APT
+ This package enables the usage of 'deb https://foo distro main' lines
+ in the /etc/apt/sources.list so that all package managers using the
+ libapt-pkg library can access metadata and packages available in sources
+ accessable over https (Hypertext Transfer Protocol Secure).
+ .
+ This transport supports server as well as client authenification
+ with certificates.

+ 2 - 0
debian/libapt-inst1.3.install

@@ -0,0 +1,2 @@
+bin/libapt-inst*.so.* usr/lib/
+usr/share/locale/*/*/libapt-inst*.mo

+ 2 - 3
debian/apt-utils.symbols

@@ -1,5 +1,4 @@
-libapt-inst.so.1.2 libapt-inst1.2
-| apt-utils #MINVER#
+libapt-inst.so.1.3 libapt-inst1.3 #MINVER#
 * Build-Depends-Package: libapt-pkg-dev
 * Build-Depends-Package: libapt-pkg-dev
  (c++)"ExtractTar::Done(bool)@Base" 0.8.0
  (c++)"ExtractTar::Done(bool)@Base" 0.8.0
  (c++)"ExtractTar::Go(pkgDirStream&)@Base" 0.8.0
  (c++)"ExtractTar::Go(pkgDirStream&)@Base" 0.8.0
@@ -114,7 +113,7 @@ libapt-inst.so.1.2 libapt-inst1.2
 # (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
 # (c++|regex|optional=std)"^char\* std::[^ ]+<.+ >::_.+@Base$" 0.8.0
 # (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<unsigned char*>(unsigned char*, unsigned char*)@Base" 0.8.0
 # (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append<unsigned char*>(unsigned char*, unsigned char*)@Base" 0.8.0
 ### gcc-4.6 specific
 ### gcc-4.6 specific
- (c++|optional=std)"std::vector<APT::Configuration::Compressor, std::allocator<APT::Configuration::Compressor> >::~vector()@Base" 0.8.12 1
+ (c++|optional=std)"std::vector<APT::Configuration::Compressor, std::allocator<APT::Configuration::Compressor> >::~vector()@Base" 0.8.12
  (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_dispatch<unsigned char*>(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned char*, unsigned char*, std::__false_type)@Base" 0.8.0
  (c++|optional=std)"std::basic_string<char, std::char_traits<char>, std::allocator<char> >& std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace_dispatch<unsigned char*>(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, unsigned char*, unsigned char*, std::__false_type)@Base" 0.8.0
 ### try to ignore std:: template instances
 ### try to ignore std:: template instances
  (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0
  (c++|regex|optional=std)"^std::basic_string<.+ >\(.+\)@Base$" 0.8.0

+ 2 - 0
debian/libapt-pkg4.11.install

@@ -0,0 +1,2 @@
+bin/libapt-pkg*.so.* usr/lib/
+usr/share/locale/*/*/libapt-pkg*.mo

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 49 - 47
debian/apt.symbols


+ 53 - 12
debian/rules

@@ -70,9 +70,9 @@ APT_UTILS=ftparchive sortpkgs extracttemplates internal-solver
 # Find the libapt-pkg major version for use in other control files
 # Find the libapt-pkg major version for use in other control files
 include buildlib/libversion.mak
 include buildlib/libversion.mak
 
 
-# Determine which package we should provide in the control files
-LIBAPTPKG_PROVIDE=libapt-pkg$(LIBAPTPKG_MAJOR)
-LIBAPTINST_PROVIDE=libapt-inst$(LIBAPTINST_MAJOR)
+# Determine which library package names to use
+LIBAPT_PKG=libapt-pkg$(LIBAPTPKG_MAJOR)
+LIBAPT_INST=libapt-inst$(LIBAPTINST_MAJOR)
 
 
 # do not fail as we are just experimenting with symbol files for now
 # do not fail as we are just experimenting with symbol files for now
 export DPKG_GENSYMBOLS_CHECK_LEVEL=0
 export DPKG_GENSYMBOLS_CHECK_LEVEL=0
@@ -97,6 +97,10 @@ build/configure-stamp: configure
 build/build-stamp: build/configure-stamp
 build/build-stamp: build/configure-stamp
 	# Add here commands to compile the package.
 	# Add here commands to compile the package.
 	$(MAKE) binary
 	$(MAKE) binary
+	# compat symlink for the locale split
+	mkdir -p build/usr/share 
+	cd build/usr/share && ln -f -s ../../locale .
+	# done here
 	touch $@
 	touch $@
 
 
 build/build-doc-stamp: build/configure-stamp
 build/build-doc-stamp: build/configure-stamp
@@ -137,7 +141,7 @@ libapt-pkg-doc: build-doc
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE)
+	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -165,7 +169,7 @@ apt-doc: build-doc
 
 
 # Build architecture-dependent files here.
 # Build architecture-dependent files here.
 
 
-binary-arch: apt libapt-pkg-dev apt-utils apt-transport-https
+binary-arch: $(LIBAPT_PKG) $(LIBAPT_INST) apt libapt-pkg-dev apt-utils apt-transport-https
 apt_MANPAGES = apt-cache apt-cdrom apt-config apt-get apt-key apt-mark apt-secure apt apt.conf apt_preferences sources.list
 apt_MANPAGES = apt-cache apt-cdrom apt-config apt-get apt-key apt-mark apt-secure apt apt.conf apt_preferences sources.list
 apt: build build-doc
 apt: build build-doc
 	dh_testdir -p$@
 	dh_testdir -p$@
@@ -205,10 +209,9 @@ apt: build build-doc
 	dh_strip -p$@
 	dh_strip -p$@
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
-	dh_makeshlibs -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib
-	dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE)
+	dh_shlibdeps -p$@
+	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -227,7 +230,7 @@ libapt-pkg-dev: build
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_gencontrol -p$@ -- -Vlibapt-pkg:provides=$(LIBAPTPKG_PROVIDE) -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE)
+	dh_gencontrol -p$@ -- -Vlibapt-pkg-name=$(LIBAPT_PKG) -Vlibapt-inst-name=$(LIBAPT_INST)
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -255,8 +258,46 @@ apt-utils: build
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_makeshlibs -p$@
 	dh_makeshlibs -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib
-	dh_gencontrol -p$@ -- -Vlibapt-inst:provides=$(LIBAPTINST_PROVIDE)
+	dh_shlibdeps -p$@
+	dh_gencontrol -p$@
+	dh_md5sums -p$@
+	dh_builddeb -p$@
+
+$(LIBAPT_PKG): build
+	dh_testdir -p$@
+	dh_testroot -p$@
+	dh_prep -p$@
+	dh_installdirs -p$@
+
+	dh_install -p$@ --sourcedir=$(BLD)
+	dh_installdocs -p$@
+	dh_installchangelogs -p$@
+	dh_strip -p$@
+	dh_compress -p$@
+	dh_fixperms -p$@
+	dh_makeshlibs -p$@
+	dh_installdeb -p$@
+	dh_shlibdeps -p$@ 
+	dh_gencontrol -p$@
+	dh_md5sums -p$@
+	dh_builddeb -p$@
+
+$(LIBAPT_INST): build
+	dh_testdir -p$@
+	dh_testroot -p$@
+	dh_prep -p$@
+	dh_installdirs -p$@
+
+	dh_install -p$@ --sourcedir=$(BLD)
+	dh_installdocs -p$@
+	dh_installchangelogs -p$@
+	dh_strip -p$@
+	dh_compress -p$@
+	dh_fixperms -p$@
+	dh_makeshlibs -p$@
+	dh_installdeb -p$@
+	dh_shlibdeps -p$@ 
+	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@
 
 
@@ -278,7 +319,7 @@ apt-transport-https: build libapt-pkg-dev
 	dh_compress -p$@
 	dh_compress -p$@
 	dh_fixperms -p$@
 	dh_fixperms -p$@
 	dh_installdeb -p$@
 	dh_installdeb -p$@
-	dh_shlibdeps -p$@ -l$(CURDIR)/debian/apt/usr/lib:$(CURDIR)/debian/$@/usr/lib
+	dh_shlibdeps -p$@ 
 	dh_gencontrol -p$@
 	dh_gencontrol -p$@
 	dh_md5sums -p$@
 	dh_md5sums -p$@
 	dh_builddeb -p$@
 	dh_builddeb -p$@

+ 1 - 1
doc/apt-cache.8.xml

@@ -315,7 +315,7 @@ Reverse Provides:
 		   <term><option>--no-replaces</option></term>
 		   <term><option>--no-replaces</option></term>
 		   <term><option>--no-enhances</option></term>
 		   <term><option>--no-enhances</option></term>
 		   <listitem><para>Per default the <literal>depends</literal> and
 		   <listitem><para>Per default the <literal>depends</literal> and
-     <literal>rdepends</literal> print all dependencies. This can be twicked with
+     <literal>rdepends</literal> print all dependencies. This can be tweaked with
      these flags which will omit the specified dependency type.
      these flags which will omit the specified dependency type.
      Configuration Item: <literal>APT::Cache::Show<replaceable>DependencyType</replaceable></literal>
      Configuration Item: <literal>APT::Cache::Show<replaceable>DependencyType</replaceable></literal>
      e.g. <literal>APT::Cache::ShowRecommends</literal>.</para></listitem>
      e.g. <literal>APT::Cache::ShowRecommends</literal>.</para></listitem>

+ 3 - 2
doc/apt-ftparchive.1.xml

@@ -532,8 +532,9 @@ for i in Sections do
      index files will not have the checksum fields where possible.
      index files will not have the checksum fields where possible.
      Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> and
      Configuration Items: <literal>APT::FTPArchive::<replaceable>Checksum</replaceable></literal> and
      <literal>APT::FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</replaceable></literal> where
      <literal>APT::FTPArchive::<replaceable>Index</replaceable>::<replaceable>Checksum</replaceable></literal> where
-     <literal>Index</literal> can be <literal>Packages</literal>, <literal>Sources</literal> or <literal>Release</literal> and
-     <literal>Checksum</literal> can be <literal>MD5</literal>, <literal>SHA1</literal> or <literal>SHA256</literal>.</para></listitem>
+     <literal><replaceable>Index</replaceable></literal> can be <literal>Packages</literal>, <literal>Sources</literal> or
+     <literal>Release</literal> and <literal><replaceable>Checksum</replaceable></literal> can be <literal>MD5</literal>,
+     <literal>SHA1</literal> or <literal>SHA256</literal>.</para></listitem>
      </varlistentry>
      </varlistentry>
 
 
      <varlistentry><term><option>-d</option></term><term><option>--db</option></term>
      <varlistentry><term><option>-d</option></term><term><option>--db</option></term>

+ 1 - 1
doc/apt-get.8.xml

@@ -280,7 +280,7 @@
 
 
      <varlistentry><term>download</term>
      <varlistentry><term>download</term>
        <listitem><para><literal>download</literal> will download the given
        <listitem><para><literal>download</literal> will download the given
-           binary package into the current directoy.
+           binary package into the current directory.
        </para></listitem>
        </para></listitem>
      </varlistentry>
      </varlistentry>
 
 

+ 3 - 3
doc/apt.conf.5.xml

@@ -50,7 +50,7 @@
       <listitem><para>the file specified by the <envar>APT_CONFIG</envar>
       <listitem><para>the file specified by the <envar>APT_CONFIG</envar>
 	 environment variable (if any)</para></listitem>
 	 environment variable (if any)</para></listitem>
       <listitem><para>all files in <literal>Dir::Etc::Parts</literal> in
       <listitem><para>all files in <literal>Dir::Etc::Parts</literal> in
-	 alphanumeric ascending order which have no or "<literal>conf</literal>"
+	 alphanumeric ascending order which have either no or "<literal>conf</literal>"
 	 as filename extension and which only contain alphanumeric,
 	 as filename extension and which only contain alphanumeric,
 	 hyphen (-), underscore (_) and period (.) characters.
 	 hyphen (-), underscore (_) and period (.) characters.
 	 Otherwise APT will print a notice that it has ignored a file if the file
 	 Otherwise APT will print a notice that it has ignored a file if the file
@@ -441,13 +441,13 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
      It is not needed to add <literal>bz2</literal> explicit to the list as it will be added automatic.</para>
      It is not needed to add <literal>bz2</literal> explicit to the list as it will be added automatic.</para>
      <para>Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will
      <para>Note that at run time the <literal>Dir::Bin::<replaceable>Methodname</replaceable></literal> will
      be checked: If this setting exists the method will only be used if this file exists, e.g. for
      be checked: If this setting exists the method will only be used if this file exists, e.g. for
-     the bzip2 method (the inbuilt) setting is <literallayout>Dir::Bin::bzip2 "/bin/bzip2";</literallayout>
+     the bzip2 method (the inbuilt) setting is: <literallayout>Dir::Bin::bzip2 "/bin/bzip2";</literallayout>
      Note also that list entries specified on the command line will be added at the end of the list
      Note also that list entries specified on the command line will be added at the end of the list
      specified in the configuration files, but before the default entries. To prefer a type in this case
      specified in the configuration files, but before the default entries. To prefer a type in this case
      over the ones specified in the configuration files you can set the option direct - not in list style.
      over the ones specified in the configuration files you can set the option direct - not in list style.
      This will not override the defined list, it will only prefix the list with this type.</para>
      This will not override the defined list, it will only prefix the list with this type.</para>
      <para>The special type <literal>uncompressed</literal> can be used to give uncompressed files a
      <para>The special type <literal>uncompressed</literal> can be used to give uncompressed files a
-     preference, but note that most archives doesn't provide uncompressed files so this is mostly only
+     preference, but note that most archives don't provide uncompressed files so this is mostly only
      useable for local mirrors.</para></listitem>
      useable for local mirrors.</para></listitem>
      </varlistentry>
      </varlistentry>
 
 

+ 4 - 4
doc/apt_preferences.5.xml

@@ -69,8 +69,8 @@ You have been warned.</para>
 
 
 <para>Note that the files in the <filename>/etc/apt/preferences.d</filename>
 <para>Note that the files in the <filename>/etc/apt/preferences.d</filename>
 directory are parsed in alphanumeric ascending order and need to obey the
 directory are parsed in alphanumeric ascending order and need to obey the
-following naming convention: The files have no or "<literal>pref</literal>"
-as filename extension and which only contain alphanumeric,  hyphen (-),
+following naming convention: The files have either no or "<literal>pref</literal>"
+as filename extension and only contain alphanumeric, hyphen (-),
 underscore (_) and period (.) characters.
 underscore (_) and period (.) characters.
 Otherwise APT will print a notice that it has ignored a file if the file
 Otherwise APT will print a notice that it has ignored a file if the file
 doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
 doesn't match a pattern in the <literal>Dir::Ignore-Files-Silently</literal>
@@ -265,7 +265,7 @@ APT also supports pinning by glob() expressions and regular
 expressions surrounded by /. For example, the following
 expressions surrounded by /. For example, the following
 example assigns the priority 500 to all packages from
 example assigns the priority 500 to all packages from
 experimental where the name starts with gnome (as a glob()-like
 experimental where the name starts with gnome (as a glob()-like
-expression or contains the word kde (as a POSIX extended regular
+expression) or contains the word kde (as a POSIX extended regular
 expression surrounded by slashes).
 expression surrounded by slashes).
 </para>
 </para>
 
 
@@ -277,7 +277,7 @@ Pin-Priority: 500
 
 
 <para>
 <para>
 The rule for those expressions is that they can occur anywhere
 The rule for those expressions is that they can occur anywhere
-where a string can occur. Those, the following pin assigns the
+where a string can occur. Thus, the following pin assigns the
 priority 990 to all packages from a release starting with karmic.
 priority 990 to all packages from a release starting with karmic.
 </para>
 </para>
 
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 300 - 199
doc/po/apt-doc.pot


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 575 - 410
doc/po/de.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 465 - 225
doc/po/es.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 459 - 223
doc/po/fr.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 310 - 206
doc/po/it.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 454 - 228
doc/po/ja.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 414 - 221
doc/po/pl.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 464 - 224
doc/po/pt.po


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 322 - 208
doc/po/pt_BR.po


+ 37 - 3
ftparchive/cachedb.cc

@@ -16,7 +16,7 @@
 #include <apt-pkg/error.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha1.h>
-#include <apt-pkg/sha256.h>
+#include <apt-pkg/sha2.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/configuration.h>
     
     
@@ -162,7 +162,8 @@ bool CacheDB::GetCurStat()
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 bool CacheDB::GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents,
 bool CacheDB::GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents,
 				bool const &GenContentsOnly, bool const &DoMD5, bool const &DoSHA1,
 				bool const &GenContentsOnly, bool const &DoMD5, bool const &DoSHA1,
-				bool const &DoSHA256, bool const &checkMtime)
+				bool const &DoSHA256, 	bool const &DoSHA512, 
+                          bool const &checkMtime)
 {
 {
 	this->FileName = FileName;
 	this->FileName = FileName;
 
 
@@ -190,7 +191,9 @@ bool CacheDB::GetFileInfo(string const &FileName, bool const &DoControl, bool co
 		|| (DoContents && LoadContents(GenContentsOnly) == false)
 		|| (DoContents && LoadContents(GenContentsOnly) == false)
 		|| (DoMD5 && GetMD5(false) == false)
 		|| (DoMD5 && GetMD5(false) == false)
 		|| (DoSHA1 && GetSHA1(false) == false)
 		|| (DoSHA1 && GetSHA1(false) == false)
-		|| (DoSHA256 && GetSHA256(false) == false))
+		|| (DoSHA256 && GetSHA256(false) == false)
+		|| (DoSHA512 && GetSHA512(false) == false)
+           )
 	{
 	{
 		delete Fd;
 		delete Fd;
 		Fd = NULL;
 		Fd = NULL;
@@ -412,6 +415,37 @@ bool CacheDB::GetSHA256(bool const &GenOnly)
    return true;
    return true;
 }
 }
 									/*}}}*/
 									/*}}}*/
+// CacheDB::GetSHA256 - Get the SHA256 hash				/*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool CacheDB::GetSHA512(bool const &GenOnly)
+{
+   // Try to read the control information out of the DB.
+   if ((CurStat.Flags & FlSHA512) == FlSHA512)
+   {
+      if (GenOnly == true)
+	 return true;
+
+      SHA512Res = bytes2hex(CurStat.SHA512, sizeof(CurStat.SHA512));
+      return true;
+   }
+   
+   Stats.SHA512Bytes += CurStat.FileSize;
+	 
+   if (Fd == NULL && OpenFile() == false)
+   {
+      return false;
+   }
+   SHA512Summation SHA512;
+   if (Fd->Seek(0) == false || SHA512.AddFD(Fd->Fd(),CurStat.FileSize) == false)
+      return false;
+   
+   SHA512Res = SHA512.Result();
+   hex2bytes(CurStat.SHA512, SHA512Res.data(), sizeof(CurStat.SHA512));
+   CurStat.Flags |= FlSHA512;
+   return true;
+}
+									/*}}}*/
 // CacheDB::Finish - Write back the cache structure			/*{{{*/
 // CacheDB::Finish - Write back the cache structure			/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* */
 /* */

+ 16 - 4
ftparchive/cachedb.h

@@ -70,10 +70,13 @@ class CacheDB
    bool GetMD5(bool const &GenOnly);
    bool GetMD5(bool const &GenOnly);
    bool GetSHA1(bool const &GenOnly);
    bool GetSHA1(bool const &GenOnly);
    bool GetSHA256(bool const &GenOnly);
    bool GetSHA256(bool const &GenOnly);
+   bool GetSHA512(bool const &GenOnly);
    
    
    // Stat info stored in the DB, Fixed types since it is written to disk.
    // Stat info stored in the DB, Fixed types since it is written to disk.
    enum FlagList {FlControl = (1<<0),FlMD5=(1<<1),FlContents=(1<<2),
    enum FlagList {FlControl = (1<<0),FlMD5=(1<<1),FlContents=(1<<2),
-   	FlSize=(1<<3), FlSHA1=(1<<4), FlSHA256=(1<<5)};
+                  FlSize=(1<<3), FlSHA1=(1<<4), FlSHA256=(1<<5), 
+                  FlSHA512=(1<<6)};
+
    struct StatStore
    struct StatStore
    {
    {
       uint32_t Flags;
       uint32_t Flags;
@@ -82,6 +85,7 @@ class CacheDB
       uint8_t  MD5[16];
       uint8_t  MD5[16];
       uint8_t  SHA1[20];
       uint8_t  SHA1[20];
       uint8_t  SHA256[32];
       uint8_t  SHA256[32];
+      uint8_t  SHA512[64];
    } CurStat;
    } CurStat;
    struct StatStore OldStat;
    struct StatStore OldStat;
    
    
@@ -98,6 +102,7 @@ class CacheDB
    string MD5Res;
    string MD5Res;
    string SHA1Res;
    string SHA1Res;
    string SHA256Res;
    string SHA256Res;
+   string SHA512Res;
    
    
    // Runtime statistics
    // Runtime statistics
    struct Stats
    struct Stats
@@ -106,14 +111,21 @@ class CacheDB
       double MD5Bytes;
       double MD5Bytes;
       double SHA1Bytes;
       double SHA1Bytes;
       double SHA256Bytes;
       double SHA256Bytes;
+      double SHA512Bytes;
       unsigned long Packages;
       unsigned long Packages;
       unsigned long Misses;  
       unsigned long Misses;  
       unsigned long DeLinkBytes;
       unsigned long DeLinkBytes;
       
       
       inline void Add(const Stats &S) {
       inline void Add(const Stats &S) {
-	 Bytes += S.Bytes; MD5Bytes += S.MD5Bytes; SHA1Bytes += S.SHA1Bytes; 
+	 Bytes += S.Bytes; 
+         MD5Bytes += S.MD5Bytes; 
+         SHA1Bytes += S.SHA1Bytes; 
 	 SHA256Bytes += S.SHA256Bytes;
 	 SHA256Bytes += S.SHA256Bytes;
-	 Packages += S.Packages; Misses += S.Misses; DeLinkBytes += S.DeLinkBytes;};
+	 SHA512Bytes += S.SHA512Bytes;
+	 Packages += S.Packages;
+         Misses += S.Misses; 
+         DeLinkBytes += S.DeLinkBytes;
+      };
       Stats() : Bytes(0), MD5Bytes(0), SHA1Bytes(0), SHA256Bytes(0), Packages(0), Misses(0), DeLinkBytes(0) {};
       Stats() : Bytes(0), MD5Bytes(0), SHA1Bytes(0), SHA256Bytes(0), Packages(0), Misses(0), DeLinkBytes(0) {};
    } Stats;
    } Stats;
    
    
@@ -125,7 +137,7 @@ class CacheDB
    
    
    bool SetFile(string const &FileName,struct stat St,FileFd *Fd);
    bool SetFile(string const &FileName,struct stat St,FileFd *Fd);
    bool GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents, bool const &GenContentsOnly,
    bool GetFileInfo(string const &FileName, bool const &DoControl, bool const &DoContents, bool const &GenContentsOnly,
-		    bool const &DoMD5, bool const &DoSHA1, bool const &DoSHA256, bool const &checkMtime = false);
+		    bool const &DoMD5, bool const &DoSHA1, bool const &DoSHA256, bool const &DoSHA512, bool const &checkMtime = false);
    bool Finish();   
    bool Finish();   
    
    
    bool Clean();
    bool Clean();

+ 35 - 2
ftparchive/writer.cc

@@ -20,7 +20,7 @@
 #include <apt-pkg/aptconfiguration.h>
 #include <apt-pkg/aptconfiguration.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha1.h>
-#include <apt-pkg/sha256.h>
+#include <apt-pkg/sha2.h>
 #include <apt-pkg/deblistparser.h>
 #include <apt-pkg/deblistparser.h>
 
 
 #include <sys/types.h>
 #include <sys/types.h>
@@ -64,6 +64,7 @@ FTWScanner::FTWScanner(string const &Arch): Arch(Arch)
    DoMD5 = _config->FindB("APT::FTPArchive::MD5",true);
    DoMD5 = _config->FindB("APT::FTPArchive::MD5",true);
    DoSHA1 = _config->FindB("APT::FTPArchive::SHA1",true);
    DoSHA1 = _config->FindB("APT::FTPArchive::SHA1",true);
    DoSHA256 = _config->FindB("APT::FTPArchive::SHA256",true);
    DoSHA256 = _config->FindB("APT::FTPArchive::SHA256",true);
+   DoSHA512 = _config->FindB("APT::FTPArchive::SHA512",true);
 }
 }
 									/*}}}*/
 									/*}}}*/
 // FTWScanner::Scanner - FTW Scanner					/*{{{*/
 // FTWScanner::Scanner - FTW Scanner					/*{{{*/
@@ -316,6 +317,7 @@ PackagesWriter::PackagesWriter(string const &DB,string const &Overrides,string c
    DoMD5 = _config->FindB("APT::FTPArchive::Packages::MD5",DoMD5);
    DoMD5 = _config->FindB("APT::FTPArchive::Packages::MD5",DoMD5);
    DoSHA1 = _config->FindB("APT::FTPArchive::Packages::SHA1",DoSHA1);
    DoSHA1 = _config->FindB("APT::FTPArchive::Packages::SHA1",DoSHA1);
    DoSHA256 = _config->FindB("APT::FTPArchive::Packages::SHA256",DoSHA256);
    DoSHA256 = _config->FindB("APT::FTPArchive::Packages::SHA256",DoSHA256);
+   DoSHA256 = _config->FindB("APT::FTPArchive::Packages::SHA512",true);
    DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
    DoAlwaysStat = _config->FindB("APT::FTPArchive::AlwaysStat", false);
    DoContents = _config->FindB("APT::FTPArchive::Contents",true);
    DoContents = _config->FindB("APT::FTPArchive::Contents",true);
    NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
    NoOverride = _config->FindB("APT::FTPArchive::NoOverrideMsg",false);
@@ -370,7 +372,7 @@ bool FTWScanner::SetExts(string const &Vals)
 bool PackagesWriter::DoPackage(string FileName)
 bool PackagesWriter::DoPackage(string FileName)
 {      
 {      
    // Pull all the data we need form the DB
    // Pull all the data we need form the DB
-   if (Db.GetFileInfo(FileName, true, DoContents, true, DoMD5, DoSHA1, DoSHA256, DoAlwaysStat)
+   if (Db.GetFileInfo(FileName, true, DoContents, true, DoMD5, DoSHA1, DoSHA256, DoSHA512, DoAlwaysStat)
 		  == false)
 		  == false)
    {
    {
       return false;
       return false;
@@ -446,6 +448,8 @@ bool PackagesWriter::DoPackage(string FileName)
       SetTFRewriteData(Changes[End++], "SHA1", Db.SHA1Res.c_str());
       SetTFRewriteData(Changes[End++], "SHA1", Db.SHA1Res.c_str());
    if (DoSHA256 == true)
    if (DoSHA256 == true)
       SetTFRewriteData(Changes[End++], "SHA256", Db.SHA256Res.c_str());
       SetTFRewriteData(Changes[End++], "SHA256", Db.SHA256Res.c_str());
+   if (DoSHA512 == true)
+      SetTFRewriteData(Changes[End++], "SHA512", Db.SHA512Res.c_str());
    SetTFRewriteData(Changes[End++], "Filename", NewFileName.c_str());
    SetTFRewriteData(Changes[End++], "Filename", NewFileName.c_str());
    SetTFRewriteData(Changes[End++], "Priority", OverItem->Priority.c_str());
    SetTFRewriteData(Changes[End++], "Priority", OverItem->Priority.c_str());
    SetTFRewriteData(Changes[End++], "Status", 0);
    SetTFRewriteData(Changes[End++], "Status", 0);
@@ -623,6 +627,7 @@ bool SourcesWriter::DoPackage(string FileName)
    MD5Summation MD5;
    MD5Summation MD5;
    SHA1Summation SHA1;
    SHA1Summation SHA1;
    SHA256Summation SHA256;
    SHA256Summation SHA256;
+   SHA256Summation SHA512;
 
 
    if (DoMD5 == true)
    if (DoMD5 == true)
       MD5.Add((unsigned char *)Start,BlkEnd - Start);
       MD5.Add((unsigned char *)Start,BlkEnd - Start);
@@ -630,6 +635,8 @@ bool SourcesWriter::DoPackage(string FileName)
       SHA1.Add((unsigned char *)Start,BlkEnd - Start);
       SHA1.Add((unsigned char *)Start,BlkEnd - Start);
    if (DoSHA256 == true)
    if (DoSHA256 == true)
       SHA256.Add((unsigned char *)Start,BlkEnd - Start);
       SHA256.Add((unsigned char *)Start,BlkEnd - Start);
+   if (DoSHA512 == true)
+      SHA512.Add((unsigned char *)Start,BlkEnd - Start);
 
 
    // Add an extra \n to the end, just in case
    // Add an extra \n to the end, just in case
    *BlkEnd++ = '\n';
    *BlkEnd++ = '\n';
@@ -740,6 +747,12 @@ bool SourcesWriter::DoPackage(string FileName)
 		   << strippedName << "\n " << Tags.FindS("Checksums-Sha256");
 		   << strippedName << "\n " << Tags.FindS("Checksums-Sha256");
    string const ChecksumsSha256 = ostreamSha256.str();
    string const ChecksumsSha256 = ostreamSha256.str();
 
 
+   std::ostringstream ostreamSha512;
+   if (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
    // Strip the DirStrip prefix from the FileName and add the PathPrefix
    string NewFileName;
    string NewFileName;
    if (DirStrip.empty() == false &&
    if (DirStrip.empty() == false &&
@@ -795,6 +808,8 @@ bool SourcesWriter::DoPackage(string FileName)
       SetTFRewriteData(Changes[End++],"Checksums-Sha1",ChecksumsSha1.c_str());
       SetTFRewriteData(Changes[End++],"Checksums-Sha1",ChecksumsSha1.c_str());
    if (ChecksumsSha256.empty() == false)
    if (ChecksumsSha256.empty() == false)
       SetTFRewriteData(Changes[End++],"Checksums-Sha256",ChecksumsSha256.c_str());
       SetTFRewriteData(Changes[End++],"Checksums-Sha256",ChecksumsSha256.c_str());
+   if (ChecksumsSha512.empty() == false)
+      SetTFRewriteData(Changes[End++],"Checksums-Sha512",ChecksumsSha512.c_str());
    if (Directory != "./")
    if (Directory != "./")
       SetTFRewriteData(Changes[End++],"Directory",Directory.c_str());
       SetTFRewriteData(Changes[End++],"Directory",Directory.c_str());
    SetTFRewriteData(Changes[End++],"Priority",BestPrio.c_str());
    SetTFRewriteData(Changes[End++],"Priority",BestPrio.c_str());
@@ -1046,6 +1061,12 @@ bool ReleaseWriter::DoPackage(string FileName)
       CheckSums[NewFileName].SHA256 = SHA256.Result();
       CheckSums[NewFileName].SHA256 = SHA256.Result();
    }
    }
 
 
+   if (DoSHA512 == true)
+   {
+      SHA512Summation SHA512;
+      SHA512.AddFD(fd.Fd(), fd.Size());
+      CheckSums[NewFileName].SHA512 = SHA512.Result();
+   }
    fd.Close();
    fd.Close();
    
    
    return true;
    return true;
@@ -1092,4 +1113,16 @@ void ReleaseWriter::Finish()
 		 (*I).first.c_str());
 		 (*I).first.c_str());
       }
       }
    }
    }
+
+   fprintf(Output, "SHA512:\n");
+   for(map<string,struct CheckSum>::const_iterator I = CheckSums.begin();
+       I != CheckSums.end();
+       ++I)
+   {
+      fprintf(Output, " %s %32ld %s\n",
+              (*I).second.SHA512.c_str(),
+              (*I).second.size,
+              (*I).first.c_str());
+   }
+
 }
 }

+ 2 - 0
ftparchive/writer.h

@@ -63,6 +63,7 @@ class FTWScanner
    bool DoMD5;
    bool DoMD5;
    bool DoSHA1;
    bool DoSHA1;
    bool DoSHA256;
    bool DoSHA256;
+   bool DoSHA512;
 
 
    unsigned long DeLinkLimit;
    unsigned long DeLinkLimit;
    string InternalPrefix;
    string InternalPrefix;
@@ -195,6 +196,7 @@ protected:
       string MD5;
       string MD5;
       string SHA1;
       string SHA1;
       string SHA256;
       string SHA256;
+      string SHA512;
       // Limited by FileFd::Size()
       // Limited by FileFd::Size()
       unsigned long size;
       unsigned long size;
       ~CheckSum() {};
       ~CheckSum() {};

+ 17 - 2
methods/mirror.cc

@@ -134,6 +134,10 @@ bool MirrorMethod::DownloadMirrorFile(string mirror_uri_str)
    string fetch = BaseUri;
    string fetch = BaseUri;
    fetch.replace(0,strlen("mirror://"),"http://");
    fetch.replace(0,strlen("mirror://"),"http://");
 
 
+   // append the dist as a query string
+   if (Dist != "")
+      fetch += "?dist=" + Dist;
+
    if(Debug)
    if(Debug)
       clog << "MirrorMethod::DownloadMirrorFile(): '" << fetch << "'"
       clog << "MirrorMethod::DownloadMirrorFile(): '" << fetch << "'"
            << " to " << MirrorFile << endl;
            << " to " << MirrorFile << endl;
@@ -274,8 +278,18 @@ bool MirrorMethod::InitMirrors()
    while (!in.eof()) 
    while (!in.eof()) 
    {
    {
       getline(in, s);
       getline(in, s);
-      if (s.size() > 0)
-	 AllMirrors.push_back(s);
+
+      // ignore lines that start with #
+      if (s.find("#") == 0)
+         continue;
+      // ignore empty lines
+      if (s.size() == 0)
+         continue;
+      // ignore non http lines
+      if (s.find("http://") != 0)
+         continue;
+
+      AllMirrors.push_back(s);
    }
    }
    Mirror = AllMirrors[0];
    Mirror = AllMirrors[0];
    UsedMirror = Mirror;
    UsedMirror = Mirror;
@@ -329,6 +343,7 @@ string MirrorMethod::GetMirrorFileName(string mirror_uri_str)
 	 if(Debug)
 	 if(Debug)
 	    std::cerr << "found BaseURI: " << uristr << std::endl;
 	    std::cerr << "found BaseURI: " << uristr << std::endl;
 	 BaseUri = uristr.substr(0,uristr.size()-1);
 	 BaseUri = uristr.substr(0,uristr.size()-1);
+         Dist = (*I)->GetDist();
       }
       }
    }
    }
    // get new file
    // get new file

+ 1 - 0
methods/mirror.h

@@ -29,6 +29,7 @@ class MirrorMethod : public HttpMethod
    vector<string> AllMirrors; // all available mirrors
    vector<string> AllMirrors; // all available mirrors
    string MirrorFile; // the file that contains the list of mirrors
    string MirrorFile; // the file that contains the list of mirrors
    bool DownloadedMirrorFile; // already downloaded this session
    bool DownloadedMirrorFile; // already downloaded this session
+   string Dist;       // the target distrubtion (e.g. sid, oneiric)
 
 
    bool Debug;
    bool Debug;
 
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 560 - 413
po/apt-all.pot


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 577 - 428
po/ca.po


+ 14 - 5
po/it.po

@@ -9,14 +9,16 @@ msgstr ""
 "Project-Id-Version: apt\n"
 "Project-Id-Version: apt\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-01-12 17:42+0100\n"
 "POT-Creation-Date: 2011-01-12 17:42+0100\n"
-"PO-Revision-Date: 2011-02-21 18:35+0100\n"
+"PO-Revision-Date: 2011-05-16 21:38+0200\n"
 "Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
 "Last-Translator: Milo Casagrande <milo@ubuntu.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "Language: it\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Launchpad-Export-Date: 2011-02-21 18:00+0000\n"
+"X-Generator: Launchpad (build 12406)\n"
 
 
 #: cmdline/apt-cache.cc:156
 #: cmdline/apt-cache.cc:156
 #, c-format
 #, c-format
@@ -1907,8 +1909,10 @@ msgid "Couldn't change to %s"
 msgstr "Impossibile passare a %s"
 msgstr "Impossibile passare a %s"
 
 
 #: apt-inst/deb/debfile.cc:140
 #: apt-inst/deb/debfile.cc:140
+#, fuzzy
+#| msgid "Internal error, could not locate member %s"
 msgid "Internal error, could not locate member"
 msgid "Internal error, could not locate member"
-msgstr "Errore interno, impossibile localizzare il membro"
+msgstr "Errore interno, impossibile trovare il membro %s"
 
 
 #: apt-inst/deb/debfile.cc:173
 #: apt-inst/deb/debfile.cc:173
 msgid "Failed to locate a valid control file"
 msgid "Failed to locate a valid control file"
@@ -2710,7 +2714,6 @@ msgstr "Scrittura del file temporaneo di stato %s non riuscita"
 #, c-format
 #, c-format
 msgid "Internal error, group '%s' has no installable pseudo package"
 msgid "Internal error, group '%s' has no installable pseudo package"
 msgstr ""
 msgstr ""
-"Errore interno, il gruppo \"%s\" non ha uno pseudo pacchetto installabile"
 
 
 #: apt-pkg/tagfile.cc:102
 #: apt-pkg/tagfile.cc:102
 #, c-format
 #, c-format
@@ -3113,7 +3116,10 @@ msgstr ""
 "sistemare manualmente questo pacchetto (a causa dell'architettura mancante)."
 "sistemare manualmente questo pacchetto (a causa dell'architettura mancante)."
 
 
 #: apt-pkg/acquire-item.cc:1424
 #: apt-pkg/acquire-item.cc:1424
-#, c-format
+#, fuzzy, c-format
+#| msgid ""
+#| "I wasn't able to locate file for the %s package. This might mean you need "
+#| "to manually fix this package."
 msgid ""
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "to manually fix this package."
 "to manually fix this package."
@@ -3581,3 +3587,6 @@ msgstr "Connessione chiusa prematuramente"
 
 
 #~ msgid "Unable to find hash sum for '%s' in Release file"
 #~ msgid "Unable to find hash sum for '%s' in Release file"
 #~ msgstr "Impossibile trovare la somma hash per \"%s\" nel file Release"
 #~ msgstr "Impossibile trovare la somma hash per \"%s\" nel file Release"
+
+#~ msgid "Can not read mirror file '%s'"
+#~ msgstr "Impossibile leggere il file mirror \"%s\""

+ 19 - 7
test/hash.cc

@@ -1,6 +1,6 @@
 #include <apt-pkg/md5.h>
 #include <apt-pkg/md5.h>
 #include <apt-pkg/sha1.h>
 #include <apt-pkg/sha1.h>
-#include <apt-pkg/sha256.h>
+#include <apt-pkg/sha2.h>
 #include <apt-pkg/strutl.h>
 #include <apt-pkg/strutl.h>
 #include <iostream>
 #include <iostream>
 
 
@@ -10,9 +10,17 @@ template <class T> void Test(const char *In,const char *Out)
 {
 {
    T Sum;
    T Sum;
    Sum.Add(In);
    Sum.Add(In);
-   cout << Sum.Result().Value() << endl;
-   if (stringcasecmp(Sum.Result().Value(),Out) != 0)
+
+   cout << "expected: '" << Out << "'" << endl;
+   cout << "got     : '" << Sum.Result().Value() << "'" << endl;
+   cout << "got     : '" << Sum.Result().Value() << "'" << endl;
+   cout << "got     : '" << Sum.Result().Value() << "'" << endl;
+   if (stringcasecmp(Sum.Result().Value(), Out) != 0) {
+      cout << "FAIL" << endl << endl;
       abort();
       abort();
+   } else {
+      cout << "PASS" << endl << endl;
+   }
 }
 }
 
 
 template <class T> void TestMill(const char *Out)
 template <class T> void TestMill(const char *Out)
@@ -34,9 +42,8 @@ template <class T> void TestMill(const char *Out)
 	 Count = 0;
 	 Count = 0;
       }
       }
    }
    }
-   
-   cout << Sum.Result().Value() << endl;
-   if (stringcasecmp(Sum.Result().Value(),Out) != 0)
+
+   if (stringcasecmp(Sum.Result().Value(), Out) != 0)
       abort();
       abort();
 }
 }
 
 
@@ -62,8 +69,13 @@ int main()
    // SHA-256, From FIPS 180-2
    // SHA-256, From FIPS 180-2
    Test<SHA256Summation>("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 
    Test<SHA256Summation>("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 
 			 "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
 			 "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1");
-   
 
 
+   // SHA-512, From 
+   Test<SHA512Summation>(
+      "abc", 
+      "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
+      "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f");
+   
    return 0; 
    return 0; 
 }
 }
 
 

+ 6 - 0
test/integration/test-bug-611729-mark-as-manual

@@ -48,11 +48,17 @@ b is already the newest version.
 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b -d
 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install b -d
 testmarkedauto 'b'
 testmarkedauto 'b'
 
 
+rm rootdir/var/log/apt/history.log
+
 aptget install b --reinstall -y -qq 2>&1 > /dev/null
 aptget install b --reinstall -y -qq 2>&1 > /dev/null
 testdpkgnotinstalled a
 testdpkgnotinstalled a
 testdpkginstalled b c
 testdpkginstalled b c
 testmarkedauto 'b'
 testmarkedauto 'b'
 
 
+sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d'
+testfileequal 'rootdir/var/log/apt/history.log' '
+Reinstall: b:i386 (1.0)'
+
 testequal 'Reading package lists...
 testequal 'Reading package lists...
 Building dependency tree...
 Building dependency tree...
 Reading state information...
 Reading state information...