]> git.saurik.com Git - apt.git/commitdiff
unsigned Release files can expire, too
authorDavid Kalnischkies <david@kalnischkies.de>
Sun, 12 Apr 2015 09:20:55 +0000 (11:20 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Sat, 18 Apr 2015 23:13:09 +0000 (01:13 +0200)
Checking Valid-Until on an unsigned Release file doesn't give us any
security brownie points as an attacker could just change the date and in
practice repositories with unsigned Release files will very likely not
have a Valid-Until date, but for symetry and the fact that being
unsigned is currently just a warning, while expired is a fatal error.

apt-pkg/acquire-item.cc

index dd85fda79e112df34a13458ed8a6cf0cbff8496a..bdbdcc456489bb28ea3c6b9ad24ebe9addf95658 100644 (file)
@@ -1739,7 +1739,10 @@ void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf)/*{{{*/
       // we parse the indexes here because at this point the user wanted
       // a repository that may potentially harm him
       MetaIndexParser->Load(MetaIndexFile);
-      QueueIndexes(true);
+      if (!VerifyVendor(Message, RealURI))
+        /* expired Release files are still a problem you need extra force for */;
+      else
+        QueueIndexes(true);
    }
 
    // FIXME: this is used often (e.g. in pkgAcqIndexTrans) so refactor
@@ -1843,6 +1846,7 @@ bool pkgAcqMetaBase::CheckAuthDone(string Message, const string &RealURI) /*{{{*
 
    if (!VerifyVendor(Message, RealURI))
    {
+      Status = StatAuthError;
       return false;
    }
 
@@ -2030,13 +2034,19 @@ bool pkgAcqMetaBase::VerifyVendor(string Message, const string &RealURI)/*{{{*/
        MetaIndexParser->GetValidUntil() > 0) {
       time_t const invalid_since = time(NULL) - MetaIndexParser->GetValidUntil();
       if (invalid_since > 0)
-        // TRANSLATOR: The first %s is the URL of the bad Release file, the second is
-        // the time since then the file is invalid - formated in the same way as in
-        // the download progress display (e.g. 7d 3h 42min 1s)
-        return _error->Error(
-            _("Release file for %s is expired (invalid since %s). "
-              "Updates for this repository will not be applied."),
-            RealURI.c_str(), TimeToStr(invalid_since).c_str());
+      {
+        std::string errmsg;
+        strprintf(errmsg,
+              // TRANSLATOR: The first %s is the URL of the bad Release file, the second is
+              // the time since then the file is invalid - formated in the same way as in
+              // the download progress display (e.g. 7d 3h 42min 1s)
+              _("Release file for %s is expired (invalid since %s). "
+                 "Updates for this repository will not be applied."),
+              RealURI.c_str(), TimeToStr(invalid_since).c_str());
+        if (ErrorText.empty())
+           ErrorText = errmsg;
+        return _error->Error("%s", errmsg.c_str());
+      }
    }
 
    if (_config->FindB("Debug::pkgAcquire::Auth", false))