[maemo-commits] [maemo-commits] r9960 - projects/haf/trunk/apt/apt-pkg
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Feb 16 16:16:25 EET 2007
- Previous message: [maemo-commits] r9959 - projects/haf/trunk/apt
- Next message: [maemo-commits] r9961 - projects/haf/hafbuildbot
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: marivoll
Date: 2007-02-16 16:16:24 +0200 (Fri, 16 Feb 2007)
New Revision: 9960
Modified:
projects/haf/trunk/apt/apt-pkg/acquire-item.cc
Log:
* Applied transientsigs.patch that allows us to survive transient
network failures without throwing away good signatures.
Modified: projects/haf/trunk/apt/apt-pkg/acquire-item.cc
===================================================================
--- projects/haf/trunk/apt/apt-pkg/acquire-item.cc 2007-02-16 14:16:10 UTC (rev 9959)
+++ projects/haf/trunk/apt/apt-pkg/acquire-item.cc 2007-02-16 14:16:24 UTC (rev 9960)
@@ -755,17 +755,6 @@
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);
}
/*}}}*/
@@ -774,8 +763,10 @@
/* The only header we use is the last-modified header. */
string pkgAcqMetaSig::Custom600Headers()
{
+ string Final = _config->FindDir("Dir::State::lists");
+ Final += URItoFileName(RealURI);
struct stat Buf;
- if (stat(DestFile.c_str(),&Buf) != 0)
+ if (stat(Final.c_str(),&Buf) != 0)
return "\nIndex-File: true";
return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
@@ -805,6 +796,21 @@
Complete = true;
+ string Final = _config->FindDir("Dir::State::lists");
+ Final += URItoFileName(RealURI);
+ if (StringToBool(LookupTag(Message,"IMS-Hit"),false))
+ {
+ // Move it into position
+ Rename (Final, DestFile);
+ }
+ else
+ {
+ // Delete the old version in lists/. The new version will be moved
+ // there from partial/ when the signature verification succeeds
+ //
+ unlink (Final.c_str ());
+ }
+
// queue a pkgAcqMetaIndex to be verified against the sig we just retrieved
new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
DestFile, IndexTargets, MetaIndexParser);
@@ -813,22 +819,49 @@
/*}}}*/
void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
{
+ string Final =
+ _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
- // if we get a network error we fail gracefully
- if(LookupTag(Message,"FailReason") == "Timeout" ||
- LookupTag(Message,"FailReason") == "TmpResolveFailure" ||
- LookupTag(Message,"FailReason") == "ConnectionRefused") {
- Item::Failed(Message,Cnf);
- return;
- }
+ // If this is a transient failure, we use the old version, if we
+ // have one. "Using it" means moving it into the partial/
+ // directory for further consumption by gpgv.
+ //
+ if (StringToBool(LookupTag(Message,"Transient-Failure"),false))
+ {
+ struct stat Buf;
+ if (stat(Final.c_str(),&Buf) == 0)
+ {
+ Rename (Final, DestFile);
+ new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc,
+ MetaIndexShortDesc,
+ DestFile, IndexTargets, MetaIndexParser);
+ }
+ else
+ {
+ // queue a pkgAcqMetaIndex with no sigfile
+ new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc,
+ MetaIndexShortDesc,
+ "", IndexTargets, MetaIndexParser);
+ }
+ }
+ else
+ {
+ // Delete any existing sigfile, so that this source isn't
+ // mistakenly trusted
+ unlink(Final.c_str());
- // Delete any existing sigfile when the acquire failed
- string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
- unlink(Final.c_str());
+ // if we get a network error we fail gracefully
+ if(LookupTag(Message,"FailReason") == "Timeout" ||
+ LookupTag(Message,"FailReason") == "TmpResolveFailure" ||
+ LookupTag(Message,"FailReason") == "ConnectionRefused") {
+ Item::Failed(Message,Cnf);
+ return;
+ }
- // queue a pkgAcqMetaIndex with no sigfile
- new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
- "", IndexTargets, MetaIndexParser);
+ // 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)
@@ -1157,7 +1190,38 @@
LookupTag(Message,"Message").c_str());
}
+ else
+ {
+ // If this is a transient failure, we use the old version, if we
+ // have one.
+ //
+ if (StringToBool(LookupTag(Message,"Transient-Failure"),false))
+ {
+ string Final = _config->FindDir("Dir::State::lists");
+ Final += URItoFileName(RealURI);
+ struct stat Buf;
+ if (stat(Final.c_str(),&Buf) == 0)
+ {
+ DestFile = Final;
+ if (SigFile != "")
+ {
+ // 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";
+ return;
+ }
+ }
+ }
+ }
+
// No Release file was present, or verification failed, so fall
// back to queueing Packages files without verification
QueueIndexes(false);
- Previous message: [maemo-commits] r9959 - projects/haf/trunk/apt
- Next message: [maemo-commits] r9961 - projects/haf/hafbuildbot
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
