summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile2
-rw-r--r--README.md19
-rw-r--r--apt-pkg/acquire-item.cc18
-rw-r--r--apt-pkg/acquire-item.h3
-rw-r--r--apt-pkg/contrib/configuration.cc2
-rw-r--r--apt-pkg/contrib/md5.cc2
-rw-r--r--apt-pkg/deb/deblistparser.cc6
-rw-r--r--apt-pkg/deb/deblistparser.h1
-rw-r--r--apt-pkg/pkgcache.cc58
-rw-r--r--apt-private/private-cmndline.cc11
-rw-r--r--apt-private/private-output.h4
-rw-r--r--cmdline/apt-cache.cc2
-rw-r--r--cmdline/apt-mark.cc122
-rw-r--r--cmdline/apt.cc1
-rw-r--r--completions/bash/apt2
-rw-r--r--debian/control1
-rw-r--r--doc/apt-mark.8.xml8
-rw-r--r--doc/apt-verbatim.ent10
-rw-r--r--doc/po/fr.po389
-rw-r--r--doc/po/nl.po85
-rw-r--r--methods/gpgv.cc209
-rw-r--r--po/apt-all.pot3
-rw-r--r--po/ar.po4
-rw-r--r--po/ast.po4
-rw-r--r--po/bg.po4
-rw-r--r--po/bs.po3
-rw-r--r--po/ca.po5
-rw-r--r--po/cs.po5
-rw-r--r--po/cy.po4
-rw-r--r--po/da.po5
-rw-r--r--po/de.po5
-rw-r--r--po/dz.po4
-rw-r--r--po/el.po4
-rw-r--r--po/es.po5
-rw-r--r--po/eu.po4
-rw-r--r--po/fi.po4
-rw-r--r--po/fr.po4
-rw-r--r--po/gl.po4
-rw-r--r--po/hu.po5
-rw-r--r--po/it.po5
-rw-r--r--po/ja.po5
-rw-r--r--po/km.po4
-rw-r--r--po/ko.po4
-rw-r--r--po/ku.po3
-rw-r--r--po/lt.po4
-rw-r--r--po/mr.po4
-rw-r--r--po/nb.po4
-rw-r--r--po/ne.po4
-rw-r--r--po/nl.po5
-rw-r--r--po/nn.po4
-rw-r--r--po/pl.po4
-rw-r--r--po/pt.po4
-rw-r--r--po/pt_BR.po4
-rw-r--r--po/ro.po4
-rw-r--r--po/ru.po5
-rw-r--r--po/sk.po4
-rw-r--r--po/sl.po4
-rw-r--r--po/sv.po4
-rw-r--r--po/th.po4
-rw-r--r--po/tl.po4
-rw-r--r--po/tr.po5
-rw-r--r--po/uk.po4
-rw-r--r--po/vi.po4
-rw-r--r--po/zh_CN.po26
-rw-r--r--po/zh_TW.po4
-rw-r--r--shippable.yml4
-rwxr-xr-xtest/integration/test-method-gpgv64
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 \
diff --git a/README.md b/README.md
index e17f1f441..8a8b3b6ed 100644
--- a/README.md
+++ b/README.md
@@ -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 &lt;a.b.c -&gt; "
"d.e.f | x.y.z&gt; (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 (&gt;= 2.01) but 2.0-3 is installed\n"
+" bash-builtins: Depends: bash (&gt;= 2.01) mais 2.0-3 est installé\n"
" cthugha: Depends: svgalibg1 mais il n'est pas installé\n"
" Depends: xlib6g (&gt;= 3.3-5) mais il n'est pas installé\n"
" libreadlineg2: Conflicts:libreadline2 (&lt;&lt; 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
diff --git a/po/ar.po b/po/ar.po
index 45db62325..73df37b58 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -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
diff --git a/po/ast.po b/po/ast.po
index e42eb8231..cdd964e14 100644
--- a/po/ast.po
+++ b/po/ast.po
@@ -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
diff --git a/po/bg.po b/po/bg.po
index b305489c1..fedc7fc93 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -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
diff --git a/po/bs.po b/po/bs.po
index 6ba4a312f..7c9d1db39 100644
--- a/po/bs.po
+++ b/po/bs.po
@@ -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
diff --git a/po/ca.po b/po/ca.po
index 6d8c55656..41fb9f23d 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -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: "
diff --git a/po/cs.po b/po/cs.po
index 347ba8ddf..a1893aba0 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -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: "
diff --git a/po/cy.po b/po/cy.po
index 28e410007..ed6d074cd 100644
--- a/po/cy.po
+++ b/po/cy.po
@@ -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
diff --git a/po/da.po b/po/da.po
index b670240d4..3d963a3fc 100644
--- a/po/da.po
+++ b/po/da.po
@@ -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: "
diff --git a/po/de.po b/po/de.po
index c40f9c699..db6e6f4c6 100644
--- a/po/de.po
+++ b/po/de.po
@@ -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: "
diff --git a/po/dz.po b/po/dz.po
index 8166da841..6573db5aa 100644
--- a/po/dz.po
+++ b/po/dz.po
@@ -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
diff --git a/po/el.po b/po/el.po
index ef1ecc38b..338b86844 100644
--- a/po/el.po
+++ b/po/el.po
@@ -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
diff --git a/po/es.po b/po/es.po
index 75bad50b4..d828b5b73 100644
--- a/po/es.po
+++ b/po/es.po
@@ -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: "
diff --git a/po/eu.po b/po/eu.po
index a9348fcf5..eb70279f3 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -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
diff --git a/po/fi.po b/po/fi.po
index eb1da8516..2476d6f8f 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -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
diff --git a/po/fr.po b/po/fr.po
index b06b92a46..396d9ed2b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -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
diff --git a/po/gl.po b/po/gl.po
index 50c855cef..42242f41f 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -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
diff --git a/po/hu.po b/po/hu.po
index 4630744b4..8ea1f6151 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -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: "
diff --git a/po/it.po b/po/it.po
index 2158888e1..fc28b3111 100644
--- a/po/it.po
+++ b/po/it.po
@@ -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: "
diff --git a/po/ja.po b/po/ja.po
index f11b7037e..8ba4df794 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -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: "
diff --git a/po/km.po b/po/km.po
index 5b068b2e5..ace0cbe10 100644
--- a/po/km.po
+++ b/po/km.po
@@ -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
diff --git a/po/ko.po b/po/ko.po
index 32306172e..04b77dde0 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -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
diff --git a/po/ku.po b/po/ku.po
index 4910d51b0..18e2bce96 100644
--- a/po/ku.po
+++ b/po/ku.po
@@ -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
diff --git a/po/lt.po b/po/lt.po
index 5fc6ba385..75add9735 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -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
diff --git a/po/mr.po b/po/mr.po
index 02533a83c..929e07352 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -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
diff --git a/po/nb.po b/po/nb.po
index 85aacc833..70c4afa0d 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -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
diff --git a/po/ne.po b/po/ne.po
index 5245fd1db..565c11719 100644
--- a/po/ne.po
+++ b/po/ne.po
@@ -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
diff --git a/po/nl.po b/po/nl.po
index a9d9da14f..d3ba448fc 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -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: "
diff --git a/po/nn.po b/po/nn.po
index 7a651e275..c5bd2bbac 100644
--- a/po/nn.po
+++ b/po/nn.po
@@ -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
diff --git a/po/pl.po b/po/pl.po
index 66cd64854..bd1ed694c 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -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
diff --git a/po/pt.po b/po/pt.po
index 7ccc58b54..cfc665a96 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -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
diff --git a/po/ro.po b/po/ro.po
index 1fd21b5ca..904481a07 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -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
diff --git a/po/ru.po b/po/ru.po
index 4c8521eb5..714cb22c8 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -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: "
diff --git a/po/sk.po b/po/sk.po
index aaffad92b..97f794269 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -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
diff --git a/po/sl.po b/po/sl.po
index a123b88e2..22580f245 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -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
diff --git a/po/sv.po b/po/sv.po
index 4a6733422..daa2d336e 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -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
diff --git a/po/th.po b/po/th.po
index ce2833724..c31a2dd65 100644
--- a/po/th.po
+++ b/po/th.po
@@ -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
diff --git a/po/tl.po b/po/tl.po
index 95e7fc1d6..a50de95a6 100644
--- a/po/tl.po
+++ b/po/tl.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 "Ang utos na update ay hindi tumatanggap ng mga argumento"
#: cmdline/apt-cache.cc
diff --git a/po/tr.po b/po/tr.po
index fc7a56710..68a997f5e 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -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: "
diff --git a/po/uk.po b/po/uk.po
index 798b3bd92..b5a968df9 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -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
diff --git a/po/vi.po b/po/vi.po
index f76755e16..316333913 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -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