[maemo-commits] [maemo-commits] r14886 - in projects/haf/trunk/apt: . apt-pkg debian
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Dec 6 18:48:32 EET 2007
- Previous message: [maemo-commits] r14885 - in projects/haf/trunk/apt: . apt-pkg debian
- Next message: [maemo-commits] r14887 - projects/haf/trunk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: marivoll
Date: 2007-12-06 18:48:28 +0200 (Thu, 06 Dec 2007)
New Revision: 14886
Added:
projects/haf/trunk/apt/trusthook.patch
Modified:
projects/haf/trunk/apt/README.maemo
projects/haf/trunk/apt/apt-pkg/acquire-item.cc
projects/haf/trunk/apt/apt-pkg/acquire-item.h
projects/haf/trunk/apt/debian/changelog
Log:
* Applied trusthook.patch
Modified: projects/haf/trunk/apt/README.maemo
===================================================================
--- projects/haf/trunk/apt/README.maemo 2007-12-06 16:35:44 UTC (rev 14885)
+++ projects/haf/trunk/apt/README.maemo 2007-12-06 16:48:28 UTC (rev 14886)
@@ -1,6 +1,8 @@
Patches for maemo
-----------------
+Patched marked with "**" should be pushed upstream in some form.
+
- maemostrip.diff
Don't build docs. Don't build the https method. Don't build
@@ -18,7 +20,7 @@
Include a default Basic Authentication header in every HTTP request
that identifies the hardware model of the device.
-- mmap.patch
+- mmap.patch [**]
Make it work in filesystems that don't support writable mmaps.
@@ -26,6 +28,13 @@
Don't fail to add or use keys when the clock is wrong.
-- gpgvinfo.patch
+- gpgvinfo.patch [**]
Store a foo.gpg.info with the results of verifying signatures.
+
+- tusthook.patch [**]
+
+Allow outside influence into deciding whether to trust a source for a
+particular version of a package. This is used, together with the
+gpgvinfo.patch to implement the domain system of the Hildon
+Application Manager.
Modified: projects/haf/trunk/apt/apt-pkg/acquire-item.cc
===================================================================
--- projects/haf/trunk/apt/apt-pkg/acquire-item.cc 2007-12-06 16:35:44 UTC (rev 14885)
+++ projects/haf/trunk/apt/apt-pkg/acquire-item.cc 2007-12-06 16:48:28 UTC (rev 14886)
@@ -1223,7 +1223,26 @@
}
/*}}}*/
+static int
+default_index_trust_level_for_package (pkgIndexFile *Index,
+ const pkgCache::VerIterator &Ver)
+{
+ return Index->IsTrusted ()? 1 : 0;
+}
+static int (*index_trust_level_for_package) (pkgIndexFile *Index,
+ const pkgCache::VerIterator &Ver)
+ = default_index_trust_level_for_package;
+
+void
+apt_set_index_trust_level_for_package_hook (int (*hook)
+ (pkgIndexFile *Index,
+ const pkgCache::VerIterator &Ver))
+{
+ index_trust_level_for_package = hook;
+}
+
+
// AcqArchive::AcqArchive - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* This just sets up the initial fetch environment and queues the first
@@ -1232,8 +1251,8 @@
pkgRecords *Recs,pkgCache::VerIterator const &Version,
string &StoreFilename) :
Item(Owner), Version(Version), Sources(Sources), Recs(Recs),
- StoreFilename(StoreFilename), Vf(Version.FileList()),
- Trusted(false)
+ StoreFilename(StoreFilename),
+ TrustLevel(0)
{
Retries = _config->FindI("Acquire::Retries",0);
@@ -1249,6 +1268,9 @@
/* We need to find a filename to determine the extension. We make the
assumption here that all the available sources for this version share
the same extension.. */
+
+ pkgCache::VerFileIterator Vf = Version.FileList();
+
// Skip not source sources, they do not have file fields.
for (; Vf.end() == false; Vf++)
{
@@ -1272,31 +1294,62 @@
"." + 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;
- }
- }
+ VerFileCandidates.clear();
+ TrustLevel = 0;
- // "allow-unauthenticated" restores apts old fetching behaviour
- // that means that e.g. unauthenticated file:// uris are higher
- // priority than authenticated http:// uris
if (_config->FindB("APT::Get::AllowUnauthenticated",false) == true)
- Trusted = false;
+ {
+ // "allow-unauthenticated" restores apts old fetching behaviour
+ // that means that e.g. unauthenticated file:// uris are higher
+ // priority than authenticated http:// uris
+
+ while (!Vf.end())
+ {
+ if ((Vf.File()->Flags & pkgCache::Flag::NotSource) != 0)
+ {
+ Vf++;
+ continue;
+ }
+ VerFileCandidates.push_back (Vf);
+ Vf++;
+ }
+ }
+ else
+ {
+ // Find the sources with the highest trust level.
+
+ while (!Vf.end())
+ {
+ pkgIndexFile *Index;
+ if (Sources->FindIndex(Vf.File(),Index) == false)
+ {
+ Vf++;
+ continue;
+ }
+
+ int l = index_trust_level_for_package (Index, Version);
+
+ if (_config->FindB("Debug::pkgAcquire::Auth", false))
+ {
+ std::cerr << "Checking index: " << Index->Describe()
+ << "(Trust level =" << l << ")\n";
+ }
+
+ if (l >= TrustLevel)
+ {
+ if (l > TrustLevel)
+ VerFileCandidates.clear ();
+ VerFileCandidates.push_back (Vf);
+ TrustLevel = l;
+ }
+
+ Vf++;
+ }
+ }
+
// Select a source
+ CurVerFile = VerFileCandidates.begin ();
if (QueueNext() == false && _error->PendingError() == false)
_error->Error(_("I wasn't able to locate file for the %s package. "
"This might mean you need to manually fix this package."),
@@ -1310,22 +1363,15 @@
checking later. */
bool pkgAcqArchive::QueueNext()
{
- for (; Vf.end() == false; Vf++)
+ while (CurVerFile != VerFileCandidates.end())
{
- // Ignore not source sources
- if ((Vf.File()->Flags & pkgCache::Flag::NotSource) != 0)
- continue;
+ pkgCache::VerFileIterator Vf = *CurVerFile++;
// Try to cross match against the source list
pkgIndexFile *Index;
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)
@@ -1403,7 +1449,6 @@
Desc.ShortDesc = Version.ParentPkg().Name();
QueueURI(Desc);
- Vf++;
return true;
}
return false;
@@ -1480,7 +1525,7 @@
StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
{
// Vf = Version.FileList();
- while (Vf.end() == false) Vf++;
+ CurVerFile = VerFileCandidates.end ();
StoreFilename = string();
Item::Failed(Message,Cnf);
return;
@@ -1494,7 +1539,7 @@
StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
{
Retries--;
- Vf = Version.FileList();
+ CurVerFile = VerFileCandidates.begin ();
if (QueueNext() == true)
return;
}
@@ -1509,7 +1554,7 @@
// ---------------------------------------------------------------------
bool pkgAcqArchive::IsTrusted()
{
- return Trusted;
+ return TrustLevel > 0;
}
// AcqArchive::Finished - Fetching has finished, tidy up /*{{{*/
Modified: projects/haf/trunk/apt/apt-pkg/acquire-item.h
===================================================================
--- projects/haf/trunk/apt/apt-pkg/acquire-item.h 2007-12-06 16:35:44 UTC (rev 14885)
+++ projects/haf/trunk/apt/apt-pkg/acquire-item.h 2007-12-06 16:48:28 UTC (rev 14886)
@@ -27,6 +27,7 @@
#include <apt-pkg/pkgrecords.h>
#include <apt-pkg/indexrecords.h>
+#include <list>
/** \addtogroup acquire
* @{
@@ -787,8 +788,8 @@
*/
string &StoreFilename;
- /** \brief The next file for this version to try to download. */
- pkgCache::VerFileIterator Vf;
+ std::list<pkgCache::VerFileIterator> VerFileCandidates;
+ std::list<pkgCache::VerFileIterator>::const_iterator CurVerFile;
/** \brief How many (more) times to try to find a new source from
* which to download this package version if it fails.
@@ -797,10 +798,10 @@
*/
unsigned int Retries;
- /** \brief \b true if this version file is being downloaded from a
+ /** \brief \b Positive if this version file is being downloaded from a
* trusted source.
*/
- bool Trusted;
+ int TrustLevel;
/** \brief Queue up the next available file for this version. */
bool QueueNext();
@@ -904,4 +905,28 @@
/** @} */
+/* For influencing the IsTrusted decision when acquiring a new version
+ of a package and for influencing which source is selected if the
+ highest version of a package is available from multiple sources.
+
+ The hook should return a integer indicating the 'trust level' that
+ a given index should be afforded for a given package. Indices with
+ higher trust levels will be preferred.
+
+ The default behavior is to use a trust level of zero for unsigned
+ repositories and a level of one for repositories with valid
+ signatures.
+
+ The IsTrusted predicate on a pkgAcqArchive object will return true
+ when the highest trust level is non-zero, false otherwise.
+
+ A trust level can be negative. In that case, the index will never
+ be considered as a source for the package.
+*/
+
+void
+apt_set_index_trust_level_for_package_hook (int (*hook)
+ (pkgIndexFile *Index,
+ const pkgCache::VerIterator &V));
+
#endif
Modified: projects/haf/trunk/apt/debian/changelog
===================================================================
--- projects/haf/trunk/apt/debian/changelog 2007-12-06 16:35:44 UTC (rev 14885)
+++ projects/haf/trunk/apt/debian/changelog 2007-12-06 16:48:28 UTC (rev 14886)
@@ -5,7 +5,8 @@
* Applied mmap.patch
* Applied ignoretimeconflict.patch
* Applied ggpvinfo.patch
-
+ * Applied trusthook.patch
+
-- Marius Vollmer <mvo at zagadka.de> Thu, 06 Dec 2007 17:15:19 +0200
apt (0.7.6) unstable; urgency=low
Added: projects/haf/trunk/apt/trusthook.patch
===================================================================
--- projects/haf/trunk/apt/trusthook.patch 2007-12-06 16:35:44 UTC (rev 14885)
+++ projects/haf/trunk/apt/trusthook.patch 2007-12-06 16:48:28 UTC (rev 14886)
@@ -0,0 +1,261 @@
+Index: apt-pkg/acquire-item.cc
+===================================================================
+--- apt-pkg/acquire-item.cc (revision 14885)
++++ apt-pkg/acquire-item.cc (working copy)
+@@ -1223,7 +1223,26 @@
+ }
+
+ /*}}}*/
++static int
++default_index_trust_level_for_package (pkgIndexFile *Index,
++ const pkgCache::VerIterator &Ver)
++{
++ return Index->IsTrusted ()? 1 : 0;
++}
+
++static int (*index_trust_level_for_package) (pkgIndexFile *Index,
++ const pkgCache::VerIterator &Ver)
++ = default_index_trust_level_for_package;
++
++void
++apt_set_index_trust_level_for_package_hook (int (*hook)
++ (pkgIndexFile *Index,
++ const pkgCache::VerIterator &Ver))
++{
++ index_trust_level_for_package = hook;
++}
++
++
+ // AcqArchive::AcqArchive - Constructor /*{{{*/
+ // ---------------------------------------------------------------------
+ /* This just sets up the initial fetch environment and queues the first
+@@ -1232,8 +1251,8 @@
+ pkgRecords *Recs,pkgCache::VerIterator const &Version,
+ string &StoreFilename) :
+ Item(Owner), Version(Version), Sources(Sources), Recs(Recs),
+- StoreFilename(StoreFilename), Vf(Version.FileList()),
+- Trusted(false)
++ StoreFilename(StoreFilename),
++ TrustLevel(0)
+ {
+ Retries = _config->FindI("Acquire::Retries",0);
+
+@@ -1249,6 +1268,9 @@
+ /* We need to find a filename to determine the extension. We make the
+ assumption here that all the available sources for this version share
+ the same extension.. */
++
++ pkgCache::VerFileIterator Vf = Version.FileList();
++
+ // Skip not source sources, they do not have file fields.
+ for (; Vf.end() == false; Vf++)
+ {
+@@ -1272,31 +1294,62 @@
+ "." + 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;
+- }
+- }
++ VerFileCandidates.clear();
++ TrustLevel = 0;
+
+- // "allow-unauthenticated" restores apts old fetching behaviour
+- // that means that e.g. unauthenticated file:// uris are higher
+- // priority than authenticated http:// uris
+ if (_config->FindB("APT::Get::AllowUnauthenticated",false) == true)
+- Trusted = false;
++ {
++ // "allow-unauthenticated" restores apts old fetching behaviour
++ // that means that e.g. unauthenticated file:// uris are higher
++ // priority than authenticated http:// uris
++
++ while (!Vf.end())
++ {
++ if ((Vf.File()->Flags & pkgCache::Flag::NotSource) != 0)
++ {
++ Vf++;
++ continue;
++ }
+
++ VerFileCandidates.push_back (Vf);
++ Vf++;
++ }
++ }
++ else
++ {
++ // Find the sources with the highest trust level.
++
++ while (!Vf.end())
++ {
++ pkgIndexFile *Index;
++ if (Sources->FindIndex(Vf.File(),Index) == false)
++ {
++ Vf++;
++ continue;
++ }
++
++ int l = index_trust_level_for_package (Index, Version);
++
++ if (_config->FindB("Debug::pkgAcquire::Auth", false))
++ {
++ std::cerr << "Checking index: " << Index->Describe()
++ << "(Trust level =" << l << ")\n";
++ }
++
++ if (l >= TrustLevel)
++ {
++ if (l > TrustLevel)
++ VerFileCandidates.clear ();
++ VerFileCandidates.push_back (Vf);
++ TrustLevel = l;
++ }
++
++ Vf++;
++ }
++ }
++
+ // Select a source
++ CurVerFile = VerFileCandidates.begin ();
+ if (QueueNext() == false && _error->PendingError() == false)
+ _error->Error(_("I wasn't able to locate file for the %s package. "
+ "This might mean you need to manually fix this package."),
+@@ -1310,22 +1363,15 @@
+ checking later. */
+ bool pkgAcqArchive::QueueNext()
+ {
+- for (; Vf.end() == false; Vf++)
++ while (CurVerFile != VerFileCandidates.end())
+ {
+- // Ignore not source sources
+- if ((Vf.File()->Flags & pkgCache::Flag::NotSource) != 0)
+- continue;
++ pkgCache::VerFileIterator Vf = *CurVerFile++;
+
+ // Try to cross match against the source list
+ pkgIndexFile *Index;
+ 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)
+@@ -1403,7 +1449,6 @@
+ Desc.ShortDesc = Version.ParentPkg().Name();
+ QueueURI(Desc);
+
+- Vf++;
+ return true;
+ }
+ return false;
+@@ -1480,7 +1525,7 @@
+ StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
+ {
+ // Vf = Version.FileList();
+- while (Vf.end() == false) Vf++;
++ CurVerFile = VerFileCandidates.end ();
+ StoreFilename = string();
+ Item::Failed(Message,Cnf);
+ return;
+@@ -1494,7 +1539,7 @@
+ StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
+ {
+ Retries--;
+- Vf = Version.FileList();
++ CurVerFile = VerFileCandidates.begin ();
+ if (QueueNext() == true)
+ return;
+ }
+@@ -1509,7 +1554,7 @@
+ // ---------------------------------------------------------------------
+ bool pkgAcqArchive::IsTrusted()
+ {
+- return Trusted;
++ return TrustLevel > 0;
+ }
+
+ // AcqArchive::Finished - Fetching has finished, tidy up /*{{{*/
+Index: apt-pkg/acquire-item.h
+===================================================================
+--- apt-pkg/acquire-item.h (revision 14885)
++++ apt-pkg/acquire-item.h (working copy)
+@@ -27,6 +27,7 @@
+ #include <apt-pkg/pkgrecords.h>
+ #include <apt-pkg/indexrecords.h>
+
++#include <list>
+
+ /** \addtogroup acquire
+ * @{
+@@ -787,8 +788,8 @@
+ */
+ string &StoreFilename;
+
+- /** \brief The next file for this version to try to download. */
+- pkgCache::VerFileIterator Vf;
++ std::list<pkgCache::VerFileIterator> VerFileCandidates;
++ std::list<pkgCache::VerFileIterator>::const_iterator CurVerFile;
+
+ /** \brief How many (more) times to try to find a new source from
+ * which to download this package version if it fails.
+@@ -797,10 +798,10 @@
+ */
+ unsigned int Retries;
+
+- /** \brief \b true if this version file is being downloaded from a
++ /** \brief \b Positive if this version file is being downloaded from a
+ * trusted source.
+ */
+- bool Trusted;
++ int TrustLevel;
+
+ /** \brief Queue up the next available file for this version. */
+ bool QueueNext();
+@@ -904,4 +905,28 @@
+
+ /** @} */
+
++/* For influencing the IsTrusted decision when acquiring a new version
++ of a package and for influencing which source is selected if the
++ highest version of a package is available from multiple sources.
++
++ The hook should return a integer indicating the 'trust level' that
++ a given index should be afforded for a given package. Indices with
++ higher trust levels will be preferred.
++
++ The default behavior is to use a trust level of zero for unsigned
++ repositories and a level of one for repositories with valid
++ signatures.
++
++ The IsTrusted predicate on a pkgAcqArchive object will return true
++ when the highest trust level is non-zero, false otherwise.
++
++ A trust level can be negative. In that case, the index will never
++ be considered as a source for the package.
++*/
++
++void
++apt_set_index_trust_level_for_package_hook (int (*hook)
++ (pkgIndexFile *Index,
++ const pkgCache::VerIterator &V));
++
+ #endif
- Previous message: [maemo-commits] r14885 - in projects/haf/trunk/apt: . apt-pkg debian
- Next message: [maemo-commits] r14887 - projects/haf/trunk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
