diff options
67 files changed, 712 insertions, 517 deletions
diff --git a/Dockerfile b/Dockerfile index 08aed4836..49934e46c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:testing +FROM debian:buster COPY . /tmp WORKDIR /tmp RUN sed -i s#://deb.debian.org#://cdn-fastly.deb.debian.org# /etc/apt/sources.list \ @@ -9,19 +9,20 @@ package managers can depend upon. Included tools are: -* apt-get for retrieval of packages and information about them +* **apt-get** for retrieval of packages and information about them from authenticated sources and for installation, upgrade and removal of packages together with their dependencies -* apt-cache for querying available information about installed +* **apt-cache** for querying available information about installed as well as installable packages -* apt-cdrom to use removable media as a source for packages -* apt-config as an interface to the configuration settings -* apt-key as an interface to manage authentication keys -* apt-extracttemplates to be used by debconf to prompt for configuration - questions before installation. -* apt-ftparchive creates Packages and other index files +* **apt-cdrom** to use removable media as a source for packages +* **apt-config** as an interface to the configuration settings +* **apt-key** as an interface to manage authentication keys +* **apt-extracttemplates** to be used by debconf to prompt for configuration + questions before installation +* **apt-ftparchive** creates Packages and other index files needed to publish an archive of debian packages -* apt-sortpkgs is a Packages/Sources file normalizer. +* **apt-sortpkgs** is a Packages/Sources file normalizer +* **apt** is a high-level commandline interface for better interactive usage The libraries libapt-pkg and libapt-inst are also maintained as part of this project, alongside various additional binaries like the acquire-methods used by them. diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 83c793093..755e1fb59 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1464,8 +1464,20 @@ bool pkgAcqMetaBase::CheckDownloadDone(pkgAcqTransactionItem * const I, const st return true; } /*}}}*/ -bool pkgAcqMetaBase::CheckAuthDone(string const &Message) /*{{{*/ +bool pkgAcqMetaBase::CheckAuthDone(string const &Message, pkgAcquire::MethodConfig const *const Cnf) /*{{{*/ { + /* If we work with a recent version of our gpgv method, we expect that it tells us + which key(s) have signed the file so stuff like CVE-2018-0501 is harder in the future */ + if (Cnf->Version != "1.0" && LookupTag(Message, "Signed-By").empty()) + { + std::string errmsg; + strprintf(errmsg, "Internal Error: Signature on %s seems good, but expected details are missing! (%s)", Target.URI.c_str(), "Signed-By"); + if (ErrorText.empty()) + ErrorText = errmsg; + Status = StatAuthError; + return _error->Error("%s", errmsg.c_str()); + } + // 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 @@ -1946,7 +1958,7 @@ void pkgAcqMetaClearSig::Done(std::string const &Message, QueueForSignatureVerify(this, DestFile, DestFile); return; } - else if(CheckAuthDone(Message) == true) + else if (CheckAuthDone(Message, Cnf) == true) { if (TransactionManager->IMSHit == false) TransactionManager->TransactionStageCopy(this, DestFile, GetFinalFilename()); @@ -2190,7 +2202,7 @@ void pkgAcqMetaSig::Done(string const &Message, HashStringList const &Hashes, } return; } - else if(MetaIndex->CheckAuthDone(Message) == true) + else if (MetaIndex->CheckAuthDone(Message, Cfg) == true) { auto const Releasegpg = GetFinalFilename(); auto const Release = MetaIndex->GetFinalFilename(); diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index 4a1378922..70651d9e3 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -451,8 +451,9 @@ class APT_HIDDEN pkgAcqMetaBase : public pkgAcqTransactionItem /*{{{*/ * * \param Message The message block received from the fetch * subprocess. + * \param Cnf The method and its configuration which handled the request */ - bool CheckAuthDone(std::string const &Message); + bool CheckAuthDone(std::string const &Message, pkgAcquire::MethodConfig const *const Cnf); /** Check if the current item should fail at this point */ bool CheckStopAuthentication(pkgAcquire::Item * const I, const std::string &Message); diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index 1c000e586..997ef7423 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -252,7 +252,7 @@ Configuration::Item *Configuration::Lookup(Item *Head,const char *S, if (Len != 0) { for (; I != 0; Last = &I->Next, I = I->Next) - if ((Res = stringcasecmp(I->Tag,S,S + Len)) == 0) + if (Len == I->Tag.length() && (Res = stringcasecmp(I->Tag,S,S + Len)) == 0) break; } else diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc index 21e3f0afd..c3b529922 100644 --- a/apt-pkg/contrib/md5.cc +++ b/apt-pkg/contrib/md5.cc @@ -80,7 +80,7 @@ static void byteSwap(uint32_t *buf, unsigned words) static void MD5Transform(uint32_t buf[4], uint32_t const in[16]) { - register uint32_t a, b, c, d; + uint32_t a, b, c, d; a = buf[0]; b = buf[1]; diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index e8dff833d..80ca10e37 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -61,6 +61,7 @@ debListParser::debListParser(FileFd *File) : else forceEssential.emplace_back("apt"); forceImportant = _config->FindVector("pkgCacheGen::ForceImportant"); + myArch = _config->Find("APT::Architecture"); } /*}}}*/ // ListParser::Package - Return the package name /*{{{*/ @@ -621,12 +622,11 @@ const char *debListParser::ParseDepends(const char *Start,const char *Stop, // We don't want to confuse library users which can't handle MultiArch if (StripMultiArch == true) { - string const arch = _config->Find("APT::Architecture"); size_t const found = Package.rfind(':'); if (found != StringView::npos && (Package.substr(found) == ":any" || Package.substr(found) == ":native" || - Package.substr(found +1) == arch)) + Package.substr(found +1) == Arch)) Package = Package.substr(0,found); } @@ -848,7 +848,7 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver, StringView Version; unsigned int Op; - Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false); + Start = ParseDepends(Start, Stop, Package, Version, Op, false, false, false, myArch); if (Start == 0) return _error->Error("Problem parsing dependency %zu",static_cast<size_t>(Key)); // TODO size_t const found = Package.rfind(':'); diff --git a/apt-pkg/deb/deblistparser.h b/apt-pkg/deb/deblistparser.h index 09b56665f..f02252d58 100644 --- a/apt-pkg/deb/deblistparser.h +++ b/apt-pkg/deb/deblistparser.h @@ -45,6 +45,7 @@ class APT_HIDDEN debListParser : public pkgCacheListParser std::vector<std::string> forceEssential; std::vector<std::string> forceImportant; std::string MD5Buffer; + std::string myArch; protected: pkgTagFile Tags; diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 058e389a5..041f0b957 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -231,10 +231,54 @@ map_id_t pkgCache::sHash(const char *Str) const return Hash % HeaderP->GetHashTableSize(); } +#if defined(__GNUC__) && defined(__x86_64__) && defined(__ELF__) + +#if defined(__x86_64__) +__attribute__((target("sse4.2"))) static uint32_t hash32(uint32_t crc32, const unsigned char *input, size_t size) +{ + if (input == nullptr) + return 0; + + crc32 ^= 0xffffffffU; + while (size >= 8) { + crc32 = __builtin_ia32_crc32di(crc32, *(uint64_t *)input); + input += 8; + size -= 8; + } + + if (size >= 4) { + crc32 = __builtin_ia32_crc32si(crc32, *(uint32_t *)input); + input += 4; + size -= 4; + } + + if (size >= 2) { + crc32 = __builtin_ia32_crc32hi(crc32, *(uint16_t *)input); + input += 2; + size -= 2; + } + + if (size >= 1) { + crc32 = __builtin_ia32_crc32qi(crc32, *(uint8_t *)input); + input += 1; + size -= 1; + } + crc32 ^= 0xffffffffU; + return crc32; +} +#endif + +__attribute__((target("default"))) +#endif +static uint32_t hash32(uint32_t crc32, const unsigned char *input, size_t size) +{ + return adler32(crc32, input, size); +} + uint32_t pkgCache::CacheHash() { pkgCache::Header header = {}; - uLong adler = adler32(0L, Z_NULL, 0); + uLong adler = hash32(0L, Z_NULL, 0); if (Map.Size() < sizeof(header)) return adler; @@ -243,14 +287,14 @@ uint32_t pkgCache::CacheHash() header.Dirty = false; header.CacheFileSize = 0; - adler = adler32(adler, - reinterpret_cast<const unsigned char *>(&header), - sizeof(header)); + adler = hash32(adler, + reinterpret_cast<const unsigned char *>(&header), + sizeof(header)); if (Map.Size() > sizeof(header)) { - adler = adler32(adler, - static_cast<const unsigned char *>(GetMap().Data()) + sizeof(header), - GetMap().Size() - sizeof(header)); + adler = hash32(adler, + static_cast<const unsigned char *>(GetMap().Data()) + sizeof(header), + GetMap().Size() - sizeof(header)); } return adler; diff --git a/apt-private/private-cmndline.cc b/apt-private/private-cmndline.cc index 101e0ae40..87deb6bf0 100644 --- a/apt-private/private-cmndline.cc +++ b/apt-private/private-cmndline.cc @@ -287,7 +287,7 @@ static bool addArgumentsAPTMark(std::vector<CommandLine::Args> &Args, char const { if (CmdMatches("auto", "manual", "hold", "unhold", "showauto", "showmanual", "showhold", "showholds", - "markauto", "unmarkauto")) + "markauto", "unmarkauto", "minimize-manual")) { addArg('f',"file","Dir::State::extended_states",CommandLine::HasArg); } @@ -303,7 +303,14 @@ static bool addArgumentsAPTMark(std::vector<CommandLine::Args> &Args, char const addArg('v',"verbose","APT::MarkAuto::Verbose",0); } - if (Cmd != nullptr && strncmp(Cmd, "show", strlen("show")) != 0) + if (CmdMatches("minimize-manual")) + { + addArg('y',"yes","APT::Get::Assume-Yes",0); + addArg('y',"assume-yes","APT::Get::Assume-Yes",0); + addArg(0,"assume-no","APT::Get::Assume-No",0); + } + + if (CmdMatches("minimize-manual") || (Cmd != nullptr && strncmp(Cmd, "show", strlen("show")) != 0)) { addArg('s',"simulate","APT::Mark::Simulate",0); addArg('s',"just-print","APT::Mark::Simulate",0); diff --git a/apt-private/private-output.h b/apt-private/private-output.h index 1ac861328..c20cc9e17 100644 --- a/apt-private/private-output.h +++ b/apt-private/private-output.h @@ -101,11 +101,11 @@ bool ShowEssential(std::ostream &out,CacheFile &Cache); void Stats(std::ostream &out, pkgDepCache &Dep); // prompting -bool YnPrompt(char const * const Question, bool Default=true); +APT_PUBLIC bool YnPrompt(char const *const Question, bool Default = true); bool YnPrompt(char const * const Question, bool const Default, bool const ShowGlobalErrors, std::ostream &c1o, std::ostream &c2o); bool AnalPrompt(std::string const &Question, const char *Text); -std::string PrettyFullName(pkgCache::PkgIterator const &Pkg); +APT_PUBLIC std::string PrettyFullName(pkgCache::PkgIterator const &Pkg); std::string CandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg); std::function<std::string(pkgCache::PkgIterator const &)> CandidateVersion(pkgCacheFile * const Cache); std::string CurrentToCandidateVersion(pkgCacheFile * const Cache, pkgCache::PkgIterator const &Pkg); diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index f1b1e144d..3c0e477b1 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -182,7 +182,7 @@ static void ShowHashTableStats(std::string Type, static bool Stats(CommandLine &CmdL) { if (CmdL.FileSize() > 1) { - _error->Error(_("apt-cache stats does not take any arguments")); + _error->Error(_("%s does not take any arguments"), "apt-cache stats"); return false; } diff --git a/cmdline/apt-mark.cc b/cmdline/apt-mark.cc index 927b31d2f..161845b53 100644 --- a/cmdline/apt-mark.cc +++ b/cmdline/apt-mark.cc @@ -125,6 +125,127 @@ static bool DoMarkAuto(CommandLine &CmdL) return true; } /*}}}*/ +// helper for Install-Recommends-Sections and Never-MarkAuto-Sections /*{{{*/ +static bool +ConfigValueInSubTree(const char *SubTree, const char *needle) +{ + // copied from depcache.cc + Configuration::Item const *Opts; + Opts = _config->Tree(SubTree); + if (Opts != 0 && Opts->Child != 0) + { + Opts = Opts->Child; + for (; Opts != 0; Opts = Opts->Next) + { + if (Opts->Value.empty() == true) + continue; + if (strcmp(needle, Opts->Value.c_str()) == 0) + return true; + } + } + return false; +} + /*}}}*/ +/* DoMinimize - minimize manually installed {{{*/ +/* Traverses dependencies of meta packages and marks them as manually + * installed. */ +static bool DoMinimize(CommandLine &CmdL) +{ + + pkgCacheFile CacheFile; + pkgDepCache *const DepCache = CacheFile.GetDepCache(); + if (unlikely(DepCache == nullptr)) + return false; + + if (CmdL.FileList[1] != nullptr) + return _error->Error(_("%s does not take any arguments"), "apt-mark minimize-manual"); + + auto Debug = _config->FindB("Debug::AptMark::Minimize", false); + auto is_root = [&DepCache](pkgCache::PkgIterator const &pkg) { + auto ver = pkg.CurrentVer(); + return ver.end() == false && ((*DepCache)[pkg].Flags & pkgCache::Flag::Auto) == 0 && + ver->Section != 0 && + ConfigValueInSubTree("APT::Never-MarkAuto-Sections", ver.Section()); + }; + + APT::PackageSet roots; + for (auto Pkg = DepCache->PkgBegin(); Pkg.end() == false; ++Pkg) + { + if (is_root(Pkg)) + { + if (Debug) + std::clog << "Found root " << Pkg.Name() << std::endl; + roots.insert(Pkg); + } + } + + APT::PackageSet workset(roots); + APT::PackageSet seen; + APT::PackageSet changed; + + pkgDepCache::ActionGroup group(*DepCache); + + while (workset.empty() == false) + { + if (Debug) + std::clog << "Iteration\n"; + + APT::PackageSet workset2; + for (auto &Pkg : workset) + { + if (seen.find(Pkg) != seen.end()) + continue; + + seen.insert(Pkg); + + if (Debug) + std::cerr << " Visiting " << Pkg.FullName(true) << "\n"; + if (roots.find(Pkg) == roots.end() && ((*DepCache)[Pkg].Flags & pkgCache::Flag::Auto) == 0) + { + DepCache->MarkAuto(Pkg, true); + changed.insert(Pkg); + } + + // Visit dependencies, add them to next working set + for (auto Dep = Pkg.CurrentVer().DependsList(); !Dep.end(); ++Dep) + { + if (DepCache->IsImportantDep(Dep) == false) + continue; + std::unique_ptr<pkgCache::Version *[]> targets(Dep.AllTargets()); + for (int i = 0; targets[i] != nullptr; i++) + { + pkgCache::VerIterator Tgt(*DepCache, targets[i]); + if (Tgt.ParentPkg()->CurrentVer != 0 && Tgt.ParentPkg().CurrentVer()->ID == Tgt->ID) + workset2.insert(Tgt.ParentPkg()); + } + } + } + + workset = std::move(workset2); + } + + if (changed.empty()) { + cout << _("No changes necessary") << endl; + return true; + } + + ShowList(c1out, _("The following packages will be marked as automatically installed:"), changed, + [](const pkgCache::PkgIterator &) { return true; }, + &PrettyFullName, + &PrettyFullName); + + if (_config->FindB("APT::Mark::Simulate", false) == false) + { + if (YnPrompt(_("Do you want to continue?"), false) == false) + return true; + + return DepCache->writeStateFile(NULL); + } + + return true; +} + /*}}}*/ + /* ShowAuto - show automatically installed packages (sorted) {{{*/ static bool ShowAuto(CommandLine &CmdL) { @@ -293,6 +414,7 @@ static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/ return { {"auto",&DoAuto, _("Mark the given packages as automatically installed")}, {"manual",&DoAuto, _("Mark the given packages as manually installed")}, + {"minimize-manual", &DoMinimize, _("Mark all dependencies of meta packages as automatically installed.")}, {"hold",&DoSelection, _("Mark a package as held back")}, {"unhold",&DoSelection, _("Unset a package set as held back")}, {"install",&DoSelection, nullptr}, diff --git a/cmdline/apt.cc b/cmdline/apt.cc index 776b100bf..f508406d1 100644 --- a/cmdline/apt.cc +++ b/cmdline/apt.cc @@ -91,6 +91,7 @@ static std::vector<aptDispatchWithHelp> GetCommands() /*{{{*/ {"source", &DoSource, nullptr}, {"download", &DoDownload, nullptr}, {"changelog", &DoChangelog, nullptr}, + {"info", &ShowPackage, nullptr}, {nullptr, nullptr, nullptr} }; diff --git a/completions/bash/apt b/completions/bash/apt index 07bebc9a3..e1853928d 100644 --- a/completions/bash/apt +++ b/completions/bash/apt @@ -29,6 +29,8 @@ _apt() --allow-insecure-repositories --install-recommends --install-suggests + --no-install-recommends + --no-install-suggests --fix-policy ' diff --git a/debian/control b/debian/control index c3481f8c7..18b38ad39 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,6 @@ Build-Depends: cmake (>= 3.4), gettext (>= 0.12), googletest <!nocheck> | libgtest-dev <!nocheck>, libbz2-dev, - libcurl4-gnutls-dev (>= 7.19.4~), libdb-dev, libgnutls28-dev (>= 3.4.6), liblz4-dev (>= 0.0~r126), diff --git a/doc/apt-mark.8.xml b/doc/apt-mark.8.xml index ddde0416f..ea39b7faa 100644 --- a/doc/apt-mark.8.xml +++ b/doc/apt-mark.8.xml @@ -66,6 +66,14 @@ </para></listitem> </varlistentry> + <varlistentry><term><option>minimize-manual</option></term> + <listitem><para><literal>minimize-manual</literal> is used to mark + (transitive) dependencies of metapackages as automatically installed. + This can be used after an installation for example, to minimize the + number of manually installed packages; or continuously on systems + managed by system configuration metapackages. + </para></listitem> + </varlistentry> <varlistentry><term><option>showauto</option></term> <listitem><para><literal>showauto</literal> is used to print a list of automatically installed packages with each package on a new line. diff --git a/doc/apt-verbatim.ent b/doc/apt-verbatim.ent index a6e292067..4a533ebf3 100644 --- a/doc/apt-verbatim.ent +++ b/doc/apt-verbatim.ent @@ -271,11 +271,11 @@ <!ENTITY apt-product-version "1.8.0~alpha3.1"> <!-- (Code)names for various things used all over the place --> -<!ENTITY debian-oldstable-codename "jessie"> -<!ENTITY debian-stable-codename "stretch"> -<!ENTITY debian-testing-codename "buster"> -<!ENTITY debian-stable-version "9"> -<!ENTITY ubuntu-codename "xenial"> +<!ENTITY debian-oldstable-codename "stretch"> +<!ENTITY debian-stable-codename "buster"> +<!ENTITY debian-testing-codename "bullseye"> +<!ENTITY debian-stable-version "10"> +<!ENTITY ubuntu-codename "disco"> <!-- good and bad just refers to matching and not matching a pattern… It is not a remark about the specific perl version. diff --git a/doc/po/fr.po b/doc/po/fr.po index ae5a4b1a5..416d0eebd 100644 --- a/doc/po/fr.po +++ b/doc/po/fr.po @@ -10,17 +10,17 @@ # Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>, 2014, 2017, 2018. msgid "" msgstr "" -"Project-Id-Version: apt-doc 1.0.6\n" +"Project-Id-Version: apt-doc 1.8.0\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2018-12-18 15:02+0100\n" -"PO-Revision-Date: 2018-03-16 00:54+0100\n" +"POT-Creation-Date: 2018-11-12 11:52+0100\n" +"PO-Revision-Date: 2018-11-26 17:47+0100\n" "Last-Translator: Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>\n" "Language-Team: French <debian-l10n-french@lists.debian.org>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Poedit 1.8.11\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. type: Plain text @@ -166,10 +166,11 @@ msgstr "" " <varlistentry>\n" " <term><option>-c</option></term>\n" " <term><option>--config-file</option></term>\n" -" <listitem><para>Fichier de configuration ; indique le fichier de configuration à utiliser. \n" +" <listitem><para>Fichier de configuration ; indique le fichier de configuration à utiliser. \n" " Le programme lira le fichier de configuration par défaut puis le fichier indiqué ici. \n" " Si les réglages de configuration doivent être établis avant l'analyse des fichiers\n" -" de configuration par défaut, un fichier peut être indiqué avec la variable d'environnement <envar>APT_CONFIG</envar>. Veuillez consulter &apt-conf; pour des informations sur la syntaxe d'utilisation. \n" +" de configuration par défaut, un fichier peut être indiqué avec la variable d'environnement <envar>APT_CONFIG</envar>." +" Veuillez consulter &apt-conf; pour des informations sur la syntaxe d'utilisation.\n" " </para>\n" " </listitem>\n" " </varlistentry>\n" @@ -193,7 +194,7 @@ msgstr "" " <varlistentry>\n" " <term><option>-o</option></term>\n" " <term><option>--option</option></term>\n" -" <listitem><para>Définir une option de configuration ; permet de régler\n" +" <listitem><para>Définir une option de configuration ; permet de régler\n" " une option de configuration donnée. La syntaxe est <option>-o Foo::Bar=bar</option>.\n" " <option>-o</option> et <option>--option</option> peuvent être utilisées plusieurs fois\n" " pour définir des options différentes.\n" @@ -241,7 +242,7 @@ msgstr "" "<!ENTITY file-aptconf \"\n" " <varlistentry><term><filename>/etc/apt/apt.conf</filename></term>\n" " <listitem><para>Fichier de configuration d'APT.\n" -" Élément de configuration : <literal>Dir::Etc::Main</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::Main</literal>.</para></listitem>\n" " </varlistentry>\n" #. type: Plain text @@ -273,7 +274,7 @@ msgstr "" "<!ENTITY file-cachearchives \"\n" " <varlistentry><term><filename>&cachedir;/archives/</filename></term>\n" " <listitem><para>Zone de stockage des fichiers récupérés.\n" -" Élément de configuration : <literal>Dir::Cache::Archives</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Cache::Archives</literal>.</para></listitem>\n" " </varlistentry>\n" #. type: Plain text @@ -288,7 +289,7 @@ msgid "" msgstr "" " <varlistentry><term><filename>&cachedir;/archives/partial/</filename></term>\n" " <listitem><para>Zone de stockage pour les paquets en transit.\n" -" Élément de configuration : <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> sera implicitement ajouté). </para></listitem>\n" +" Élément de configuration : <literal>Dir::Cache::Archives</literal> (<filename>partial</filename> sera implicitement ajouté). </para></listitem>\n" " </varlistentry>\n" "\">\n" @@ -310,7 +311,7 @@ msgstr "" " <varlistentry><term><filename>/etc/apt/preferences</filename></term>\n" " <listitem><para>Fichier des préférences.\n" " C'est dans ce fichier qu'on peut faire de l'épinglage (pinning) c'est-à-dire, choisir d'obtenir des paquets d'une source distincte ou d'une distribution différente.\n" -" Élément de configuration : <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::Preferences</literal>.</para></listitem>\n" " </varlistentry>\n" #. type: Plain text @@ -325,7 +326,7 @@ msgid "" msgstr "" " <varlistentry><term><filename>/etc/apt/preferences.d/</filename></term>\n" " <listitem><para>Fragments de fichiers pour la préférence des versions.\n" -" Élément de configuration : <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::PreferencesParts</literal>.</para></listitem>\n" " </varlistentry>\n" "\">\n" @@ -342,7 +343,7 @@ msgstr "" "<!ENTITY file-sourceslist \"\n" " <varlistentry><term><filename>/etc/apt/sources.list</filename></term>\n" " <listitem><para>Emplacement pour la récupération des paquets.\n" -" Élément de configuration : <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::SourceList</literal>.</para></listitem>\n" " </varlistentry>\n" #. type: Plain text @@ -357,7 +358,7 @@ msgid "" msgstr "" " <varlistentry><term><filename>/etc/apt/sources.list.d/</filename></term>\n" " <listitem><para>Fragments de fichiers définissant les emplacements de récupération de paquets.\n" -" Élément de configuration : <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::SourceParts</literal>.</para></listitem>\n" " </varlistentry>\n" "\">\n" @@ -375,7 +376,7 @@ msgstr "" "<!ENTITY file-statelists \"\n" " <varlistentry><term><filename>&statedir;/lists/</filename></term>\n" " <listitem><para>Zone de stockage pour les informations qui concernent chaque ressource de paquet spécifiée dans &sources-list;\n" -" Élément de configuration : <literal>Dir::State::Lists</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::State::Lists</literal>.</para></listitem>\n" " </varlistentry>\n" #. type: Plain text @@ -390,7 +391,7 @@ msgid "" msgstr "" " <varlistentry><term><filename>&statedir;/lists/partial/</filename></term>\n" " <listitem><para>Zone de stockage pour les informations en transit.\n" -" Élément de configuration : <literal>Dir::State::Lists</literal> (<filename>partial</filename> sera implicitement ajouté).</para></listitem>\n" +" Élément de configuration : <literal>Dir::State::Lists</literal> (<filename>partial</filename> sera implicitement ajouté).</para></listitem>\n" " </varlistentry>\n" "\">\n" @@ -407,7 +408,7 @@ msgstr "" "<!ENTITY file-trustedgpg \"\n" " <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>\n" " <listitem><para>Porte-clés des clés de confiance locales. Les nouvelles clés y seront ajoutées.\n" -" Élément de configuration: <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::Trusted</literal>.</para></listitem>\n" " </varlistentry>\n" #. type: Plain text @@ -424,7 +425,7 @@ msgstr "" " <varlistentry><term><filename>/etc/apt/trusted.gpg.d/</filename></term>\n" " <listitem><para>Fragments de fichiers pour les clés de signatures sûres. Des fichiers\n" " supplémentaires peuvent être placés à cet endroit (par des paquets ou par l'administrateur).\n" -" Élément de configuration : <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::Etc::TrustedParts</literal>.</para></listitem>\n" " </varlistentry>\n" "\">\n" @@ -443,7 +444,7 @@ msgstr "" "<!ENTITY file-extended_states \"\n" " <varlistentry><term><filename>/var/lib/apt/extended_states</filename></term>\n" " <listitem><para>Liste d'état des paquets installés automatiquement.\n" -" Élément de configuration : <literal>Dir::State::extended_states</literal>.</para></listitem>\n" +" Élément de configuration : <literal>Dir::State::extended_states</literal>.</para></listitem>\n" " </varlistentry>\n" "\">\n" @@ -942,7 +943,7 @@ msgid "" "error." msgstr "" "<command>apt</command> renvoie zéro après une opération normale, et le " -"décimal 100 en cas d'erreur." +"décimal 100 en cas d'erreur." #. type: Content of: <refentry><refnamediv><refpurpose> #: apt-get.8.xml @@ -1060,7 +1061,7 @@ msgid "" msgstr "" "<literal>dselect-upgrade</literal> est utilisée conjointement avec " "&dselect;, la plus ancienne interface du projet Debian pour la gestion des " -"paquets. La commande <literal>dselect-upgrade</literal> suit les " +"paquets. La commande <literal>dselect-upgrade</literal> suit les " "modifications faites par &dselect; dans le champ <literal>Status</literal> " "des paquets disponibles, et effectue les actions nécessaires à la " "réalisation de cet état (par exemple, suppression d'anciens paquets, " @@ -1091,7 +1092,7 @@ msgstr "" "<filename>/etc/apt/sources.list</filename> est utilisé pour retrouver les " "paquets désirés. Quand un trait d'union est accolé (sans espace " "intermédiaire) au nom d'un paquet déjà installé, ce paquet est supprimé. De " -"même on peut ajouter un signe « + » pour désigner un paquet à installer. " +"même on peut ajouter un signe « + » pour désigner un paquet à installer. " "Cette dernière fonctionnalité peut être utilisée pour annuler les décisions " "prises par le système de résolution des conflits d'apt-get." @@ -1224,6 +1225,9 @@ msgid "" "The arguments are interpreted as binary and source package names. See the " "<option>--only-source</option> option if you want to change that." msgstr "" +"Les arguments sont interprétés comme des noms de paquet binaire ou de paquet " +"source. Voir l'option <option>--only-source</option> si vous souhaitez " +"modifier cela." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -1304,6 +1308,9 @@ msgid "" "The arguments are interpreted as binary or source package names. See the " "<option>--only-source</option> option if you want to change that." msgstr "" +"Les arguments sont interprétés comme des noms de paquet binaire ou de paquet " +"source. Voir l'option <option>--only-source</option> si vous souhaitez " +"modifier cela." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -1466,7 +1473,7 @@ msgid "" msgstr "" "Correction ; cette option demande de réparer un système où existent des " "dépendances défectueuses. Utilisée avec install ou remove, elle peut exclure " -"un paquet pour permettre de déduire une solution viable. Tout paquet " +"un paquet pour permettre de déduire une solution viable. Tout paquet " "spécifié doit complètement corriger le problème. Cette option est " "quelquefois nécessaire lorsque l'on exécute APT pour la première fois ; APT " "interdit les dépendances défectueuses dans un système. Il est possible que " @@ -1523,9 +1530,9 @@ msgstr "" "Mode silencieux ; cette commande produit une sortie destinée à " "l'enregistrement dans un fichier-journal en omettant les indicateurs de " "progression. Un plus grand nombre de « q » (2 au plus) produit un plus grand " -"silence. On peut aussi utiliser <option>-q=#</option> pour positionner le " +"silence. On peut aussi utiliser <option>-q=#</option> pour positionner le " "niveau de silence, et annuler le fichier de configuration. Notez qu'un " -"niveau de silence égal à 2 implique <option>-y</option> et vous ne devez " +"niveau de silence égal à 2 implique <option>-y</option> et vous ne devez " "jamais utiliser <option>-qq</option> sans l'accompagner d'un modificateur " "tel que <option>-d</option>, <option>--print-uris</option> ou <option>-s</" "option> : APT pourrait alors exécuter des actions inattendues. Élément de " @@ -1552,7 +1559,7 @@ msgstr "" "utilisateurs ordinaires qui pourraient ne pas avoir accès en lecture à toute " "la configuration d'apt, ce qui fausse la simulation. Une annonce exprimant " "cet avertissement est aussi affichée par défaut pour les utilisateurs " -"ordinaires (<option>APT::Get::Show-User-Simulation-Note</option>). Élément " +"ordinaires (<option>APT::Get::Show-User-Simulation-Note</option>). Élément " "de configuration : <literal>APT::Get::Simulate</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -1580,10 +1587,10 @@ msgid "" "Configuration Item: <literal>APT::Get::Assume-Yes</literal>." msgstr "" "Répondre automatiquement oui aux questions ; présume « oui » comme réponse à " -"toutes les questions et s'exécute de manière non interactive. Dans le cas " +"toutes les questions et s'exécute de manière non interactive. Dans le cas " "d'une situation indésirable, comme le changement d'un paquet gelé, " "l'installation d'un paquet non authentifié ou la suppression d'un paquet " -"essentiel, <literal>apt-get</literal> s'interrompt. Élément de " +"essentiel, <literal>apt-get</literal> s'interrompt. Élément de " "configuration : <literal>APT::Get::Assume-Yes</literal>." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -1796,7 +1803,7 @@ msgid "" "to decompress any compressed files. Configuration Item: <literal>APT::Get::" "Print-URIs</literal>." msgstr "" -"Au lieu de récupérer les paquets à installer, leurs URI sont affichées. " +"Au lieu de récupérer les paquets à installer, leurs URI sont affichées. " "Chaque URI a un chemin, un nom de fichier destination, une taille et une clé " "MD5 attendue. Veuillez noter que le nom de fichier à afficher ne correspond " "pas toujours au nom de fichier sur le site distant. Cette option fonctionne " @@ -1866,8 +1873,8 @@ msgstr "" "annuler cette décision. En clair, cette option permet de contrôler " "simplement dans quelle distribution seront récupérés les paquets. Par " "exemple : <option>-t '2.1*'</option>, <option>-t unstable</option> ou " -"<option>-t sid</option>. Élément de configuration : <literal>APT::Default-" -"Release</literal>. Voyez aussi la page de manuel d'&apt-preferences;." +"<option>-t sid</option>. Élément de configuration : <literal>APT::Default-" +"Release</literal>. Voyez aussi la page de manuel d'&apt-preferences;." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -2184,7 +2191,7 @@ msgid "" "installed. For the specific meaning of the remainder of the output it is " "best to consult the apt source code." msgstr "" -"On peut voir que libreadline2, version 2.1-12, dépend de libc5 et " +"On peut voir que libreadline2, version 2.1-12, dépend de libc5 et " "ncurses3.0 ; ces paquets doivent être installés au préalable pour que " "libreadline2 fonctionne. À leur tour, libreadlineg2 et libreadline2-altdev " "dépendent de libreadline2. Si libreadline2 est installé, libc5 et ncurses3.0 " @@ -2265,7 +2272,7 @@ msgid "" msgstr "" "<literal>Mixed virtual packages</literal> est le nombre de paquets qui " "remplissent un paquet virtuel particulier ou dont le nom est un nom de " -"paquet virtuel. Par exemple, au sein du système Debian, « debconf » est un " +"paquet virtuel. Par exemple, au sein du système Debian, « debconf » est un " "paquet réel et il est aussi fourni par « debconf-tiny »." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><itemizedlist><listitem><para> @@ -2572,7 +2579,7 @@ msgid "" msgstr "" "Mode silencieux ; produit une sortie pertinente pour l'enregistrement dans " "un fichier-journal, sans afficher d'indicateur de progression. Un plus grand " -"nombre de q produira un plus grand silence, avec un maximum de 2. Vous " +"nombre de q produira un plus grand silence, avec un maximum de 2. Vous " "pouvez aussi utiliser <option>-q=#</option> pour positionner le niveau de " "silence, annulant le fichier de configuration. Élément de configuration : " "<literal>quiet</literal>." @@ -2761,7 +2768,7 @@ msgid "" "on error." msgstr "" "<command>apt-cache</command> retourne zéro après un déroulement normal et le " -"nombre décimal 100 en cas d'erreur." +"nombre décimal 100 en cas d'erreur." #. type: Content of: <refentry><refnamediv><refpurpose> #: apt-key.8.xml @@ -2860,7 +2867,7 @@ msgid "" msgstr "" "Il est primordial de vérifier que les clés ajoutées manuellement avec " "<command>apt-key</command> appartiennent bien au propriétaire des dépôts " -"comme elles le prétendent, sinon l'infrastructure de &apt-secure; est " +"comme elles le prétendent, sinon l'infrastructure de &apt-secure; est " "complètement compromise." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -2909,7 +2916,7 @@ msgstr "" "il est possible par exemple de télécharger une clé directement d'un serveur " "de clé dans l'ensemble de clés fiables. Veuillez noter qu'il n'y a " "<emphasis>aucune</emphasis> vérification réalisée, aussi, il peut être " -"facile de compromettre complètement l'infrastructure &apt-secure;, si la " +"facile de compromettre complètement l'infrastructure &apt-secure;, si la " "commande est utilisée sans précaution." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><term> @@ -3405,7 +3412,7 @@ msgid "" "propagate malicious software to all users downloading packages from that " "host." msgstr "" -"<literal>Attaque par compromission d'un miroir sur le réseau</literal>. " +"<literal>Attaque par compromission d'un miroir sur le réseau</literal>. " "Sans vérification de signature, quelqu'un de malveillant peut compromettre " "un miroir et modifier les fichiers. Ainsi tous ceux qui téléchargent les " "paquets de ce miroir propagent du code malveillant." @@ -3761,7 +3768,7 @@ msgid "" "longer to scan the CD but will pick them all up." msgstr "" "Parcours minutieux des paquets ; cette option peut être nécessaire avec des " -"CD d'anciens systèmes Debian 1.1 ou 1.2 dont les fichiers Packages sont " +"CD d'anciens systèmes Debian 1.1 ou 1.2 dont les fichiers Packages sont " "situés dans des endroits inhabituels. Il faudra plus de temps pour parcourir " "le CD mais tous les paquets seront repérés." @@ -3909,7 +3916,7 @@ msgid "" "on error." msgstr "" "<command>apt-config</command> retourne zéro après un déroulement normal, et " -"le nombre 100 en cas d'erreur." +"le nombre 100 en cas d'erreur." #. type: Content of: <refentry><refentryinfo><author><contrib> #: apt.conf.5.xml @@ -3939,7 +3946,7 @@ msgid "" "only place options can be set. The suite also shares a common command line " "parser to provide a uniform environment." msgstr "" -"Le fichier <filename>apt.conf</filename> est le fichier de configuration " +"Le fichier <filename>apt.conf</filename> est le fichier de configuration " "principal du l'ensemble de programmes APT, mais n'est de loin pas le seul " "endroit où des choix d'options peuvent être effectués. L'ensemble des outils " "partagent leur analyse de la ligne de commande, ce qui permet de garantir un " @@ -4050,7 +4057,7 @@ msgstr "" "ignorée, de même que les sections de texte placées entre <literal>/*</" "literal> et <literal>*/</literal>, tout comme les commentaires C/C++. " "Chaque ligne est de la forme : <literal>APT::Get::Assume-Yes \"true\";</" -"literal>. Les guillemets et le point-virgule final sont obligatoire. La " +"literal>. Les guillemets et le point-virgule final sont obligatoires. La " "valeur doit tenir sur une seule ligne et il n'existe pas de fusion de " "chaînes. Elle ne doit pas comporter de guillemets et de barre oblique " "inversée. Le nom d'une option peut contenir des caractères alphanumériques " @@ -4109,7 +4116,7 @@ msgid "" "example you could use <literal>dpkg::pre-install-pkgs</literal>." msgstr "" "Les identifiants des options de configuration ne sont pas sensibles à la " -"casse. Dans l'exemple précédent, on pourrait donc aussi bien utiliser " +"casse. Dans l'exemple précédent, on pourrait donc aussi bien utiliser " "<literal>dpkg::pre-install-pkgs</literal>." #. type: Content of: <refentry><refsect1><para> @@ -4353,7 +4360,7 @@ msgid "" "but note that APT provides no direct means to reinstall them." msgstr "" "Avec cette option qui est activée par défaut, la fonctionnalité " -"« autoclean » supprime du cache tout paquet qui ne peut plus être récupéré. " +"« autoclean » supprime du cache tout paquet qui ne peut plus être récupéré. " "Quand cette option est désactivée, les paquets qui sont installés localement " "sont aussi exclus du nettoyage - mais notez que APT ne fournit aucun moyen " "direct pour les réinstaller." @@ -4473,12 +4480,12 @@ msgid "" "stands for no limit. If <literal>Cache-Grow</literal> is set to 0 the " "automatic growth of the cache is disabled." msgstr "" -"À partir de la version 0.7.26, APT utilise un fichier de cache de taille " +"À partir de la version 0.7.26, APT utilise un fichier de cache de taille " "variable indexé en mémoire (« resizable memory mapped cache file ») pour " "conserver les informations du fichier « available ». <literal>Cache-Start</" "literal> définit la taille minimale de ce cache et par conséquent la " "quantité de mémoire qu'APT utilisera dès son lancement. La valeur par défaut " -"est de 20971520 octets (environ 20 Mo). Il est indispensable que l'ensemble " +"est de 20971520 octets (environ 20 Mo). Il est indispensable que l'ensemble " "de cette mémoire soit disponible, sinon APT ne pourra se lancer. Il peut " "donc être nécessaire de diminuer cette valeur sur des systèmes disposant de " "peu de mémoire. Au contraire, pour des systèmes qui utilisent de nombreuses " @@ -4486,12 +4493,12 @@ msgstr "" "<literal>Cache-Grow</literal> définit, en octets, la quantité de mémoire " "supplémentaire qui peut être allouée au cache si la valeur définie par " "<literal>Cache-Start</literal> est insuffisante. La valeur par défaut de " -"<literal>Cache-Grow</literal> est de 1048576 octets (environ 1 Mo). Cette " +"<literal>Cache-Grow</literal> est de 1048576 octets (environ 1 Mo). Cette " "augmentation se fera tant que la taille du cache sera insuffisante pour " "contenir toutes les informations nécessaires ou qu'elle atteint la valeur " "limite définie par <literal>Cache-Limit</literal>. La valeur par défaut de " "<literal>Cache-Limit</literal> est nulle (il n'existe donc pas de limite à " -"la taille maximale du cache). Si <literal>Cache-Grow</literal> est égal à 0, " +"la taille maximale du cache). Si <literal>Cache-Grow</literal> est égal à 0, " "l'augmentation automatique de la taille du cache est désactivée." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> @@ -4859,11 +4866,11 @@ msgid "" "that most FTP servers do not support RFC2428." msgstr "" "L'option <literal>ForceExtended</literal> contrôle l'utilisation des " -"commandes liées à la RFC 2428, <literal>EPSV</literal> et <literal>EPRT</" +"commandes liées à la RFC 2428, <literal>EPSV</literal> et <literal>EPRT</" "literal>. Par défaut, elle vaut « false » ce qui signifie que ces commandes " "ne sont utilisées que pour une connexion de type IPv6. Quand elle vaut " "« true », on les utilise même si la connexion est de type IPv4. La plupart " -"des serveurs FTP ne suivent pas la RFC 2428." +"des serveurs FTP ne suivent pas la RFC 2428." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para><literallayout> #: apt.conf.5.xml @@ -4886,11 +4893,11 @@ msgstr "" "La seule option de configuration pour les URI qui utilisent la méthode " "<literal>cdrom</literal> est le point de montage : <literal>cdrom::Mount</" "literal> ; il doit représenter le point de montage du lecteur de CD-ROM (ou " -"DVD, etc.) indiqué dans <filename>/etc/fstab</filename>. D'autres commandes " +"DVD, etc.) indiqué dans <filename>/etc/fstab</filename>. D'autres commandes " "de montage et de démontage peuvent être fournies quand le point de montage " "ne peut être listé dans le fichier <filename>/etc/fstab</filename>. " "Syntaxiquement, il faut placer <placeholder type=\"literallayout\" id=\"0\"/" -"> dans le bloc <literal>cdrom</literal>. La barre oblique finale est " +"> dans le bloc <literal>cdrom</literal>. La barre oblique finale est " "importante. Les commandes de démontage peuvent être spécifiées en utilisant " "<literal>UMount</literal>." @@ -5318,8 +5325,8 @@ msgstr "" "Les répertoires de la section <literal>Dir::State</literal> concernent le " "système local. <literal>lists</literal> est le répertoire où placer les " "listes de paquets téléchargés et <literal>status</literal> est le nom du " -"fichier d'état de &dpkg;. <literal>preferences</literal> concerne APT : " -"c'est le nom du fichier <filename>preferences</filename>. <literal>Dir::" +"fichier d'état de &dpkg;. <literal>preferences</literal> concerne APT : " +"c'est le nom du fichier <filename>preferences</filename>. <literal>Dir::" "State</literal> contient le répertoire par défaut préfixé à tous les sous-" "éléments, quand ceux-ci ne commencent pas par <filename>/</filename> ou " "<filename>./</filename>." @@ -5385,7 +5392,7 @@ msgid "" "literal> <literal>dpkg-buildpackage</literal> and <literal>apt-cache</" "literal> specify the location of the respective programs." msgstr "" -"Les programmes binaires sont pointés par <literal>Dir::Bin</literal>. " +"Les programmes binaires sont pointés par <literal>Dir::Bin</literal>. " "L'emplacement des gestionnaires de méthodes est indiqué par <literal>Dir::" "Bin::Methods</literal> ; <literal>gzip</literal>, <literal>bzip2</literal>, " "<literal>lzma</literal>, <literal>dpkg</literal>, <literal>apt-get</" @@ -5465,9 +5472,9 @@ msgstr "" "Mode de nettoyage du cache ; cette variable peut prendre l'une des valeurs " "suivantes : « <literal>always</literal> », « <literal>prompt</literal> », " "« <literal>auto</literal> », « <literal>pre-auto</literal> » et " -"« <literal>never</literal> ». « <literal>always</literal> » et " +"« <literal>never</literal> ». « <literal>always</literal> » et " "« <literal>prompt</literal> » suppriment tous les paquets du cache après la " -"mise à niveau ; « <literal>prompt</literal> » (valeur par défaut) les " +"mise à niveau ; « <literal>prompt</literal> » (valeur par défaut) les " "supprime après une demande et « <literal>auto</literal> » ne supprime que " "les archives qui ne peuvent plus être téléchargées (remplacées, par exemple, " "par une nouvelle version). « <literal>pre-auto</literal> » les supprime " @@ -5529,14 +5536,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" -"This is a string that defines the <envar>PATH</envar> environment variable " -"used when running dpkg. It may be set to any valid value of that environment " -"variable; or the empty string, in which case the variable is not changed." -msgstr "" - -#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> -#: apt.conf.5.xml -msgid "" "This is a list of shell commands to run before/after invoking &dpkg;. Like " "<literal>options</literal> this must be specified in list notation. The " "commands are invoked in order using <filename>/bin/sh</filename>; should any " @@ -5557,7 +5556,7 @@ msgid "" "going to install to the commands, one per line on the requested file " "descriptor, defaulting to standard input." msgstr "" -"Il s'agit d'une liste de commandes shell à exécuter avant d'appeler &dpkg;. " +"Il s'agit d'une liste de commandes shell à exécuter avant d'appeler &dpkg;. " "Tout comme pour <literal>Options</literal>, on doit utiliser la notation de " "liste. Les commandes sont appelées dans l'ordre, en utilisant <filename>/bin/" "sh</filename> : APT s'arrête dès que l'une d'elles échoue. APT transmet aux " @@ -5574,7 +5573,7 @@ msgid "" "information." msgstr "" "La version 2 de ce protocole envoie plus d'informations à travers le " -"descripteur du fichier requis : une ligne avec le texte <literal>VERSION 2</" +"descripteur du fichier requis : une ligne avec le texte <literal>VERSION 2</" "literal>, l'espace de configuration d'APT et une liste d'actions de paquet " "avec le nom de fichier et l'information de version." @@ -5975,7 +5974,7 @@ msgstr "" "<literal>MarkInstall</literal> suivi de <literal>nom-paquet <a.b.c -> " "d.e.f | x.y.z> (section)</literal> où <literal>a.b.c</literal> est la " "version actuelle du paquet, <literal>d.e.f</literal> la version devant être " -"installée et <literal>x.y.z</literal> une version plus récente qui n'est " +"installée et <literal>x.y.z</literal> une version plus récente qui n'est " "pas prévue pour être installée (à cause d'un score plus faible). Ces deux " "derniers éléments peuvent ne pas être mentionnés s'ils ne sont pas " "pertinents où lorsque ils sont identiques à la version installée. " @@ -6275,7 +6274,7 @@ msgstr "" #. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term> #: apt_preferences.5.xml msgid "priority 500" -msgstr "une priorité égale à 500" +msgstr "une priorité égale à 500" #. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara> #: apt_preferences.5.xml @@ -6287,7 +6286,7 @@ msgstr "" #. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><term> #: apt_preferences.5.xml msgid "priority 990" -msgstr "une priorité égale à 990" +msgstr "une priorité égale à 990" #. type: Content of: <refentry><refsect1><refsect2><para><variablelist><varlistentry><listitem><simpara> #: apt_preferences.5.xml @@ -6315,11 +6314,11 @@ msgid "" "marked as \"ButAutomaticUpgrades: yes\"." msgstr "" "Quand aucune distribution par défaut n'a été indiquée, APT affecte " -"simplement une priorité égale à 100 à toute version installée d'un paquet et " -"une priorité égale à 500 à tout version non installée. Cela à l'exception " +"simplement une priorité égale à 100 à toute version installée d'un paquet et " +"une priorité égale à 500 à tout version non installée. Cela à l'exception " "des versions issues des archives qui ont la mention « NotAutomatic: yes » " "dans leur fichier <filename>Release</filename>, qui auront alors une " -"priorité égale à 1 ou à 100 si elles sont également marquées avec " +"priorité égale à 1 ou à 100 si elles sont également marquées avec " "« ButAutomaticUpgrades: yes »." #. type: Content of: <refentry><refsect1><refsect2><para> @@ -6341,9 +6340,9 @@ msgid "" "Note also that downgrading a package can be risky.)" msgstr "" "Ne jamais revenir en arrière, sauf si la priorité d'une version disponible " -"dépasse 1000. « Revenir en arrière » signifie installer une version moins " +"dépasse 1000. « Revenir en arrière » signifie installer une version moins " "récente que la version installée. Il faut noter qu'aucune des priorités par " -"défaut n'excède 1000 ; de telles valeurs ne peuvent être définies que dans " +"défaut n'excède 1000 ; de telles valeurs ne peuvent être définies que dans " "le fichier des préférences. Notez aussi qu'il est risqué de revenir en " "arrière." @@ -6382,9 +6381,9 @@ msgid "" "upgraded when <command>apt-get install <replaceable>some-package</" "replaceable></command> or <command>apt-get upgrade</command> is executed." msgstr "" -"En général, la version installée d'un paquet (priorité 100) n'est pas aussi " +"En général, la version installée d'un paquet (priorité 100) n'est pas aussi " "récente que les versions disponibles dans les sources listées dans le " -"fichier &sources-list; (priorité 500 ou 990). Et donc le paquet sera mis à " +"fichier &sources-list; (priorité 500 ou 990). Et donc le paquet sera mis à " "niveau avec la commande : <command>apt-get install <replaceable>paquet</" "replaceable></command> ou <command>apt-get dist-upgrade</command>." @@ -6644,8 +6643,8 @@ msgid "" msgstr "" "APT gére également l'épinglage (« pinning ») avec des expressions &glob; et " "des expressions régulières entourées par des barres obliques. Par exemple, " -"l'exemple qui suit affecte une priorité de 500 à tous les paquets " -"d'experimental dont le nom commence par gnome (en tant qu'expression de " +"l'exemple qui suit affecte une priorité de 500 à tous les paquets " +"d'experimental dont le nom commence par gnome (en tant qu'expression de " "type &glob;) ou contient le mot kde (sous format d'une expression régulière " "POSIX étendue, entourée de barres obliques)." @@ -6876,7 +6875,7 @@ msgid "" msgstr "" "La version la plus récente du paquet <literal>perl</literal> sera installé " "pour autant que son numéro de version commence par <literal>&good-perl;</" -"literal>. Si l'<emphasis>une</emphasis> des versions &good-perl;* existe et " +"literal>. Si l'<emphasis>une</emphasis> des versions &good-perl;* existe et " "si la version installée est une version &bad-perl;*, il y aura un retour en " "arrière." @@ -6887,7 +6886,7 @@ msgid "" "available from the local system has priority over other versions, even " "versions belonging to the target release." msgstr "" -"Les versions des paquets (autres que <literal>perl</literal>) disponibles " +"Les versions des paquets (autres que <literal>perl</literal>) disponibles " "dans le site local ont priorité sur les autres versions, même celles " "appartenant à la distribution par défaut." @@ -6975,7 +6974,7 @@ msgstr "" "Le fichier <filename>Release</filename> se trouve normalement dans le " "répertoire <filename>.../dists/<replaceable>nom-distribution</replaceable></" "filename>, par exemple, <filename>.../dists/stable/Release</filename>, ou " -"<filename>.../dists/&debian-stable-codename;/Release</filename>. Il " +"<filename>.../dists/&debian-stable-codename;/Release</filename>. Il " "consiste en une seule entrée composée de plusieurs lignes qui s'applique à " "<emphasis>tous</emphasis> les paquets situés dans les répertoires sous le " "répertoire parent. Contrairement au fichier <filename>Packages</filename>, " @@ -7163,7 +7162,7 @@ msgstr "" "filename> récupérés dans des sources indiquées dans le fichier &sources-" "list; sont conservés dans le répertoire <filename>/var/lib/apt/lists</" "filename> ou dans le fichier spécifié par la variable <literal>Dir::State::" -"Lists</literal> dans le fichier <filename>apt.conf</filename>. Par exemple, " +"Lists</literal> dans le fichier <filename>apt.conf</filename>. Par exemple, " "le fichier <filename>debian.lcs.mit.edu_debian_dists_unstable_contrib_binary-" "i386_Release</filename> contient le fichier <filename>Release</filename> du " "site <literal>debian.lcs.mit.edu</literal>, architecture <literal>binary-" @@ -7272,7 +7271,7 @@ msgstr "" "La commande suivante utilisera la version la plus récente de la distribution " "<literal>testing</literal> pour mettre à niveau le paquet spécifié ; " "cependant les mises à niveau ultérieures du paquet ne se feront pas à moins " -"de relancer la commande. <placeholder type=\"programlisting\" id=\"0\"/>" +"de relancer la commande. <placeholder type=\"programlisting\" id=\"0\"/>" #. type: Content of: <refentry><refsect1><refsect2><title> #: apt_preferences.5.xml @@ -7321,7 +7320,7 @@ msgstr "" "des paquets appartenant à la distribution <literal>testing</literal>, une " "priorité moindre aux versions appartenant à la distribution " "<literal>unstable</literal> et une priorité prohibitivement basse aux " -"versions appartenant à d'autres distributions <literal>Debian</literal>. " +"versions appartenant à d'autres distributions <literal>Debian</literal>. " "<placeholder type=\"programlisting\" id=\"0\"/>" #. type: Content of: <refentry><refsect1><refsect2><para> @@ -7360,7 +7359,7 @@ msgstr "" "plus récente version dans <literal>testing</literal> si elle est plus " "récente que la version installée ou avec la plus récente version dans " "<literal>unstable</literal> si elle est plus récente que la version " -"installée. <placeholder type=\"programlisting\" id=\"0\"/>" +"installée. <placeholder type=\"programlisting\" id=\"0\"/>" #. type: Content of: <refentry><refsect1><refsect2><title> #: apt_preferences.5.xml @@ -7423,7 +7422,7 @@ msgstr "" "transformation d'une version <literal>testing</literal> en <literal>stable</" "literal> puis <literal>oldstable</literal>. Si, au contraire, vous souhaitez " "suivre la version <literal>testing</literal>, vous devriez utiliser un des " -"exemples précédents. <placeholder type=\"programlisting\" id=\"0\"/>" +"exemples précédents. <placeholder type=\"programlisting\" id=\"0\"/>" #. type: Content of: <refentry><refsect1><refsect2><para> #: apt_preferences.5.xml @@ -7461,7 +7460,7 @@ msgstr "" "plus récente version dans <literal>&debian-testing-codename;</literal> si " "elle est plus récente que la version installée ou avec la plus récente " "version dans <literal>sid</literal> si elle est plus récente que la version " -"installée. <placeholder type=\"programlisting\" id=\"0\"/>" +"installée. <placeholder type=\"programlisting\" id=\"0\"/>" #. type: Content of: <refentry><refsect1><para> #: apt_preferences.5.xml @@ -7683,7 +7682,7 @@ msgstr "" "code comme <literal>&debian-stable-codename;</literal> ou <literal>&debian-" "testing-codename;</literal>, alors que composant prend les valeurs : " "<literal>main</literal>, <literal>contrib</literal> ou <literal>non-free</" -"literal>. Le type <literal>deb-src</literal> décrit une archive de " +"literal>. Le type <literal>deb-src</literal> décrit une archive de " "distribution de code source pour une distribution Debian dans le même format " "que le type <literal>deb</literal>. Une ligne <literal>deb-src</literal> est " "nécessaire pour récupérer les index des sources." @@ -7750,7 +7749,7 @@ msgid "" msgstr "" "L'URI de type <literal>deb</literal> doit indiquer la base de la " "distribution Debian dans laquelle APT trouvera les informations dont il a " -"besoin. <literal>suite</literal> peut spécifier le chemin exact : dans ce " +"besoin. <literal>suite</literal> peut spécifier le chemin exact : dans ce " "cas, on doit omettre les composants et <literal>suite</literal> doit se " "terminer par une barre oblique (<literal>/</literal>). C'est utile quand " "seul un sous-répertoire particulier de l'archive décrite par cet URI est " @@ -8035,20 +8034,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml -#, fuzzy -#| msgid "" -#| "<option>Signed-By</option> (<option>signed-by</option>) is either an " -#| "absolute path to a keyring file (has to be accessible and readable for " -#| "the <literal>_apt</literal> user, so ensure everyone has read-permissions " -#| "on the file) or one or more fingerprints of keys either in the " -#| "<filename>trusted.gpg</filename> keyring or in the keyrings in the " -#| "<filename>trusted.gpg.d/</filename> directory (see <command>apt-key " -#| "fingerprint</command>). If the option is set, only the key(s) in this " -#| "keyring or only the keys with these fingerprints are used for the &apt-" -#| "secure; verification of this repository. Defaults to the value of the " -#| "option with the same name if set in the previously acquired " -#| "<filename>Release</filename> file. Otherwise all keys in the trusted " -#| "keyrings are considered valid signers for this repository." msgid "" "<option>Signed-By</option> (<option>signed-by</option>) is an option to " "require a repository to pass &apt-secure; verification with a certain set of " @@ -8068,18 +8053,24 @@ msgid "" "(only fingerprints can be specified there through). Otherwise all keys in " "the trusted keyrings are considered valid signers for this repository." msgstr "" -"<option>Signed-By</option> (<option>signed-by</option>) est soit un chemin " -"absolu vers un fichier de trousseau de clés (qui doit être accessible en " -"lecture pour l'utilisateur <literal>_apt</literal>, et donc, il faut " -"s'assurer que tout le monde a le droit de lecture sur le fichier) ou une ou " -"plusieurs empreintes de clés situées soit dans le trousseau " -"<filename>trusted.gpg</filename>, soit dans les trousseaux du répertoire " -"<filename>trusted.gpg.d/</filename> (voir <command>apt-key fingerprint</" -"command>). Si cette option est définie, seule la ou les clés dans ce " -"trousseau, ou seules les clés avec ces empreintes sont utilisées pour la " -"vérification du répertoire par &apt-secure;. Elle possède la valeur par " -"défaut de l'option du même nom si elle a été définie dans le fichier " -"<filename>Release</filename> récupéré auparavant. Autrement, toutes les clés " +"<option>Signed-By</option> (<option>signed-by</option>) est une option pour " +"demander la vérification d’un dépot par &apt-secure; avec un certain jeu de " +"clés plutôt qu’avec la totalité des clés de confiance configurées par apt. " +"Elle est définie comme une liste de chemins absolus vers des fichiers de " +"trousseau de clés (qui doivent être accessibles en lecture pour " +"l'utilisateur <literal>_apt</literal>, et donc, il faut s'assurer que tout " +"le monde a le droit de lecture sur le fichier) et des empreintes de clés à " +"sélectionner dans ces trousseaux. Si aucun fichier de clés n’est défini, le " +"trousseau <filename>trusted.gpg</filename> et tous les trousseaux du " +"répertoire <filename>trusted.gpg.d/</filename> sont sélectionnés par défaut " +"(voir <command>apt-key fingerprint</command>). Si aucune empreinte n’est " +"définie, toutes les clés des trousseaux sont sélectionnées. Une empreinte " +"acceptera aussi toutes les signatures de sous clés de cette clé, et si ce " +"n’est pas désiré, un point d’exclamation (<literal>!</literal>) peut être " +"ajouté à l’empreinte pour désactiver ce comportement. Elle possède la valeur " +"par défaut de l'option du même nom si elle a été définie dans le fichier " +"<filename>Release</filename> de ce dépôt récupéré auparavant (seules des " +"empreintes peuvent être définies par ce biais). Autrement, toutes les clés " "des trousseaux de confiance sont considérées comme des signatures valables " "pour ce dépôt." @@ -8278,14 +8269,12 @@ msgstr "" #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term><command><replaceable> #: sources.list.5.xml msgid "scheme" -msgstr "" +msgstr "procédé" #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><term> #: sources.list.5.xml -#, fuzzy -#| msgid "(&apt-transport-http;)" msgid "(&apt-transport-mirror;)" -msgstr "(&apt-transport-http;)" +msgstr "(&apt-transport-mirror;)" #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para> #: sources.list.5.xml @@ -8299,6 +8288,15 @@ msgid "" "ensuring that clients can acquire data even if some configured mirrors are " "not available." msgstr "" +"Le procédé miroir définit la localisation d'une liste de miroirs. Par " +"défaut, le procédé utilisé par la localisation est <literal>http</literal>, " +"mais n'importe quel autre procédé peut être utilisé avec la commande " +"<command>mirror+<replaceable>scheme</replaceable></command>. La liste de " +"miroirs elle-même peut contenir plusieurs URI de miroirs différentes que le " +"client APT peut, de façon transparente, repérer, choisir et sur lesquelles " +"se rabattre, afin d'aider à la fois à répartir la charge sur les miroirs " +"disponibles et à garantir que les clients puissent récupérer les données " +"même si certains des miroirs configurés ne sont pas disponibles." #. type: Content of: <refentry><refsect1><para><variablelist><varlistentry><listitem><para> #: sources.list.5.xml @@ -8983,7 +8981,7 @@ msgid "" msgstr "" "La valeur des autres champs de métadonnées du fichier Release sont tirées de " "la valeur correspondante dans <literal>APT::FTPArchive::Release</literal>, " -"p. ex. <literal>APT::FTPArchive::Release::Origin</literal>. Les champs " +"p. ex. <literal>APT::FTPArchive::Release::Origin</literal>. Les champs " "reconnus sont : <literal>Origin</literal>, <literal>Label</literal>, " "<literal>Suite</literal>, <literal>Version</literal>, <literal>Codename</" "literal>, <literal>Date</literal>, <literal>NotAutomatic</literal>, " @@ -9186,7 +9184,7 @@ msgid "" "index files are set to this mode with no regard to the umask." msgstr "" "Indique le système de permissions des fichiers d'index créés. Par défaut, " -"c'est le mode 0644. Tous les fichiers d'index ont ce mode et le masque " +"c'est le mode 0644. Tous les fichiers d'index ont ce mode et le masque " "utilisateur (umasq) est ignoré." #. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para> @@ -9242,9 +9240,9 @@ msgstr "" "utilisé sans actualisation. Quand cette limite est franchie, le « mtime » du " "fichier « Contents » est mis à jour. Cela peut arriver quand un fichier est " "modifié sans que cela modifie le fichier « Contents » (modification par " -"« override » par exemple). Un délai est permis dans l'espoir que de " +"« override » par exemple). Un délai est permis dans l'espoir que de " "nouveaux « .deb » seront installés, exigeant un nouveau « Contents ». Par " -"défaut ce nombre vaut 10, l'unité étant le jour." +"défaut ce nombre vaut 10, l'unité étant le jour." #. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para> #: apt-ftparchive.1.xml @@ -9329,7 +9327,7 @@ msgid "" "Sets the binary cache database to use for this section. Multiple sections " "can share the same database." msgstr "" -"Indique la base de données binaire servant de cache pour cette section. " +"Indique la base de données binaire servant de cache pour cette section. " "Différentes sections peuvent partager cette base de données." #. type: Content of: <refentry><refsect1><refsect2><variablelist><varlistentry><listitem><para> @@ -9674,7 +9672,7 @@ msgstr "" "Mode silencieux ; cette commande produit une sortie destinée à " "l'enregistrement dans un fichier-journal en omettant les indicateurs de " "progression. Un plus grand nombre de « q » (2 au plus) rend le programme de " -"plus en plus silencieux. On peut aussi utiliser <option>-q=#</option> pour " +"plus en plus silencieux. On peut aussi utiliser <option>-q=#</option> pour " "définir ce « niveau de silence », et ne plus tenir compte des réglages du " "fichier de configuration. Élément de configuration : <literal>quiet</" "literal>." @@ -9760,7 +9758,7 @@ msgstr "" "de données. Si les paquets sont recompilés ou republiés avec à nouveau la " "même version, cela pourra causer des problèmes car, alors, les métadonnées " "en cache (p. ex. les tailles et les sommes de contrôle) seront utilisées. Si " -"cette option est choisie, cela n'arrivera plus car le fichier sera contrôlé " +"cette option est choisie, cela n'arrivera plus car le fichier sera contrôlé " "pour vérifier s'il a été modifié. Veuillez noter que cette option n'est pas " "activée par défaut car il est déconseillé d'envoyer dans les archives des " "versions identiques. En théorie, donc, ces problème ne devraient pas " @@ -9804,7 +9802,7 @@ msgid "" "100 on error." msgstr "" "<command>apt-ftparchive</command> retourne zéro si tout se passe bien, le " -"nombre 100 en cas d'erreur." +"nombre 100 en cas d'erreur." #. type: Content of: <refentry><refnamediv><refpurpose> #: apt_auth.conf.5.xml @@ -9834,17 +9832,12 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt_auth.conf.5.xml -#, fuzzy -#| msgid "" -#| "The APT auth.conf file <filename>/etc/apt/auth.conf</filename> can be " -#| "used to store login information in a netrc-like format with restrictive " -#| "file permissions." msgid "" -"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf " -"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store " -"login information in a netrc-like format with restrictive file permissions." +"The APT auth.conf file <filename>/etc/apt/auth.conf</filename> can be used " +"to store login information in a netrc-like format with restrictive file " +"permissions." msgstr "" -" Le fichier auth.conf d'APT <filename>/etc/apt/auth.conf</filename> peut " +"Le fichier auth.conf d'APT <filename>/etc/apt/auth.conf</filename> peut " "être utilisé pour stocker les informations de connexion dans un format " "detype netrc avec des droits d'accès restreints" @@ -10054,27 +10047,6 @@ msgstr "" "format de type netrc. Élément de configuration : <literal>Dir::Etc::netrc</" "literal>." -#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term> -#: apt_auth.conf.5.xml -#, fuzzy -#| msgid "<filename>/etc/apt/auth.conf</filename>" -msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>" -msgstr "<filename>/etc/apt/auth.conf</filename>" - -#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> -#: apt_auth.conf.5.xml -#, fuzzy -#| msgid "" -#| "Login information for APT sources and proxies in a netrc-like format. " -#| "Configuration Item: <literal>Dir::Etc::netrc</literal>." -msgid "" -"Login information for APT sources and proxies in a netrc-like format. " -"Configuration Item: <literal>Dir::Etc::netrcparts</literal>." -msgstr "" -"Informations de connexion pour les sources et les mandataires d'APT dans un " -"format de type netrc. Élément de configuration : <literal>Dir::Etc::netrc</" -"literal>." - #. type: Content of: <refentry><refsect1><para> #: apt_auth.conf.5.xml msgid "&apt-conf; &sources-list;" @@ -10288,7 +10260,7 @@ msgid "" msgstr "" "La bande passante utilisée peut être limitée avec <literal>Acquire::http::Dl-" "Limit</literal> qui peut prendre une valeur entière, l'unité utilisée étant " -"le kilo-octet par seconde. La valeur par défaut est 0, ce qui correspond à " +"le kilo-octet par seconde. La valeur par défaut est 0, ce qui correspond à " "aucune limitation de bande passante. Veuillez noter que cette option " "désactive implicitement le téléchargement simultané depuis plusieurs " "serveurs." @@ -10305,7 +10277,7 @@ msgid "" "0. It is enabled by default with the value 10." msgstr "" "Le réglage <literal>Acquire::http::Pipeline-Depth</literal> permet " -"d'utiliser l'enchaînement HTTP (« HTTP pipelining », RFC 2616 " +"d'utiliser l'enchaînement HTTP (« HTTP pipelining », RFC 2616 " "section 8.1.2.2) ce qui peut être utile par exemple avec des connexions à " "latence élevée. Il indique le nombre de requêtes envoyées dans le tuyau. APT " "tente de détecter et de contourner les serveurs web et les mandataires qui " @@ -10573,29 +10545,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><literallayout> #: apt-transport-https.1.xml -#, fuzzy, no-wrap -#| msgid "" -#| "acquire::https {\n" -#| "\tproxy::example.org \"direct\";\n" -#| "\tproxy \"socks5h://apt:pass@127.0.0.1:9050\";\n" -#| "\tproxy-auto-detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n" -#| "\tno-cache \"true\";\n" -#| "\tmax-age \"3600\";\n" -#| "\tno-store \"true\";\n" -#| "\ttimeout \"10\";\n" -#| "\tdl-limit \"42\";\n" -#| "\tpipeline-depth \"0\";\n" -#| "\tallowredirect \"false\";\n" -#| "\tuser-agent \"my apt-https\";\n" -#| "\tsendaccept \"false\";\n" -#| "\n" -#| "\tcainfo \"/path/to/ca/certs.pem\";\n" -#| "\tCRLFile \"/path/to/all/crl.pem\";\n" -#| "\tVerify-Peer \"true\";\n" -#| "\tVerify-Host::broken.example.org \"false\";\n" -#| "\tSSLCert::example.org \"/path/to/client/cert.pem\";\n" -#| "\tSSLKey::example.org \"/path/to/client/key.pem\"\n" -#| "};\n" msgid "" "Acquire::https {\n" "\tProxy::example.org \"DIRECT\";\n" @@ -10619,21 +10568,21 @@ msgid "" "\tSSLKey::example.org \"/path/to/client/key.pem\"\n" "};\n" msgstr "" -"acquire::https {\n" -"\tproxy::example.org \"direct\";\n" -"\tproxy \"socks5h://apt:pass@127.0.0.1:9050\";\n" -"\tproxy-auto-detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n" -"\tno-cache \"true\";\n" -"\tmax-age \"3600\";\n" -"\tno-store \"true\";\n" -"\ttimeout \"10\";\n" -"\tdl-limit \"42\";\n" -"\tpipeline-depth \"0\";\n" -"\tallowredirect \"false\";\n" -"\tuser-agent \"my apt-https\";\n" -"\tsendaccept \"false\";\n" +"Acquire::https {\n" +"\tProxy::example.org \"DIRECT\";\n" +"\tProxy \"socks5h://apt:pass@127.0.0.1:9050\";\n" +"\tProxy-Auto-Detect \"/usr/local/bin/apt-https-proxy-auto-detect\";\n" +"\tNo-Cache \"true\";\n" +"\tMax-Age \"3600\";\n" +"\tNo-Store \"true\";\n" +"\tTimeout \"10\";\n" +"\tDl-Limit \"42\";\n" +"\tPipeline-Depth \"0\";\n" +"\tAllowRedirect \"false\";\n" +"\tUser-Agent \"My APT-HTTPS\";\n" +"\tSendAccept \"false\";\n" "\n" -"\tcainfo \"/path/to/ca/certs.pem\";\n" +"\tCAInfo \"/path/to/ca/certs.pem\";\n" "\tCRLFile \"/path/to/all/crl.pem\";\n" "\tVerify-Peer \"true\";\n" "\tVerify-Host::broken.example.org \"false\";\n" @@ -11054,7 +11003,7 @@ msgid "" msgstr "" "APT, ainsi que ce document, sont libres. Vous pouvez les redistribuer et les " "modifier en respectant les conditions de la licence publique générale GNU " -"telle que publiée par la Free Software Foundation, en version 2 ou " +"telle que publiée par la Free Software Foundation, en version 2 ou " "ultérieure." #. type: Content of: <book><bookinfo><legalnotice><para> @@ -11452,9 +11401,9 @@ msgstr "" " Réglage de la liste des emplacements sources de distribution\n" "\n" " Veuillez indiquer l'URL de base de la distribution Debian.\n" -" Les schémas d'accès connus sont : http file\n" +" Les schémas d'accès connus sont : http file\n" "\n" -" Exemple:\n" +" Exemple :\n" " file:/mnt/debian,\n" " ftp://ftp.debian.org/debian,\n" " http://ftp.de.debian.org/debian,\n" @@ -11520,10 +11469,10 @@ msgid "" " Components [main contrib non-free]:\n" msgstr "" " Veuillez indiquer les composants à utiliser\n" -" Les composants sont en général de la forme suivante :\n" +" Les composants sont en général de la forme suivante :\n" " main contrib non-free\n" "\n" -" Composants [main contrib non-free] :\n" +" Composants [main contrib non-free] :\n" #. type: Content of: <book><chapter><para> #: guide.dbk @@ -11706,7 +11655,7 @@ msgstr "" "# apt-get check\n" "Lecture de la liste des paquets... Fait\n" "Construction de l'arbre des dépendances... Fait\n" -"Vous pouvez lancer « apt --fix-broken install » pour corriger ces problèmes.\n" +"Vous pouvez lancer « apt --fix-broken install » pour corriger ces problèmes.\n" "Les paquets suivants contiennent des dépendances non satisfaites :\n" " 9fonts: Depends: xlib6g mais il n'est pas installé\n" " uucp: Depends: mailx mais il n'est pas installé\n" @@ -11714,7 +11663,7 @@ msgstr "" " adduser: Depends: perl-base mais il n'est pas installé\n" " aumix: Depends: libgpmg1 mais il n'est pas installé\n" " debiandoc-sgml: Depends: sgml-base mais il n'est pas installé\n" -" bash-builtins: Depends: bash (>= 2.01) but 2.0-3 is installed\n" +" bash-builtins: Depends: bash (>= 2.01) mais 2.0-3 est installé\n" " cthugha: Depends: svgalibg1 mais il n'est pas installé\n" " Depends: xlib6g (>= 3.3-5) mais il n'est pas installé\n" " libreadlineg2: Conflicts:libreadline2 (<< 2.1-2.1)\n" @@ -11772,7 +11721,7 @@ msgid "" msgstr "" "La seconde situation est moins grave que la première car APT met certaines " "contraintes sur l'ordre d'installation des paquets. Dans les deux cas, " -"l'option <literal>-f</literal> utilisée avec <command>apt-get</command> " +"l'option <literal>-f</literal> utilisée avec <command>apt-get</command> " "conduira APT à rechercher une solution possible puis à continuer. La méthode " "APT de <command>dselect</command> utilise toujours cette option <literal>-f</" "literal> afin de pouvoir poursuivre plus facilement ses opérations si un " @@ -11833,7 +11782,7 @@ msgid "" " squake pgp-i python-base debmake ldso perl libreadlineg2\n" " ssh\n" msgstr "" -"Les paquets supplémentaires suivants seront installés :\n" +"Les paquets supplémentaires suivants seront installés :\n" " libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl\n" " mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base\n" " bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy\n" @@ -11868,7 +11817,7 @@ msgid "" " xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n" " nas xpilot xfig\n" msgstr "" -"Les paquets suivants seront ENLEVÉS :\n" +"Les paquets suivants seront ENLEVÉS :\n" " xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix\n" " xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel\n" " xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid\n" @@ -11888,7 +11837,7 @@ msgstr "" "La liste des paquets à enlever montre tous les paquets qui seront supprimés " "du système. Elle peut apparaître pour tout type d'opération. Il est " "conseillé de l'inspecter en détail afin de vérifier qu'aucun paquet " -"important ne va être supprimé. L'option <literal>-f</literal> provoque " +"important ne va être supprimé. L'option <literal>-f</literal> provoque " "notamment souvent des suppressions de paquets et il est déconseillé d'être " "particulièrement attentif dans ce genre de cas. La liste peut comporter des " "paquets qui seront supprimés parce qu'ils sont seulement partiellement " @@ -11906,7 +11855,7 @@ msgid "" "The following NEW packages will installed:\n" " zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n" msgstr "" -"Les NOUVEAUX paquets suivants seront installés :\n" +"Les NOUVEAUX paquets suivants seront installés :\n" " zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base\n" #. type: Content of: <book><chapter><section><section><para> @@ -11933,7 +11882,7 @@ msgid "" " compface man-db tetex-base msql libpaper svgalib1\n" " gs snmp arena lynx xpat2 groff xscreensaver\n" msgstr "" -"Les paquets suivants ont été conservés :\n" +"Les paquets suivants ont été conservés :\n" " compface man-db tetex-base msql libpaper svgalib1\n" " gs snmp arena lynx xpat2 groff xscreensaver\n" @@ -11967,7 +11916,7 @@ msgid "" "The following held packages will be changed:\n" " cvs\n" msgstr "" -"Les paquets retenus suivants seront changés :\n" +"Les paquets retenus suivants seront changés :\n" " cvs\n" #. type: Content of: <book><chapter><section><section><para> @@ -12004,7 +11953,7 @@ msgid "" msgstr "" "206 paquets mis à jour, 8 nouvellement installés, 23 à enlever et 51 non mis à jour.\n" "12 paquets partiellement installés ou enlevés.\n" -"Il est nécessaire de prendre 65,7Mo/66,7Mo dans les archives. Après cette opération, 26,5Mo d'espace disque supplémentaires seront utilisés.\n" +"Il est nécessaire de prendre 65,7 Mo/66,7 Mo dans les archives. Après cette opération, 26,5 Mo d'espace disque supplémentaires seront utilisés.\n" #. type: Content of: <book><chapter><section><section><para> #: guide.dbk @@ -12074,11 +12023,11 @@ msgid "" "11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s\n" msgstr "" "# apt-get update\n" -"Réception de :1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n" -"Réception de :2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n" +"Réception de :1 http://ftp.de.debian.org/debian-non-US/ stable/non-US/ Packages\n" +"Réception de :2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages\n" "Atteint http://llug.sep.bnl.gov/debian/ testing/main Packages\n" -"Réception de :4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n" -"Réception de :5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n" +"Réception de :4 http://ftp.de.debian.org/debian-non-US/ unstable/binary-i386/ Packages\n" +"Réception de :5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages\n" "11% [5 testing/non-free `Attente du fichier' 0/32.1k 0%] 2203b/s 1m52s\n" #. type: Content of: <book><chapter><section><para> @@ -12143,12 +12092,12 @@ msgstr "" "puis <emphasis>Téléchargement</emphasis> ou <emphasis>Reprise</emphasis>. La " "valeur finale est le nombre d'octets téléchargés depuis le site distant. Une " "fois le téléchargement commencé, cette indication prend la forme " -"<literal>102/10,2ko</literal>, ce qui indique que 102 octets ont été " -"téléchargés et que 10,2 kilo-octets sont attendus. La taille totale est " -"toujours représentées sur 4 digits pour des raisons de place disponible. " +"<literal>102/10,2ko</literal>, ce qui indique que 102 octets ont été " +"téléchargés et que 10,2 kilo-octets sont attendus. La taille totale est " +"toujours représentées sur 4 digits pour des raisons de place disponible. " "Après cet affichage de taille, se trouve une barre de progression pour le " "téléchargement du fichier lui-même. L'élément suivant est la vitesse " -"instantanée de téléchargement. Elle est mise à jour toutes les 5 secondes et " +"instantanée de téléchargement. Elle est mise à jour toutes les 5 secondes et " "représente la vitesse de transfert pour cette période. Enfin, est affiché la " "temps de téléchargement restant estimé. Cette information est mise " "régulièrement à jour et représete la durée estimée de téléchargement de " diff --git a/doc/po/nl.po b/doc/po/nl.po index 785107eb6..6622d1925 100644 --- a/doc/po/nl.po +++ b/doc/po/nl.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: apt-doc 1.7.0\n" +"Project-Id-Version: apt-doc 1.8.0~alpha2\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" -"POT-Creation-Date: 2018-12-18 15:02+0100\n" -"PO-Revision-Date: 2018-10-09 20:51+0200\n" +"POT-Creation-Date: 2018-10-30 22:06+0100\n" +"PO-Revision-Date: 2018-11-19 20:54+0100\n" "Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n" "Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n" "Language: nl\n" @@ -1291,6 +1291,8 @@ msgid "" "The arguments are interpreted as binary and source package names. See the " "<option>--only-source</option> option if you want to change that." msgstr "" +"De argumenten worden beschouwd als namen van binaire en broncodepakketen. " +"Zie de optie <option>--only-source</option> indien u dit wenst te wijzigen." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -1373,6 +1375,8 @@ msgid "" "The arguments are interpreted as binary or source package names. See the " "<option>--only-source</option> option if you want to change that." msgstr "" +"De argumenten worden beschouwd als namen van binaire en broncodepakketen. " +"Zie de optie <option>--only-source</option> indien u dit wenst te wijzigen." #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt-get.8.xml @@ -5629,14 +5633,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> #: apt.conf.5.xml msgid "" -"This is a string that defines the <envar>PATH</envar> environment variable " -"used when running dpkg. It may be set to any valid value of that environment " -"variable; or the empty string, in which case the variable is not changed." -msgstr "" - -#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> -#: apt.conf.5.xml -msgid "" "This is a list of shell commands to run before/after invoking &dpkg;. Like " "<literal>options</literal> this must be specified in list notation. The " "commands are invoked in order using <filename>/bin/sh</filename>; should any " @@ -8191,7 +8187,6 @@ msgstr "" #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml -#, fuzzy #| msgid "" #| "<option>Signed-By</option> (<option>signed-by</option>) is either an " #| "absolute path to a keyring file (has to be accessible and readable for " @@ -8224,19 +8219,28 @@ msgid "" "(only fingerprints can be specified there through). Otherwise all keys in " "the trusted keyrings are considered valid signers for this repository." msgstr "" -"<option>Signed-By</option> (<option>signed-by</option>) is ofwel een " -"absoluut pad naar een sleutelbosbestand (moet toegankelijk zijn voor en te " -"lezen door gebruiker <literal>_apt</literal>; zorg er dus voor dat iedereen " -"leesrechten heeft voor het bestand), ofwel een of meer vingerafdrukken van " -"sleutels uit de sleutelbos <filename>trusted.gpg</filename> of uit de " -"sleutelbossen in de map <filename>trusted.gpg.d/</filename> (zie " -"<command>apt-key fingerprint</command>). Indien de optie ingesteld werd, " -"worden enkel de sleutel(s) uit die sleutelbos of enkel de sleutels met deze " -"vingerafdrukken gebruikt voor de verificatie van die pakketbron door &apt-" -"secure;. Heeft standaard de waarde van de optie met dezelfde naam indien die " -"ingesteld staat in het vooraf opgehaalde bestand <filename>Release</" -"filename>. Anders worden alle sleutels uit de betrouwbare sleutelbossen als " -"geldige ondertekenaars van deze pakketbron aanzien." +"<option>Signed-By</option> (<option>signed-by</option>) is een optie die van " +"een pakketbron vereist dat de verificatie door &apt-secure; gebeurt aan de " +"hand van een bepaalde set sleutels in plaats van aan de hand van alle " +"betrouwbare sleutels die in de configuratie van apt staan. Deze optie wordt " +"opgegeven als een lijst van absolute paden naar sleutelbosbestanden (moeten " +"toegankelijk zijn voor en te lezen door de systeemgebruiker <literal>_apt</" +"literal>; zorg er dus voor dat iedereen leesrechten heeft op het bestand) en " +"naar de vingerafdrukken van uit die sleutelbossen te selecteren sleutels. " +"Indien geen sleutelbosbestanden opgegeven werden, geldt als standaard de " +"sleutelbos <filename>trusted.gpg</filename> en alle sleutelbossen uit de map " +"<filename>trusted.gpg.d/</filename> (zie <command>apt-key fingerprint</" +"command>). Indien geen vingerafdruk opgegeven werd, worden alle sleutels uit " +"de sleutelbossen geselecteerd. Een vingerafdruk aanvaardt ook alle " +"handtekeningen die met een subsleutel van deze sleutel gemaakt werden. " +"Indien dit niet het gewenste gedrag is, kan aan de vingerafdruk een " +"uitroepteken (<literal>!</literal>) toegevoegd worden waardoor dit gedrag " +"uitgezet wordt. Standaard krijgt de optie de waarde van de optie met " +"dezelfde naam wanneer die ingesteld staat in het vooraf uit deze pakketbron " +"opgehaald bestand <filename>Release</filename> (door middel hiervan kunnen " +"enkel vingerafdrukken opgegeven worden). Anders worden alle sleutels uit de " +"betrouwbare sleutelbossen als geldige ondertekenaars van deze pakketbron " +"aanzien." #. type: Content of: <refentry><refsect1><para><itemizedlist><listitem><para> #: sources.list.5.xml @@ -10018,15 +10022,10 @@ msgstr "" #. type: Content of: <refentry><refsect1><para> #: apt_auth.conf.5.xml -#, fuzzy -#| msgid "" -#| "The APT auth.conf file <filename>/etc/apt/auth.conf</filename> can be " -#| "used to store login information in a netrc-like format with restrictive " -#| "file permissions." msgid "" -"The APT auth.conf file <filename>/etc/apt/auth.conf</filename>, and .conf " -"files inside <filename>/etc/apt/auth.conf.d</filename> can be used to store " -"login information in a netrc-like format with restrictive file permissions." +"The APT auth.conf file <filename>/etc/apt/auth.conf</filename> can be used " +"to store login information in a netrc-like format with restrictive file " +"permissions." msgstr "" "Het bestand auth.conf van APT, <filename>/etc/apt/auth.conf</filename>, met " "restrictieve bestandspermissies, kan gebruikt worden om er login-informatie " @@ -10239,26 +10238,6 @@ msgstr "" "Inloginformatie voor APT-bronnen en -proxy's in a netrc-achtige indeling. " "Configuratie-item: <literal>Dir::Etc::netrc</literal>." -#. type: Content of: <refentry><refsect1><variablelist><varlistentry><term> -#: apt_auth.conf.5.xml -#, fuzzy -#| msgid "<filename>/etc/apt/auth.conf</filename>" -msgid "<filename>/etc/apt/auth.conf.d/*.conf</filename>" -msgstr "<filename>/etc/apt/auth.conf</filename>" - -#. type: Content of: <refentry><refsect1><variablelist><varlistentry><listitem><para> -#: apt_auth.conf.5.xml -#, fuzzy -#| msgid "" -#| "Login information for APT sources and proxies in a netrc-like format. " -#| "Configuration Item: <literal>Dir::Etc::netrc</literal>." -msgid "" -"Login information for APT sources and proxies in a netrc-like format. " -"Configuration Item: <literal>Dir::Etc::netrcparts</literal>." -msgstr "" -"Inloginformatie voor APT-bronnen en -proxy's in a netrc-achtige indeling. " -"Configuratie-item: <literal>Dir::Etc::netrc</literal>." - #. type: Content of: <refentry><refsect1><para> #: apt_auth.conf.5.xml msgid "&apt-conf; &sources-list;" diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 9135b49c5..f66e3356f 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -102,21 +102,27 @@ static bool IsTheSameKey(std::string const &validsig, std::string const &goodsig return validsig.compare(24, 16, goodsig, strlen("GOODSIG "), 16) == 0; } +struct APT_HIDDEN SignersStorage { + std::vector<std::string> Good; + std::vector<std::string> Bad; + std::vector<std::string> Worthless; + // a worthless signature is a expired or revoked one + std::vector<Signer> SoonWorthless; + std::vector<std::string> NoPubKey; + std::vector<std::string> Valid; + std::vector<std::string> SignedBy; +}; class GPGVMethod : public aptMethod { private: string VerifyGetSigners(const char *file, const char *outfile, vector<string> const &keyFpts, vector<string> const &keyFiles, - vector<string> &GoodSigners, - vector<string> &BadSigners, - vector<string> &WorthlessSigners, - vector<Signer> &SoonWorthlessSigners, - vector<string> &NoPubKeySigners); + SignersStorage &Signers); protected: virtual bool URIAcquire(std::string const &Message, FetchItem *Itm) APT_OVERRIDE; public: - GPGVMethod() : aptMethod("gpgv","1.0",SingleInstance | SendConfig) {}; + GPGVMethod() : aptMethod("gpgv", "1.1", SingleInstance | SendConfig){}; }; static void PushEntryWithKeyID(std::vector<std::string> &Signers, char * const buffer, bool const Debug) { @@ -146,14 +152,18 @@ static void PushEntryWithUID(std::vector<std::string> &Signers, char * const buf std::clog << "Got " << msg << " !" << std::endl; Signers.push_back(msg); } +static void implodeVector(std::vector<std::string> const &vec, std::ostream &out, char const * const sep) +{ + if (vec.empty()) + return; + std::copy(vec.begin(), std::prev(vec.end()), std::ostream_iterator<std::string>(out, sep)); + out << *vec.rbegin(); + return; +} string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, vector<string> const &keyFpts, vector<string> const &keyFiles, - vector<string> &GoodSigners, - vector<string> &BadSigners, - vector<string> &WorthlessSigners, - vector<Signer> &SoonWorthlessSigners, - vector<string> &NoPubKeySigners) + SignersStorage &Signers) { bool const Debug = DebugEnabled(); @@ -171,11 +181,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, else if (pid == 0) { std::ostringstream keys; - if (keyFiles.empty() == false) - { - std::copy(keyFiles.begin(), keyFiles.end()-1, std::ostream_iterator<std::string>(keys, ",")); - keys << *keyFiles.rbegin(); - } + implodeVector(keyFiles, keys, ","); ExecGPGV(outfile, file, 3, fd, keys.str()); } close(fd[1]); @@ -183,7 +189,6 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, FILE *pipein = fdopen(fd[0], "r"); // Loop over the output of apt-key (which really is gnupg), and check the signatures. - std::vector<std::string> ValidSigners; std::vector<std::string> ErrSigners; std::map<std::string, std::vector<std::string>> SubKeyMapping; size_t buffersize = 0; @@ -201,25 +206,25 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, // if we improve the apt method communication stuff later // it will be better. if (strncmp(buffer, GNUPGBADSIG, sizeof(GNUPGBADSIG)-1) == 0) - PushEntryWithUID(BadSigners, buffer, Debug); + PushEntryWithUID(Signers.Bad, buffer, Debug); else if (strncmp(buffer, GNUPGERRSIG, sizeof(GNUPGERRSIG)-1) == 0) PushEntryWithKeyID(ErrSigners, buffer, Debug); else if (strncmp(buffer, GNUPGNOPUBKEY, sizeof(GNUPGNOPUBKEY)-1) == 0) { - PushEntryWithKeyID(NoPubKeySigners, buffer, Debug); + PushEntryWithKeyID(Signers.NoPubKey, buffer, Debug); ErrSigners.erase(std::remove_if(ErrSigners.begin(), ErrSigners.end(), [&](std::string const &errsig) { return errsig.compare(strlen("ERRSIG "), 16, buffer, sizeof(GNUPGNOPUBKEY), 16) == 0; }), ErrSigners.end()); } else if (strncmp(buffer, GNUPGNODATA, sizeof(GNUPGNODATA)-1) == 0) gotNODATA = true; else if (strncmp(buffer, GNUPGEXPKEYSIG, sizeof(GNUPGEXPKEYSIG)-1) == 0) - PushEntryWithUID(WorthlessSigners, buffer, Debug); + PushEntryWithUID(Signers.Worthless, buffer, Debug); else if (strncmp(buffer, GNUPGEXPSIG, sizeof(GNUPGEXPSIG)-1) == 0) - PushEntryWithUID(WorthlessSigners, buffer, Debug); + PushEntryWithUID(Signers.Worthless, buffer, Debug); else if (strncmp(buffer, GNUPGREVKEYSIG, sizeof(GNUPGREVKEYSIG)-1) == 0) - PushEntryWithUID(WorthlessSigners, buffer, Debug); + PushEntryWithUID(Signers.Worthless, buffer, Debug); else if (strncmp(buffer, GNUPGGOODSIG, sizeof(GNUPGGOODSIG)-1) == 0) - PushEntryWithKeyID(GoodSigners, buffer, Debug); + PushEntryWithKeyID(Signers.Good, buffer, Debug); else if (strncmp(buffer, GNUPGVALIDSIG, sizeof(GNUPGVALIDSIG)-1) == 0) { std::istringstream iss(buffer + sizeof(GNUPGVALIDSIG)); @@ -232,16 +237,16 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, case Digest::State::Weak: // Treat them like an expired key: For that a message about expiry // is emitted, a VALIDSIG, but no GOODSIG. - SoonWorthlessSigners.push_back({sig, digest.name}); + Signers.SoonWorthless.push_back({sig, digest.name}); if (Debug == true) std::clog << "Got weak VALIDSIG, key ID: " << sig << std::endl; break; case Digest::State::Untrusted: // Treat them like an expired key: For that a message about expiry // is emitted, a VALIDSIG, but no GOODSIG. - WorthlessSigners.push_back(sig); - GoodSigners.erase(std::remove_if(GoodSigners.begin(), GoodSigners.end(), [&](std::string const &goodsig) { - return IsTheSameKey(sig, goodsig); }), GoodSigners.end()); + Signers.Worthless.push_back(sig); + Signers.Good.erase(std::remove_if(Signers.Good.begin(), Signers.Good.end(), [&](std::string const &goodsig) { + return IsTheSameKey(sig, goodsig); }), Signers.Good.end()); if (Debug == true) std::clog << "Got untrusted VALIDSIG, key ID: " << sig << std::endl; break; @@ -252,7 +257,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, break; } - ValidSigners.push_back(sig); + Signers.Valid.push_back(sig); if (tokens.size() > 9 && sig != tokens[9]) SubKeyMapping[tokens[9]].emplace_back(sig); @@ -264,7 +269,7 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, } fclose(pipein); free(buffer); - std::move(ErrSigners.begin(), ErrSigners.end(), std::back_inserter(WorthlessSigners)); + std::move(ErrSigners.begin(), ErrSigners.end(), std::back_inserter(Signers.Worthless)); // apt-key has a --keyid parameter, but this requires gpg, so we call it without it // and instead check after the fact which keyids where used for verification @@ -273,11 +278,11 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, if (Debug == true) { std::clog << "GoodSigs needs to be limited to keyid(s): "; - std::copy(keyFpts.begin(), keyFpts.end(), std::ostream_iterator<std::string>(std::clog, ", ")); + implodeVector(keyFpts, std::clog, ", "); std::clog << "\n"; } std::vector<std::string> filteredGood; - for (auto &&good: GoodSigners) + for (auto &&good: Signers.Good) { if (Debug == true) std::clog << "Key " << good << " is good sig, is it also a valid and allowed one? "; @@ -293,9 +298,10 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, if (IsTheSameKey(l, good)) { // GOODSIG might be "just" a longid, so we check VALIDSIG which is always a fingerprint - if (std::find(ValidSigners.cbegin(), ValidSigners.cend(), l) == ValidSigners.cend()) + if (std::find(Signers.Valid.cbegin(), Signers.Valid.cend(), l) == Signers.Valid.cend()) continue; found = true; + Signers.SignedBy.push_back(l + "!"); break; } else if (exactKey == false) @@ -306,9 +312,11 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, for (auto const &sub : master->second) if (IsTheSameKey(sub, good)) { - if (std::find(ValidSigners.cbegin(), ValidSigners.cend(), sub) == ValidSigners.cend()) + if (std::find(Signers.Valid.cbegin(), Signers.Valid.cend(), sub) == Signers.Valid.cend()) continue; found = true; + Signers.SignedBy.push_back(l); + Signers.SignedBy.push_back(sub + "!"); break; } if (found) @@ -320,10 +328,28 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, if (found) filteredGood.emplace_back(std::move(good)); else - NoPubKeySigners.emplace_back(std::move(good)); + Signers.NoPubKey.emplace_back(std::move(good)); } - GoodSigners = std::move(filteredGood); + Signers.Good= std::move(filteredGood); + } + else + { + // for gpg an expired key is valid, too, but we want only the valid & good ones + for (auto const &v : Signers.Valid) + if (std::any_of(Signers.Good.begin(), Signers.Good.end(), + [&v](std::string const &g) { return IsTheSameKey(v, g); })) + Signers.SignedBy.push_back(v + "!"); + for (auto sub : SubKeyMapping) + if (std::any_of(sub.second.begin(), sub.second.end(), + [&](std::string const &s) { + if (std::find(Signers.Valid.begin(), Signers.Valid.end(), s) == Signers.Valid.end()) + return false; + return std::any_of(Signers.Good.begin(), Signers.Good.end(), + [&s](std::string const &g) { return IsTheSameKey(s, g); }); + })) + Signers.SignedBy.push_back(sub.first); } + std::sort(Signers.SignedBy.begin(), Signers.SignedBy.end()); int status; waitpid(pid, &status, 0); @@ -334,16 +360,20 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, if (Debug) { - std::cerr << "Summary:" << std::endl << " Good: "; - std::copy(GoodSigners.begin(), GoodSigners.end(), std::ostream_iterator<std::string>(std::cerr, ", ")); - std::cerr << std::endl << " Bad: "; - std::copy(BadSigners.begin(), BadSigners.end(), std::ostream_iterator<std::string>(std::cerr, ", ")); - std::cerr << std::endl << " Worthless: "; - std::copy(WorthlessSigners.begin(), WorthlessSigners.end(), std::ostream_iterator<std::string>(std::cerr, ", ")); - std::cerr << std::endl << " SoonWorthless: "; - std::for_each(SoonWorthlessSigners.begin(), SoonWorthlessSigners.end(), [](Signer const &sig) { std::cerr << sig.key << ", "; }); - std::cerr << std::endl << " NoPubKey: "; - std::copy(NoPubKeySigners.begin(), NoPubKeySigners.end(), std::ostream_iterator<std::string>(std::cerr, ", ")); + std::cerr << "Summary:\n Good: "; + implodeVector(Signers.Good, std::cerr, ", "); + std::cerr << "\n Valid: "; + implodeVector(Signers.Valid, std::cerr, ", "); + std::cerr << "\n Bad: "; + implodeVector(Signers.Bad, std::cerr, ", "); + std::cerr << "\n Worthless: "; + implodeVector(Signers.Worthless, std::cerr, ", "); + std::cerr << "\n SoonWorthless: "; + std::for_each(Signers.SoonWorthless.begin(), Signers.SoonWorthless.end(), [](Signer const &sig) { std::cerr << sig.key << ", "; }); + std::cerr << "\n NoPubKey: "; + implodeVector(Signers.NoPubKey, std::cerr, ", "); + std::cerr << "\n Signed-By: "; + implodeVector(Signers.SignedBy, std::cerr, ", "); std::cerr << std::endl << " NODATA: " << (gotNODATA ? "yes" : "no") << std::endl; } @@ -369,12 +399,12 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, { // gpgv will report success, but we want to enforce a certain keyring // so if we haven't found the key the valid we found is in fact invalid - if (GoodSigners.empty()) + if (Signers.Good.empty()) return _("At least one invalid signature was encountered."); } else { - if (GoodSigners.empty()) + if (Signers.Good.empty()) return _("Internal error: Good signature, but could not determine key fingerprint?!"); } return ""; @@ -391,16 +421,7 @@ bool GPGVMethod::URIAcquire(std::string const &Message, FetchItem *Itm) { URI const Get = Itm->Uri; string const Path = Get.Host + Get.Path; // To account for relative paths - vector<string> GoodSigners; - vector<string> BadSigners; - // a worthless signature is a expired or revoked one - vector<string> WorthlessSigners; - vector<Signer> SoonWorthlessSigners; - vector<string> NoPubKeySigners; - - FetchResult Res; - Res.Filename = Itm->DestFile; - URIStart(Res); + SignersStorage Signers; std::vector<std::string> keyFpts, keyFiles; for (auto &&key : VectorizeString(LookupTag(Message, "Signed-By"), ',')) @@ -410,69 +431,83 @@ bool GPGVMethod::URIAcquire(std::string const &Message, FetchItem *Itm) keyFpts.emplace_back(std::move(key)); // Run apt-key on file, extract contents and get the key ID of the signer - string const msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(), keyFpts, keyFiles, - GoodSigners, BadSigners, WorthlessSigners, - SoonWorthlessSigners, NoPubKeySigners); + string const msg = VerifyGetSigners(Path.c_str(), Itm->DestFile.c_str(), keyFpts, keyFiles, Signers); if (_error->PendingError()) return false; // Check if all good signers are soon worthless and warn in that case - if (std::all_of(GoodSigners.begin(), GoodSigners.end(), [&](std::string const &good) { - return std::any_of(SoonWorthlessSigners.begin(), SoonWorthlessSigners.end(), [&](Signer const &weak) { + if (std::all_of(Signers.Good.begin(), Signers.Good.end(), [&](std::string const &good) { + return std::any_of(Signers.SoonWorthless.begin(), Signers.SoonWorthless.end(), [&](Signer const &weak) { return IsTheSameKey(weak.key, good); }); })) { - for (auto const & Signer : SoonWorthlessSigners) + for (auto const & Signer : Signers.SoonWorthless) // TRANSLATORS: The second %s is the reason and is untranslated for repository owners. Warning(_("Signature by key %s uses weak digest algorithm (%s)"), Signer.key.c_str(), Signer.note.c_str()); } - if (GoodSigners.empty() || !BadSigners.empty() || !NoPubKeySigners.empty()) + if (Signers.Good.empty() || !Signers.Bad.empty() || !Signers.NoPubKey.empty()) { string errmsg; // In this case, something bad probably happened, so we just go // with what the other method gave us for an error message. - if (BadSigners.empty() && WorthlessSigners.empty() && NoPubKeySigners.empty()) + if (Signers.Bad.empty() && Signers.Worthless.empty() && Signers.NoPubKey.empty()) errmsg = msg; else { - if (!BadSigners.empty()) + if (!Signers.Bad.empty()) { errmsg += _("The following signatures were invalid:\n"); - for (vector<string>::iterator I = BadSigners.begin(); - I != BadSigners.end(); ++I) - errmsg += (*I + "\n"); + for (auto const &I : Signers.Bad) + errmsg.append(I).append("\n"); } - if (!WorthlessSigners.empty()) + if (!Signers.Worthless.empty()) { errmsg += _("The following signatures were invalid:\n"); - for (vector<string>::iterator I = WorthlessSigners.begin(); - I != WorthlessSigners.end(); ++I) - errmsg += (*I + "\n"); + for (auto const &I : Signers.Worthless) + errmsg.append(I).append("\n"); } - if (!NoPubKeySigners.empty()) + if (!Signers.NoPubKey.empty()) { errmsg += _("The following signatures couldn't be verified because the public key is not available:\n"); - for (vector<string>::iterator I = NoPubKeySigners.begin(); - I != NoPubKeySigners.end(); ++I) - errmsg += (*I + "\n"); + for (auto const &I : Signers.NoPubKey) + errmsg.append(I).append("\n"); } } // this is only fatal if we have no good sigs or if we have at // least one bad signature. good signatures and NoPubKey signatures // happen easily when a file is signed with multiple signatures - if(GoodSigners.empty() or !BadSigners.empty()) - return _error->Error("%s", errmsg.c_str()); + if (Signers.Good.empty() or !Signers.Bad.empty()) + return _error->Error("%s", errmsg.c_str()); + } + + std::unordered_map<std::string, std::string> fields; + fields.emplace("URI", Itm->Uri); + fields.emplace("Filename", Itm->DestFile); + if (Signers.SignedBy.empty() == false) + { + std::ostringstream out; + implodeVector(Signers.SignedBy, out, "\n"); + fields.emplace("Signed-By", out.str()); + } + { + // Just pass the raw output up, because passing it as a real data + // structure is too difficult with the method stuff. We keep it + // as three separate vectors for future extensibility. + std::vector<std::string> gpgvoutput; + std::move(Signers.Good.begin(), Signers.Good.end(), std::back_inserter(gpgvoutput)); + std::move(Signers.Bad.begin(), Signers.Bad.end(), std::back_inserter(gpgvoutput)); + std::move(Signers.NoPubKey.begin(), Signers.NoPubKey.end(), std::back_inserter(gpgvoutput)); + if (gpgvoutput.empty() == false) + { + std::ostringstream out; + implodeVector(gpgvoutput, out, "\n"); + fields.emplace("GPGVOutput", out.str()); + } } - - // Just pass the raw output up, because passing it as a real data - // structure is too difficult with the method stuff. We keep it - // as three separate vectors for future extensibility. - Res.GPGVOutput = GoodSigners; - std::move(BadSigners.begin(), BadSigners.end(), std::back_inserter(Res.GPGVOutput)); - std::move(NoPubKeySigners.begin(), NoPubKeySigners.end(), std::back_inserter(Res.GPGVOutput)); - URIDone(Res); + SendMessage("201 URI Done", std::move(fields)); + Dequeue(); if (DebugEnabled()) std::clog << "apt-key succeeded\n"; diff --git a/po/apt-all.pot b/po/apt-all.pot index 4da2181a0..a428571bf 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -2408,7 +2408,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" +#, c-format +msgid "%s does not take any arguments" msgstr "" #: cmdline/apt-cache.cc @@ -2445,8 +2445,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "لا يقبل الأمر update أية مُعطيات" #: cmdline/apt-cache.cc @@ -2524,8 +2524,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "La orde update nun lleva argumentos" #: cmdline/apt-cache.cc @@ -2571,8 +2571,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Командата „update“ не възприема аргументи" #: cmdline/apt-cache.cc @@ -2427,7 +2427,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" +#, c-format +msgid "%s does not take any arguments" msgstr "" #: cmdline/apt-cache.cc @@ -2629,8 +2629,9 @@ msgid "All packages are up to date." msgstr "Tots els paquets estan actualitzats." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "apt-cache stats no pren cap argument" +#, c-format +msgid "%s does not take any arguments" +msgstr "%s no pren cap argument" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2558,8 +2558,9 @@ msgid "All packages are up to date." msgstr "Všechny balíky jsou aktuální." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "apt-cache stats neakceptuje žádné argumenty" +#, c-format +msgid "%s does not take any arguments" +msgstr "%s neakceptuje žádné argumenty" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2516,8 +2516,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Nid yw'r gorchymyn diweddaru yn derbyn ymresymiadau" #: cmdline/apt-cache.cc @@ -2576,8 +2576,9 @@ msgid "All packages are up to date." msgstr "Alle pakker er opdateret." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "»apt-cache stats« benytter ingen parametre" +#, c-format +msgid "%s does not take any arguments" +msgstr "»%s« benytter ingen parametre" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2676,8 +2676,9 @@ msgid "All packages are up to date." msgstr "Alle Pakete sind aktuell." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "Der Befehl »apt-cache stats« akzeptiert keine Argumente." +#, c-format +msgid "%s does not take any arguments" +msgstr "Der Befehl »%s« akzeptiert keine Argumente." #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2480,8 +2480,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "དུས་མཐུན་བཟོ་བའི་བརྡ་བཀོད་འདི་གིས་སྒྲུབ་རྟགས་ཚུ་མི་འབག་འབད།" #: cmdline/apt-cache.cc @@ -2507,8 +2507,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Η εντολή update δεν παίρνει ορίσματα" #: cmdline/apt-cache.cc @@ -2691,8 +2691,9 @@ msgid "All packages are up to date." msgstr "Todos los paquetes están actualizados." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "«apt-cache stats» no necesita argumentos" +#, c-format +msgid "%s does not take any arguments" +msgstr "«%s» no necesita argumentos" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2484,8 +2484,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Eguneratzeko komandoak ez du argumenturik hartzen" #: cmdline/apt-cache.cc @@ -2476,8 +2476,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Komento update ei käytä parametreja" #: cmdline/apt-cache.cc @@ -2687,7 +2687,9 @@ msgid "All packages are up to date." msgstr "Tous les paquets sont à jour." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +#| msgid "%s does not take any arguments" +msgid "%s does not take any arguments" msgstr "La commande apt-cache ne prend pas de paramètre" #: cmdline/apt-cache.cc @@ -2556,8 +2556,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "A orde «update» non toma argumentos" #: cmdline/apt-cache.cc @@ -2606,8 +2606,9 @@ msgid "All packages are up to date." msgstr "Minden csomag naprakész." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "Az apt-cache stats parancsnak nincsenek argumentumai" +#, c-format +msgid "%s does not take any arguments" +msgstr "Az %s parancsnak nincsenek argumentumai" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2641,8 +2641,9 @@ msgid "All packages are up to date." msgstr "Tutti i pacchetti sono aggiornati." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "Il comando \"apt-cache stats\" non accetta alcun argomento" +#, c-format +msgid "%s does not take any arguments" +msgstr "Il comando \"%s\" non accetta alcun argomento" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2594,8 +2594,9 @@ msgid "All packages are up to date." msgstr "パッケージはすべて最新です。" #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "apt-cache stats は引数をとりません" +#, c-format +msgid "%s does not take any arguments" +msgstr "%s は引数をとりません" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2467,8 +2467,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "ពាក្យបញ្ជាដែលធ្វើឲ្យទាន់សម័យគ្មានអាគុយម៉ង់ទេ" #: cmdline/apt-cache.cc @@ -2491,8 +2491,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "update 명령은 인수를 받지 않습니다" #: cmdline/apt-cache.cc @@ -2427,7 +2427,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" +#, c-format +msgid "%s does not take any arguments" msgstr "" #: cmdline/apt-cache.cc @@ -2457,8 +2457,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Atnaujinimo komandai argumentų nereikia" #: cmdline/apt-cache.cc @@ -2470,8 +2470,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "सुधारित आवृत्तीचा विधान आर्ग्युमेंटस घेऊ शकत नाही." #: cmdline/apt-cache.cc @@ -2544,8 +2544,8 @@ msgid "All packages are up to date." msgstr "Alle pakkene er oppdatert." #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Oppdaterings-kommandoen tar ingen argumenter" #: cmdline/apt-cache.cc @@ -2465,8 +2465,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "अद्यावधिक आदेशले कुनै तर्कहरू लिदैन" #: cmdline/apt-cache.cc @@ -2637,8 +2637,9 @@ msgid "All packages are up to date." msgstr "Alle pakketten zijn up-to-date." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "De opdracht 'apt-cache stats' aanvaardt geen argumenten" +#, c-format +msgid "%s does not take any arguments" +msgstr "De opdracht '%s' aanvaardt geen argumenten" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2478,8 +2478,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Oppdateringskommandoen tek ingen argument" #: cmdline/apt-cache.cc @@ -2596,8 +2596,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Polecenie update nie wymaga żadnych argumentów" #: cmdline/apt-cache.cc @@ -2575,8 +2575,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "O comando update não leva argumentos" #: cmdline/apt-cache.cc diff --git a/po/pt_BR.po b/po/pt_BR.po index 441558ae4..66e3b1568 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -2494,8 +2494,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "O comando update não leva argumentos" #: cmdline/apt-cache.cc @@ -2503,8 +2503,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Comanda de actualizare nu are argumente" #: cmdline/apt-cache.cc @@ -2625,8 +2625,9 @@ msgid "All packages are up to date." msgstr "Все пакеты имеют последние версии." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "Команде apt-cache stats не нужны аргументы" +#, c-format +msgid "%s does not take any arguments" +msgstr "Команде %s не нужны аргументы" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2545,8 +2545,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Príkaz update neprijíma žiadne argumenty" #: cmdline/apt-cache.cc @@ -2550,8 +2550,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Ukaz update ne sprejema argumentov" #: cmdline/apt-cache.cc @@ -2564,8 +2564,8 @@ msgid "All packages are up to date." msgstr "Alla paket är uppdaterade." #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Uppdateringskommandot tar inga argument" #: cmdline/apt-cache.cc @@ -2479,8 +2479,8 @@ msgid "All packages are up to date." msgstr "ปรับรุ่นทุกแพกเกจเป็นรุ่นล่าสุดแล้ว" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "คำสั่ง update ไม่รับอาร์กิวเมนต์เพิ่ม" #: cmdline/apt-cache.cc @@ -2494,8 +2494,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Ang utos na update ay hindi tumatanggap ng mga argumento" #: cmdline/apt-cache.cc @@ -2598,8 +2598,9 @@ msgid "All packages are up to date." msgstr "Tüm paketler güncel." #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "apt-cache stats komutu argüman almaz" +#, c-format +msgid "%s does not take any arguments" +msgstr "%s komutu argüman almaz" #: cmdline/apt-cache.cc msgid "Total package names: " @@ -2582,8 +2582,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Команді update не потрібні аргументи" #: cmdline/apt-cache.cc @@ -2536,8 +2536,8 @@ msgid "All packages are up to date." msgstr "Mọi gói đã được cập nhật." #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "Lệnh cập nhật không chấp nhận đối số" #: cmdline/apt-cache.cc diff --git a/po/zh_CN.po b/po/zh_CN.po index e40abfac2..07eca117d 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -4,7 +4,7 @@ # Tchaikov <tchaikov@sjtu.org>, 2005, 2007. # Carlos Z.F. Liu <carlosliu@users.sourceforge.net>, 2004, 2006. # Aron Xu <happyaron.xu@gmail.com>, 2009, 2010. -# Mo Zhou <cdluminate@gmail.com>, 2014, 2015, 2016, 2017. +# Mo Zhou <cdluminate@gmail.com>, 2014, 2015, 2016, 2017, 2019. # Boyuan Yang <073plan@gmail.com>, 2018. # msgid "" @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: apt 1.7.x\n" "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n" "POT-Creation-Date: 2018-12-18 15:02+0100\n" -"PO-Revision-Date: 2018-07-13 18:16+0800\n" +"PO-Revision-Date: 2019-01-12 00:00+0000\n" "Last-Translator: Mo Zhou <cdluminate@gmail.com>\n" "Language-Team: Chinese (simplified) <debian-l10n-chinese@lists.debian.org>\n" "Language: zh_CN\n" @@ -1080,19 +1080,15 @@ msgid "Unable to parse package file %s (%d)" msgstr "无法解析软件包文件 %s (%d)" #: apt-pkg/deb/debsystem.cc -#, fuzzy, c-format -#| msgid "" -#| "Unable to lock the administration directory (%s), is another process " -#| "using it?" +#, c-format msgid "" "Unable to acquire the dpkg frontend lock (%s), is another process using it?" -msgstr "无法锁定管理目录(%s),是否有其他进程正占用它?" +msgstr "无法获取 dpkg 前端锁 (%s),是否有其他进程正占用它?" #: apt-pkg/deb/debsystem.cc -#, fuzzy, c-format -#| msgid "Unable to lock the administration directory (%s), are you root?" +#, c-format msgid "Unable to acquire the dpkg frontend lock (%s), are you root?" -msgstr "无法对状态列表目录加锁(%s),请查看您是否正以 root 用户运行?" +msgstr "无法获取 dpkg 前端锁 (%s),请查看您是否正以 root 用户运行?" #. TRANSLATORS: the %s contains the recovery command, usually #. dpkg --configure -a @@ -2444,10 +2440,9 @@ msgid "Failed to parse %s. Edit again? " msgstr "解析 %s 失败。请重新编辑之后再试。" #: apt-private/private-sources.cc -#, fuzzy, c-format -#| msgid "Your '%s' file changed, please run 'apt-get update'." +#, c-format msgid "Your '%s' file changed, please run 'apt-get update'.\n" -msgstr "您的 %s 文件有过改动,请执行 ‘apt-get update’。" +msgstr "您的 %s 文件有过改动,请执行 ‘apt-get update’。\n" #: apt-private/private-unmet.cc #, c-format @@ -2479,8 +2474,9 @@ msgid "All packages are up to date." msgstr "所有软件包均为最新。" #: cmdline/apt-cache.cc -msgid "apt-cache stats does not take any arguments" -msgstr "apt-cache stats 命令不需要参数" +#, c-format +msgid "%s does not take any arguments" +msgstr "%s 命令不需要参数" #: cmdline/apt-cache.cc msgid "Total package names: " diff --git a/po/zh_TW.po b/po/zh_TW.po index db704f10d..d6a08d0ec 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -2454,8 +2454,8 @@ msgid "All packages are up to date." msgstr "" #: cmdline/apt-cache.cc -#, fuzzy -msgid "apt-cache stats does not take any arguments" +#, fuzzy, c-format +msgid "%s does not take any arguments" msgstr "update 指令不需任何參數" #: cmdline/apt-cache.cc diff --git a/shippable.yml b/shippable.yml index 3978ddcb5..8588fcf15 100644 --- a/shippable.yml +++ b/shippable.yml @@ -4,8 +4,8 @@ env: build: pre_ci_boot: - image_name: ubuntu - image_tag: bionic + image_name: debian + image_tag: buster pull: true ci: - apt-get install -qq build-essential expect diff --git a/test/integration/test-method-gpgv b/test/integration/test-method-gpgv index b7cf11bdc..70521881d 100755 --- a/test/integration/test-method-gpgv +++ b/test/integration/test-method-gpgv @@ -10,7 +10,6 @@ configarchitecture 'i386' cat > faked-apt-key <<EOF #!/bin/sh set -e -echo "FFOO" find_gpgv_status_fd() { while [ -n "\$1" ]; do if [ "\$1" = '--status-fd' ]; then @@ -28,45 +27,47 @@ EOF chmod +x faked-apt-key testgpgv() { - echo "$3" > gpgv.output + echo "$4" > gpgv.output msgtest "$1" "$2" gpgvmethod >method.output 2>&1 || true - testsuccess --nomsg grep "$2" method.output + testsuccess --nomsg grep "^ $2\$" method.output + msgtest 'The reported signedby key is' "${3:-empty}" + testsuccess --nomsg grep "^ Signed-By:\s\+$3\$" method.output } testrun() { - testgpgv 'Good signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> + testgpgv 'Good signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' - testgpgv 'Good signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> + testgpgv 'Good signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' - testgpgv 'Good subkey signed with long keyid' 'Good: GOODSIG 5B6896415D44C43E,' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org> + testgpgv 'Good subkey signed with long keyid' 'Good: GOODSIG 5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' - testgpgv 'Good subkey signed with fingerprint' 'Good: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E,' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org> + testgpgv 'Good subkey signed with fingerprint' 'Good: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE, 4281DEDBD466EAE8C1F4157E5B6896415D44C43E!' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' - testgpgv 'Untrusted signed with long keyid' 'Worthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> + testgpgv 'Untrusted signed with long keyid' 'Worthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 1 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testsuccess grep '^\s\+Good:\s\+$' method.output - testgpgv 'Untrusted signed with fingerprint' 'Worthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> + testgpgv 'Untrusted signed with fingerprint' 'Worthless: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 1 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testsuccess grep '^\s\+Good:\s\+$' method.output - testgpgv 'Weak signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> + testgpgv 'Weak signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 2 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testsuccess grep '^Message: Signature by key 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE uses weak digest algorithm (SHA1)$' method.output - testgpgv 'Weak signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> + testgpgv 'Weak signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Joe Sixpack (APT Testcases Dummy) <joe@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2016-09-01 1472742625 0 4 0 1 2 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testsuccess grep '^Message: Signature by key 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE uses weak digest algorithm (SHA1)$' method.output - testgpgv 'No Pubkey with long keyid' 'NoPubKey: NO_PUBKEY E8525D47528144E2,' '[GNUPG:] ERRSIG E8525D47528144E2 1 11 00 1472744666 9 + testgpgv 'No Pubkey with long keyid' 'NoPubKey: NO_PUBKEY E8525D47528144E2' '' '[GNUPG:] ERRSIG E8525D47528144E2 1 11 00 1472744666 9 [GNUPG:] NO_PUBKEY E8525D47528144E2' - testgpgv 'No Pubkey with fingerprint' 'NoPubKey: NO_PUBKEY DE66AECA9151AFA1877EC31DE8525D47528144E2,' '[GNUPG:] ERRSIG DE66AECA9151AFA1877EC31DE8525D47528144E2 1 11 00 1472744666 9 + testgpgv 'No Pubkey with fingerprint' 'NoPubKey: NO_PUBKEY DE66AECA9151AFA1877EC31DE8525D47528144E2' '' '[GNUPG:] ERRSIG DE66AECA9151AFA1877EC31DE8525D47528144E2 1 11 00 1472744666 9 [GNUPG:] NO_PUBKEY DE66AECA9151AFA1877EC31DE8525D47528144E2' - testgpgv 'Expired key with long keyid' 'Worthless: EXPKEYSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org>,' '[GNUPG:] EXPKEYSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org> + testgpgv 'Expired key with long keyid' 'Worthless: EXPKEYSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org>' '' '[GNUPG:] EXPKEYSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org> [GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742629 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9' - testgpgv 'Expired key with fingerprint' 'Worthless: EXPKEYSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org>,' '[GNUPG:] EXPKEYSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org> + testgpgv 'Expired key with fingerprint' 'Worthless: EXPKEYSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org>' '' '[GNUPG:] EXPKEYSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org> [GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742629 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9' } @@ -111,11 +112,11 @@ Signed-By: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,/dev/null } testrun -testgpgv 'Good signed with long keyid but not signed-by key' 'NoPubKey: GOODSIG 4BC0A39C27CE74F9,' '[GNUPG:] GOODSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org> +testgpgv 'Good signed with long keyid but not signed-by key' 'NoPubKey: GOODSIG 4BC0A39C27CE74F9' '' '[GNUPG:] GOODSIG 4BC0A39C27CE74F9 Rex Expired <rex@example.org> [GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742625 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9' testsuccess grep '^\s\+Good:\s\+$' method.output testsuccess grep 'verified because the public key is not available: GOODSIG' method.output -testgpgv 'Good signed with fingerprint but not signed-by key' 'NoPubKey: GOODSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9,' '[GNUPG:] GOODSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org> +testgpgv 'Good signed with fingerprint but not signed-by key' 'NoPubKey: GOODSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9' '' '[GNUPG:] GOODSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 Rex Expired <rex@example.org> [GNUPG:] VALIDSIG 891CC50E605796A0C6E733F74BC0A39C27CE74F9 2016-09-01 1472742625 0 4 0 1 11 00 891CC50E605796A0C6E733F74BC0A39C27CE74F9' testsuccess grep '^\s\+Good:\s\+$' method.output testsuccess grep 'verified because the public key is not available: GOODSIG' method.output @@ -132,16 +133,37 @@ Filename: /dev/zero Signed-By: 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE! ' | runapt "${METHODSDIR}/gpgv" } -testgpgv 'Exact matched subkey signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> +testgpgv 'Exact matched subkey signed with long keyid' 'Good: GOODSIG 5A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' -testgpgv 'Exact matched subkey signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE,' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> +testgpgv 'Exact matched subkey signed with fingerprint' 'Good: GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' '34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE!' '[GNUPG:] GOODSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' -testgpgv 'Exact unmatched subkey signed with long keyid' 'NoPubKey: GOODSIG 5B6896415D44C43E,' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org> +testgpgv 'Exact unmatched subkey signed with long keyid' 'NoPubKey: GOODSIG 5B6896415D44C43E' '' '[GNUPG:] GOODSIG 5B6896415D44C43E Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testsuccess grep '^\s\+Good:\s\+$' method.output testsuccess grep 'verified because the public key is not available: GOODSIG' method.output -testgpgv 'Exact unmatched subkey signed with fingerprint' 'NoPubKey: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E,' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org> +testgpgv 'Exact unmatched subkey signed with fingerprint' 'NoPubKey: GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' '' '[GNUPG:] GOODSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E Sebastian Subkey <subkey@example.org> [GNUPG:] VALIDSIG 4281DEDBD466EAE8C1F4157E5B6896415D44C43E 2018-08-16 1534459673 0 4 0 1 11 00 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE' testsuccess grep '^\s\+Good:\s\+$' method.output testsuccess grep 'verified because the public key is not available: GOODSIG' method.output + +insertpackage 'unstable' 'foo' 'all' '1' +setupaptarchive --no-update + +echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> +[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output +testsuccess apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 +rm -rf rootdir/var/lib/apt/lists + +echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org>' > gpgv.output +testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 +rm -rf rootdir/var/lib/apt/lists + +echo '[GNUPG:] VALIDSIG 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output +testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 +rm -rf rootdir/var/lib/apt/lists + +echo '[GNUPG:] GOODSIG 5A90D141DBAC8DAE Sebastian Subkey <subkey@example.org> +[GNUPG:] VALIDSIG 0000000000000000000000000000000000000000 2018-08-16 1534459673 0 4 0 1 11 00 4281DEDBD466EAE8C1F4157E5B6896415D44C43E' > gpgv.output +testfailure apt update -o Dir::Bin::apt-key="./faked-apt-key" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::gpgv=1 +rm -rf rootdir/var/lib/apt/lists |