]> git.saurik.com Git - apt.git/log
apt.git
8 years agoreport apt-key errors via status-fd messages
David Kalnischkies [Sat, 12 Nov 2016 22:22:33 +0000 (23:22 +0100)] 
report apt-key errors via status-fd messages

We report warnings from apt-key this way already since
29c590951f812d9e9c4f17706e34f2c3315fb1f6, so reporting errors seems like
a good addition. Most of those errors aren't really from apt-key
through, but from the code setting up and actually calling it which used
to just print to stderr which might or might not intermix them with
(other) progress lines in update calls. Having them as proper error
messages in the system means that the errors are actually collected
later on for the list instead of ending up with our relatively generic
but in those cases bogus hint regarding "is gpgv installed?".

The effective difference is minimal as the errors apply mostly to
systems which have far worse problems than a not as nice looking error
message, which makes this pretty hard to test – but at least now the
hint that your system is broken can be read in proper order (= there
aren't many valid cases in which the permissions of /tmp are messed up…).

LP: #1522988

8 years agoskip unconfigure for unconfigured to-be removed pkgs
David Kalnischkies [Wed, 23 Nov 2016 22:09:05 +0000 (23:09 +0100)] 
skip unconfigure for unconfigured to-be removed pkgs

8 years agodo not configure unconfigured to be removed packages
David Kalnischkies [Wed, 23 Nov 2016 21:17:01 +0000 (22:17 +0100)] 
do not configure unconfigured to be removed packages

We try to configure all packages at the end which need to be configured,
but that also applies to packages which weren't completely installed
(e.g. maintainerscript failed) we end up removing in this interaction
instead.

APT doesn't perform this explicit configure in the end as it is using
"dpkg --configure --pending", but it does confuse the progress report
and potentially also hook scripts.

Regression-Of: 9ffbac99e52c91182ed8ff8678a994626b194e69

8 years agodon't perform implicit crossgrades involving M-A:same
David Kalnischkies [Wed, 23 Nov 2016 18:02:51 +0000 (19:02 +0100)] 
don't perform implicit crossgrades involving M-A:same

dpkg stumbles over these (#844300) and we haven't dropped 'easier'
removes to be implicit and to be scheduled by dpkg by default so far
so we shouldn't push the decision in such cases to dpkg either.

8 years agoimprove arch-unqualified dpkg-progress parsing
David Kalnischkies [Wed, 23 Nov 2016 16:32:20 +0000 (17:32 +0100)] 
improve arch-unqualified dpkg-progress parsing

Our old idea was to look for the first package which would be "touched"
and take this as the package dpkg is talking about, but that is
incorrect in complicated situations like a package upgraded to/from
multiple M-A:same siblings installed.

As we us the progress report to decide what is still needed we have to
be reasonabily right about the package dpkg is talking about, so we jump
to quite a few loops to get it.

8 years agocorrect cross & disappear progress detection
David Kalnischkies [Sat, 12 Nov 2016 10:32:13 +0000 (11:32 +0100)] 
correct cross & disappear progress detection

Given that we use the progress information to skip over actions dpkg has
already done like not purging a package which was already removed and
had no config files or not acting on disappeared packages and such it is
important that apt and dpkg agree on which states the package has to
pass through.

To ensure that we keep tabs on this in the future a warning is added at
the end if apt hasn't seen all the action it was supposed to see. I
can't wait for the first bugreporters to wonder about this…

8 years agoreact to trig-pend only if we have nothing else to do
David Kalnischkies [Fri, 18 Nov 2016 11:04:08 +0000 (12:04 +0100)] 
react to trig-pend only if we have nothing else to do

If a package is triggered dpkg frequently issues two messages about it
causing us to make a note about it both times which messes up our
planned dpkg actions view. Adding these actions if we have nothing else
planned fixes this and should still be correct as those planned actions
will deal with the triggering just fine and we avoid strange problems
like a package triggered before its removed…

8 years agoDo not use MD5SumValue for Description_md5()
Julian Andres Klode [Tue, 27 Sep 2016 22:49:45 +0000 (00:49 +0200)] 
Do not use MD5SumValue for Description_md5()

Our profile says we spend about 5% of the time transforming the
hex digits into the binary format used by HashsumValue, all for
comparing them against the other strings. That makes no sense
at all.

According to callgrind, this reduces the overall instruction
count from 5,3 billion to 5 billion in my example, which
roughly matches the 5%.

8 years agodebListParser: Micro-optimize AvailableDescriptionLanguages()
Julian Andres Klode [Tue, 27 Sep 2016 22:05:31 +0000 (00:05 +0200)] 
debListParser: Micro-optimize AvailableDescriptionLanguages()

Generating a string for each version we see is somewhat inefficient.
The problem here is that the Description tag names are longer than
15 byte, and thus require an allocation on the heap, which we should
avoid.

It seems reasonable that 20 characters works for all languages codes
used for archive descriptions, but if not, there's a warning, so
we'll catch that.

This should improve performance by about 2%.

8 years agoCompare size before data when ordering cache bucket entries
Julian Andres Klode [Tue, 27 Sep 2016 16:59:11 +0000 (18:59 +0200)] 
Compare size before data when ordering cache bucket entries

This has the effect of significantly reducing actual string
comparisons, and should improve the performance of FindGrp
a bit, although it's hardly measureable (callgrind says it
uses 10% instructions less now).

8 years agoOptimize VersionHash() to not need temporary copy of input
Julian Andres Klode [Tue, 27 Sep 2016 16:28:55 +0000 (18:28 +0200)] 
Optimize VersionHash() to not need temporary copy of input

Stop copying stuff, and just parse the bytes one by-one to the
newly created AddCRC16Byte. This improves the instruction count
for an update run from 720,850,121 to 455,801,749 according to
callgrind.

8 years agoIntroduce tolower_ascii_unsafe() and use it for hashing
Julian Andres Klode [Tue, 27 Sep 2016 16:20:02 +0000 (18:20 +0200)] 
Introduce tolower_ascii_unsafe() and use it for hashing

This one has some obvious collisions for non-alphabetical characters,
like some control characters also hashing to numbers, but we don't
really have those, and these are hash functions which are not
collision free to begin with.

8 years agoBump the cache major version for non-backportable changes
Julian Andres Klode [Tue, 27 Sep 2016 16:36:10 +0000 (18:36 +0200)] 
Bump the cache major version for non-backportable changes

We already have two stable series with major version 10, and
the next commits will introduce non-backportable performance
changes that affect the cache algorithms, so we need to bump
the major version now to prevent future problems.

8 years agodebListParser: Convert to use pkgTagSection::Key-based lookup
Julian Andres Klode [Tue, 27 Sep 2016 16:16:13 +0000 (18:16 +0200)] 
debListParser: Convert to use pkgTagSection::Key-based lookup

This basically gets rid of 40-50% of the hash table lookups,
making things a bit faster that way, and the profiles look
far cleaner.

8 years agoTagSection: Introduce functions for looking up by key ids
Julian Andres Klode [Tue, 27 Sep 2016 15:32:24 +0000 (17:32 +0200)] 
TagSection: Introduce functions for looking up by key ids

Introduce a new enum class and add functions that can do a lookup
with that enum class. This uses triehash.

8 years agoMerge commit 'e2073b0276226b625897ef475f225bf8f508719e' as 'triehash'
Julian Andres Klode [Tue, 22 Nov 2016 21:57:46 +0000 (22:57 +0100)] 
Merge commit 'e2073b0276226b625897ef475f225bf8f508719e' as 'triehash'

8 years agoSquashed 'triehash/' content from commit 16f59e1
Julian Andres Klode [Tue, 22 Nov 2016 21:57:46 +0000 (22:57 +0100)] 
Squashed 'triehash/' content from commit 16f59e1

git-subtree-dir: triehash
git-subtree-split: 16f59e1320e6db18ba3b4269b7ca333b1463dd7b

8 years agoTagSection: Extract Find() methods taking Pos instead of Key
Julian Andres Klode [Tue, 27 Sep 2016 14:49:25 +0000 (16:49 +0200)] 
TagSection: Extract Find() methods taking Pos instead of Key

This allows us to add a perfect hash function to the tag file
without having to reimplement the methods a second time.

8 years agoTagSection: Split AlphaIndexes into AlphaIndexes and BetaIndexes
Julian Andres Klode [Tue, 27 Sep 2016 13:24:24 +0000 (15:24 +0200)] 
TagSection: Split AlphaIndexes into AlphaIndexes and BetaIndexes

Move the use of the AlphaHash to a new second hash table in
preparation for the arrival of the new perfect hash function.

With the new perfect hash function hashing most of the keys for
us, having 128 slots for a fallback hash function seems enough
and prevents us from wasting space.

8 years agoGerman translation proof read by Helge Kreutzmann
Chris Leick [Tue, 15 Nov 2016 22:05:31 +0000 (23:05 +0100)] 
German translation proof read by Helge Kreutzmann

8 years agounfuzzy various strings in manpage po's
David Kalnischkies [Fri, 11 Nov 2016 21:44:40 +0000 (22:44 +0100)] 
unfuzzy various strings in manpage po's

No need to ask translators to deal with typo fixes in english text,
adding new items to long existing lists and 'literals'.

Gbp-Dch: Ignore

8 years agoapt-ftparchive: Support NotAutomatic and ButAutomaticUpgrades fields
James Clarke [Fri, 11 Nov 2016 16:33:25 +0000 (16:33 +0000)] 
apt-ftparchive: Support NotAutomatic and ButAutomaticUpgrades fields

This also changes Acquire-By-Hash to be "yes" rather than "true", so it
is consistent with dak's output.

Closes: #272557
8 years agoshow distribution mismatch for changed codenames
David Kalnischkies [Fri, 11 Nov 2016 12:15:27 +0000 (13:15 +0100)] 
show distribution mismatch for changed codenames

We have the last Release file around for other checks, so its trivial to
look if the new Release file contains a new codename (e.g. the user has
"testing" in the sources and it flipped from stretch to buster).

Such a change can be okay and expected, but also be a hint of problems,
so a warning if we see it happen seems okay. We can only print it once
anyhow and frontends and co are likely to ignore/hide it.

8 years agodon't warn if untransformed distribution matches
David Kalnischkies [Fri, 11 Nov 2016 12:05:38 +0000 (13:05 +0100)] 
don't warn if untransformed distribution matches

A suite or codename entry in the Release file is checked against the
distribution field in the sources.list entry that lead to the download of that
Release file. This distribution entry can contain slashes in the distribution
field:

    deb http://security.debian.org/debian wheezy/updates main

However, the Release file may only contain "wheezy" in the Codename field and
not "wheezy/updates". So a transformation needs to take place that removes the
last / and everything that comes after (e.g. "/updates"). This fails, however,
for valid cases like a reprepro snapshot where the given Codename contains
slashes but is perfectly fine and doesn't need to be transformed. Since that
transformation is essentially just a workaround for special cases like the
security repository, it should be checked if the literal Codename without any
transformations happened is valid and only if isn't the dist should be checked
against the transformated one.

This way special cases like security.debian.org are handled and reprepro
snapshots work too.

The initial patch was taken as insperationto move whole transformation
to CheckDist() which makes this method more accepting & easier to use
(but according to codesearch.d.n we are the only users anyhow).

Thanks: Lukas Anzinger for initial patch
Closes: 644610
8 years agoadd hidden config to set packages as Essential/Important
David Kalnischkies [Fri, 11 Nov 2016 10:58:56 +0000 (11:58 +0100)] 
add hidden config to set packages as Essential/Important

You can pretty much achieve the same with a local dummy package if you
want to, but libapt has an inbuilt setting for essential: "apt" which
can be overridden with this option as well – it could be helpful in
quick tests and what not so adding this alternative shouldn't really
hurt much.

We aren't going to document them much through as care must be taken in
regards to the binary caches as they aren't invalidated by config
options alone, so the effects of old settings could still be in them,
similar to the other already existing pkgCacheGen option(s).

Closes: 767891
Thanks: Anthony Towns for initial patch

8 years agohttp: skip connection cleanup if we close it anyhow
David Kalnischkies [Fri, 11 Nov 2016 09:32:31 +0000 (10:32 +0100)] 
http: skip connection cleanup if we close it anyhow

Suggested in #529794

8 years agohttp: clear content before reporting the failure
Edgar Fuß [Fri, 11 Nov 2016 09:20:23 +0000 (10:20 +0100)] 
http: clear content before reporting the failure

[Comment from commiter:] I have the feeling that the issue itself is
fixed for a while already as nowadays we have testcases involving a
webserver closing the connection on error (look for "closeOnError") and
no even remotely recent reports about it, but moving the content
clearance above the failure report is a valid change and shouldn't hurt.

Closes: #465572
8 years agoadd TMP/TEMP/TEMPDIR to the TMPDIR DropPrivileges dance
David Kalnischkies [Fri, 11 Nov 2016 08:18:49 +0000 (09:18 +0100)] 
add TMP/TEMP/TEMPDIR to the TMPDIR DropPrivileges dance

apt tools do not really support these other variables, but tools apt
calls might, so lets play save and clean those up as needed.

Reported-By: Paul Wise (pabs) on IRC
8 years agotravis: ignore profiling warning in test diffs
David Kalnischkies [Thu, 10 Nov 2016 20:28:12 +0000 (21:28 +0100)] 
travis: ignore profiling warning in test diffs

On Travis CI running tests with code coverage enabled sometimes
generates lines like:
  profiling:/path/to/file.gcda:Merge mismatch for function 257
It would be nice if we could resolve this somehow as it garbles the
statistics, but until then it is far more annoying that this causes
test failures for no good reason.

Gbp-Dch: Ignore

8 years agosupport 'apt build-dep .' (aka: without /)
David Kalnischkies [Thu, 10 Nov 2016 15:36:04 +0000 (16:36 +0100)] 
support 'apt build-dep .' (aka: without /)

Reported-By: Christoph Berg (Myon) on IRC
8 years agoimprove SOCKS error messages for http slightly
David Kalnischkies [Thu, 10 Nov 2016 09:37:29 +0000 (10:37 +0100)] 
improve SOCKS error messages for http slightly

The 0.0.0.0:0 tor reports is pretty useless by itself, but even if an IP
would be reported it is better to show the user the hostname we wanted
the proxy to connect to in the same error message. We improve upon it
further by looking for this bind address in particular and remap error
messages slightly to give users a better chance of figuring out what
went wrong. Upstream Tor can't do that as it is technically wrong.

8 years agorename Checksum-FileSize to Filesize in hashsum mismatch
David Kalnischkies [Wed, 9 Nov 2016 22:32:02 +0000 (23:32 +0100)] 
rename Checksum-FileSize to Filesize in hashsum mismatch

Some people do not recognize the field value with such an arcane name
and/or expect it to refer to something different (e.g. #839257).
We can't just rename it internally as its an avoidance strategy as such
fieldname existed previously with less clear semantics, but we can spare
the general public from this implementation detail.

8 years agoshow the conflicting distribution warning again
David Kalnischkies [Wed, 9 Nov 2016 18:57:21 +0000 (19:57 +0100)] 
show the conflicting distribution warning again

Sometimes you should really act upon your todos.
Especially if you have placed them directly in the code.

Closes: 841874
8 years agoreset HOME, USER(NAME), TMPDIR & SHELL in DropPrivileges
David Kalnischkies [Wed, 9 Nov 2016 18:15:01 +0000 (19:15 +0100)] 
reset HOME, USER(NAME), TMPDIR & SHELL in DropPrivileges

We can't cleanup the environment like e.g. sudo would do as you usually
want the environment to "leak" into these helpers, but some variables
like HOME should really not have still the value of the root user – it
could confuse the helpers (USER) and HOME isn't accessible anyhow.

Closes: 842877
8 years agofix three typos in sources & manpages
Chris Leick [Wed, 9 Nov 2016 16:42:40 +0000 (17:42 +0100)] 
fix three typos in sources & manpages

8 years agoadd a testcase for support of various build-dependency types
David Kalnischkies [Wed, 9 Nov 2016 15:17:28 +0000 (16:17 +0100)] 
add a testcase for support of various build-dependency types

See also c5f22e483cc0f31f2938874370ac776e40792069

Gbp-Dch: Ignore

8 years agoadd support for Build-Depends/Conflicts-Arch
Johannes Schauer [Wed, 9 Nov 2016 14:28:15 +0000 (15:28 +0100)] 
add support for Build-Depends/Conflicts-Arch

These new enum values might cause "interesting" behaviour in tools not
expecting them – like an old apt would think a Build-Conflicts-Arch is
some sort of Build-Depends – but that can't reasonably be avoided and
effects only packages using B-D/C-A so if there is any breakage the
tools can easily be adapted.

The APT_PKG_RELEASE number is increased so that libapt users can detect
the availability of these new enum fields via:
 #if APT_PKG_ABI > 500 || (APT_PKG_ABI == 500 && APT_PKG_RELEASE >= 1)

Closes: #837395
8 years agofix testcase expecting incorrect remove log from dpkg
David Kalnischkies [Wed, 9 Nov 2016 13:22:22 +0000 (14:22 +0100)] 
fix testcase expecting incorrect remove log from dpkg

dpkg 1.18.11 includes:
  * Do not log nor print duplicate dpkg removal action. We print
    “Removing <package> (<version>)” lines and log remove action twice
    when purging a package from frontends, because they usually first call
    --remove and then --purge sequentially. When purging a package which is
    already in config-files (i.e. it has been removed before), do not print
    nor log the remove action.

8 years agoDo not (re)start "apt-daily.system"
Michael Vogt [Wed, 9 Nov 2016 14:09:44 +0000 (15:09 +0100)] 
Do not (re)start "apt-daily.system"

This unit runs unattended-upgrades. If apt itself is part of the
upgrade a restart of the unit will kill unattended-upgrades. This
will lead to an inconsistent dpkg status.

Closes: #841763
Thanks: Alexandre Detiste

8 years agokeep Release.gpg on untrusted to trusted IMS-Hit
David Kalnischkies [Thu, 6 Oct 2016 16:30:51 +0000 (18:30 +0200)] 
keep Release.gpg on untrusted to trusted IMS-Hit

A user relying on the deprecated behaviour of apt-get to accept a source
with an unknown pubkey to install a package containing the key expects
that the following 'apt-get update' causes the source to be considered
as trusted, but in case the source hadn't changed in the meantime this
wasn't happening: The source kept being untrusted until the Release file
was changed.

This only effects sources not using InRelease and only apt-get, the apt
binary downright refuses this course of actions, but it is a common way
of adding external sources.

Closes: 838779
8 years agodon't install new deps of candidates for kept back pkgs
David Kalnischkies [Sat, 10 Sep 2016 17:52:11 +0000 (19:52 +0200)] 
don't install new deps of candidates for kept back pkgs

In effect this is an extension of the 6 years old commit
a8dfff90aa740889eb99d00fde5d70908d9fd88a which uses the autoremover to
remove packages again from the solution which are no longer needed to be
there. Commonly these are dependencies of packages we end up not
installed due to problem resolver decisions. Slightly less common is
the situation we deal with here: a package which we wanted to upgrade
sporting a new dependency, but ended up holding back.

The problem is that all versions of an installed reverse dependencies can
bring back a "garbage" package – we need to do this as there is
nothing inherently wrong in having garbage packages installed or upgrade
them, which itself would have garbage dependencies, so just blindly
killing all new garbage packages would prevent the upgrade (and actually
generate errors). What we should be doing is looking only at the version
we will have on the system, disregarding all old/new reverse dependencies.

Reported-By: Stuart Prescott (themill) on IRC
8 years agoDutch manpages translation update
Frans Spiesschaert [Wed, 2 Nov 2016 08:30:36 +0000 (09:30 +0100)] 
Dutch manpages translation update

Closes: #840757
8 years agoDutch program translation update
Frans Spiesschaert [Wed, 2 Nov 2016 08:27:03 +0000 (09:27 +0100)] 
Dutch program translation update

Closes: #840552
8 years agofix invalid XML in German manpage translation
James Clarke [Wed, 2 Nov 2016 07:55:46 +0000 (08:55 +0100)] 
fix invalid XML in German manpage translation

Gbp-Dch: Ignore

8 years agoUpdated German documentation translation
Chris Leick [Sat, 29 Oct 2016 11:04:29 +0000 (13:04 +0200)] 
Updated German documentation translation

8 years agoRelease 1.3.1 1.3.1
Julian Andres Klode [Tue, 4 Oct 2016 17:43:46 +0000 (19:43 +0200)] 
Release 1.3.1

8 years agotravis: Move codecov from after_success to after_script
Julian Andres Klode [Sun, 2 Oct 2016 16:12:50 +0000 (18:12 +0200)] 
travis: Move codecov from after_success to after_script

We always want to run codecov test, even if there are spurious
failures. We should really work around those failures more, though,
it is starting to annoy me.

8 years agoTurkish program translation update
Mert Dirik [Tue, 4 Oct 2016 17:36:09 +0000 (19:36 +0200)] 
Turkish program translation update

Closes: #838731
8 years agoJapanese manpages translation update
victory [Mon, 12 Sep 2016 14:02:10 +0000 (23:02 +0900)] 
Japanese manpages translation update

8 years agoDo not read stderr from proxy autodetection scripts
Julian Andres Klode [Sun, 2 Oct 2016 15:20:33 +0000 (17:20 +0200)] 
Do not read stderr from proxy autodetection scripts

This fixes a regression introduced in
  commit 8f858d560e3b7b475c623c4e242d1edce246025a

  don't leak FD in AutoProxyDetect command return parsing

which accidentally made the proxy autodetection code also read
the scripts output on stderr, not only on stdout when it switched
the code from popen() to Popen().

Reported-By: Tim Small <tim@seoss.co.uk>
8 years agoRelease 1.3 1.3
Julian Andres Klode [Tue, 20 Sep 2016 21:54:19 +0000 (23:54 +0200)] 
Release 1.3

8 years agoVersionHash: Do not skip too long dependency lines
Julian Andres Klode [Sun, 18 Sep 2016 11:24:35 +0000 (13:24 +0200)] 
VersionHash: Do not skip too long dependency lines

If the dependency line does not contain spaces in the repository
but does in the dpkg status file (because dpkg normalized the
dependency list), the dpkg line might be longer than the line
in the repository. If it now happens to be longer than 1024
characters, it would be skipped, causing the hashes to be
out of date.

Note that we have to bump the minor cache version again as
this changes the format slightly, and we might get mismatches
with an older src cache otherwise.

Fixes Debian/apt#23

8 years agotravis: Add coverage testing using codecov.io
Julian Andres Klode [Sun, 11 Sep 2016 15:45:20 +0000 (17:45 +0200)] 
travis: Add coverage testing using codecov.io

This allows fully automated code coverage testing, which is
basically awesome. To allow the methods and solvers and stuff
which run as _apt to write to our build directory, we need to
adjust the permissions a bit, but otherwise it's OK.

Gbp-Dch: ignore

8 years agoCoverage: Do not print messages from gcov
Julian Andres Klode [Sun, 11 Sep 2016 11:58:40 +0000 (13:58 +0200)] 
Coverage: Do not print messages from gcov

We need to ignore messages from gcov. All those messages
start with profiling: and are printed using vfprintf(), so
the only thing we can do is add a library overriding those
functions and linking apt-pkg to it.

8 years agoCMake: Add coverage build type
Julian Andres Klode [Sun, 11 Sep 2016 11:53:49 +0000 (13:53 +0200)] 
CMake: Add coverage build type

This allows us to easily test coverage

8 years agotravis: use ninja and ccache for building
Julian Andres Klode [Sun, 11 Sep 2016 11:49:23 +0000 (13:49 +0200)] 
travis: use ninja and ccache for building

This cleans up the output a bit, it should also improve performance,
but unfortunately, this does not really seem to be the case.

Gbp-Dch: ignore

8 years agotest: Always install dpkg into our tests, regardless of MA
Julian Andres Klode [Wed, 7 Sep 2016 11:35:40 +0000 (13:35 +0200)] 
test: Always install dpkg into our tests, regardless of MA

Even if we only configure a single architecture, install dpkg, so
dpkg can assert multi arch correctly. This also has the nice side
effect of making single architecture and multiple architecture
test cases more uniform.

This fixes a regression from f878d3a862128bc1385616751ae1d78246b1bd01
("test: Assert multi-arch in the chroot").

8 years agotest: framework: Ensure copied status files have trailing lines
Julian Andres Klode [Wed, 7 Sep 2016 11:23:26 +0000 (13:23 +0200)] 
test: framework: Ensure copied status files have trailing lines

If we copied one of the existing status files, we might not have
a trailing newline, so let's add one.

Gbp-Dch: ignore

8 years agoedsp: try 2 to read responses even if writing failed
David Kalnischkies [Wed, 7 Sep 2016 08:21:01 +0000 (10:21 +0200)] 
edsp: try 2 to read responses even if writing failed

Commit b60c8a89c281f2bb945d426d2215cbf8f5760738 improved the situation,
but due to inconsistency mostly for planners, not for solvers. As the
idea of hiding errors if we show another error is a bit scary (as the
extern error might be a followup of our intern error, rather than the
reason for our intern error as it is at the moment) we don't discard the
errors, but if we got an extern error we show them directly removing
them from the error list at the end of the run – that list will contain
the extern error which hopefully gives us the best of both worlds.

The problem itself is the same as before: The externals exiting before
apt is done talking to them.

Reported-By: Johannes 'josch' Schauer on IRC
8 years agoabort connection on '.' target replies in SRV
David Kalnischkies [Sun, 4 Sep 2016 16:53:26 +0000 (18:53 +0200)] 
abort connection on '.' target replies in SRV

Commit 3af3ac2f5ec007badeded46a94be2bd06b9917a2 (released in 1.3~pre1)
implements proper fallback for SRV, but that works actually too good
as the RFC defines that such an SRV record should indicate that the
server doesn't provide this service and apt should respect this.

The solution is hence to fail again as requested even if that isn't what
the user (and perhaps even the server admins) wanted. At least we will
print a message now explicitly mentioning SRV to point people in the
right direction.

Reported-In: https://bugs.kali.org/view.php?id=3525
Reported-By: Raphaël Hertzog
8 years agoupdate testing hints in README.md
David Kalnischkies [Fri, 2 Sep 2016 12:19:54 +0000 (14:19 +0200)] 
update testing hints in README.md

Gbp-Dch: Ignore

8 years agoRelease 1.3~rc4 1.3_rc4
Julian Andres Klode [Fri, 2 Sep 2016 18:30:33 +0000 (20:30 +0200)] 
Release 1.3~rc4

8 years agodebian: Pass -O to make to get readable build logs
Julian Andres Klode [Fri, 2 Sep 2016 18:11:13 +0000 (20:11 +0200)] 
debian: Pass -O to make to get readable build logs

Normally make just lets every job write its output directly,
making the log fairly hard to read with high concurrency.

8 years agodebian: Move bugscript to old location for overlayfs xdev issue
Julian Andres Klode [Fri, 2 Sep 2016 18:07:32 +0000 (20:07 +0200)] 
debian: Move bugscript to old location for overlayfs xdev issue

dpkg on overlayfs cannot rename apt/script to apt, because overlayfs
will not let it move apt to a backup name, responding with XDEV
instead.

8 years agoacquire: Use priority queues and a 3 stage pipeline design
Julian Andres Klode [Wed, 15 Jun 2016 21:13:43 +0000 (23:13 +0200)] 
acquire: Use priority queues and a 3 stage pipeline design

Employ a priority queue instead of a normal queue to hold
the items; and only add items to the running pipeline if
their priority is the same or higher than the priority
of items in the queue.

The priorities are designed for a 3 stage pipeline system:

In stage 1, all Release files and .diff/Index files are fetched. This
allows us to determine what files remain to be fetched, and thus
ensures a usable progress reporting.

In stage 2, all Pdiff patches are fetched, so we can apply them
in parallel with fetching other files in stage 3.

In stage 3, all other files are fetched (complete index files
such as Contents, Packages).

Performance improvements, mainly from fetching the pdiff patches
before complete files, so they can be applied in parallel:

For the 01 Sep 2016 03:35:23 UTC -> 02 Sep 2016 09:25:37 update
of Debian unstable and testing with Contents and appstream for
amd64 and i386, update time reduced from 37 seconds to 24-28
seconds.

Previously, apt would first download new DEP11 icon tarballs
and metadata files, causing the CPU to be idle. By fetching
the diffs in stage 2, we can now patch our contents and Packages
files while we are downloading the DEP11 stuff.

8 years agoCMake: apt-pkg: Use correct ICONV_INCLUDE_DIRS variable
Julian Andres Klode [Fri, 2 Sep 2016 12:44:08 +0000 (14:44 +0200)] 
CMake: apt-pkg: Use correct ICONV_INCLUDE_DIRS variable

This accidentally used ICONV_DIRECTORIES, which does not
even exist. Weird.

8 years agoCMake: test/libapt: Use a prebuilt GTest library if available
Julian Andres Klode [Fri, 2 Sep 2016 12:09:52 +0000 (14:09 +0200)] 
CMake: test/libapt: Use a prebuilt GTest library if available

If a non-existing source directory is specified, try finding
the system gtest library. Debian derived distributions are
a bit strange because they only ship the source code and
not the library...

8 years agogitignore: Add generated docbook stylesheets
Julian Andres Klode [Fri, 2 Sep 2016 12:33:15 +0000 (14:33 +0200)] 
gitignore: Add generated docbook stylesheets

I switched them over to generated files in commit
9fb81c6e54a2fe05c0ad0b877fd32f30358e3877, but forgot
to add them to the ignore file.

Gbp-Dch: ignore

8 years agosupport long keyid and fingerprint in gpgv's GOODSIG
David Kalnischkies [Thu, 1 Sep 2016 16:55:20 +0000 (18:55 +0200)] 
support long keyid and fingerprint in gpgv's GOODSIG

In gpgv1 GOODSIG (and the other messages of status-fd) are documented as
sending the long keyid. In gpgv2 it is documented to be either long
keyid or the fingerprint. At the moment it is still the long keyid, but
the documentation hints at the possibility of changing this.

We care about this for Signed-By support as we detect this way if the
right fingerprint has signed this file (or not). The check itself is
done via VALIDSIG which always is a fingerprint, but there must also be
a GOODSIG (as expired sigs are valid, too) found to be accepted which
wouldn't be found in the fingerprint-case and the signature hence
refused.

8 years agore-add apt breaks/replaces apt-utils (<< 1.3~exp2~)
David Kalnischkies [Thu, 1 Sep 2016 06:53:16 +0000 (08:53 +0200)] 
re-add apt breaks/replaces apt-utils (<< 1.3~exp2~)

The recently added (increased actually) Breaks were accidently dropped
while our set of mostly old and outdated breaks was cleaned up.

Regression-From: 20d2f4a4f164cd9026dad698e471c95d7c28973b
Previously-Add-In: ab07af708e49c9219940ffd3e20a01c763267e03
Closes: #836220
8 years agotests: silence -Wmissing-declarations
David Kalnischkies [Thu, 1 Sep 2016 06:49:22 +0000 (08:49 +0200)] 
tests: silence -Wmissing-declarations

Gbp-Dch: Ignore
Reported-By: gcc -Wmissing-declarations
8 years agotry not to call memcpy with length 0 in hash calculations
David Kalnischkies [Wed, 31 Aug 2016 08:11:07 +0000 (10:11 +0200)] 
try not to call memcpy with length 0 in hash calculations

memcpy is marked as nonnull for its input, but ignores the input anyhow
if the declared length is zero. Our SHA2 implementations do this as
well, it was "just" MD5 and SHA1 missing, so we add the length check
here as well as along the callstack as it is really pointless to do all
these method calls for "nothing".

Reported-By: gcc -fsanitize=undefined
8 years agotest-apt-cdrom: Fix for gnupg 2.1.15
Julian Andres Klode [Thu, 1 Sep 2016 08:57:49 +0000 (10:57 +0200)] 
test-apt-cdrom: Fix for gnupg 2.1.15

gpg annoyingly changed its output and broke our test suite
again by adding two extra lines about key type and issuer.
Really annoying.

Those lines also have more than one space after the colon,
so let's use \s* there - and also change the other lines to
support variable length whitespace in case gpg decides to
break things there too.

8 years agoBase256ToNum: Fix uninitialized value
Julian Andres Klode [Wed, 31 Aug 2016 15:18:07 +0000 (17:18 +0200)] 
Base256ToNum: Fix uninitialized value

If the inner Base256ToNum() returned false, it did not set
Num to a new value, causing it to be uninitialized, and thus
might have caused the function to exit despite a good result.

Also document why the Res = Num, if (Res != Num) magic is done.

Reported-By: valgrind
8 years agoTagFile: Fix off-by-one errors in comment stripping
Julian Andres Klode [Wed, 31 Aug 2016 15:01:04 +0000 (17:01 +0200)] 
TagFile: Fix off-by-one errors in comment stripping

Adding 1 to the value of d->End - current makes restLength one byte
too long: If we pass memchr(current, ..., restLength) has thus
undefined behavior.

Also, reading the value of current has undefined behavior if
current >= d->End, not only for current > d->End:

Consider a string of length 1, that is d->End = d->Current + 1.
We can only read at d->Current + 0, but d->Current + 1 is beyond
the end of the string.

This probably caused several inexplicable build failures on hurd-i386
in the past, and just now caused a build failure on Ubuntu's amd64
builder.

Reported-By: valgrind
8 years agotest/integration/test-srcrecord: Make executable
Julian Andres Klode [Wed, 31 Aug 2016 10:25:38 +0000 (12:25 +0200)] 
test/integration/test-srcrecord: Make executable

I actually tried to amend the previous commit, but apparently
I forgot to add the file mode change.

Gbp-Dch: ignore

8 years agoFix segfault and out-of-bounds read in Binary fields
Julian Andres Klode [Wed, 31 Aug 2016 09:36:44 +0000 (11:36 +0200)] 
Fix segfault and out-of-bounds read in Binary fields

If a Binary field contains one or more spaces before a comma, the
code produced a segmentation fault, as it accidentally set a pointer
to 0 instead of the value of the pointer.

If the comma is at the beginning of the field, the code would
create a binStartNext that points one element before the start
of the string, which is undefined behavior.

We also need to check that we do not exit the string during the
replacement of spaces before commas: A string of the form " ,"
would normally exit the boundary of the Buffer:

binStartNext = offset 1 ','
binEnd = offset 0 ' '
isspace_ascii(*binEnd) = true => --binEnd
      => binEnd = - 1

We get rid of the problem by only allowing spaces to be eliminated
if they are not the first character of the buffer:

        binStartNext = offset 1 ','
        binEnd = offset 0       ' '
        binEnd > buffer = false, isspace_ascii(*binEnd) = true
 => exit loop
                => binEnd remains 0

8 years agoRelease 1.3~rc3 1.3_rc3
Julian Andres Klode [Tue, 30 Aug 2016 20:20:55 +0000 (22:20 +0200)] 
Release 1.3~rc3

8 years agotest: Pass -d to dpkg-buildpackage
Julian Andres Klode [Tue, 30 Aug 2016 15:37:59 +0000 (17:37 +0200)] 
test: Pass -d to dpkg-buildpackage

This works around an issue on Fedora where dpkg complains about
missing  build-essential:

dpkg-checkbuilddeps: Unmet build dependencies: build-essential:native

Gbp-Dch: ignore

8 years agoAdd shippable.yml for CI on Shippable
Julian Andres Klode [Mon, 29 Aug 2016 13:46:10 +0000 (15:46 +0200)] 
Add shippable.yml for CI on Shippable

This uses the current Ubuntu 16.04 for testing, but it only runs
one run, presumably as root.

8 years agotest, travis: Quieter testing with a new -qq mode
Julian Andres Klode [Fri, 19 Aug 2016 18:37:28 +0000 (20:37 +0200)] 
test, travis: Quieter testing with a new -qq mode

Introduce a new -qq mode for our integration test framework,
and make travis use it.

The new -qq mode sets MSGLEVEL to 1. In MSGLEVEL=1, no messages
are generated for passed tests, and all testcase filenames are
printed in the same line.

Also install first in travis, do not ls the installed output
and run the install with chronic, so we only get output if it
failed.

Gbp-Dch: ignore

8 years agoSwitch documentation from httpredir.d.o to deb.d.o
Julian Andres Klode [Mon, 29 Aug 2016 13:09:05 +0000 (15:09 +0200)] 
Switch documentation from httpredir.d.o to deb.d.o

The CDN service deb.d.o is more reliable than the http
redirector, so switch to it for our examples.

8 years agoAdd new symbols to symbols file
Julian Andres Klode [Mon, 29 Aug 2016 13:07:39 +0000 (15:07 +0200)] 
Add new symbols to symbols file

There are some optional symbols missing now, but let's keep
them in for now, maybe they reappear/still exist on other
platforms.

The newly added ones actually appeared in older versions
already, but there's no huge gain in finding out when precisely
we added them.

8 years agoinit: Add Dir::Bin::planners default entry
Julian Andres Klode [Mon, 29 Aug 2016 13:04:51 +0000 (15:04 +0200)] 
init: Add Dir::Bin::planners default entry

Apparently we had no default defined for this.

Reported-By: David Kalnischkies
8 years agoinit: Fix path to external solvers
Julian Andres Klode [Mon, 29 Aug 2016 12:58:13 +0000 (14:58 +0200)] 
init: Fix path to external solvers

This accidentally had two apt in it. This fixes a regression
from commit 8757a0f.

Gbp-Dch: ignore

8 years agodon't loop on pinning pkgs from absolute debs by regex
David Kalnischkies [Sun, 28 Aug 2016 20:56:17 +0000 (22:56 +0200)] 
don't loop on pinning pkgs from absolute debs by regex

An absolute filename for a *.deb file starts with a /. A package with
the name of the file is inserted in the cache which is provided by the
"real" package for internal reasons. The pinning code detects a regex
based wildcard by having the regex start with /. That is no problem
as a / can not be included in a package name… expect that our virtual
filename package can and does.

We fix this two ways actually: First, a regex is only being considered a
regex if it also ends with / (we don't support flags). That stops our
problem with the virtual filename packages already, but to be sure we
also do not enter the loop if matcher and package name are equal.

It has to be noted that the creation of pins for virtual packages like
the here effected filename packages is pointless as only versions can be
pinned, but checking that a package is really purely virtual is too
costly compared to just creating an unused pin.

Closes: 835818
8 years agorandomize acquire order for same type index files
David Kalnischkies [Sun, 28 Aug 2016 10:58:20 +0000 (12:58 +0200)] 
randomize acquire order for same type index files

Without randomizing the order in which we download the index files we
leak needlessly information to the mirrors of which architecture is
native or foreign on this system. More importantly, we leak the order in
which description translations will be used which in most cases will e.g.
have the native tongue first.

Note that the leak effect in practice is limited as apt detects if a file
it wants to download is already available in the latest version from a
previous download and does not query the server in such cases. Combined
with the fact that Translation files are usually updated infrequently
and not all at the same time, so a mirror can never be sure if it got asked
about all files the user wants.

8 years agoMerge branch 'portability/freebsd'
Julian Andres Klode [Fri, 26 Aug 2016 22:31:03 +0000 (00:31 +0200)] 
Merge branch 'portability/freebsd'

8 years agoCMake: Add missing iconv dependency
Julian Andres Klode [Fri, 26 Aug 2016 15:55:28 +0000 (17:55 +0200)] 
CMake: Add missing iconv dependency

FreeBSD has two iconv systems: It ships an iconv.h itself,
and symbols for that in the libc. But there's also the port
of GNU libiconv, which unfortunately for us, Doxygen depends
on.

This changes things to prefer a separate libiconv library
over the system one; that is, the port on FreeBSD.

Gbp-Dch: ignore

8 years agoMake root group configurable via ROOT_GROUP
Julian Andres Klode [Thu, 25 Aug 2016 14:25:00 +0000 (16:25 +0200)] 
Make root group configurable via ROOT_GROUP

This is needed on BSD where root's default group is wheel, not
root.

8 years agotest: Use :$(id -gn) instead of :root (when run as root)
Julian Andres Klode [Thu, 25 Aug 2016 13:35:32 +0000 (15:35 +0200)] 
test: Use :$(id -gn) instead of :root (when run as root)

On BSD systems, the root group is wheel, not root, so let's
just use the default group here.

Gbp-Dch: ignore

8 years agotest: Assert multi-arch in the chroot
Julian Andres Klode [Thu, 25 Aug 2016 13:02:13 +0000 (15:02 +0200)] 
test: Assert multi-arch in the chroot

The host system might not have a dpkg installed, which makes
dpkg fail with:

  dpkg not recorded as installed, cannot check for multi-arch support!

That's entirely useless of course. We want to know if dpkg could
support multi-arch in our chroot, so we pseudo-install dpkg into
the chroot and pretend it's version is one version higher than
the minimum dpkg version, so dpkg --assert-multi-arch works on
recent dpkgs.

Gbp-Dch: ignore

8 years agochangelog: Respect Dir setting for local changelog getting
Julian Andres Klode [Thu, 25 Aug 2016 12:24:49 +0000 (14:24 +0200)] 
changelog: Respect Dir setting for local changelog getting

This fixes issues with chroots, but the goal here was to get
the test suite working on systems without dpkg.

8 years agoLower-case uname -r output in kernel autoremove helper
Julian Andres Klode [Wed, 24 Aug 2016 14:28:47 +0000 (16:28 +0200)] 
Lower-case uname -r output in kernel autoremove helper

This is needed on FreeBSD which has versions like 11.0-RC1,
otherwise the tests would fail.

8 years agotest: More portable check for dpkg versions
Julian Andres Klode [Wed, 24 Aug 2016 14:21:12 +0000 (16:21 +0200)] 
test: More portable check for dpkg versions

This check should work regardless if dpkg was installed by dpkg
or by a native package manager like RPM or pkg.

Gbp-Dch: ignore

8 years agotest: Use a file to determine TEST_DEFAULT_GROUP
Julian Andres Klode [Wed, 24 Aug 2016 14:05:37 +0000 (16:05 +0200)] 
test: Use a file to determine TEST_DEFAULT_GROUP

This is more safe against sticky bits. For example, in FreeBSD
all files created in /tmp have the group set to wheel.

Gbp-Dch: ignore

8 years agoapt-inst: debfile: Pass comp. Name to ExtractTar, not Binary
Julian Andres Klode [Wed, 24 Aug 2016 13:10:08 +0000 (15:10 +0200)] 
apt-inst: debfile: Pass comp. Name to ExtractTar, not Binary

In the old days, apt-inst used to use binaries, but now it
uses the built-in support and matches using Name, and not a
Binary.

8 years agotest: Allow db_dump-5 instead of db_dump
Julian Andres Klode [Wed, 24 Aug 2016 11:36:26 +0000 (13:36 +0200)] 
test: Allow db_dump-5 instead of db_dump

Gbp-Dch: ignore

8 years agoAlways pass a directory to find before an option
Julian Andres Klode [Wed, 24 Aug 2016 00:22:45 +0000 (02:22 +0200)] 
Always pass a directory to find before an option

On BSD systems, we cannot simply use find -name or stuff, we
always have to pass a directory name first.

Gbp-Dch: ignore

8 years agotest: Fix invalid quoting in variable expansion
Julian Andres Klode [Tue, 23 Aug 2016 23:51:50 +0000 (01:51 +0200)] 
test: Fix invalid quoting in variable expansion

This breaks the tests with FreeBSD's shell, and is not needed -
it works fine without it.

Gbp-Dch: ignore