]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/debmetaindex.cc
* apt-pkg/deb/debmetaindex.cc:
[apt.git] / apt-pkg / deb / debmetaindex.cc
index a6edab6b9f5174635660f31d7f10eaa817aa8d63..81afb22b69a28fcbc0dffa06a43ba9aae5987fc5 100644 (file)
@@ -142,11 +142,13 @@ string debReleaseIndex::TranslationIndexURI(const char *Type, const string &Sect
       return URI + "dists/" + Dist + "/" + TranslationIndexURISuffix(Type, Section);
 }
 
-debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) {
-       this->URI = URI;
-       this->Dist = Dist;
-       this->Indexes = NULL;
-       this->Type = "deb";
+debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist) :
+                                       metaIndex(URI, Dist, "deb"), Trusted(CHECK_TRUST)
+{}
+
+debReleaseIndex::debReleaseIndex(string const &URI, string const &Dist, bool const Trusted) :
+                                       metaIndex(URI, Dist, "deb") {
+       SetTrusted(Trusted);
 }
 
 debReleaseIndex::~debReleaseIndex() {
@@ -195,11 +197,14 @@ vector <struct IndexTarget *>* debReleaseIndex::ComputeIndexTargets() const {
                }
        }
 
+       std::vector<std::string> const lang = APT::Configuration::getLanguages(true);
+       if (lang.empty() == true)
+               return IndexTargets;
+
        // get the Translations:
        // - if its a dists-style repository get the i18n/Index first
        // - if its flat try to acquire files by guessing
        if (Dist[Dist.size() - 1] == '/') {
-               std::vector<std::string> const lang = APT::Configuration::getLanguages(true);
                for (std::set<std::string>::const_iterator s = sections.begin();
                     s != sections.end(); ++s) {
                        for (std::vector<std::string>::const_iterator l = lang.begin();
@@ -249,8 +254,22 @@ bool debReleaseIndex::GetIndexes(pkgAcquire *Owner, bool const &GetAll) const
        return true;
 }
 
+void debReleaseIndex::SetTrusted(bool const Trusted)
+{
+       if (Trusted == true)
+               this->Trusted = ALWAYS_TRUSTED;
+       else
+               this->Trusted = NEVER_TRUSTED;
+}
+
 bool debReleaseIndex::IsTrusted() const
 {
+   if (Trusted == ALWAYS_TRUSTED)
+      return true;
+   else if (Trusted == NEVER_TRUSTED)
+      return false;
+
+
    if(_config->FindB("APT::Authentication::TrustCDROM", false))
       if(URI.substr(0,strlen("cdrom:")) == "cdrom:")
         return true;
@@ -346,6 +365,7 @@ class debSLTypeDebian : public pkgSourceList::Type
       vector<string> const Archs =
                (arch != Options.end()) ? VectorizeString(arch->second, ',') :
                                APT::Configuration::getArchitectures();
+      map<string, string>::const_iterator const trusted = Options.find("trusted");
 
       for (vector<metaIndex *>::const_iterator I = List.begin();
           I != List.end(); I++)
@@ -355,6 +375,9 @@ class debSLTypeDebian : public pkgSourceList::Type
            continue;
 
         debReleaseIndex *Deb = (debReleaseIndex *) (*I);
+        if (trusted != Options.end())
+           Deb->SetTrusted(StringToBool(trusted->second, false));
+
         /* This check insures that there will be only one Release file
            queued for all the Packages files and Sources files it
            corresponds to. */
@@ -372,9 +395,14 @@ class debSLTypeDebian : public pkgSourceList::Type
            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);
+      debReleaseIndex *Deb;
+      if (trusted != Options.end())
+        Deb = new debReleaseIndex(URI, Dist, StringToBool(trusted->second, false));
+      else
+        Deb = new debReleaseIndex(URI, Dist);
+
       if (IsSrc == true)
         Deb->PushSectionEntry ("source", new debReleaseIndex::debSectionEntry(Section, IsSrc));
       else