Browse Source

Merge apt--authentication--0

Patches applied:

 * apt@arch.ubuntu.com/apt--experimental--0.6--base-0
   tag of apt@arch.ubuntu.com/apt--MAIN--0--patch-1190

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-1
   Creation of branch v0_6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-2
   Creation of branch v0_6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-3
   Creation of branch v0_6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-4
   Creation of branch v0_6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-5
   Creation of branch v0_6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-6
   Creation of branch v0_6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-7
   Merge working copy of v0.6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-8
   0.6.0 is headed for experimental, not unstable

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-9
   Date

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-10
   Update LIB_APT_PKG_MAJOR

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-11
   - Fix a heap corruption bug in pkgSrcRecords::pkgSrcRec...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-12
   Resynch

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-13
   * Merge apt 0.5.17

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-14
   * Rearrange Release file authentication code to be more...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-15
   * Convert distribution "../project/experimental" to "ex...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-16
   Merge 1.11

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-17
   Merge 1.7

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-18
   Merge 1.10

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-19
   * Make a number of Release file errors into warnings; f...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-20
   * Add space between package names when multiple unauthe...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-21
   * Provide apt-key with a secret keyring and a trustdb, ...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-22
   * Fix typo in apt-key(8) (standard input is '-', not '/')

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-23
   0.6.2

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-24
   Resynch

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-25
   * Fix MetaIndexURI for flat ("foo/") sources

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-26
   0.6.3

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-27
   * Use the top-level Release file in LoadReleaseInfo, ra...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-28
   0.6.4

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-29
   Clarify

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-30
   * Move the authentication check into a separate functio...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-31
   * Fix display of unauthenticated packages when they are...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-32
   * Move the authentication check into a separate functio...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-33
   * Restore the ugly hack I removed from indexRecords::Lo...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-34
   0.6.6

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-35
   * Forgot to revert part of the changes to tagfile in 0....

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-36
   * Add a config option and corresponding command line option

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-37
   0.6.8

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-38
   hopefully avoid more segfaults

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-39
   XXX

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-40
   * Another tagfile workaround

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-41
   * Use "Codename" (woody, sarge, etc.) to supply the val...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-42
   * Support IMS requests of Release.gpg and Release

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-43
   * Have pkgAcquireIndex calculate an MD5 sum if one is n...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-44
   * Merge 0.5.18

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-45
   apt (0.6.13) experimental; urgency=low

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-46
   0.6.13

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-47
   Merge 0.5.20

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-48
   The source list works a bit differently in 0.6; fix the...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-49
   * s/Debug::Acquire::gpg/&v/

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-50
   * Honor the [vendor] syntax in sources.list again (thou...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-51
   * Don't ship vendors.list(5) since it isn't used yet

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-52
   * Revert change from 0.6.10; it was right in the first ...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-53
   * Fix some cases where the .gpg file could be left in p...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-54
   Print a warning if gnupg is not installed

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-55
   * Handle more IMS stuff correctly

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-56
   0.6.17

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-57
   * Merge 0.5.21

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-58
   * Add new Debian Archive Automatic Signing Key to the d...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-59
   0.6.18

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-60
   * Merge 0.5.22

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-61
   * Convert apt-key(8) to docbook XML

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-62
   Merge 0.5.23

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-63
   Remove bogus partial 0.5.22 changelog entry

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-64
   Make the auth warning a bit less redundant

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-65
   * Merge 0.5.24

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-66
   * Make the unauthenticated packages prompt more intuiti...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-67
   Merge 0.5.25

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-68
   * Remove obsolete pkgIterator::TargetVer() (Closes: #230159)

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-69
   * Reverse test in CheckAuth to match new prompt (Closes...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-70
   Update version

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-71
   Fix backwards sense of CheckAuth prompt

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-72
   0.6.24

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-73
   Close bug

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-74
   * Fix handling of two-part sources for sources.list deb...

 * apt@arch.ubuntu.com/apt--experimental--0.6--patch-75
   0.6.25

 * apt@packages.debian.org/apt--authentication--0--base-0
   tag of apt@arch.ubuntu.com/apt--experimental--0.6--patch-75

 * apt@packages.debian.org/apt--authentication--0--patch-1
   Michael Vogt's merge of apt--experimental--0 onto apt--main--0

 * apt@packages.debian.org/apt--authentication--0--patch-2
   Merge from apt--main--0

 * apt@packages.debian.org/apt--authentication--0--patch-3
   Merge from main

 * apt@packages.debian.org/apt--authentication--0--patch-4
   Merge from main

 * apt@packages.debian.org/apt--authentication--0--patch-5
   Update version number in configure.in

 * apt@packages.debian.org/apt--authentication--0--patch-6
   Merge from main

 * apt@packages.debian.org/apt--authentication--0--patch-7
   Merge from main

 * apt@packages.debian.org/apt--authentication--0--patch-8
   Merge from mvo's branch

 * apt@packages.debian.org/apt--authentication--0--patch-9
   Merge from mvo's tree

 * apt@packages.debian.org/apt--authentication--0--patch-10
   Merge from mvo

 * apt@packages.debian.org/apt--authentication--0--patch-11
   Fix permissions AGAIN

 * michael.vogt@canonical.com--2004--laptop/apt--authentication-mvo--0--base-0
   tag of michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-12

 * michael.vogt@canonical.com--2004--laptop/apt--authentication-mvo--0--patch-1
   * star-merged matt's changes (bz2 support for data-members in debs)

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-1
   tag of apt@packages.debian.org/apt--authentication--0--base-0

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-2
   merged "tla apply-delta -A foo@ apt@arch.ubuntu.com/apt--MAIN--0--patch-1190 apt@arch.ubuntu.com/apt--MAIN--0--patch-1343" and cleaned up conflicts

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-3
   * missing bits from the merge added

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-4
   * star-merged with apt@packages.debian.org/apt--main--0

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-5
   * tree-synced to the apt--authentication tree

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-6
   * use the ubuntu-key in this version

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-7
   * imported the patches from mdz

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-8
   * apt-get update --print-uris works now as before (fallback to 0.5.x behaviour)

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-9
   * fix for the "if any source unauthenticated, all other sources are unauthenticated too" problem

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-10
   * reworked the "--print-uris" patch. it no longer uses: "APT::Get::Print-URIs" in the library

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-11
   * version of the library set to 3.6

 * michael.vogt@canonical.com--2004/apt--authentication-mvo--0--patch-12
   * changelog finallized, will upload to people.ubuntulinux.org/~mvo/apt-authentication

 * michael.vogt@canonical.com--2004/apt--main-authentication--0--base-0
   tag of apt@packages.debian.org/apt--main--0--patch-22

 * michael.vogt@canonical.com--2004/apt--main-authentication--0--patch-1
   * star-merge from apt--experimental--0.6

 * michael.vogt@canonical.com--2004/apt--main-authentication--0--patch-2
   * compile failure fix for methods/http.cc, po-file fixes
debian/1.8.y
Matt Zimmerman 18 years ago
parent
commit
7db98ffced
  1. 2
      apt-inst/contrib/arfile.cc
  2. 2
      apt-inst/contrib/extracttar.cc
  3. 2
      apt-inst/deb/debfile.cc
  4. 2
      apt-inst/deb/dpkgdb.cc
  5. 2
      apt-inst/dirstream.cc
  6. 2
      apt-inst/extract.cc
  7. 2
      apt-inst/filelist.cc
  8. 439
      apt-pkg/acquire-item.cc
  9. 76
      apt-pkg/acquire-item.h
  10. 8
      apt-pkg/acquire-method.cc
  11. 3
      apt-pkg/acquire-method.h
  12. 2
      apt-pkg/acquire.cc
  13. 4
      apt-pkg/acquire.h
  14. 3
      apt-pkg/cacheiterators.h
  15. 77
      apt-pkg/deb/debindexfile.cc
  16. 16
      apt-pkg/deb/debindexfile.h
  17. 6
      apt-pkg/deb/deblistparser.cc
  18. 269
      apt-pkg/deb/debmetaindex.cc
  19. 48
      apt-pkg/deb/debmetaindex.h
  20. 10
      apt-pkg/indexfile.cc
  21. 9
      apt-pkg/indexfile.h
  22. 151
      apt-pkg/indexrecords.cc
  23. 52
      apt-pkg/indexrecords.h
  24. 4
      apt-pkg/init.h
  25. 12
      apt-pkg/makefile
  26. 48
      apt-pkg/metaindex.h
  27. 15
      apt-pkg/pkgcachegen.cc
  28. 139
      apt-pkg/sourcelist.cc
  29. 35
      apt-pkg/sourcelist.h
  30. 44
      apt-pkg/srcrecords.cc
  31. 6
      apt-pkg/srcrecords.h
  32. 6
      apt-pkg/tagfile.cc
  33. 39
      apt-pkg/vendor.cc
  34. 37
      apt-pkg/vendor.h
  35. 144
      apt-pkg/vendorlist.cc
  36. 52
      apt-pkg/vendorlist.h
  37. 5
      buildlib/environment.mak.in
  38. 15
      cmdline/apt-cache.cc
  39. 66
      cmdline/apt-get.cc
  40. 60
      cmdline/apt-key
  41. 6
      cmdline/makefile
  42. 5
      configure.in
  43. 4
      debian/apt.manpages
  44. 42
      debian/apt.postinst
  45. 6
      debian/changelog
  46. 2
      debian/control
  47. 24
      debian/rules
  48. 87
      doc/apt-key.8.xml
  49. 3
      doc/es/makefile
  50. 3
      doc/fr/makefile
  51. 4
      doc/makefile
  52. 115
      doc/vendors.list.5.xml
  53. 2
      ftparchive/apt-ftparchive.cc
  54. 2
      ftparchive/writer.h
  55. 2
      methods/cdrom.cc
  56. 2
      methods/connect.cc
  57. 2
      methods/copy.cc
  58. 2
      methods/file.cc
  59. 2
      methods/ftp.cc
  60. 261
      methods/gpgv.cc
  61. 2
      methods/gzip.cc
  62. 9
      methods/makefile
  63. 2
      methods/rsh.cc
  64. 298
      po/apt-all.pot
  65. 1
      po/da.po
  66. 21
      po/el.po
  67. 1
      po/en_GB.po
  68. 1
      po/es.po
  69. 2
      po/fr.po
  70. 1
      po/it.po
  71. 1
      po/nb.po
  72. 32
      po/nn.po
  73. 1
      po/pt_BR.po
  74. BIN
      share/debian-archive.gpg
  75. BIN
      share/ubuntu-archive.gpg

2
apt-inst/contrib/arfile.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: arfile.cc,v 1.7 2004/01/07 20:39:37 mdz Exp $
// $Id: arfile.cc,v 1.6.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
AR File - Handle an 'AR' archive

2
apt-inst/contrib/extracttar.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: extracttar.cc,v 1.9 2004/01/07 20:39:37 mdz Exp $
// $Id: extracttar.cc,v 1.8.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
Extract a Tar - Tar Extractor

2
apt-inst/deb/debfile.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: debfile.cc,v 1.4 2004/01/07 20:39:37 mdz Exp $
// $Id: debfile.cc,v 1.3.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
Debian Archive File (.deb)

2
apt-inst/deb/dpkgdb.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: dpkgdb.cc,v 1.8 2004/01/07 20:39:37 mdz Exp $
// $Id: dpkgdb.cc,v 1.7.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
DPKGv1 Database Implemenation

2
apt-inst/dirstream.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: dirstream.cc,v 1.4 2004/01/07 20:39:37 mdz Exp $
// $Id: dirstream.cc,v 1.3.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
Directory Stream

2
apt-inst/extract.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: extract.cc,v 1.7 2004/01/07 20:39:37 mdz Exp $
// $Id: extract.cc,v 1.6.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
Archive Extraction Directory Stream

2
apt-inst/filelist.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: filelist.cc,v 1.5 2004/01/07 20:39:37 mdz Exp $
// $Id: filelist.cc,v 1.4.2.1 2004/01/16 18:58:50 mdz Exp $
/* ######################################################################
File Listing - Manages a Cache of File -> Package names.

439
apt-pkg/acquire-item.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-item.cc,v 1.46 2003/02/02 22:19:17 jgg Exp $
// $Id: acquire-item.cc,v 1.46.2.9 2004/01/16 18:51:11 mdz Exp $
/* ######################################################################
Acquire Item - Item to acquire
@ -19,9 +19,11 @@
#include <apt-pkg/acquire-item.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/sourcelist.h>
#include <apt-pkg/vendorlist.h>
#include <apt-pkg/error.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/md5.h>
#include <apti18n.h>
@ -32,7 +34,7 @@
#include <stdio.h>
/*}}}*/
using std::string;
using namespace std;
// Acquire::Item::Item - Constructor /*{{{*/
// ---------------------------------------------------------------------
@ -134,8 +136,9 @@ void pkgAcquire::Item::Rename(string From,string To)
/* The package file is added to the queue and a second class is
instantiated to fetch the revision file */
pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc) :
Item(Owner), RealURI(URI)
string URI,string URIDesc,string ShortDesc,
string ExpectedMD5) :
Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5)
{
Decompression = false;
Erase = false;
@ -199,6 +202,28 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5,
if (Decompression == true)
{
if (_config->FindB("Debug::pkgAcquire::Auth", false))
{
std::cerr << std::endl << RealURI << ": Computed MD5: " << MD5;
std::cerr << " Expected MD5: " << ExpectedMD5 << std::endl;
}
if (MD5.empty())
{
MD5Summation sum;
FileFd Fd(DestFile, FileFd::ReadOnly);
sum.AddFD(Fd.Fd(), Fd.Size());
Fd.Close();
MD5 = (string)sum.Result();
}
if (!ExpectedMD5.empty() && MD5 != ExpectedMD5)
{
Status = StatAuthError;
ErrorText = _("MD5Sum mismatch");
Rename(DestFile,DestFile + ".FAILED");
return;
}
// Done, move it into position
string FinalFile = _config->FindDir("Dir::State::lists");
FinalFile += URItoFileName(RealURI);
@ -226,7 +251,7 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5,
// The files timestamp matches
if (StringToBool(LookupTag(Message,"Alt-IMS-Hit"),false) == true)
return;
Decompression = true;
Local = true;
DestFile += ".decomp";
@ -269,31 +294,45 @@ void pkgAcqIndex::Done(string Message,unsigned long Size,string MD5,
QueueURI(Desc);
Mode = decompProg;
}
/*}}}*/
// AcqIndexRel::pkgAcqIndexRel - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* The Release file is added to the queue */
pkgAcqIndexRel::pkgAcqIndexRel(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc) :
Item(Owner), RealURI(URI)
pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc,
string MetaIndexURI, string MetaIndexURIDesc,
string MetaIndexShortDesc,
const vector<IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser) :
Item(Owner), RealURI(URI), MetaIndexURI(MetaIndexURI),
MetaIndexURIDesc(MetaIndexURIDesc), MetaIndexShortDesc(MetaIndexShortDesc)
{
this->MetaIndexParser = MetaIndexParser;
this->IndexTargets = IndexTargets;
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
DestFile += URItoFileName(URI);
// Create the item
Desc.URI = URI;
Desc.Description = URIDesc;
Desc.ShortDesc = ShortDesc;
Desc.Owner = this;
Desc.ShortDesc = ShortDesc;
Desc.URI = URI;
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
struct stat Buf;
if (stat(Final.c_str(),&Buf) == 0)
{
// File was already in place. It needs to be re-verified
// because Release might have changed, so Move it into partial
Rename(Final,DestFile);
}
QueueURI(Desc);
}
/*}}}*/
// AcqIndexRel::Custom600Headers - Insert custom request headers /*{{{*/
// pkgAcqMetaSig::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
string pkgAcqIndexRel::Custom600Headers()
string pkgAcqMetaSig::Custom600Headers()
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
@ -304,14 +343,9 @@ string pkgAcqIndexRel::Custom600Headers()
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
}
/*}}}*/
// AcqIndexRel::Done - Item downloaded OK /*{{{*/
// ---------------------------------------------------------------------
/* The release file was not placed into the download directory then
a copy URI is generated and it is copied there otherwise the file
in the partial directory is moved into .. and the URI is finished. */
void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5,
pkgAcquire::MethodConfig *Cfg)
void pkgAcqMetaSig::Done(string Message,unsigned long Size,string MD5,
pkgAcquire::MethodConfig *Cfg)
{
Item::Done(Message,Size,MD5,Cfg);
@ -323,34 +357,34 @@ void pkgAcqIndexRel::Done(string Message,unsigned long Size,string MD5,
return;
}
Complete = true;
// The files timestamp matches
if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == true)
return;
// We have to copy it into place
if (FileName != DestFile)
{
// We have to copy it into place
Local = true;
Desc.URI = "copy:" + FileName;
QueueURI(Desc);
return;
}
// Done, move it into position
string FinalFile = _config->FindDir("Dir::State::lists");
FinalFile += URItoFileName(RealURI);
Rename(DestFile,FinalFile);
chmod(FinalFile.c_str(),0644);
Complete = true;
// queue a pkgAcqMetaIndex to be verified against the sig we just retrieved
new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
DestFile, IndexTargets, MetaIndexParser);
}
/*}}}*/
// AcqIndexRel::Failed - Silence failure messages for missing rel files /*{{{*/
// ---------------------------------------------------------------------
/* */
void pkgAcqIndexRel::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
{
// Delete any existing sigfile, so that this source isn't
// mistakenly trusted
string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
unlink(Final.c_str());
// queue a pkgAcqMetaIndex with no sigfile
new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
"", IndexTargets, MetaIndexParser);
if (Cnf->LocalOnly == true ||
StringToBool(LookupTag(Message,"Transient-Failure"),false) == false)
{
@ -363,6 +397,284 @@ void pkgAcqIndexRel::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
Item::Failed(Message,Cnf);
}
pkgAcqMetaIndex::pkgAcqMetaIndex(pkgAcquire *Owner,
string URI,string URIDesc,string ShortDesc,
string SigFile,
const vector<struct IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser) :
Item(Owner), RealURI(URI), SigFile(SigFile)
{
this->AuthPass = false;
this->MetaIndexParser = MetaIndexParser;
this->IndexTargets = IndexTargets;
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
DestFile += URItoFileName(URI);
// Create the item
Desc.Description = URIDesc;
Desc.Owner = this;
Desc.ShortDesc = ShortDesc;
Desc.URI = URI;
QueueURI(Desc);
}
/*}}}*/
// pkgAcqMetaIndex::Custom600Headers - Insert custom request headers /*{{{*/
// ---------------------------------------------------------------------
/* The only header we use is the last-modified header. */
string pkgAcqMetaIndex::Custom600Headers()
{
string Final = _config->FindDir("Dir::State::lists");
Final += URItoFileName(RealURI);
struct stat Buf;
if (stat(Final.c_str(),&Buf) != 0)
return "\nIndex-File: true";
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
}
void pkgAcqMetaIndex::Done(string Message,unsigned long Size,string MD5,
pkgAcquire::MethodConfig *Cfg)
{
Item::Done(Message,Size,MD5,Cfg);
// MetaIndexes are done in two passes: one to download the
// metaindex with an appropriate method, and a second to verify it
// with the gpgv method
if (AuthPass == true)
{
AuthDone(Message);
}
else
{
RetrievalDone(Message);
if (!Complete)
// Still more retrieving to do
return;
if (SigFile == "")
{
// There was no signature file, so we are finished. Download
// the indexes without verification.
QueueIndexes(false);
}
else
{
// There was a signature file, so pass it to gpgv for
// verification
if (_config->FindB("Debug::pkgAcquire::Auth", false))
std::cerr << "Metaindex acquired, queueing gpg verification ("
<< SigFile << "," << DestFile << ")\n";
AuthPass = true;
Desc.URI = "gpgv:" + SigFile;
QueueURI(Desc);
Mode = "gpgv";
}
}
}
void pkgAcqMetaIndex::RetrievalDone(string Message)
{
// We have just finished downloading a Release file (it is not
// verified yet)
string FileName = LookupTag(Message,"Filename");
if (FileName.empty() == true)
{
Status = StatError;
ErrorText = "Method gave a blank filename";
return;
}
if (FileName != DestFile)
{
Local = true;
Desc.URI = "copy:" + FileName;
QueueURI(Desc);
return;
}
Complete = true;
string FinalFile = _config->FindDir("Dir::State::lists");
FinalFile += URItoFileName(RealURI);
// The files timestamp matches
if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == false)
{
// Move it into position
Rename(DestFile,FinalFile);
}
DestFile = FinalFile;
}
void pkgAcqMetaIndex::AuthDone(string Message)
{
// At this point, the gpgv method has succeeded, so there is a
// valid signature from a key in the trusted keyring. We
// perform additional verification of its contents, and use them
// to verify the indexes we are about to download
if (!MetaIndexParser->Load(DestFile))
{
Status = StatAuthError;
ErrorText = MetaIndexParser->ErrorText;
return;
}
if (!VerifyVendor())
{
return;
}
if (_config->FindB("Debug::pkgAcquire::Auth", false))
std::cerr << "Signature verification succeeded: "
<< DestFile << std::endl;
// Download further indexes with verification
QueueIndexes(true);
// Done, move signature file into position
string VerifiedSigFile = _config->FindDir("Dir::State::lists") +
URItoFileName(RealURI) + ".gpg";
Rename(SigFile,VerifiedSigFile);
chmod(VerifiedSigFile.c_str(),0644);
}
void pkgAcqMetaIndex::QueueIndexes(bool verify)
{
for (vector <struct IndexTarget*>::const_iterator Target = IndexTargets->begin();
Target != IndexTargets->end();
Target++)
{
string ExpectedIndexMD5;
if (verify)
{
const indexRecords::checkSum *Record = MetaIndexParser->Lookup((*Target)->MetaKey);
if (!Record)
{
Status = StatAuthError;
ErrorText = "Unable to find expected entry "
+ (*Target)->MetaKey + " in Meta-index file (malformed Release file?)";
return;
}
ExpectedIndexMD5 = Record->MD5Hash;
if (_config->FindB("Debug::pkgAcquire::Auth", false))
{
std::cerr << "Queueing: " << (*Target)->URI << std::endl;
std::cerr << "Expected MD5: " << ExpectedIndexMD5 << std::endl;
}
if (ExpectedIndexMD5.empty())
{
Status = StatAuthError;
ErrorText = "Unable to find MD5 sum for "
+ (*Target)->MetaKey + " in Meta-index file";
return;
}
}
// Queue Packages file
new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description,
(*Target)->ShortDesc, ExpectedIndexMD5);
}
}
bool pkgAcqMetaIndex::VerifyVendor()
{
// // Maybe this should be made available from above so we don't have
// // to read and parse it every time?
// pkgVendorList List;
// List.ReadMainList();
// const Vendor* Vndr = NULL;
// for (std::vector<string>::const_iterator I = GPGVOutput.begin(); I != GPGVOutput.end(); I++)
// {
// string::size_type pos = (*I).find("VALIDSIG ");
// if (_config->FindB("Debug::Vendor", false))
// std::cerr << "Looking for VALIDSIG in \"" << (*I) << "\": pos " << pos
// << std::endl;
// if (pos != std::string::npos)
// {
// string Fingerprint = (*I).substr(pos+sizeof("VALIDSIG"));
// if (_config->FindB("Debug::Vendor", false))
// std::cerr << "Looking for \"" << Fingerprint << "\" in vendor..." <<
// std::endl;
// Vndr = List.FindVendor(Fingerprint) != "";
// if (Vndr != NULL);
// break;
// }
// }
string Transformed = MetaIndexParser->GetExpectedDist();
if (Transformed == "../project/experimental")
{
Transformed = "experimental";
}
string::size_type pos = Transformed.rfind('/');
if (pos != string::npos)
{
Transformed = Transformed.substr(0, pos);
}
if (Transformed == ".")
{
Transformed = "";
}
if (_config->FindB("Debug::pkgAcquire::Auth", false))
{
std::cerr << "Got Codename: " << MetaIndexParser->GetDist() << std::endl;
std::cerr << "Expecting Dist: " << MetaIndexParser->GetExpectedDist() << std::endl;
std::cerr << "Transformed Dist: " << Transformed << std::endl;
}
if (MetaIndexParser->CheckDist(Transformed) == false)
{
// This might become fatal one day
// Status = StatAuthError;
// ErrorText = "Conflicting distribution; expected "
// + MetaIndexParser->GetExpectedDist() + " but got "
// + MetaIndexParser->GetDist();
// return false;
if (!Transformed.empty())
{
_error->Warning("Conflicting distribution: %s (expected %s but got %s)",
Desc.Description.c_str(),
Transformed.c_str(),
MetaIndexParser->GetDist().c_str());
}
}
return true;
}
/*}}}*/
// pkgAcqMetaIndex::Failed - no Release file present or no signature
// file present /*{{{*/
// ---------------------------------------------------------------------
/* */
void pkgAcqMetaIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
{
if (AuthPass == true)
{
// gpgv method failed
_error->Warning("GPG error: %s: %s",
Desc.Description.c_str(),
LookupTag(Message,"Message").c_str());
}
// No Release file was present, or verification failed, so fall
// back to queueing Packages files without verification
QueueIndexes(false);
}
/*}}}*/
// AcqArchive::AcqArchive - Constructor /*{{{*/
@ -373,7 +685,8 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
pkgRecords *Recs,pkgCache::VerIterator const &Version,
string &StoreFilename) :
Item(Owner), Version(Version), Sources(Sources), Recs(Recs),
StoreFilename(StoreFilename), Vf(Version.FileList())
StoreFilename(StoreFilename), Vf(Version.FileList()),
Trusted(false)
{
Retries = _config->FindI("Acquire::Retries",0);
@ -411,7 +724,25 @@ pkgAcqArchive::pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
QuoteString(Version.Arch(),"_:.") +
"." + flExtension(Parse.FileName());
}
// check if we have one trusted source for the package. if so, switch
// to "TrustedOnly" mode
for (pkgCache::VerFileIterator i = Version.FileList(); i.end() == false; i++)
{
pkgIndexFile *Index;
if (Sources->FindIndex(i.File(),Index) == false)
continue;
if (_config->FindB("Debug::pkgAcquire::Auth", false))
{
std::cerr << "Checking index: " << Index->Describe()
<< "(Trusted=" << Index->IsTrusted() << ")\n";
}
if (Index->IsTrusted()) {
Trusted = true;
break;
}
}
// Select a source
if (QueueNext() == false && _error->PendingError() == false)
_error->Error(_("I wasn't able to locate file for the %s package. "
@ -437,6 +768,11 @@ bool pkgAcqArchive::QueueNext()
if (Sources->FindIndex(Vf.File(),Index) == false)
continue;
// only try to get a trusted package from another source if that source
// is also trusted
if(Trusted && !Index->IsTrusted())
continue;
// Grab the text package record
pkgRecords::Parser &Parse = Recs->Lookup(Vf);
if (_error->PendingError() == true)
@ -449,6 +785,11 @@ bool pkgAcqArchive::QueueNext()
"field for package %s."),
Version.ParentPkg().Name());
Desc.URI = Index->ArchiveURI(PkgFile);
Desc.Description = Index->ArchiveInfo(Version);
Desc.Owner = this;
Desc.ShortDesc = Version.ParentPkg().Name();
// See if we already have the file. (Legacy filenames)
FileSize = Version->Size;
string FinalFile = _config->FindDir("Dir::Cache::Archives") + flNotDir(PkgFile);
@ -609,6 +950,14 @@ void pkgAcqArchive::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
}
}
/*}}}*/
// AcqArchive::IsTrusted - Determine whether this archive comes from a
// trusted source /*{{{*/
// ---------------------------------------------------------------------
bool pkgAcqArchive::IsTrusted()
{
return Trusted;
}
// AcqArchive::Finished - Fetching has finished, tidy up /*{{{*/
// ---------------------------------------------------------------------
/* */

76
apt-pkg/acquire-item.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-item.h,v 1.26 2003/02/02 03:13:13 doogie Exp $
// $Id: acquire-item.h,v 1.26.2.3 2004/01/02 18:51:00 mdz Exp $
/* ######################################################################
Acquire Item - Item to acquire
@ -22,7 +22,10 @@
#include <apt-pkg/acquire.h>
#include <apt-pkg/indexfile.h>
#include <apt-pkg/vendor.h>
#include <apt-pkg/sourcelist.h>
#include <apt-pkg/pkgrecords.h>
#include <apt-pkg/indexrecords.h>
#ifdef __GNUG__
#pragma interface "apt-pkg/acquire-item.h"
@ -45,7 +48,7 @@ class pkgAcquire::Item
public:
// State of the item
enum {StatIdle, StatFetching, StatDone, StatError} Status;
enum {StatIdle, StatFetching, StatDone, StatError, StatAuthError} Status;
string ErrorText;
unsigned long FileSize;
unsigned long PartialSize;
@ -67,11 +70,13 @@ class pkgAcquire::Item
virtual void Start(string Message,unsigned long Size);
virtual string Custom600Headers() {return string();};
virtual string DescURI() = 0;
virtual string ShortDesc() {return DescURI();}
virtual void Finished() {};
// Inquire functions
virtual string MD5Sum() {return string();};
pkgAcquire *GetOwner() {return Owner;};
virtual bool IsTrusted() {return false;};
Item(pkgAcquire *Owner);
virtual ~Item();
@ -86,6 +91,7 @@ class pkgAcqIndex : public pkgAcquire::Item
bool Erase;
pkgAcquire::ItemDesc Desc;
string RealURI;
string ExpectedMD5;
public:
@ -97,28 +103,73 @@ class pkgAcqIndex : public pkgAcquire::Item
virtual string DescURI() {return RealURI + ".gz";};
pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc,
string ShortDesct);
string ShortDesct, string ExpectedMD5);
};
// Item class for index files
class pkgAcqIndexRel : public pkgAcquire::Item
struct IndexTarget
{
string URI;
string Description;
string ShortDesc;
string MetaKey;
};
// Item class for index signatures
class pkgAcqMetaSig : public pkgAcquire::Item
{
protected:
pkgAcquire::ItemDesc Desc;
string RealURI;
string RealURI,MetaIndexURI,MetaIndexURIDesc,MetaIndexShortDesc;
indexRecords* MetaIndexParser;
const vector<struct IndexTarget*>* IndexTargets;
public:
// Specialized action members
virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
virtual void Done(string Message,unsigned long Size,string Md5Hash,
pkgAcquire::MethodConfig *Cnf);
pkgAcquire::MethodConfig *Cnf);
virtual string Custom600Headers();
virtual string DescURI() {return RealURI;};
virtual string DescURI() {return RealURI; };
pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc,
string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc,
const vector<struct IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser);
};
// Item class for index signatures
class pkgAcqMetaIndex : public pkgAcquire::Item
{
protected:
pkgAcquire::ItemDesc Desc;
string RealURI; // FIXME: is this redundant w/ Desc.URI?
string SigFile;
const vector<struct IndexTarget*>* IndexTargets;
indexRecords* MetaIndexParser;
bool AuthPass;
bool VerifyVendor();
void RetrievalDone(string Message);
void AuthDone(string Message);
void QueueIndexes(bool verify);
public:
pkgAcqIndexRel(pkgAcquire *Owner,string URI,string URIDesc,
string ShortDesct);
// Specialized action members
virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
virtual void Done(string Message,unsigned long Size,string Md5Hash,
pkgAcquire::MethodConfig *Cnf);
virtual string Custom600Headers();
virtual string DescURI() {return RealURI; };
pkgAcqMetaIndex(pkgAcquire *Owner,
string URI,string URIDesc, string ShortDesc,
string SigFile,
const vector<struct IndexTarget*>* IndexTargets,
indexRecords* MetaIndexParser);
};
// Item class for archive files
@ -135,6 +186,7 @@ class pkgAcqArchive : public pkgAcquire::Item
string &StoreFilename;
pkgCache::VerFileIterator Vf;
unsigned int Retries;
bool Trusted;
// Queue the next available file for download.
bool QueueNext();
@ -147,7 +199,9 @@ class pkgAcqArchive : public pkgAcquire::Item
pkgAcquire::MethodConfig *Cnf);
virtual string MD5Sum() {return MD5;};
virtual string DescURI() {return Desc.URI;};
virtual string ShortDesc() {return Desc.ShortDesc;};
virtual void Finished();
virtual bool IsTrusted();
pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
pkgRecords *Recs,pkgCache::VerIterator const &Version,

8
apt-pkg/acquire-method.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-method.cc,v 1.27 2001/05/22 04:27:11 jgg Exp $
// $Id: acquire-method.cc,v 1.27.2.1 2003/12/24 23:09:17 mdz Exp $
/* ######################################################################
Acquire Method
@ -29,6 +29,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/signal.h>
/*}}}*/
using namespace std;
@ -181,6 +182,11 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str());
if (Res.SHA1Sum.empty() == false)
End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
if (Res.GPGVOutput.size() > 0)
End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n");
for (vector<string>::iterator I = Res.GPGVOutput.begin();
I != Res.GPGVOutput.end(); I++)
End += snprintf(End,sizeof(S)-50 - (End - S), " %s\n", (*I).c_str());
if (Res.ResumePoint != 0)
End += snprintf(End,sizeof(S)-50 - (End - S),"Resume-Point: %lu\n",

3
apt-pkg/acquire-method.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire-method.h,v 1.15 2001/03/13 06:51:46 jgg Exp $
// $Id: acquire-method.h,v 1.15.2.1 2003/12/24 23:09:17 mdz Exp $
/* ######################################################################
Acquire Method - Method helper class + functions
@ -39,6 +39,7 @@ class pkgAcqMethod
{
string MD5Sum;
string SHA1Sum;
vector<string> GPGVOutput;
time_t LastModified;
bool IMSHit;
string Filename;

2
apt-pkg/acquire.cc

@ -481,7 +481,7 @@ double pkgAcquire::PartialPresent()
Total += (*I)->PartialSize;
return Total;
}
/*}}}*/
// Acquire::UriBegin - Start iterator for the uri list /*{{{*/
// ---------------------------------------------------------------------
/* */

4
apt-pkg/acquire.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: acquire.h,v 1.29 2001/05/22 04:17:18 jgg Exp $
// $Id: acquire.h,v 1.29.2.1 2003/12/24 23:09:17 mdz Exp $
/* ######################################################################
Acquire - File Acquiration
@ -121,7 +121,7 @@ class pkgAcquire
double TotalNeeded();
double FetchNeeded();
double PartialPresent();
pkgAcquire(pkgAcquireStatus *Log = 0);
virtual ~pkgAcquire();
};

3
apt-pkg/cacheiterators.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: cacheiterators.h,v 1.18 2003/10/09 23:15:25 mdz Exp $
// $Id: cacheiterators.h,v 1.18.2.1 2004/05/08 22:44:27 mdz Exp $
/* ######################################################################
Cache Iterators - Iterators for navigating the cache structure
@ -78,7 +78,6 @@ class pkgCache::PkgIterator
inline bool Purge() const {return Pkg->CurrentState == pkgCache::State::Purge ||
(Pkg->CurrentVer == 0 && Pkg->CurrentState == pkgCache::State::NotInstalled);};
inline VerIterator VersionList() const;
inline VerIterator TargetVer() const;
inline VerIterator CurrentVer() const;
inline DepIterator RevDependsList() const;
inline PrvIterator ProvidesList() const;

77
apt-pkg/deb/debindexfile.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: debindexfile.cc,v 1.6 2004/01/04 07:41:30 mdz Exp $
// $Id: debindexfile.cc,v 1.5.2.3 2004/01/04 19:11:00 mdz Exp $
/* ######################################################################
Debian Specific sources.list types and the three sorts of Debian
@ -23,6 +23,7 @@
#include <apt-pkg/error.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/acquire-item.h>
#include <apt-pkg/debmetaindex.h>
#include <sys/stat.h>
/*}}}*/
@ -30,8 +31,8 @@
// SourcesIndex::debSourcesIndex - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
debSourcesIndex::debSourcesIndex(string URI,string Dist,string Section) :
URI(URI), Dist(Dist), Section(Section)
debSourcesIndex::debSourcesIndex(string URI,string Dist,string Section,bool Trusted) :
pkgIndexFile(Trusted), URI(URI), Dist(Dist), Section(Section)
{
}
/*}}}*/
@ -129,16 +130,6 @@ string debSourcesIndex::IndexURI(const char *Type) const
return Res;
}
/*}}}*/
// SourcesIndex::GetIndexes - Fetch the index files /*{{{*/
// ---------------------------------------------------------------------
/* */
bool debSourcesIndex::GetIndexes(pkgAcquire *Owner) const
{
new pkgAcqIndex(Owner,IndexURI("Sources"),Info("Sources"),"Sources");
new pkgAcqIndexRel(Owner,IndexURI("Release"),Info("Release"),"Release");
return true;
}
/*}}}*/
// SourcesIndex::Exists - Check if the index is available /*{{{*/
// ---------------------------------------------------------------------
/* */
@ -162,8 +153,8 @@ unsigned long debSourcesIndex::Size() const
// PackagesIndex::debPackagesIndex - Contructor /*{{{*/
// ---------------------------------------------------------------------
/* */
debPackagesIndex::debPackagesIndex(string URI,string Dist,string Section) :
URI(URI), Dist(Dist), Section(Section)
debPackagesIndex::debPackagesIndex(string URI,string Dist,string Section,bool Trusted) :
pkgIndexFile(Trusted), URI(URI), Dist(Dist), Section(Section)
{
}
/*}}}*/
@ -246,16 +237,6 @@ string debPackagesIndex::IndexURI(const char *Type) const
return Res;
}
/*}}}*/
// PackagesIndex::GetIndexes - Fetch the index files /*{{{*/
// ---------------------------------------------------------------------
/* */
bool debPackagesIndex::GetIndexes(pkgAcquire *Owner) const
{
new pkgAcqIndex(Owner,IndexURI("Packages"),Info("Packages"),"Packages");
new pkgAcqIndexRel(Owner,IndexURI("Release"),Info("Release"),"Release");
return true;
}
/*}}}*/
// PackagesIndex::Exists - Check if the index is available /*{{{*/
// ---------------------------------------------------------------------
/* */
@ -303,7 +284,7 @@ bool debPackagesIndex::Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const
return _error->Error("Problem with MergeList %s",PackageFile.c_str());
// Check the release file
string ReleaseFile = IndexFile("Release");
string ReleaseFile = debReleaseIndex(URI,Dist).MetaIndexFile("Release");
if (FileExists(ReleaseFile) == true)
{
FileFd Rel(ReleaseFile,FileFd::ReadOnly);
@ -342,7 +323,7 @@ pkgCache::PkgFileIterator debPackagesIndex::FindInCache(pkgCache &Cache) const
// StatusIndex::debStatusIndex - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
debStatusIndex::debStatusIndex(string File) : File(File)
debStatusIndex::debStatusIndex(string File) : pkgIndexFile(true), File(File)
{
}
/*}}}*/
@ -418,48 +399,6 @@ bool debStatusIndex::Exists() const
}
/*}}}*/
// Source List types for Debian /*{{{*/
class debSLTypeDeb : public pkgSourceList::Type
{
public:
bool CreateItem(vector<pkgIndexFile *> &List,string URI,
string Dist,string Section,
pkgSourceList::Vendor const *Vendor) const
{
List.push_back(new debPackagesIndex(URI,Dist,Section));
return true;
};
debSLTypeDeb()
{
Name = "deb";
Label = "Standard Debian binary tree";
}
};
class debSLTypeDebSrc : public pkgSourceList::Type
{
public:
bool CreateItem(vector<pkgIndexFile *> &List,string URI,
string Dist,string Section,
pkgSourceList::Vendor const *Vendor) const
{
List.push_back(new debSourcesIndex(URI,Dist,Section));
return true;
};
debSLTypeDebSrc()
{
Name = "deb-src";
Label = "Standard Debian source tree";
}
};
debSLTypeDeb _apt_DebType;
debSLTypeDebSrc _apt_DebSrcType;
/*}}}*/
// Index File types for Debian /*{{{*/
class debIFTypeSrc : public pkgIndexFile::Type
{

16
apt-pkg/deb/debindexfile.h

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: debindexfile.h,v 1.3 2001/04/29 05:13:51 jgg Exp $
// $Id: debindexfile.h,v 1.3.2.1 2003/12/24 23:09:17 mdz Exp $
/* ######################################################################
Debian Index Files
@ -48,10 +48,10 @@ class debPackagesIndex : public pkgIndexFile
string URI;
string Dist;
string Section;
string Info(const char *Type) const;
string IndexFile(const char *Type) const;
string IndexURI(const char *Type) const;
string IndexURI(const char *Type) const;
public:
@ -63,7 +63,6 @@ class debPackagesIndex : public pkgIndexFile
// Interface for acquire
virtual string Describe(bool Short) const;
virtual bool GetIndexes(pkgAcquire *Owner) const;
// Interface for the Cache Generator
virtual bool Exists() const;
@ -71,8 +70,8 @@ class debPackagesIndex : public pkgIndexFile
virtual unsigned long Size() const;
virtual bool Merge(pkgCacheGenerator &Gen,OpProgress &Prog) const;
virtual pkgCache::PkgFileIterator FindInCache(pkgCache &Cache) const;
debPackagesIndex(string URI,string Dist,string Section);
debPackagesIndex(string URI,string Dist,string Section,bool Trusted);
};
class debSourcesIndex : public pkgIndexFile
@ -83,7 +82,7 @@ class debSourcesIndex : public pkgIndexFile
string Info(const char *Type) const;
string IndexFile(const char *Type) const;
string IndexURI(const char *Type) const;
string IndexURI(const char *Type) const;
public:
@ -96,7 +95,6 @@ class debSourcesIndex : public pkgIndexFile
// Interface for acquire
virtual string Describe(bool Short) const;
virtual bool GetIndexes(pkgAcquire *Owner) const;
// Interface for the record parsers
virtual pkgSrcRecords::Parser *CreateSrcParser() const;
@ -106,7 +104,7 @@ class debSourcesIndex : public pkgIndexFile
virtual bool HasPackages() const {return false;};
virtual unsigned long Size() const;
debSourcesIndex(string URI,string Dist,string Section);
debSourcesIndex(string URI,string Dist,string Section,bool Trusted);
};
#endif

6
apt-pkg/deb/deblistparser.cc

@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
// $Id: deblistparser.cc,v 1.29 2003/09/22 04:16:26 mdz Exp $
// $Id: deblistparser.cc,v 1.29.2.5 2004/01/06 01:43:44 mdz Exp $
/* ######################################################################
Package Cache Generator - Generator for the cache structure.
@ -566,14 +566,14 @@ bool debListParser::Step()
bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator FileI,
FileFd &File)
{
pkgTagFile Tags(&File);
pkgTagFile Tags(&File, File.Size() + 256); // XXX
pkgTagSection Section;
if (Tags.Step(Section) == false)
return false;
const char *Start;
const char *Stop;
if (Section.Find("Archive",Start,Stop) == true)
if (Section.Find("Suite",Start,Stop) == true)
FileI->Archive = WriteUniqString(Start,Stop - Start);
if (Section.Find("Component",Start,Stop) == true)
FileI->Component = WriteUniqString(Start,Stop - Start);

269
apt-pkg/deb/debmetaindex.cc

@ -0,0 +1,269 @@
// ijones, walters
#ifdef __GNUG__
#pragma implementation "apt-pkg/debmetaindex.h"
#endif
#include <apt-pkg/debmetaindex.h>
#include <apt-pkg/debindexfile.h>
#include <apt-pkg/strutl.h>
#include <apt-pkg/acquire-item.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/error.h>
using namespace std;
string debReleaseIndex::Info(const char *Type, const string Section) const
{
string Info = ::URI::SiteOnly(URI) + ' ';
if (Dist[Dist.size() - 1] == '/')
{
if (Dist != "/")
Info += Dist;
}
else
Info += Dist + '/' + Section;
Info += " ";
Info += Type;
return Info;
}
string debReleaseIndex::MetaIndexInfo(const char *Type) const
{
string Info = ::URI::SiteOnly(URI) + ' ';
if (Dist[Dist.size() - 1] == '/')
{
if (Dist != "/")
Info += Dist;
}
else
Info += Dist;
Info += " ";
Info += Type;
return Info;
}
string debReleaseIndex::MetaIndexFile(const char *Type) const
{
return _config->FindDir("Dir::State::lists") +
URItoFileName(MetaIndexURI(Type));
}
string debReleaseIndex::MetaIndexURI(const char *Type) const
{
string Res;
if (Dist == "/")
Res = URI;
else if (Dist[Dist.size()-1] == '/')
Res = URI + Dist;
else
Res = URI + "dists/" + Dist + "/";
Res += Type;
return Res;
}
string debReleaseIndex::IndexURISuffix(const char *Type, const string Section) const
{
string Res ="";
if (Dist[Dist.size() - 1] != '/')
Res += Section + "/binary-" + _config->Find("APT::Architecture") + '/';
return Res + Type;
}
string debReleaseIndex::IndexURI(const char *Type, const string Section) const
{
if (Dist[Dist.size() - 1] == '/')
{
string Res;
if (Dist != "/")
Res = URI + Dist;
else
Res = URI;
return Res + Type;
}
else
return URI + "dists/" + Dist + '/' + IndexURISuffix(Type, Section);
}
string debReleaseIndex::SourceIndexURISuffix(const char *Type, const string Section) const
{
string Res ="";
if (Dist[Dist.size() - 1] != '/')
Res += Section + "/source/";
return Res + Type;
}
string debReleaseIndex::SourceIndexURI(const char *Type, const string Section) const
{
string Res;
if (Dist[Dist.size() - 1] == '/')
{
if (Dist != "/")
Res = URI + Dist;
else
Res = URI;
return Res + Type;
}
else
return URI + "dists/" + Dist + "/" + SourceIndexURISuffix(Type, Section);
}
debReleaseIndex::debReleaseIndex(string URI,string Dist)
{
this->URI = URI;
this->Dist = Dist;
this->Indexes = NULL;
this->Type = "deb";
}
vector <struct IndexTarget *>* debReleaseIndex::ComputeIndexTargets() const
{
vector <struct IndexTarget *>* IndexTargets = new vector <IndexTarget *>;
for (vector <const debSectionEntry *>::const_iterator I = SectionEntries.begin();
I != SectionEntries.end();
I++)
{
IndexTarget * Target = new IndexTarget();
Target->ShortDesc = (*I)->IsSrc ? "Sources" : "Packages";
Target->MetaKey
= (*I)->IsSrc ? SourceIndexURISuffix(Target->ShortDesc.c_str(), (*I)->Section)
: IndexURISuffix(Target->ShortDesc.c_str(), (*I)->Section);
Target->URI
= (*I)->IsSrc ? SourceIndexURI(Target->ShortDesc.c_str(), (*I)->Section)
: IndexURI(Target->ShortDesc.c_str(), (*I)->Section);
Target->Description = Info (Target->ShortDesc.c_str(), (*I)->Section);
IndexTargets->push_back (Target);
}
return IndexTargets;
}
/*}}}*/
bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool GetAll) const
{
// special case for --print-uris
if (GetAll) {
vector <struct IndexTarget *> *targets = ComputeIndexTargets();
for (vector <struct IndexTarget*>::const_iterator Target = targets->begin(); Target != targets->end(); Target++) {
new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description,
(*Target)->ShortDesc, "");
}
}
new pkgAcqMetaSig(Owner, MetaIndexURI("Release.gpg"),
MetaIndexInfo("Release.gpg"), "Release.gpg",
MetaIndexURI("Release"), MetaIndexInfo("Release"), "Release",
ComputeIndexTargets(),
new indexRecords (Dist));
return true;
}
bool debReleaseIndex::IsTrusted() const
{
string VerifiedSigFile = _config->FindDir("Dir::State::lists") +
URItoFileName(MetaIndexURI("Release")) + ".gpg";
if (FileExists(VerifiedSigFile))
return true;
return false;
}
vector <pkgIndexFile *> *debReleaseIndex::GetIndexFiles()
{
if (Indexes != NULL)
return Indexes;
Indexes = new vector <pkgIndexFile*>;
for (vector<const debSectionEntry *>::const_iterator I = SectionEntries.begin();
I != SectionEntries.end(); I++)
if ((*I)->IsSrc)
Indexes->push_back(new debSourcesIndex (URI, Dist, (*I)->Section, IsTrusted()));
else
Indexes->push_back(new debPackagesIndex (URI, Dist, (*I)->Section, IsTrusted()));
return Indexes;
}
void debReleaseIndex::PushSectionEntry(const debSectionEntry *Entry)
{
SectionEntries.push_back(Entry);
}
debReleaseIndex::debSectionEntry::debSectionEntry (string Section, bool IsSrc): Section(Section)
{
this->IsSrc = IsSrc;
}
class debSLTypeDebian : public pkgSourceList::Type
{
protected:
bool CreateItemInternal(vector<metaIndex *> &List,string URI,
string Dist,string Section,
bool IsSrc) const
{
for (vector<metaIndex *>::const_iterator I = List.begin();
I != List.end(); I++)
{
// This check insures that there will be only one Release file
// queued for all the Packages files and Sources files it
// corresponds to.
if ((*I)->GetType() == "deb")
{
debReleaseIndex *Deb = (debReleaseIndex *) (*I);
// This check insures that there will be only one Release file
// queued for all the Packages files and Sources files it
// corresponds to.
if (Deb->GetURI() == URI && Deb->GetDist() == Dist)
{
Deb->PushSectionEntry(new debReleaseIndex::debSectionEntry(Section, IsSrc));
return true;
}
}
}
// No currently created Release file indexes this entry, so we create a new one.
// XXX determine whether this release is trusted or not
debReleaseIndex *Deb = new debReleaseIndex(URI,Dist);
Deb->PushSectionEntry (new debReleaseIndex::debSectionEntry(Section, IsSrc));
List.push_back(Deb);
return true;
}
};
class debSLTypeDeb : public debSLTypeDebian
{
public:
bool CreateItem(vector<metaIndex *> &List,string URI,
string Dist,string Section) const
{
return CreateItemInternal(List, URI, Dist, Section, false);
}
debSLTypeDeb()
{
Name = "deb";
Label = "Standard Debian binary tree";
}
};
class debSLTypeDebSrc : public debSLTypeDebian
{
public:
bool CreateItem(vector<metaIndex *> &List,string URI,
string Dist,string Section) const
{
return CreateItemInternal(List, URI, Dist, Section, true);
}
debSLTypeDebSrc()
{
Name = "deb-src";
Label = "Standard Debian source tree";
}
};
debSLTypeDeb _apt_DebType;
debSLTypeDebSrc _apt_DebSrcType;

48
apt-pkg/deb/debmetaindex.h

@ -0,0 +1,48 @@
// ijones, walters
#ifndef PKGLIB_DEBMETAINDEX_H
#define PKGLIB_DEBMETAINDEX_H
#ifdef __GNUG__