Commit Graph

6800 Commits

Author SHA1 Message Date
Allan McRae
ae5cf26b5b Fix segfault importing PGP key for pacman -U operations
Use after free.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-27 19:05:27 +10:00
Evangelos Foutras
dc55701132 Add pacman-conf(8) to the documentation index
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-24 17:18:28 +10:00
Allan McRae
f37a3752b3 Update copyright years
make update-copyright OLD=2018 NEW=2019

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-23 22:06:54 +10:00
Allan McRae
a9835a38a3 Remove --force from completion
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-23 22:06:54 +10:00
Allan McRae
cd4f8f7530 Update completion for -F changes
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-23 22:06:45 +10:00
morganamilo
c58bf862b4 makepkg: don't warn when PACKAGER is unset
makepkg now complains when PACKAGER is not in the format
"name <email>".

Hide this warning when PACKAGER is unset but still warn if it is set to
something out of format.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-22 23:18:48 +10:00
Nick Cao
7df70e7fff Fix compression of package databases with zstd
Commit 7afe51171 attempted to add zstd compression support to repo-add,
but failed...

FS#64213

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-22 17:27:15 +10:00
Allan McRae
942b909829 Fix distribution of meson files
Also caught the source of a man page not being distributed.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-22 09:25:49 +10:00
Allan McRae
8ce20d3754 Release v5.2.0
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-21 17:56:25 +10:00
Allan McRae
de24f644f4 Final translation updates for pacman-5.2.0
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-21 17:25:29 +10:00
Eli Schwartz
9ddd0be027
document changes between 5.1 and 5.2
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
2019-10-17 11:51:30 -04:00
Allan McRae
b05a3c10bf Update README for pacman 5.2.0 release
This is the first major release without any additions to the libalpm API!

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-15 21:29:22 +10:00
morganamilo
719efe19c7 libalpm: set errno in signing dummy functions
This allows pacman to print the correct error message when checking keys
and libalpm has been compiled without gpgme support.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-15 19:56:40 +10:00
morganamilo
54b6d689e5 libalpm: fix segfault when -Qip'ing a package
The dummy checksigs function never sets count to 0, leaving it
unitialized. This caused the siglist cleanup to try and free the empty
list.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-15 19:56:00 +10:00
Allan McRae
27ccd68976 Translation updates
Pull all translations with >75% completion.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-14 09:43:35 +10:00
Andrew Gregory
5e11d86cc5 remove: improve broken dependency error message
This message was clarified for sync operations in
2b1b7b7075.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-14 09:31:43 +10:00
morganamilo
d4e667ee5e pacman: return 1 when -F <target> has no results
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-13 12:37:34 +10:00
Andrew Gregory
808a4f15ce run XferCommand via exec
system() runs the provided command via a shell, which is subject to
command injection.  Even though pacman already provides a mechanism to
sign and verify the databases containing the urls, certain distributions
have yet to get their act together and start signing databases, leaving
them vulnerable to MITM attacks.  Replacing the system call with an
almost equivalent exec call removes the possibility of a shell-injection
attack for those users.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2019-10-12 07:04:20 -07:00
Andrew Gregory
a82b0028e4 add arg_to_string helper
Converts an argc/argv pair to a string for presentation to the user.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2019-10-11 20:14:29 -07:00
Andrew Gregory
a2c4ad4675 move wordsplit into common for sharing
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2019-10-11 18:49:38 -07:00
Eli Schwartz
a897599fa5 makepkg: do not save fflags when creating packages
Saving fflages breaks reproducible builds due to encoding information
specific to the filesystem that was used to build the package. This
information is not needed for packaging purposes anyway.

Including fflags also means that attempting to extract a package file as
root (or fakeroot) might result in angry warnings being printed to the
console by bsdtar, followed by a non-zero exit code, unless the user
remembers to use --no-fflags during extraction. This is unpleasant UI, even
if pacman itself won't care about these.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-09 15:39:48 +10:00
Christian Hesse
e8d4228614 signing: handle unknown uid in key import
With unknown uid pacman crashed. Return with error from email_from_uid()
if uid is NULL.

Signed-off-by: Christian Hesse <mail@eworm.de>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-09 15:39:35 +10:00
Christian Hesse
379f715105 signing: modify question text with unknwon uid
If the key's uid is unknown (for example with db signatures) the
question was:

:: Import PGP key 02FD1C7A934E614545849F19A6234074498E9CEE, "(null)"? [Y/n]

Let's display a modified question for unknown uid.

Signed-off-by: Christian Hesse <mail@eworm.de>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-09 15:39:22 +10:00
Jonas Witschel
d5c3ed129c pacman-key: receive keys from WKD with -r/--recv-keys
If an email address is specified, we use --locate-key to look up the key
using WKD and keyserver as a fallback. If the key is specified as a key
ID, this doesn't work, so we use the normal keyserver-based --recv-keys.

Note that --refresh-keys still uses the keyservers exclusively for
refreshing, though the situation might potentially be improved in a new
version of GnuPG:
https://lists.gnupg.org/pipermail/gnupg-users/2019-July/062169.html

Signed-off-by: Jonas Witschel <diabonas@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 21:40:54 +10:00
Allan McRae
5d2e48d17f Pull and push translation changes in preparation for 5.2
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 18:12:24 +10:00
Alad Wenter
7e79cf73fa makepkg: propagate E_REMOVE_BUILD_DEPS
remove_deps is called once, at the end of clean_up() before makepkg
exit. If remove_deps returns >0 (e.g. when pressing "n" in the resulting
prompt), the error is caught by the ERR signal handler. This in turns
sends SIGUSR1 to the process group, with resulting exit code 138.

In case remove_deps fails, this patch exits makepkg with E_REMOVE_DEPS
if there was no previous error (that is, EXIT_CODE equals E_OK).
Otherwise, makepkg exits with EXIT_CODE.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 17:09:23 +10:00
Erich Eckner
095d6332be makepkg: remove makedepends before installing built package
When running `makepkg -i` it may be necessary to first remove make- and
checkdepends before installing the built package - for example if they
conflict each other. This is the case for wireguard-arch which
makedepends and conflicts wireguard-dkms.

Signed-off-by: Erich Eckner <git@eckner.net>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 16:44:42 +10:00
Allan McRae
8e7d425627 makepkg: wait for process to finish
Without the -f option to wait, we might move on and try to delete the
logpipe before the process is completed.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 16:22:52 +10:00
Austin Lund
e581068c77 makepkg: Delete logpipe when exiting
The logpipe fifo can remain when exiting on a non-error condition such
as recieving signals INT and USR1.  This can be seen by doing either a
manual CTRL-C to interrupt the build or by sending a signal such as:

$ makepkg & sleep 5 ; kill -USR1 $!

Remove the fifo in all cases on script exit if it still exists.

Signed-off-by: Austin Lund <austin.lund@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 16:21:24 +10:00
morganamilo
8f89e509d2 pacman: speed up deptest
Try and find an exact match via pkgcache before iterating the entire
localdb.

Gives a noticeable speed up for exact matches e.g. `pacman -T zlib`

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 14:27:09 +10:00
morganamilo
f2442bc2e9 libalpm: short circuit alpm_find_dbs_satisfier
when a satisfying package is already installed, we always pick it
instead of prompting the user. So we can return that package as soon as
we find it, instead of waiting until we've iterated through all the
databases.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 14:21:08 +10:00
morganamilo
0a295f3f39 libalpm: fix incorrect documentation
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 14:19:54 +10:00
Eli Schwartz
0e3a4bd1fb meson: work around broken pkg-config file with private requires
In addition to the general issue of staticlibs linkage, linking a static
lib to a library() does not seem to generate the needed Libs.private.

Rework how we handle this entirely. Instead of relying on convenience
libraries, we will *sigh* go extract a boatload of .o files again, then
relink those to the installable libalpm, while mentioning our
dependencies again.

We still have our guaranteed static library for linking arbitrary programs
with (e.g. vercmp), and we still only generate one identical copy of the
.o files, but now we potentially `ar` it up twice, which isn't so bad.
And linking still works, and pkg-config files also still work.

One alternative would be to explicitly list our dependencies to
pkgconfig.generate with requires_private, but since gpgme might be an
elevated config-tool dependency, this can fail with:

meson.build:341:10: ERROR: requires argument not a string, library with pkgconfig-generated file or pkgconfig-dependency object, got <GpgmeDependency gpgme: True>

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 14:09:34 +10:00
Eli Schwartz
facd9533b0 meson: fix incorrect libalpm version
LIB_VERSION is supposed to be something like 11.0.1, not simply
reiterate the project version. As a result, we ended up with this:

$ pacman -V
[...]
Pacman v5.1.0 - libalpm v5.1.0
[...]

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 14:09:21 +10:00
Eli Schwartz
c0da1ba13a meson: fix libcommon being publicly exposed as a static link dependency
libcommon isn't even installed, so that means libalpm.a (if installed)
is fatally broken as it misses objects. The problem is that meson
doesn't handle this case correctly:

https://github.com/mesonbuild/meson/issues/3934
https://github.com/mesonbuild/meson/issues/3937
https://github.com/mesonbuild/meson/pull/3939

Work around this by manually extracting libcommon's .o files into the
list of objects used to create libalpm.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 14:08:57 +10:00
Eli Schwartz
de6249ce22 Support file with seccomp enabled
Not all compression types can be detected in the seccomp sandbox, so we
need to disable it. This requires either configuring makepkg to know the
sandbox is available, or checking for file >= 5.38 in which the sandbox
option is a no-op even when seccomp is disabled.

- Requires autoconf-archive for autotools version compare macro.
- meson version comparison could be made a lot simpler using meson-git.

Fixes FS#58626

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 13:43:37 +10:00
Eli Schwartz
2a792ac7bb pacman-key: clean keys on import to remove unknown signatures
There is no good reason to bloat the keyring by importing tons of
signatures we cannot use; drop any signatures that don't validate
against another available key (probably the master keys).

If any desired signatures get cleaned, the key can be refreshed after
importing the new signing public key.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 13:23:22 +10:00
Eli Schwartz
f492339035 pacman-key: make sure we actually use the Web of Trust, which GnuPG doesn't.
By default, the latest versions of GnuPG disable the Web of Trust and
refuse to import signatures from public keyservers. This is to prevent
denial of service attacks, because refusing to import signatures only if
the key size is too big, is apparently too silly to consider.

Either way, pacman needs the WoT. If pacman imports a key at all, it
means everything failed and we are in fallback mode, trying to overcome
a shortcoming in the availability of keys in the keyring package.
(This commonly means the user needs to acquire a new key during the same
transaction that updates archlinux-keyring.)
In order for that new key to be usable, it *must* also import signatures
from the Master Keys.

I don't give credence to this supposed DoS, since the worst case
scenario is nothing happening and needing to CTRL+C in order to exit the
program. In the case of pacman, this is better than being unable to
install anything at all (which is gnupg doing a much more harmful DoS to
pacman), and in the already unusual case where something like
--refresh-keys is being used directly instead of depending on the
keyring package itself, gnupg supports WKD out of the box and will
prefer that for people whose keys are marketed as being non-DOSable.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 13:23:11 +10:00
Eli Schwartz
45e01e55c9 pacman-key: when refreshing gpg.conf, don't truncate option checking
If an option is a two-part option, we print both (separated by IFS=' '),
but when grepping to see if it already exists, we only checked the first
component. This means that something like keyserver-options could only
check if there were existing keyserver options of any sort, but not
which ones.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 13:16:07 +10:00
Matthew Sexton
6d99a15f0b pacman/pacman-conf, testpkg: Added translatable strings
Added gettext macro to warnings, helps, and errors for translation.

Signed-off-by: Matthew Sexton <wsdmatty@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 12:15:06 +10:00
Matthew Sexton
a6ae5f0a04 pacman: pacman-conf: removed hputs macro for usage display
Using the macro got in the way of _() macro for translation
All the macro did was make it so the writer didn't have to type
\n", stream); at the end of every line.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 12:15:02 +10:00
morganamilo
b4e4b74ace libalpm: resolvedep(): don't compare names twice
If we failed to get the pkg from pkgcache then we know no satisfying
package exists by name. So only compare provides.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 12:12:04 +10:00
Eli Schwartz
bcacb00fc8 makepkg: add rust support for *FLAGS and debug-prefix-map
The rust language supports $RUSTFLAGS to be used automatically in all
rustc invocations. Allow setting this in makepkg.conf (e.g. for
optimization or debuginfo support), and teach debug+strip to pass the
rustc command line argument necessary to rewrite source file paths in
the debugging symbols.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 11:48:41 +10:00
Jonas Witschel
48752f1b4b signing: add ability to import keys using a WKD
Currently pacman relies on the SKS keyserver network to fetch unknown
PGP keys. These keyservers are vulnerable to signature spamming attacks,
potentionally making it impossible to import the required keys. An
alternative to keyservers is a so-called Web Key Directory (WKD), a
well-known, trusted location on a server from where the keys can be
fetched.

This commit adds the ability to retrieve keys from a WKD. Due to the
mentioned vulnerabilities, the WKD is tried first, falling back to the
keyservers only if no appropriate key is found there.

In contrast to keyservers, keys in a WKD are not looked up using their
fingerprint, but by email address. Since the email address of the
signing key is usually not included in the signature, we will use the
packager email address to perform the lookup.

Also see FS#63171.

Signed-off-by: Jonas Witschel <diabonas@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 11:21:46 +10:00
Jonas Witschel
80e2e1c7c9 signing: move key import confirmation before key_search
Ask the user whether they want to import a missing key before even doing
a search on the keyserver. This will be useful for getting Web Key
Directory support in place: for a WKD, looking up and importing a key
are a single action, so the current key_search -> QUESTION -> key_import
workflow does not apply.

Since only the ID of the package signing key is available before
key_search, we display the packager variable in addition to the key ID
for user convenience.

Signed-off-by: Jonas Witschel <diabonas@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 11:07:39 +10:00
Dave Reisner
0c4a8ae24b dload: never return NULL from get_filename
Downloads with a Content-Disposition header will typically not include
slashes. When they do, we should most certainly only take the basename,
but when they don't, we should treat the header value as the filename.

Crash introduced in d197d8ab82 when we started using get_filename
in order to rightfully avoid an arbitrary file overwrite vulnerability.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-07 10:55:49 +10:00
Allan McRae
5dd2b3776d makepkg.conf.5: Document PACKAGER format requirements
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-04 12:07:04 +10:00
Jonas Witschel
fd70c1c7bb libmakepkg: check if PACKAGER has the expected format for WKD lookup
pacman should be able to extract an email address from PACKAGER for WKD
lookup, so issue a warning if it is not of the form
"Example Name <email@address.invalid>". Neither the name nor the email
address must contain additional angle brackets.

Signed-off-by: Jonas Witschel <diabonas@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-04 11:48:51 +10:00
morganamilo
6f3810793f libmakepkg: fix typo
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-04 11:26:44 +10:00
Eli Schwartz
bcb44891ef autotools: distribute meson files
If we use make dist to create the official, signed release tarballs,
those will not have meson build files by default since autotools doesn't
know what they are.

Also distribute all src/common/ files. We never strictly needed any of
them to be distributed with autotools, because the dist tarball
dereferences the symlinks (???), but only some of them were being
distributed, and meson needs them to be in the right location as we only
build libcommon from the primary files.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
2019-10-04 11:25:48 +10:00