]> git.saurik.com Git - apt.git/log
apt.git
8 years agowrite auto-bits before calling dpkg & again after if needed
David Kalnischkies [Wed, 29 Jun 2016 14:10:12 +0000 (16:10 +0200)] 
write auto-bits before calling dpkg & again after if needed

Writing first means that even in the event of a power-failure the
autobit is saved for future processing instead of "forgotten" so that
the package is treated as manually installed.

In some cases we have to re-run the writing after dpkg is done through
as dpkg can let packages disappear and in such cases apt will move
autobits around (or in that case non-autobits) which we need to store.

8 years agoif reading of autobit state failed, let write fail
David Kalnischkies [Wed, 29 Jun 2016 12:57:00 +0000 (14:57 +0200)] 
if reading of autobit state failed, let write fail

If we can't read the old file we can't just move forward as that would
discard potentially discard old data (especially other fields). We let
it fail only after we are done writing the new file so a user has the
chance to look into and merge the new data (which is otherwise
discarded).

8 years agodon't do atomic overrides with failed files
David Kalnischkies [Wed, 29 Jun 2016 12:46:34 +0000 (14:46 +0200)] 
don't do atomic overrides with failed files

We deploy atomic renames for some files, but these renames also happen
if something about the file failed which isn't really the point of the
exercise…

Closes: 828908
8 years agoRevert "travis: use gcc-5 instead of gcc(-4.8)"
David Kalnischkies [Wed, 29 Jun 2016 09:00:04 +0000 (11:00 +0200)] 
Revert "travis: use gcc-5 instead of gcc(-4.8)"

This reverts commit 2b8221d66a8284042fc53c7bbb14bb9750e9137f.

Avoiding the use of GCC >= 5 stuff lets use go back to 4.8 simplifying
the travis setup again as well as reducing the backport requirements in
general.

This is possible because the std::get_time use requiring GCC >= 5 in
9febc2b238e1e322dce1f94ecbed46d595893b52 was replaced by handrolling it
in 1d742e01470bba27715a8191c50adde4b39c2f19, so the remaining uses are
just small conviniences we can do without.

Gbp-Dch: Ignore

8 years agoif conf unset, don't read / as conf/pref/sources dir
David Kalnischkies [Wed, 29 Jun 2016 08:16:14 +0000 (10:16 +0200)] 
if conf unset, don't read / as conf/pref/sources dir

Usually these config options are set to sensible values, but if init
isn't run or the user interferes with configuration clearing or similar
the options could indeed carry an empty value, which will result in
FindDir returning a '/'. That feels kinda wrong, but as a public
interface there isn't much we can do about it and instead make it so
that we get the special file /dev/null back we know how to deal with in
such cases.

8 years agoeipp: let apt make a plan, not make stuff plane
David Kalnischkies [Wed, 29 Jun 2016 07:16:53 +0000 (09:16 +0200)] 
eipp: let apt make a plan, not make stuff plane

Julian noticed on IRC that I fall victim to a lovely false friend by
calling referring to a 'planer' all the time even through these are
machines to e.g. remove splinters from woodwork ("make stuff plane").
The term I meant is written in german in this way (= with a single n)
but in english there are two, aka: 'planner'.

As that is unreleased code switching all instances without any
transitional provisions. Also the reason why its skipped in changelog.

Thanks: Julian Andres Klode
Gbp-Dch: Ignore

8 years agocache: Bump minor version to 6
Julian Andres Klode [Tue, 28 Jun 2016 15:54:31 +0000 (17:54 +0200)] 
cache: Bump minor version to 6

Needed for the previous change

8 years agoFix buffer overflow in debListParser::VersionHash()
Julian Andres Klode [Tue, 28 Jun 2016 08:24:11 +0000 (10:24 +0200)] 
Fix buffer overflow in debListParser::VersionHash()

If a package file is formatted in a way that that no space
follows a deprecated "<", we would reformat it to "<=" and
increase the length of the output by 1, which can break.

Under normal circumstances with "<=" this should not be an
issue.

Closes: #828812
8 years agoeipp: enable xz-compressed scenario logging
David Kalnischkies [Sun, 26 Jun 2016 11:20:19 +0000 (13:20 +0200)] 
eipp: enable xz-compressed scenario logging

In 385d9f2f23057bc5808b5e013e77ba16d1c94da4 I implemented the storage of
scenario files based on enabling this by default for EIPP, but I
implemented it first optionally for EDSP to have it independent.

The reasons mentioned in the earlier commit (debugging and bugreports)
obviously apply here, especially as EIPP solutions aren't user approved,
nearly impossible to verify before starting the execution and at the
time of error the scenario has changed already, so that reproducing the
issue becomes hard(er).

8 years agoeipp: rename stanza 'Install' to 'Unpack'
David Kalnischkies [Sat, 25 Jun 2016 17:53:58 +0000 (19:53 +0200)] 
eipp: rename stanza 'Install' to 'Unpack'

Freeing 'Install' for future use as an interface for "dpkg --install",
which is currently not used by any existent planer, so the
implementation of it itself will be delayed until then.

8 years agoeipp: add Allow-Temporary-Remove-of-Essentials
David Kalnischkies [Mon, 6 Jun 2016 15:58:00 +0000 (17:58 +0200)] 
eipp: add Allow-Temporary-Remove-of-Essentials

A rather special need option, but the internal planer supports this and
we have a testcase for it & sometimes it is hit (as a bug through). The
option itself mostly serves as a reminder for implementors that they
should be careful with removes and especially temporary removes if they
perform any.

8 years agoeipp: include global errors in reported error
David Kalnischkies [Mon, 6 Jun 2016 15:56:08 +0000 (17:56 +0200)] 
eipp: include global errors in reported error

Git-Dch: Ignore

8 years agoeipp: implement Immediate-Configuration flag
David Kalnischkies [Mon, 6 Jun 2016 13:04:42 +0000 (15:04 +0200)] 
eipp: implement Immediate-Configuration flag

APT has 3 modes: no immediate configuration, all packages are configured
immediately and its default mode of configuring essentials and
pseudo-essentials immediately only. While this seems like a job of
different planers at first, it might be handy to have it as an option,
too, in case a planer (like apts internal one) supports different modes
where the introduction of individual planers would be counter intuitive.

8 years agoeipp: properly handle arch-specific provides
David Kalnischkies [Fri, 3 Jun 2016 12:40:06 +0000 (14:40 +0200)] 
eipp: properly handle arch-specific provides

The generation of the EIPP request was a bit to strict not generation
what would actually be needed to be part of the scenario.

8 years agoeipp: make no difference between remove & purge
David Kalnischkies [Fri, 3 Jun 2016 11:09:13 +0000 (13:09 +0200)] 
eipp: make no difference between remove & purge

For the order there is no inherent difference between delete or purge,
so we don't tell the planer about this and instead decide in apt if a
package should be purged or not which also allows us to not tell the
planer about rc-only purges as we can trivially do this on our on as
there is no need to plan such purges.

8 years agoeipp: provide the internal planer as an external one
David Kalnischkies [Sat, 28 May 2016 13:40:59 +0000 (15:40 +0200)] 
eipp: provide the internal planer as an external one

Testing the current implementation can benefit from being able to be
feed an EIPP request and produce a fully compliant response. It is also
a great test for EIPP in general.

8 years agoeipp: output at most two versions per package
David Kalnischkies [Sat, 14 May 2016 21:52:47 +0000 (23:52 +0200)] 
eipp: output at most two versions per package

We can trim generation time and size of the EIPP scenario considerable
if we we avoid telling the planers about "uninteresting" packages.

This is one of the simpler but already very effective reductions:
Do not tell planers about versions which are neither installed nor are
to be installed as they have no effect on the plan we don't need to tell
the planer about them. EDSP solvers need to know about all versions for
better choice and error messages, but planers really don't.

Git-Dch: Ignore

8 years agoeipp: implement version 0.1 of the protocol
David Kalnischkies [Sat, 14 May 2016 16:07:12 +0000 (18:07 +0200)] 
eipp: implement version 0.1 of the protocol

The very first step in introducing the "external installation planer
protocol" (short: EIPP) as part of my GSoC2016 project.

The description reads: APT-based tools like apt-get, aptitude, synaptic,
… work with the user to figure out how their system should look like
after they are done installing/removing packages and their dependencies.
The actual installation/removal of packages is done by dpkg with the
constrain that dependencies must be fulfilled at any point in time (e.g.
to run maintainer scripts).

Historically APT has a super micro-management approach to this task
which hasn't aged that well over the years mostly ignoring changes in
dpkg and growing into an unmaintainable mess hardly anyone can debug and
everyone fears to touch – especially as more and more requirements are
tacked onto it like handling cycles and triggers, dealing with
"important" packages first, package sources on removable media, touch
minimal groups to be able to interrupt the process if needed (e.g.
unattended-upgrades) which not only sky-rocket complexity but also can
be mutually exclusive as you e.g. can't have minimal groups and minimal
trigger executions at the same time.

8 years agoadd myself to Uploaders
David Kalnischkies [Mon, 27 Jun 2016 06:52:47 +0000 (08:52 +0200)] 
add myself to Uploaders

8 years agoclose server if parsing of header field failed
David Kalnischkies [Sat, 25 Jun 2016 10:32:11 +0000 (12:32 +0200)] 
close server if parsing of header field failed

Seen in #828011 if we fail to parse a header field like Last-Modified we
end up interpreting the data as response header for coming requests in
case we don't rotate to a new server in DNS rotation.

8 years agotests: add epoch-packages to try clean with epochs
David Kalnischkies [Sat, 25 Jun 2016 10:20:52 +0000 (12:20 +0200)] 
tests: add epoch-packages to try clean with epochs

Git-Dch: Ignore

8 years agoimbue .diff/Index parsing with C.UTF-8 as well
David Kalnischkies [Sat, 25 Jun 2016 08:20:35 +0000 (10:20 +0200)] 
imbue .diff/Index parsing with C.UTF-8 as well

In 3bdff17c894d0c3d0f813d358fc45d7a263f3552 we did it for the datetime
parsing, but we use the same style in the parsing for pdiff (where the
size of the file is in the middle of the three fields) so imbueing here
as well is a good idea.

8 years agoAdd a apt suggests powermgmt-base
Nicolas Le Cam [Wed, 22 Jun 2016 18:55:18 +0000 (20:55 +0200)] 
Add a apt suggests powermgmt-base

debian/apt.apt-compat.cron.daily is using on_ac_power utility

8 years agoUse the ConditionACPower feature of systemd in the apt-daily service
Nicolas Le Cam [Wed, 22 Jun 2016 19:39:38 +0000 (21:39 +0200)] 
Use the ConditionACPower feature of systemd in the apt-daily service

.. instead of hardcoding the functionnality in the apt.systemd.daily
script.

Also make the compatibility cron job provide the same functionnality
for systems that do not use systemd.

Closes: #827930
8 years agomethods/ftp: Cope with weird PASV responses
Julian Andres Klode [Mon, 27 Jun 2016 08:54:26 +0000 (10:54 +0200)] 
methods/ftp: Cope with weird PASV responses

wu-ftpd sends the response without parens, whereas we expect
them.

I did not test the patch, but it should work. I added another
return true if Pos is still npos after the second find to make
sure we don't add npos to the string.

Thanks: Lukasz Stelmach for the initial patch
Closes: #420940
8 years agozh_CN.po: update simplified chinese translation
Zhou Mo [Mon, 27 Jun 2016 08:57:14 +0000 (08:57 +0000)] 
zh_CN.po: update simplified chinese translation

8 years agoimbue datetime parsing with C.UTF-8 locale
David Kalnischkies [Sat, 25 Jun 2016 07:02:07 +0000 (09:02 +0200)] 
imbue datetime parsing with C.UTF-8 locale

Rewritten in 9febc2b238e1e322dce1f94ecbed46d595893b52 for c++ locales
usage and rewritten again in 1d742e01470bba27715a8191c50adde4b39c2f19 to
avoid a currently present stdlibc++6 bug in the std::get_time
implementation. The later implementation uses still stringstreams for
parsing, but forgot to explicitly reset the locale to something sane
(for parsing english dates that is), so date and especially the parsing
of a number is depending on the locale. Turns out, the French (among
others) format their numbers with space as thousand separator so for
some reason the stdlibc++6 thinks its a good idea to interpret the
entire datetime string as a single number instead of realizing that in
"25 Jun …" the later parts can't reasonably be part of that number even
through there are spaces there…

Workaround is hence: LC_NUMERIC=C.UTF-8

Closes: 828011
8 years agoshow right binary name in simulation notice
David Kalnischkies [Thu, 23 Jun 2016 06:56:22 +0000 (08:56 +0200)] 
show right binary name in simulation notice

Closes: 825216
8 years agoRelease 1.3~exp3 1.3_exp3
Julian Andres Klode [Wed, 22 Jun 2016 12:51:31 +0000 (14:51 +0200)] 
Release 1.3~exp3

Quite a huge churn of new strings.

8 years agoadd insecure (and weak) allow-options for sources.list
David Kalnischkies [Mon, 20 Jun 2016 18:50:43 +0000 (20:50 +0200)] 
add insecure (and weak) allow-options for sources.list

Weak had no dedicated option before and Insecure and Downgrade were both
global options, which given the effect they all have on security is
rather bad. Setting them for individual repositories only isn't great
but at least slightly better and also more consistent with other
settings for repositories.

8 years agoensure filesize of deb is included in the hashes list
David Kalnischkies [Sat, 18 Jun 2016 14:27:04 +0000 (16:27 +0200)] 
ensure filesize of deb is included in the hashes list

Filesize is a silly hash all by itself, but in combination with others
it can be a strong opponent, so ensuring that it is in the list of
hashes and hence checked by the normal course of action the acquire
process takes is a good thing.

8 years agoadd [weak] tag to hash errors to indicate insufficiency
David Kalnischkies [Sat, 18 Jun 2016 13:15:27 +0000 (15:15 +0200)] 
add [weak] tag to hash errors to indicate insufficiency

For "Hash Sum mismatch" that info doesn't make a whole lot of
difference, but for the new insufficient info message an indicator that
while this hashes are there and even match, they aren't enough from a
security standpoint.

8 years agobetter error message for insufficient hashsums
David Kalnischkies [Sat, 18 Jun 2016 11:55:39 +0000 (13:55 +0200)] 
better error message for insufficient hashsums

Downloading and saying "Hash Sum mismatch" isn't very friendly from a
user POV, so with this change we try to detect such cases early on and
report it, preferably before download even started.

Closes: 827758
8 years agosource: if download is skipped, don't try to unpack
David Kalnischkies [Sat, 18 Jun 2016 07:59:08 +0000 (09:59 +0200)] 
source: if download is skipped, don't try to unpack

If apt decides it can't download a file it is relatively pointless to
try to tell dpkg-source to unpack it.

8 years agoforbid insecure repositories by default expect in apt-get
David Kalnischkies [Fri, 18 Mar 2016 13:46:24 +0000 (14:46 +0100)] 
forbid insecure repositories by default expect in apt-get

With this commit all APT-based clients default to refusing to work with
unsigned or otherwise insufficently secured repositories. In terms of
apt and apt-get this changes nothing, but it effects all tools using
libapt like aptitude, synaptic or packagekit.

The exception remains apt-get for stretch for now as this might break
too many scripts/usecases too quickly.

The documentation is updated and extended to reflect how to opt out or
in on this behaviour change.

Closes: 808367
8 years agogeneralize secure->insecure downgrade protection
David Kalnischkies [Fri, 18 Mar 2016 11:50:02 +0000 (12:50 +0100)] 
generalize secure->insecure downgrade protection

Handling the extra check (and force requirement) for downgrades in
security in our AllowInsecureRepositories checker helps in having this
check everywhere instead of just in the most common place and requiring
a little extra force in such cases is always good.

8 years agohandle weak-security repositories as unauthenticated
David Kalnischkies [Thu, 17 Mar 2016 15:36:14 +0000 (16:36 +0100)] 
handle weak-security repositories as unauthenticated

APT can be forced to deal with repositories which have no security
features whatsoever, so just giving up on repositories which "just" fail
our current criteria of good security features is the wrong incentive.

Of course, repositories are better of fixing their setup to provide the
minimum of security features, but sometimes this isn't possible:
Historic repositories for example which do not change (anymore).

That also fixes problem with repositories which are marked as trusted,
but are providing only weak security features which would fail the
parsing of the Release file.

Closes: 827364
8 years agorun update post-invokes even on (partial) failures
David Kalnischkies [Thu, 16 Jun 2016 21:13:26 +0000 (23:13 +0200)] 
run update post-invokes even on (partial) failures

Unsecure repositories result in error messages by default which causes
the acquire run to fail hard, but non-failing repositories are still
updated just like in the slightly less hard-failures which got this
behaviour in 35664152e47a1d4d712fd52e0f0a2dc8ed359d32.

8 years agozh_CN.po: update simplified chinese translation
Zhou Mo [Tue, 21 Jun 2016 03:29:53 +0000 (03:29 +0000)] 
zh_CN.po: update simplified chinese translation

8 years agoMerge pull request Debian/apt#16 from dombenson/master
Julian Andres Klode [Mon, 20 Jun 2016 15:12:41 +0000 (17:12 +0200)] 
Merge pull request Debian/apt#16 from dombenson/master

Reinstate caching of file hashes in apt-ftparchive

8 years agoCheck for cached hash entries to determine which (if any) hash types
Dominic Benson [Mon, 20 Jun 2016 12:47:46 +0000 (13:47 +0100)] 
Check for cached hash entries to determine which (if any) hash types
need to be generated for the current file.
In 1.0.9, each hash type was handled by a separate method, each of
which checked the cache. It looks like when these code paths were
unified (in a311fb96b84757ef8628e6a754232614a53b7891) the cache
checks were not incorporated into the new method.

8 years agoimplement and document DIRECT for auto-detect-proxy
David Kalnischkies [Mon, 20 Jun 2016 11:49:31 +0000 (13:49 +0200)] 
implement and document DIRECT for auto-detect-proxy

There is a subtile difference between an empty setting and "DIRECT" in
the configuration as the later overrides the generic settings while the
earlier does not. Also, non-zero exitcodes should really be reported as
an error rather than silently discarded.

8 years agodo not error if auto-detect-proxy cmd has no output
David Kalnischkies [Mon, 20 Jun 2016 09:23:09 +0000 (11:23 +0200)] 
do not error if auto-detect-proxy cmd has no output

Regression introduced in 8f858d560e3b7b475c623c4e242d1edce246025a.

Commands are probably better of always having output through as the
fall through to the generic proxy settings is likely not intended. As
documenting and implementing this more consistently is kind of a
regression through, it is split off into the next commit.

Closes: 827713
8 years agoavoid std::get_time usage to sidestep libstdc++6 bug
David Kalnischkies [Fri, 17 Jun 2016 15:56:45 +0000 (17:56 +0200)] 
avoid std::get_time usage to sidestep libstdc++6 bug

As reported upstream in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71556
the implementation of std::get_time is currently not as accepting as
strptime is, especially in how hours should be formatted.

Just reverting 9febc2b238e1e322dce1f94ecbed46d595893b52 would be
possible, but then we would reopen the problems fixed by it, so instead
I opted here for a rewrite of the parsing logic which makes this method
a lot longer, but at least it provides the same benefits as the rewrite
in std::get_time was intended to give us and decouples us from the fix
of the issue in the standard library implementation of GCC.

LP: 1593583

8 years agomerge sources.list lines based on Release filename
David Kalnischkies [Fri, 17 Jun 2016 11:27:34 +0000 (13:27 +0200)] 
merge sources.list lines based on Release filename

Merging by URI means that having sources lines with different URI
methods results in 'strange' warning and error messages, which aren't
very friendly from a user point of view as not encoding the method in
the filename is effectivly an implementation detail.

Merging by filename removes these messages and makes everything "work"
even if it isn't working the way it is configured as the indexes aren't
acquired over the method given, but over the first method for this
release file (which argueably is an implementation detail stemming from
the filename encoding, too).

So either direction isn't perfectly "right", but personally I prefer
"magic" over strange error messages (and doing a full-circle detection
of this with its own messages which would need to be translated feels
like way too much effort for dubious gain).

Closes: 826944
8 years agohttp: don't hang on redirect with length + connection close
David Kalnischkies [Wed, 15 Jun 2016 10:45:07 +0000 (12:45 +0200)] 
http: don't hang on redirect with length + connection close

Most servers who close the connection do not send a content-length as
this is redundant information usually, but some might and while testing
with our server and with 'aptwebserver::response-header::Connection' set
to 'close' I noticed that http hangs after a redirect in such cases, so
if we have the information, just use it instead of discarding it.

8 years agodon't use FindFile for external Dir::Bin commands
David Kalnischkies [Tue, 14 Jun 2016 12:32:14 +0000 (14:32 +0200)] 
don't use FindFile for external Dir::Bin commands

We usually use absolute paths to specific the location of dpkg, apt-key
and the like, but there is nothing wrong with using just the command
name and instead let exec(3) make the lookup in PATH.

We had a wild mixture before, so opting for the more accepting option
out of the two seems about right especially as it makes no difference in
the default case as apt uses absolute paths.

8 years agoapt-key: don't search PATH if command is a path already
David Kalnischkies [Tue, 14 Jun 2016 11:55:33 +0000 (13:55 +0200)] 
apt-key: don't search PATH if command is a path already

8 years agoNorwegian Bokmål program translation update
Petter Reinholdtsen [Mon, 13 Jun 2016 09:48:36 +0000 (11:48 +0200)] 
Norwegian Bokmål program translation update

Closes: 827067
8 years agoRelease 1.3~exp2 1.3_exp2
Julian Andres Klode [Sat, 11 Jun 2016 15:24:13 +0000 (17:24 +0200)] 
Release 1.3~exp2

8 years agodon't leak FD in AutoProxyDetect command return parsing
David Kalnischkies [Thu, 9 Jun 2016 22:01:46 +0000 (00:01 +0200)] 
don't leak FD in AutoProxyDetect command return parsing

Just closing the fd would be enough, but while we are at it we can also
use the Popen interface to have an easier time with this.

8 years agodon't leak dpkg statusfd pipe in debugging
David Kalnischkies [Thu, 9 Jun 2016 21:18:10 +0000 (23:18 +0200)] 
don't leak dpkg statusfd pipe in debugging

Not a big deal to leak fds in debugging mode, but for completeness.

Git-Dch: Ignore

8 years agodon't leak EDSP solver output fd
David Kalnischkies [Thu, 9 Jun 2016 20:58:06 +0000 (22:58 +0200)] 
don't leak EDSP solver output fd

8 years agodon't leak an FD in lz4 (de)compression
David Kalnischkies [Thu, 9 Jun 2016 19:06:48 +0000 (21:06 +0200)] 
don't leak an FD in lz4 (de)compression

Seen first in #826783, but as this buglog also shows leaked uncompressed
files as well we don't close it just yet.

8 years agodo not hang on piped input in PipedFileFdPrivate
David Kalnischkies [Thu, 9 Jun 2016 18:41:58 +0000 (20:41 +0200)] 
do not hang on piped input in PipedFileFdPrivate

This effects only compressors configured on the fly (rather then the
inbuilt ones as they use a library).

8 years agoremove racy_pselect fallback
David Kalnischkies [Thu, 9 Jun 2016 10:23:59 +0000 (12:23 +0200)] 
remove racy_pselect fallback

The comment says it should have been removed with Lenny+1 which is a
small while ago already, so it seems like a good time now…

And as this is a cleanup commit it also gets right of spurious
whitespace at the end of lines, adds missing fold markers and similar
busy work.

Git-Dch: Ignore

8 years agodrop Dpkg::MaxArgs in favor of Dpkg::MaxArgsBytes
David Kalnischkies [Wed, 8 Jun 2016 20:40:53 +0000 (22:40 +0200)] 
drop Dpkg::MaxArgs in favor of Dpkg::MaxArgsBytes

We had an old FIXME saying that it is probably pointless to do this if
we limit by length of the commandline already and I completely agree.
The splitting is bad enough if it must be done, so we should only do it
if we have to (as in absolute length of commandline) and, but that is
just a remark, it is unlikely that we ever have/had a call triggering
this as the default value was ~32000 items…

8 years agodon't explicitly configure the last round of packages
David Kalnischkies [Wed, 8 Jun 2016 15:31:45 +0000 (17:31 +0200)] 
don't explicitly configure the last round of packages

We end our operation by calling "dpkg --configure -a", so instead of
running a (big) configure run with all packages mentioned explicitly
before this, we simply skip them and let them be handled by this call
implicitly.

There isn't really an observeable gain to be had here from a speed
point, but it helps in avoiding an (uncommon) problem of having a too
long commandline passed to dpkg, which we would split up (probably
incorrectly).

8 years agoedsp: drop privileges before executing solvers
David Kalnischkies [Wed, 8 Jun 2016 11:44:29 +0000 (13:44 +0200)] 
edsp: drop privileges before executing solvers

Most (if not all) solvers should be able to run perfectly fine without
root privileges as they get the entire state they are supposed to work
on via stdin and do not perform any action directly, but just pass
suggestions on via stdout.

The new default is to run them all as _apt hence, but each solver can
configure another user if it chooses/must. The security benefits are
minimal at best, but it helps preventing silly mistakes (see
35f3ed061f10a25a3fb28bc988fddbb976344c4d) and that is always good.

Note that our 'apt' and 'dump' solver already dropped privileges if they
had them.

8 years agoedsp: if logging is requested, do it for internal, too
David Kalnischkies [Wed, 8 Jun 2016 09:34:53 +0000 (11:34 +0200)] 
edsp: if logging is requested, do it for internal, too

Create and log the EDSP(like) request even if we use the internal
resolver.

8 years agoedsp: if internal is used, keep this decision
David Kalnischkies [Wed, 8 Jun 2016 08:56:14 +0000 (10:56 +0200)] 
edsp: if internal is used, keep this decision

It wasn't noticeable before, but now with the (optional) logging it can
be observed that we decide in the internal path two times if an internal
or external solver should be used (and hence with logging, it is
attempted twice), so if we are in the internal path call the internal
resolver directly, which means those internal methods need to be public
– but we can hide them based on the symbol at least.

8 years agomove 'dump' solver from apt-utils to apt package
David Kalnischkies [Tue, 7 Jun 2016 18:08:27 +0000 (20:08 +0200)] 
move 'dump' solver from apt-utils to apt package

8 years agoedsp: optionally store a compressed copy of the last scenario
David Kalnischkies [Tue, 7 Jun 2016 15:01:33 +0000 (17:01 +0200)] 
edsp: optionally store a compressed copy of the last scenario

For bugreports and co it could be handy to have the scenario and all the
settings used in it around later for inspection for EDSP like protocols.
EDSP might not be the most interesting as the user can still interrupt
the process before the solution is applied and users tend to have an
opinion on the "rightness" of a solution, so it is disabled by default.

8 years agoedsp: prevent it from trying to write a cache
David Kalnischkies [Mon, 6 Jun 2016 13:54:06 +0000 (15:54 +0200)] 
edsp: prevent it from trying to write a cache

EDSP(-like) protocols are one-shot processes working on data which
exists only as long as they run (as they get feed via a pipe), so trying
to write a cache for it is pretty pointless, especially as it will
usually fail as the cache files tend to be owned by root, but the
process is run as a unpriviledged user (either _apt if called by root,
otherwise the user of the caller).

So this was in fact only observeable with our testcases which run as
non-root and the worst which happens is that a valid cache is overridden
with an invalid one which the next run will detect and not use.

Git-Dch: Ignore

8 years agoget right of the hardcoded string-length compares
David Kalnischkies [Mon, 6 Jun 2016 12:30:28 +0000 (14:30 +0200)] 
get right of the hardcoded string-length compares

With have better ways to compare, manipulate and work with strings, so
use it instead of counting string length by hand with is a wonder it
hasn't failed yet. Ignoreable from a changelog perspective as there is
no behaviour change.

Git-Dch: Ignore

8 years agorefactor EDSP classes for better internal reuse
David Kalnischkies [Sun, 5 Jun 2016 11:05:30 +0000 (13:05 +0200)] 
refactor EDSP classes for better internal reuse

The classes are all marked as hidden, so changing them is no problem ABI
wise and will help with introducing protocols similar to EDSP.
The change has no observeable behavior difference, its just code
juggling.

Git-Dch: Ignore

8 years agoprepare-release: ignore newer version symbols
David Kalnischkies [Sat, 4 Jun 2016 18:45:07 +0000 (20:45 +0200)] 
prepare-release: ignore newer version symbols

The script takes the version from the changelog, but if it lacks behind
and the symbols file already includes symbols tagged for the next
version the helper prints incorrect lines as NEW for these symbols, but
ideally it shouldn't print them at all as the symbol is already dealt
with.

Git-Dch: Ignore

8 years agoJapanese program translation update
Takuma Yamada [Sat, 4 Jun 2016 18:32:34 +0000 (20:32 +0200)] 
Japanese program translation update

Closes: 826291
8 years agoedsp: use a stanza based interface for solution writing
David Kalnischkies [Sat, 4 Jun 2016 17:53:54 +0000 (19:53 +0200)] 
edsp: use a stanza based interface for solution writing

EDSP had a WriteSolution method to write out the entire solution based
on the inspection of a given pkgDepCache, but that is rather inflexible
both for EDSP itself and for other EDSP like-protocols. It seems better
to use a smaller scope in printing just a single stanza based on a given
version as there is more reuse potential.

8 years agoedsp: use an ID mapping for the internal solver
David Kalnischkies [Sat, 4 Jun 2016 16:45:01 +0000 (18:45 +0200)] 
edsp: use an ID mapping for the internal solver

Currently an EDSP solver gets send basically all versions which means
the absolute count is the same, but that might not be true forever (and
with the skipping of rc-only versions it kinda is already) and even if
it were true, segfaulting on bad input seems wrong.

8 years agoapt-key: change to / before find to satisfy its CWD needs
David Kalnischkies [Thu, 2 Jun 2016 09:12:39 +0000 (11:12 +0200)] 
apt-key: change to / before find to satisfy its CWD needs

First seen on hurd, but easily reproducible on all systems by removing
the 'execution' bit from the current working directory and watching some
tests (mostly the no-output expecting tests) fail due to find printing:
"find: Failed to restore initial working directory: …"

Samuel Thibault says in the bugreport:
| To do its work, find first records the $PWD, then goes to
| /etc/apt/trusted.gpg.d/ to find the files, and then goes back to $PWD.
|
| On Linux, getting $PWD from the 700 directory happens to work by luck
| (POSIX says that getcwd can return [EACCES]: Search permission was denied
| for the current directory, or read or search permission was denied for a
| directory above the current directory in the file hierarchy). And going
| back to $PWD fails, and thus find returns 1, but at least it emitted its
| output.
|
| On Hurd, getting $PWD from the 700 directory fails, and find thus aborts
| immediately, without emitting any output, and thus no keyring is found.
|
| So, to summarize, the issue is that since apt-get update runs find as a
| non-root user, running it from a 700 directory breaks find.

Solved as suggested by changing to '/' before running find, with some
paranoia extra care taking to ensure the paths we give to find are really
absolute paths first (they really should, but TMPDIR=. or a similar
Dir::Etc::trustedparts setting could exist somewhere in the wild).

The commit takes also the opportunity to make these lines slightly less
error ignoring and the two find calls using (mostly) the same parameters.

Thanks: Samuel Thibault for 'finding' the culprit!
Closes: 826043
8 years agoignore std::locale exeception on non-existent "" locale
David Kalnischkies [Thu, 2 Jun 2016 10:44:58 +0000 (12:44 +0200)] 
ignore std::locale exeception on non-existent "" locale

In 8b79c94af7f7cf2e5e5342294bc6e5a908cacabf changing to usage of C++ way
of setting the locale causes us to be terminated in case of usage of an
ungenerated locale as LC_ALL (or similar) – but we don't want to fail
here, we just want to carry on as before with setlocale which we call in
that case just for good measure.

8 years agoPass -fvisibility-inlines-hidden to g++
Julian Andres Klode [Wed, 1 Jun 2016 12:54:32 +0000 (14:54 +0200)] 
Pass -fvisibility-inlines-hidden to g++

This reduces the number of symbols by about 10%. Unfortunately,
it does not seem to cover all the weird std::vector and friend
template expansions.

ABI should not brake due to that change: It was never specified
before whether an inline symbol was exported or not; so no library
could rely on its presence. Instead, the symbols were exported in
each library/program needing it and and then merged into a common
one by the dynamic linker.

Also update the symbol files to account for the removed symbols.

8 years agoAdd some more symbols to libapt-pkg5.0.symbols
Julian Andres Klode [Wed, 1 Jun 2016 12:54:32 +0000 (14:54 +0200)] 
Add some more symbols to libapt-pkg5.0.symbols

David added some more when he changed the output format for
numbers.

Gbp-Dch: ignore

8 years agoGet rid of .bzrignore
Julian Andres Klode [Wed, 1 Jun 2016 12:31:10 +0000 (14:31 +0200)] 
Get rid of .bzrignore

Gbp-Dch: ignore

8 years agotry to detect sudo spawned root-shell in prefixing
David Kalnischkies [Sun, 29 May 2016 20:09:51 +0000 (22:09 +0200)] 
try to detect sudo spawned root-shell in prefixing

It is a try as the we need to inspect SUDO_COMMAND which could be
anything – apt, apt-get, in /usr/bin, in a $DPKG_ROOT "chroot", build
from source, aliases, …

The best we can do is look if the SHELL variable is equal to the
SUDO_COMMAND which would mean a shell was invoked. That isn't fail-safe
if different shells are involved as sub-shells have the tendency of not
overriding the SHELL so a bash started from within zsh can happily
pretend to be still zsh, so we could have a look at /etc/shells for a
list, but oh well, we have to stop somewhere I guess.
This sudo-prefixing feature is a gimmick after all.

Closes: 825742
8 years agotravis: use gcc-5 instead of gcc(-4.9)
David Kalnischkies [Sat, 28 May 2016 15:02:26 +0000 (17:02 +0200)] 
travis: use gcc-5 instead of gcc(-4.9)

The std::put_time and std::get_time introduced in
9febc2b238e1e322dce1f94ecbed46d595893b52 are part of C++11, but not
implemented in GCC until version 5. std::put_time could actually be
worked around via using the facets put() directly, but get() isn't
implemented so that doesn't really help.

We require various tools from wily (which also means we can't build apt
on Debian stable) already, so requiring gcc-5 is just one more instead
of a big step [and an ignoreable change for changelog anyhow].

It also helps in testing what will actually be used (in terms of the
c++11 std ABI) instead of the old ABI.

Git-Dch: Ignore

8 years agolook into the right textdomain for apt-utils again
David Kalnischkies [Sat, 28 May 2016 11:53:09 +0000 (13:53 +0200)] 
look into the right textdomain for apt-utils again

Broken in e7e10e47476606e3b2274cf66b1e8ea74b236757 by looking always
into "apt" while we ship some tools in "apt-utils"…

8 years agouse std::locale::global instead of setlocale
David Kalnischkies [Sat, 28 May 2016 11:22:38 +0000 (13:22 +0200)] 
use std::locale::global instead of setlocale

We use a wild mixture of C and C++ ways of generating output, so having
a consistent world-view in both styles sounds like a good idea and
should help in preventing regressions.

8 years agouse de-localed std::put_time instead rolling our own
David Kalnischkies [Sat, 28 May 2016 10:55:21 +0000 (12:55 +0200)] 
use de-localed std::put_time instead rolling our own

8 years agoavoid changing the global LC_TIME for Release writing
David Kalnischkies [Sat, 28 May 2016 10:41:12 +0000 (12:41 +0200)] 
avoid changing the global LC_TIME for Release writing

Using C++ here avoids calling setlocale here which never really was that
ideal, but needed to avoid locale specific weekday/month names.

8 years agoaccept only the expected UTC timezones in date parsing
David Kalnischkies [Sat, 28 May 2016 09:03:35 +0000 (11:03 +0200)] 
accept only the expected UTC timezones in date parsing

HTTP/1.1 hardcodes GMT (RFC 7231 §7.1.1.1) and what is good enough for the
internet must be good enough for us™ as we reuse the implementation
internally to parse (most) dates we encounter in various places like the
Release files with their Date and Valid-Until header fields.

Implementing a fully timezone aware parser just feels too hard for no
effective benefit as it would take 5+ years (= until LTS's are out of
fashion) until a repository could use non-UTC dates and expect it to
work. Not counting non-apt implementations which might or might not
only want to encounter UTC here as well.

As a bonus, this eliminates the use of an instance of setlocale in
libapt.

Closes: 819697
8 years agoprevent C++ locale number formatting in text APIs
David Kalnischkies [Fri, 27 May 2016 16:10:39 +0000 (18:10 +0200)] 
prevent C++ locale number formatting in text APIs

Setting the C++ locale via std::locale::global(std::locale("")); which
would otherwise default to the default C locale (aka: unaffected by
setlocale) effects the formatting of numeric types in IO streams, which
for output for humans is perfectly sensible, but breaks our many text
interfaces used and parsed by us and others without expecting the
numbers to be formatted.

Closes: #825396
8 years agofix and document on the fly compressor config
David Kalnischkies [Fri, 27 May 2016 10:08:32 +0000 (12:08 +0200)] 
fix and document on the fly compressor config

libapt allows to configure compressors to be used by its system via
configuration implemented in 03bef78461c6f443187b60799402624326843396,
but that was never really documented and also only partly working, which
also explains why the tests weren't using it…

8 years agouse *.docs files instead of hardcoding in debian/rules
David Kalnischkies [Wed, 25 May 2016 06:32:01 +0000 (08:32 +0200)] 
use *.docs files instead of hardcoding in debian/rules

Git-Dch: Ignore

8 years agoremove semi-support for different build-dirs
David Kalnischkies [Wed, 25 May 2016 06:27:58 +0000 (08:27 +0200)] 
remove semi-support for different build-dirs

The debian/rules file tries to guess in which directory it is supposed
to be building, but that guess is always ./build – if it wasn't it
would fail later as not all rules take alternatives into acount.

So, as this is clearly not used lets remove this complexity instead of
fixing it up.

Git-Dch: Ignore

8 years agooverride lintian on doxygens embedded-javascript-library
David Kalnischkies [Tue, 24 May 2016 07:55:49 +0000 (09:55 +0200)] 
override lintian on doxygens embedded-javascript-library

The embedding is done completely automatic by doxygen and documented to
be that way for reasons: /usr/share/doc/doxygen/README.jquery

As we can't do anything about it, it is pointless to keep the warning.

8 years agouse https instead of git for Vcs-Git
David Kalnischkies [Tue, 24 May 2016 08:43:10 +0000 (10:43 +0200)] 
use https instead of git for Vcs-Git

Reported-By: lintian: vcs-field-uses-insecure-uri
Git-Dch: Ignore

8 years agofix two typos in untranslated errors of libapt-pkg
David Kalnischkies [Tue, 24 May 2016 08:40:22 +0000 (10:40 +0200)] 
fix two typos in untranslated errors of libapt-pkg

Reported-By: lintian: spelling-error-in-binary
Git-Dch: Ignore

8 years agofix two typos in apt.conf & apt-cache manpage
David Kalnischkies [Tue, 24 May 2016 08:37:57 +0000 (10:37 +0200)] 
fix two typos in apt.conf & apt-cache manpage

Reported-By: lintian: spelling-error-in-manpage
Git-Dch: Ignore

8 years agoremove duplicated 'the' from guides doc-base abstract
David Kalnischkies [Tue, 24 May 2016 07:24:28 +0000 (09:24 +0200)] 
remove duplicated 'the' from guides doc-base abstract

Reported-By: lintian: spelling-error-in-doc-base-abstract-field
Git-Dch: Ignore

8 years agono-change bump of Standards-Version to 3.9.8
David Kalnischkies [Tue, 24 May 2016 07:37:01 +0000 (09:37 +0200)] 
no-change bump of Standards-Version to 3.9.8

We don't have no menu file.

8 years agoupdate symbols file
David Kalnischkies [Fri, 20 May 2016 13:40:09 +0000 (15:40 +0200)] 
update symbols file

8 years agodon't try to get acquire lock in simulation mode
David Kalnischkies [Fri, 20 May 2016 12:42:50 +0000 (14:42 +0200)] 
don't try to get acquire lock in simulation mode

The code moving in eb1f04dda07c2b69549ad9fd793cca0e91841b3e
moved the acquire stuff above the simulation exit, so before getting
locks (and creating/chmod directories) we should be checking if we
should actually really do it…

[ignore as bugfix of an unreleased commit]

Git-Dch: Ignore

8 years agorefactor EDSP code into EDSP and EDSP-like parts
David Kalnischkies [Sat, 14 May 2016 16:07:12 +0000 (18:07 +0200)] 
refactor EDSP code into EDSP and EDSP-like parts

No real code change, just moving code around heavily to decouple the
EDSP specific parts from those we can reuse for EDSP-like protocols.

Git-Dch: Ignore

8 years agoedsp: use a limited scenario based on bool-array
David Kalnischkies [Fri, 6 May 2016 14:46:51 +0000 (16:46 +0200)] 
edsp: use a limited scenario based on bool-array

Its more space and runtime efficient to use a boolean set instead of a
CacheSet-based implementation.

Git-Dch: Ignore

8 years agoedsp: add Forbid-{New-Install,Remove} and Upgrade-All
David Kalnischkies [Fri, 6 May 2016 12:21:02 +0000 (14:21 +0200)] 
edsp: add Forbid-{New-Install,Remove} and Upgrade-All

This allows to differentiate properly between 'apt-get upgrade', 'apt
upgrade' and 'apt full-upgrade'.

8 years agoavoid triggering gcc's -Wunsafe-loop-optimizations in EDSP
David Kalnischkies [Mon, 2 May 2016 16:25:58 +0000 (18:25 +0200)] 
avoid triggering gcc's -Wunsafe-loop-optimizations in EDSP

apt/apt-pkg/edsp.cc: In function ‘bool EDSP::WriteLimitedScenario(pkgDepCache&, FILE*, const PackageSet&, OpProgress*)’:
apt/apt-pkg/edsp.cc:245:56: warning: cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
    std::string dependencies[pkgCache::Dep::Enhances + 1];
                                                        ^
Using a std::array to silence gcc as well as as a code improvement feels right here.

Git-Dch: Ignore

8 years agoedsp: dump: support dumping into compressed file
David Kalnischkies [Wed, 27 Apr 2016 15:36:07 +0000 (17:36 +0200)] 
edsp: dump: support dumping into compressed file

8 years agoedsp: try harder to not generate unneeded error messages
David Kalnischkies [Wed, 27 Apr 2016 11:44:08 +0000 (13:44 +0200)] 
edsp: try harder to not generate unneeded error messages

The &= introduced in the EDSP-FileFd conversion isn't working to full
satisfaction for multiple && clauses as the && has a higher binding than
&= has, so that the methods were called even through they shouldn't
have because of previous errors. Using variadic functions we can solve
this in a slightly cleaner way bringing down the amount of 'broken pipe'
errors for the error case of the dump resolver substantially.

Git-Dch: Ignore