Browse Source

Use quoted tagnames in config dumps

Tagnames in configuration can include spaces (and other nasties) e.g. in
repository-specific configuration options due to Origin/Label
potentially containing a space. The configuration file format supports
parsing quoted as well as encoded spaces, but the output generated by
apt-config and other places which might be feedback into apt via
parsing (e.g. before calling apt-key in our gpgv method) do not quote
and hence produce invalid configuration files.

Changing the default to be an encoded tagname ensures that the output of
dump can be used as a config file, but other users might not expect
this so that is technically a backward-breaking change.
tags/debian/1.8.0_alpha3
David Kalnischkies 2 years ago
parent
commit
64d7e1c568
4 changed files with 17 additions and 3 deletions
  1. +1
    -1
      apt-pkg/cdrom.cc
  2. +1
    -1
      apt-pkg/contrib/configuration.cc
  3. +1
    -1
      cmdline/apt-config.cc
  4. +14
    -0
      test/integration/test-apt-config

+ 1
- 1
apt-pkg/cdrom.cc View File

@@ -438,7 +438,7 @@ bool pkgCdrom::WriteDatabase(Configuration &Cnf)
/* Write out all of the configuration directives by walking the
configuration tree */
Cnf.Dump(Out, NULL, "%f \"%v\";\n", false);
Cnf.Dump(Out, NULL, "%F \"%v\";\n", false);

Out.close();



+ 1
- 1
apt-pkg/contrib/configuration.cc View File

@@ -728,7 +728,7 @@ bool Configuration::ExistsAny(const char *Name) const
/* Dump the entire configuration space */
void Configuration::Dump(ostream& str)
{
Dump(str, NULL, "%f \"%v\";\n", true);
Dump(str, NULL, "%F \"%v\";\n", true);
}
void Configuration::Dump(ostream& str, char const * const root,
char const * const formatstr, bool const emptyValue)


+ 1
- 1
cmdline/apt-config.cc View File

@@ -67,7 +67,7 @@ static bool DoShell(CommandLine &CmdL)
static bool DoDump(CommandLine &CmdL)
{
bool const empty = _config->FindB("APT::Config::Dump::EmptyValue", true);
std::string const format = _config->Find("APT::Config::Dump::Format", "%f \"%v\";\n");
std::string const format = _config->Find("APT::Config::Dump::Format", "%F \"%v\";\n");
if (CmdL.FileSize() == 1)
_config->Dump(cout, NULL, format.c_str(), empty);
else


+ 14
- 0
test/integration/test-apt-config View File

@@ -34,3 +34,17 @@ testsuccessequal 'nodoc
stage1' aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles
unset DEB_BUILD_PROFILES
testempty aptconfig dump --no-empty --format='%v%n' APT::Build-Profiles

cat > spaces.conf <<EOF
Spaces::Test::"Foo Bar" "1 1";
Spaces::Test2::" Bar Baz " "B B" {
A%20B "C C";
"B C" "A A";
};
EOF
testsuccessequal 'Spaces::Test "";
Spaces::Test::Foo%20Bar "1 1";
Spaces::Test2 "";
Spaces::Test2::%20Bar%20Baz%20 "B B";
Spaces::Test2::%20Bar%20Baz%20::A%20B "C C";
Spaces::Test2::%20Bar%20Baz%20::B%20C "A A";' aptconfig dump -c spaces.conf Spaces::Test Spaces::Test2

Loading…
Cancel
Save