]> git.saurik.com Git - apt.git/log
apt.git
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

8 years agotest: Use printf "%b\n" instead of echo for strings with '\'
Julian Andres Klode [Tue, 23 Aug 2016 23:40:43 +0000 (01:40 +0200)] 
test: Use printf "%b\n" instead of echo for strings with '\'

Use of echo with special characters is not portable. On a normal
POSIX system, the behavior with backslash escaped strings is
implementation-defined. On an XSI-conformant system, they must
be interpreted.

A way out is the printf command - printf "%b" specifies that
the following argument is to be printed with backslash escapes
interpreted.

Gbp-Dch: ignore

8 years agotest: Make sure we always find a dpkg in status file
Julian Andres Klode [Tue, 23 Aug 2016 22:48:22 +0000 (00:48 +0200)] 
test: Make sure we always find a dpkg in status file

Especially on non-Debian platforms, dpkg might not list itself
on the host system, and thus dpkg --assert-multi-arch fails.

Gbp-Dch: ignore

8 years agotest: Avoid use of /proc/self/fd
Julian Andres Klode [Tue, 23 Aug 2016 22:25:26 +0000 (00:25 +0200)] 
test: Avoid use of /proc/self/fd

Use /dev/fd in test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch,
skip test-no-fds-leaked-to-maintainer-scripts (it is not guaranteed
that /dev/fd contains all file descriptors), and avoid the unneeded
use of /proc/fd in another test case.

Gbp-Dch: ignore

8 years agotest: Explicitly pass --admindir=var/lib/dpkg to dpkg
Julian Andres Klode [Tue, 23 Aug 2016 22:08:39 +0000 (00:08 +0200)] 
test: Explicitly pass --admindir=var/lib/dpkg to dpkg

Our test suite assumes that dpkg's admindir is var/lib/dpkg. This
might not always be true; for example, on FreeBSD, it is located
at /var/db/dpkg.

Gbp-Dch: ignore

8 years agotest: Fix building of noopchroot
Julian Andres Klode [Tue, 23 Aug 2016 21:37:36 +0000 (23:37 +0200)] 
test: Fix building of noopchroot

Gbp-Dch: ignore

8 years agotest: Get rid of debhelper rules.tiny example dep
Julian Andres Klode [Tue, 23 Aug 2016 21:19:14 +0000 (23:19 +0200)] 
test: Get rid of debhelper rules.tiny example dep

Gbp-Dch: ignore

8 years agotest: Allow moreutils-parallel instead of parallel
Julian Andres Klode [Tue, 23 Aug 2016 21:14:05 +0000 (23:14 +0200)] 
test: Allow moreutils-parallel instead of parallel

That's what it's called on FreeBSD.

Gbp-Dch: ignore

8 years agotest: Allow stunnel to be used instead of stunnel4
Julian Andres Klode [Tue, 23 Aug 2016 21:01:18 +0000 (23:01 +0200)] 
test: Allow stunnel to be used instead of stunnel4

This is needed for Fedora and FreeBSD.

Gbp-Dch: ignore

8 years agotest: Substitute GNU commands for other commands where available
Julian Andres Klode [Tue, 23 Aug 2016 19:47:54 +0000 (21:47 +0200)] 
test: Substitute GNU commands for other commands where available

We are simply checking for gnuCMD and gCMD for each command we
are interested in.

Gbp-Dch: ignore

8 years agotest: Use C locale instead of C.UTF-8
Julian Andres Klode [Tue, 23 Aug 2016 19:53:39 +0000 (21:53 +0200)] 
test: Use C locale instead of C.UTF-8

Gbp-Dch: ignore

8 years agoMake directory paths configurable
Julian Andres Klode [Tue, 23 Aug 2016 17:41:58 +0000 (19:41 +0200)] 
Make directory paths configurable

This allows other vendors to use different paths, or to build
your own APT in /opt for testing. Note that this uses + 1 in
some places, as the paths we receive are absolute, but we need
to strip of the initial /.

8 years agoapt-key: Only use readlink -f for existing components
Julian Andres Klode [Tue, 23 Aug 2016 19:01:06 +0000 (21:01 +0200)] 
apt-key: Only use readlink -f for existing components

On FreeBSD, readlink -f requires the last component
to exist.

8 years agoUse C locale instead of C.UTF-8 for protocol strings
Julian Andres Klode [Tue, 23 Aug 2016 18:19:11 +0000 (20:19 +0200)] 
Use C locale instead of C.UTF-8 for protocol strings

The C.UTF-8 locale is not portable, so we need to use C, otherwise
we crash on other systems. We can use std::locale::classic() for
that, which might also be a bit cheaper than using locale("C").

8 years agoCMake: Add support for libintl
Julian Andres Klode [Tue, 23 Aug 2016 16:48:43 +0000 (18:48 +0200)] 
CMake: Add support for libintl

This basically just links everything to libintl if USE_NLS is
on. It would be better to just link those targets that are
actually translated, but doing so is a huge PITA.

Also move the include_directories() for the build-tree include/
directory to the top of the CMakeLists.txt, otherwise it only
gets passed after Intl_INCLUDE_DIRS, which means we will built
against installed apt-pkg headers (if any) instead of our own.

Gbp-Dch: ignore

8 years agoAccept --autoremove as alias for --auto-remove
Julian Andres Klode [Fri, 26 Aug 2016 14:14:13 +0000 (16:14 +0200)] 
Accept --autoremove as alias for --auto-remove

I probably missed that when I did the usability work. But better
late than never.

8 years agoCMake: Handle Berkeley DB on FreeBSD
Julian Andres Klode [Tue, 23 Aug 2016 10:48:25 +0000 (12:48 +0200)] 
CMake: Handle Berkeley DB on FreeBSD

The BSD systems still ship their own db.h with a historical
BSD implementation, which is preferred by CMake, as it searches
its default path first. We thus have to disable the DEFAULT_PATH
for the search, unfortunately. We also need to pass the correct
include directory to the target.

Furthermore, on FreeBSD the library is called db-<VERSION>, so
let's add db-5 to the list of allowed names.

Gbp-Dch: ignore

8 years agomethods/connect.cc: Only use AI_IDN if defined
Julian Andres Klode [Tue, 23 Aug 2016 12:57:11 +0000 (14:57 +0200)] 
methods/connect.cc: Only use AI_IDN if defined

Gbp-Dch: ignore

8 years agoCMake/private-download: Fix statfs includes on FreeBSD
Julian Andres Klode [Tue, 23 Aug 2016 12:40:46 +0000 (14:40 +0200)] 
CMake/private-download: Fix statfs includes on FreeBSD

On FreeBSD, we have to include sys/params.h and sys/mount.h,
not sys/vfs.h.

Gbp-Dch: ignore

8 years agoCMake: Add FindLZ4 and FindLZMA
Julian Andres Klode [Tue, 23 Aug 2016 12:13:24 +0000 (14:13 +0200)] 
CMake: Add FindLZ4 and FindLZMA

This makes things work with /usr/local on FreeBSD.

Gbp-Dch: ignore

8 years agoCMake: Do not use -lresolv if res_init exists in libc
Julian Andres Klode [Tue, 23 Aug 2016 11:42:54 +0000 (13:42 +0200)] 
CMake: Do not use -lresolv if res_init exists in libc

Gbp-Dch: ignore

8 years agoCMake: Do not hardcode -ldl
Julian Andres Klode [Tue, 23 Aug 2016 11:38:19 +0000 (13:38 +0200)] 
CMake: Do not hardcode -ldl

Does not exist on FreeBSD

Gbp-Dch: ignore

8 years agoCMake: Handle endian.h locations on other platforms
Julian Andres Klode [Mon, 22 Aug 2016 20:54:07 +0000 (22:54 +0200)] 
CMake: Handle endian.h locations on other platforms

Gbp-Dch: ignore

8 years agoCMake: Handle BSD platforms with sig_t instead of sighandler_t
Julian Andres Klode [Mon, 22 Aug 2016 20:45:19 +0000 (22:45 +0200)] 
CMake: Handle BSD platforms with sig_t instead of sighandler_t

Somewhat annoying, but OK. Might want to switch to something more
clever to get rid of the typedef at all.

Gbp-Dch: ignore

8 years agoAdd missing includes and external definitions
Julian Andres Klode [Tue, 23 Aug 2016 11:15:15 +0000 (13:15 +0200)] 
Add missing includes and external definitions

Several modules use std::array without including the
array header. Bad modules.

Some modules use STDOUT_FILENO and friends, or close()
without including unistd.h, where they are defined.

One module also uses WIFEXITED() without including
sys/wait.h.

Finally, environ is not specified to be defined in unistd.h. We
are required to define it ourselves according to POSIX, so let's
do that.

8 years agotreat .ddeb files like .deb, especially for dpkg
David Kalnischkies [Thu, 25 Aug 2016 13:52:30 +0000 (15:52 +0200)] 
treat .ddeb files like .deb, especially for dpkg

Ubuntu uses *.ddeb files for their debug packages, but the interface we
are using since f495992428a396e0f98886c9a761a804aa161c68 to talk to dpkg
isn't supporting *.ddeb files. This used to work previously as apt itself
isn't caring about the filenames at all and if they are explicitly
mentioned dpkg will accept all, too.

It might or might not be a good idea to patch dpkg, too, but regardless
of it happening, we don't want to couple us to closely to dpkg for this
minor feature but testing for this at runtime as it would delay shipping
the fix for the too long commandlines further.

It is also questionable if it is really a good idea to allow any file
extension to be used here (like .foobar in the testcase), but we used to
and we tend to avoid breaking existing usecases if we can help it.

As a bonus, this also allows the installation of ddeb files directly
from the commandline as you can with deb files already. We continue to
ignore udeb through as the user-mistake to useful ratio is too high.

LP: #1616909

8 years agoshow apt-key warnings in apt update
David Kalnischkies [Thu, 25 Aug 2016 13:22:28 +0000 (15:22 +0200)] 
show apt-key warnings in apt update

In 105503b4b470c124bc0c271bd8a50e25ecbe9133 we got a warning implemented
for unreadable files which greatly improves the behavior of apt update
already as everything will work as long as we don't need the keys
included in these files. The behavior if they are needed is still
strange through as update will fail claiming missing keys and a manual
test (which the user will likely perform as root) will be successful.

Passing the new warning generated by apt-key through to apt is a bit
strange from an interface point of view, but basically duplicating the
warning code in multiple places doesn't feel right either. That means we
have no translation for the message through as apt-key has no i18n yet.

It also means that if the user has a bunch of sources each of them will
generate a warning for each unreadable file which could result in quite
a few duplicated warnings, but "too many" is better than none.

Closes: 834973
8 years agoapt-key: warn instead of fail on unreadable keyrings
David Kalnischkies [Thu, 25 Aug 2016 10:42:36 +0000 (12:42 +0200)] 
apt-key: warn instead of fail on unreadable keyrings

apt-key has inconsistent behaviour if it can't read a keyring file:
Commands like 'list' skipped silently over such keyrings while 'verify'
failed hard resulting in apt to report cconfusing gpg errors (#834973).

As a first step we teach apt-key to be more consistent here skipping in
all commands over unreadable keyrings, but issuing a warning in the
process, which is as usual for apt commands displayed at the end of the
run.

8 years agodo not restore selections for already purged packages
David Kalnischkies [Wed, 24 Aug 2016 19:57:53 +0000 (21:57 +0200)] 
do not restore selections for already purged packages

In most cases apt was already skipping the (re)setting of packages as
to be removed/purged if dpkg had told us that it already did, but we
haven't dealt with it in the most obvious of the cases: Selections set
for packages we touched in this operation which either restores
selections even dpkg would have overridden or e.g. tries to restore a
purge selection for a package which was just purged – does not happen
with apt itself as it isn't using selections in this way, but higher
frontends like aptitude do.

The result in the later case is a warning printed by dpkg that we try to
set selections for an unknown package, which is harmless per se, but can
be confusing for users and we really shouldn't cause warnings in dpkg if
we can help it.

Reported-By: Guillem Jover on IRC
8 years agoimprove code & doc for aquire weak/loop failing
David Kalnischkies [Wed, 24 Aug 2016 19:49:34 +0000 (21:49 +0200)] 
improve code & doc for aquire weak/loop failing

Improve-Upon: 2e2865ae53a65c00dd55a892d5b48458f3110366
Reported-By: Julian Andres Klode
Gbp-Dch: Ignore

8 years agodo fail on weakhash/loop earlier in acquire
David Kalnischkies [Wed, 24 Aug 2016 07:47:48 +0000 (09:47 +0200)] 
do fail on weakhash/loop earlier in acquire

The bugreport shows a segfault caused by the code not doing the correct
magical dance to remove an item from inside a queue in all cases. We
could try hard to fix this, but it is actually better and also easier to
perform these checks (which cause instant failure) earlier so that they
haven't entered queue(s) yet, which in return makes cleanup trivial.

The result is that we actually end up failing "too early" as if we
wouldn't be careful download errors would be logged before that process
was even started. Not a problem for the acquire system, but likely to
confuse users and programs alike if they see the download process
producing errors before apt was technically allowed to do an acquire
(it didn't, so no violation, but it looks like it to the untrained eye).

Closes: 835195
8 years agoCMake: Define _WITH_GETLINE for FreeBSD
Julian Andres Klode [Tue, 23 Aug 2016 10:53:10 +0000 (12:53 +0200)] 
CMake: Define _WITH_GETLINE for FreeBSD

Gbp-Dch: ignore

8 years agoCMake: Do not add po/ if USE_NLS is OFF
Julian Andres Klode [Tue, 23 Aug 2016 16:42:52 +0000 (18:42 +0200)] 
CMake: Do not add po/ if USE_NLS is OFF

Previously, we would have generated all the translations, but not
turn them on in the code. Instead, move the Translation crap into
po/ and disable po/ alltogether if USE_NLS if OFF.

8 years agoCMake: Discover docbook stylesheet in other locations
Julian Andres Klode [Sun, 21 Aug 2016 18:37:14 +0000 (20:37 +0200)] 
CMake: Discover docbook stylesheet in other locations

Distributions seem to install this stuff all over the place, so
let's add a common list of paths we know about.

8 years agoinstall-progress: Call the real ::fork() in our fork() method
Julian Andres Klode [Tue, 23 Aug 2016 11:24:54 +0000 (13:24 +0200)] 
install-progress: Call the real ::fork() in our fork() method

We basically called ourselves before, creating an endless loop.

Reported-By: clang
8 years agoCMake: Add Large File Support
Julian Andres Klode [Sat, 20 Aug 2016 01:22:24 +0000 (03:22 +0200)] 
CMake: Add Large File Support

This module should cover all sorts of large file supports, as long
as they either support the getconf LFS_CFLAGS command; or the
_FILE_OFFSET_BITS=64 or _LARGE_FILES macros.

Closes: #834767
8 years agoprevent C++ locale number formatting in text APIs (try 3)
David Kalnischkies [Tue, 23 Aug 2016 13:11:20 +0000 (15:11 +0200)] 
prevent C++ locale number formatting in text APIs (try 3)

This time it is the formatting of floating numbers in progress
reporting with a radix charater potentially not being dot.

Followup of 7303e11ff28f920a6277c159aa46f80c007350bb. Regression of
b58e2c7c56b1416a343e81f9f80cb1f02c128e25 in so far as it exchanging
very effected with slightly less effected code.

LP: 1611010

8 years agodo dpkg --configure before --remove/--purge --pending
David Kalnischkies [Mon, 22 Aug 2016 19:33:38 +0000 (21:33 +0200)] 
do dpkg --configure before --remove/--purge --pending

Commit 7ec343309b7bc6001b465c870609b3c570026149 got us most of the way,
but the last mile was botched by having the pending calls in the wrong
order as this way we potentially 'force' dpkg to remove/purge a package
it doesn't want to as another package still depends on it and the
replacement isn't fully installed yet.

So what we do now is a configure before remove and purge (all with
--no-triggers) and finishing off with another configure pending call to
take care of the triggers.

Note that in the bugreport example our current planner is forcing dpkg
to remove the package earlier via --force-depends which we could do for
the pending calls as well and could be used as a workaround, but we want
to do less forcing eventually.

Closes: 835094
8 years agozh_CN.po: update simplified Chinese translation
Zhou Mo [Sat, 20 Aug 2016 13:32:17 +0000 (13:32 +0000)] 
zh_CN.po: update simplified Chinese translation

8 years agoCMake: Fix uninitialized variables
Julian Andres Klode [Sat, 20 Aug 2016 12:41:33 +0000 (14:41 +0200)] 
CMake: Fix uninitialized variables

This fixes some actual bugs for PROJECT and BZIP2_INCLUDE_DIR.

Gbp-Dch: ignore

8 years agoCMake: Translations: Build byproduct before output
Julian Andres Klode [Fri, 19 Aug 2016 23:15:27 +0000 (01:15 +0200)] 
CMake: Translations: Build byproduct before output

This can lead to an inconsistent state otherwise, with the
output being updated and the byproduct not; for example,
when the build was manually interrupted.

8 years agodebian: Get rid of dh_movefiles again
Julian Andres Klode [Fri, 19 Aug 2016 22:25:34 +0000 (00:25 +0200)] 
debian: Get rid of dh_movefiles again

This workaround is a bit more ugly, but does not use a
(somewhat) deprecated debhelper command.

Gbp-Dch: ignore

8 years agodebian: Run wrap-and-sort
Julian Andres Klode [Fri, 19 Aug 2016 18:03:36 +0000 (20:03 +0200)] 
debian: Run wrap-and-sort

Manually clean up the apt.maintscript, it moved stuff from
before the comment to after the comment...

8 years agodebian: Drop outdated stuff
Julian Andres Klode [Fri, 19 Aug 2016 17:49:54 +0000 (19:49 +0200)] 
debian: Drop outdated stuff

The README.source is not usable anymore, and the Build-Conflicts
andd Breaks/Replaces are not needed anymore.

8 years agodebian: Add more lintian overrides
Julian Andres Klode [Fri, 19 Aug 2016 17:42:45 +0000 (19:42 +0200)] 
debian: Add more lintian overrides

8 years agodebian: Switch to debhelper 10
Julian Andres Klode [Fri, 19 Aug 2016 17:26:55 +0000 (19:26 +0200)] 
debian: Switch to debhelper 10

debhelper 10 is much nicer with the installation part from
a dirty tree, so you can just fix some stuff breaking the
install step and then continue building with debuild -b -nc
until you have fixed all your stuff.

It also has some other advantages, of course, like some
bug fixes in shell escaping for maintscript, or systemd
helper changes.

8 years agodebian: Make better use of the tree installed by CMake
Julian Andres Klode [Fri, 19 Aug 2016 15:49:29 +0000 (17:49 +0200)] 
debian: Make better use of the tree installed by CMake

This gets rid of the special casing of etc/apt, various
example file installations handled by the upstream build
system, and of course the directory creation for all dirs
created by the upstream build system.

8 years agoCMake: Install config and logging directories
Julian Andres Klode [Fri, 19 Aug 2016 16:21:04 +0000 (18:21 +0200)] 
CMake: Install config and logging directories

These directories are essential for apt to work, so we should
install them in the upstream build system and not just in the
debian packaging...

8 years agotests/control: Handle the gpg1/gpg2 mess a bit better
Julian Andres Klode [Thu, 18 Aug 2016 12:21:16 +0000 (14:21 +0200)] 
tests/control: Handle the gpg1/gpg2 mess a bit better

Hardcoding gpgv1 and gnupg1 breaks Ubuntu, because on Ubuntu,
these packages do not exist yet. Instead allow gnupg (<< 2)
for gnupg1 and gnupg2 for gnupg (>= 2), so we cover all
potential combinations.

8 years agoprepare-release: Use equivs and gdebi-core for travis deps
Julian Andres Klode [Thu, 18 Aug 2016 12:56:36 +0000 (14:56 +0200)] 
prepare-release: Use equivs and gdebi-core for travis deps

Our previous hack did not really support or groups and other
more advanced dependency types. This hack basically removes
build profiles, and the @-type depends for tests, and otherwise
converts the deps to a package which is then installed via
gdebi.

8 years agoIgnore SIGINT and SIGQUIT for Pre-Install hooks
Julian Andres Klode [Fri, 19 Aug 2016 11:00:33 +0000 (13:00 +0200)] 
Ignore SIGINT and SIGQUIT for Pre-Install hooks

Instead of erroring out when receiving a SIGINT, let the
child deal with it - we'll error out anyway if the child
exits with an error or due to the signal. Also ignore
SIGQUIT, as system() ignores it.

This basically fixes Bug #832593, but: we are running
the hooks via sh -c. Some shells exit with a signal
error even if the command they are executing catches
the signal and exits successfully. So far, this has
been noticed on dash, which unfortunately, is our
default shell.

Example:
$ cat trap.sh
trap 'echo int' INT; sleep 10; exit 0
$ if dash -c ./trap.sh; then echo OK: $?; else echo FAIL: $?; fi
^Cint
FAIL: 130
$ if mksh -c ./trap.sh; then echo OK: $?; else echo FAIL: $?; fi
^Cint
OK: 0
$ if bash -c ./trap.sh; then echo OK: $?; else echo FAIL: $?; fi
^Cint
OK: 0

8 years agoCMake: Translations: Pass --previous to msgmerge
Julian Andres Klode [Fri, 19 Aug 2016 14:31:55 +0000 (16:31 +0200)] 
CMake: Translations: Pass --previous to msgmerge

When updating our .po files, pass --previous to msgmerge
to make it easier for translators to translate fuzzy
strings.

Thanks: Guillem Jover for the suggestion.

8 years agoCMake: Translations: Don't rebuild .mo for line number changes
Julian Andres Klode [Fri, 19 Aug 2016 13:52:14 +0000 (15:52 +0200)] 
CMake: Translations: Don't rebuild .mo for line number changes

If only the line numbers changed in a file without any of the
translatable strings changing, the .po and .mo files were
rebuilt, making building simple code changes somewhat annoying.

We can work around this by passing --add-location=file to msgcomm
when we are creating the temporary .pot file used for building
the .mo files.

8 years agodebian: Install etc/apt if present (e.g., on Ubuntu)
Julian Andres Klode [Thu, 11 Aug 2016 23:36:55 +0000 (01:36 +0200)] 
debian: Install etc/apt if present (e.g., on Ubuntu)

On Ubuntu, cmake installs are vendor-specific apt.conf.d
snippet, causing the build to fail.

8 years agoRelease 1.3~rc2 1.3_rc2
Julian Andres Klode [Wed, 17 Aug 2016 21:47:22 +0000 (23:47 +0200)] 
Release 1.3~rc2

8 years agomethods: read config in most to least specific order
David Kalnischkies [Wed, 17 Aug 2016 19:53:05 +0000 (21:53 +0200)] 
methods: read config in most to least specific order

The implementation of the generic config fallback did the fallback in
the wrong order so that the least specific option wasn't the last value
picked but in fact the first one… doh!

So in the bugreports case http -> https -> http::<hostname> ->
https::<hostname> while it should have been the reverse as before.

Regression-In: 30060442025824c491f58887ca7369f3c572fa57
Closes: 834642
8 years agodon't count each Type as an individual deb822-sources stanza
David Kalnischkies [Wed, 17 Aug 2016 18:35:47 +0000 (20:35 +0200)] 
don't count each Type as an individual deb822-sources stanza

Reported-By: Mattia Rizzolo <mattia@debian.org> in #834629
8 years agoadd --with-source option and Packages/Sources support
David Kalnischkies [Tue, 16 Aug 2016 18:08:29 +0000 (20:08 +0200)] 
add --with-source option and Packages/Sources support

We support "./foobar.deb" as a way to install a deb file directly.
Recently .changes files were added. This highlights a problem as you
can't add the changes file without also trying to install all of them.
Now, it could also be handy to add entire Packages/Sources files to
perhaps get a bunch of packages in without installing them all
implicitly.

This commit introduces --with-source which allows to add *.deb, *.changes,
*.dsc, source-dirs, Packages & Sources files (the later can also be
compressed) without also installing them.

8 years agoallow spaces in fingerprints for 'apt-key del'
David Kalnischkies [Wed, 17 Aug 2016 06:10:29 +0000 (08:10 +0200)] 
allow spaces in fingerprints for 'apt-key del'

Fingerprints tend to be displayed in space-separated octet pairs so be
nice and allow delete to remove a key based on such a string rather than
requiring that the user is deleting all the spaces manually.

8 years agoadd the gpg-classic variant to the gpgv/gnupg or-group
David Kalnischkies [Tue, 16 Aug 2016 13:46:19 +0000 (15:46 +0200)] 
add the gpg-classic variant to the gpgv/gnupg or-group

We need to support partial upgrades anyhow, so we have to deal with the
different versions and your tests try to ensure that we do, so we
shouldn't make any explicit higher requirements.

8 years agotests: update self-sigs on our test keys
David Kalnischkies [Tue, 16 Aug 2016 11:42:30 +0000 (13:42 +0200)] 
tests: update self-sigs on our test keys

gpg upstream committed "gpgv: Tweak default options for extra
security." applied on the 1.x and 2.x branches:
http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=commit;h=e32c575e0f3704e7563048eea6d26844bdfc494b
This commit includes "[…], but we should validate the key by its self
signature for primary key, and back signature for subkey."

Our testkeys are old and do not really considered best practices in the
last years, so their most recent self-signature is SHA1-only which with
this gpg commit and our testcases defaulting to --weak-digest sha1 are
refused.

So what we do here is just applying some of the recent best practices on
top of our testcase keys.

Gbp-Dch: Ignore

8 years agotests: set source directory for gdb
David Kalnischkies [Tue, 16 Aug 2016 05:38:18 +0000 (07:38 +0200)] 
tests: set source directory for gdb

Helps interactive gdb calls find the source code.

Gbp-Dch: Ignore

8 years agodefault to Dir=/ in dpkg/status file finding magic
David Kalnischkies [Sat, 13 Aug 2016 13:55:52 +0000 (15:55 +0200)] 
default to Dir=/ in dpkg/status file finding magic

Seen in cme #833656 if Dir isn't set (yet) we end up later absoluting a
path which was supposed to be absolute already, so if Dir is empty we
assume it to be '/' instead. In practice this is a bug in the software
using libapt, but for maxium compatibility lets explicitly set the
default value here to be safe.

Reported-By: Paul Wise <pabs@debian.org>
Inspired-By: Brendan O'Dea <bod@debian.org>
Fixes-Regression: 475f75506db48a7fa90711fce4ed129f6a14cc9a
Shadows-Bug: #833656

8 years agosupport compression and by-hash for .diff/Index files
David Kalnischkies [Tue, 16 Aug 2016 05:47:44 +0000 (07:47 +0200)] 
support compression and by-hash for .diff/Index files

In af81ab9030229b4ce6cbe28f0f0831d4896fda01 by-hash got implemented as a
special compression type for our usual index files like Packages.
Missing in this scheme was the special .diff/Index index file containing
the info about individual patches for this index file. Deriving from the
index file class directly we inherent the compression handling
infrastructure and in this way also by-hash nearly for free.

Closes: #824926
8 years agosupport getting only-uncompressed files via by-hash
David Kalnischkies [Mon, 15 Aug 2016 08:51:07 +0000 (10:51 +0200)] 
support getting only-uncompressed files via by-hash

The URI we later want to modify to get the file via by-hash was unset in
case a file was only available uncompressed (which is usually not the
case) causing an acquire error.

8 years agoset the correct item FileSize in by-hash case
David Kalnischkies [Mon, 15 Aug 2016 08:39:53 +0000 (10:39 +0200)] 
set the correct item FileSize in by-hash case

In af81ab9030229b4ce6cbe28f0f0831d4896fda01 we implement by-hash as a
special compression type, which breaks this filesize setting as the code
is looking for a foobar.by-hash file then. Dealing this slightly gets
us the intended value. Note that this has no direct effect as this value
will be set in other ways, too, and could only effect progress reporting.

Gbp-Dch: Ignore

8 years agoretry without same redirection mirror on 404 errors
David Kalnischkies [Sun, 14 Aug 2016 11:12:08 +0000 (13:12 +0200)] 
retry without same redirection mirror on 404 errors

If 9b8034a9fd40b4d05075fda719e61f6eb4c45678 serves the Release files
from a partial mirror we will end up getting 404 for some of the
indexes. Instead of giving up, we will instead ignore our same
redirection mirror constrain and ask the redirection service as a
potential hashsum mismatch is better than keeping the certain 404 error.

8 years agocheck internal redirections for loops, too
David Kalnischkies [Sun, 14 Aug 2016 10:13:59 +0000 (12:13 +0200)] 
check internal redirections for loops, too

Now that we have the redirections loopchecker centrally in our items we
can use it also to prevent internal redirections to loop caused by
bugs as in a few instances we get into the business of rewriting the URI
we will query by ourself as we predict we would see such a redirect
anyway. Our code has no bugs of course, hence no practical difference. ;)

Gbp-Dch: Ignore

8 years agolog with the failed item description, not with next try
David Kalnischkies [Sun, 14 Aug 2016 07:51:56 +0000 (09:51 +0200)] 
log with the failed item description, not with next try

The failure handling frequently changes URI & Description of the failed
item to try a slightly different combination which might work, but the
logging of the failure happens only afterwards as the same failure
handling decides if this is a critical error or not so we need a backup
here instead of potentially new content.

A purely cosmetic issue, but can still be confusing for humans.