]> the.earth.li Git - onak.git/log
onak.git
4 years ago0.6.0 release onak-0.6.0
Jonathan McDowell [Sun, 13 Sep 2020 10:08:23 +0000 (11:08 +0100)]
0.6.0 release

Release; update version string in CMakeLists.txt, doc/README, Doxyfile.
Update doc/HISTORY and debian/changelog.

4 years agoUpdate details of other keyservers
Jonathan McDowell [Sun, 13 Sep 2020 10:03:34 +0000 (11:03 +0100)]
Update details of other keyservers

Update the URL for SKS, add Hockeypuck.

4 years agoAdd libpq-dev to Travis CI config
Jonathan McDowell [Sun, 13 Sep 2020 09:16:17 +0000 (10:16 +0100)]
Add libpq-dev to Travis CI config

Should ensure the CI stuff makes sure we can still compile the
PostgreSQL backend.

4 years agoAdd Evil32 fingerprint blacklist
Jonathan McDowell [Fri, 17 Jan 2020 20:17:09 +0000 (20:17 +0000)]
Add Evil32 fingerprint blacklist

These are the Evil32 fingerprints to allow their blacklisting in the
server.

4 years agoProvide key_fetch routine that will not search subkey fingerprints
Jonathan McDowell [Fri, 17 Jan 2020 19:48:10 +0000 (19:48 +0000)]
Provide key_fetch routine that will not search subkey fingerprints

We have *_key_fetch_fp to search for keys by fingerprint, but that
includes subkeys. While unlikely a subkey could be bound to multiple
certification primary keys, resulting in multiple keys being returned
for a fingerprint query. Provide a plain *_fetch_key that only searches
primary keys and is thus guaranteed to return at most one key.

4 years agoCope with colliding 64 bit keyids when verifying signatures
Jonathan McDowell [Fri, 17 Jan 2020 19:28:18 +0000 (19:28 +0000)]
Cope with colliding 64 bit keyids when verifying signatures

Signature keys can be indicated by 64 bit keyid rather than full
fingerprint; there are very few of this collisions but they do exist and
we should handle them gracefully rather than incorrectly dropping a
signature.

5 years agoUpdate TODO list
Jonathan McDowell [Mon, 16 Sep 2019 18:57:32 +0000 (19:57 +0100)]
Update TODO list

5 years agoAdd a basic README.md for the top level directory
Jonathan McDowell [Mon, 16 Sep 2019 18:51:22 +0000 (19:51 +0100)]
Add a basic README.md for the top level directory

5 years agoMove docs into their own subdirectory
Jonathan McDowell [Mon, 16 Sep 2019 18:34:32 +0000 (19:34 +0100)]
Move docs into their own subdirectory

5 years agoAdd configuration file comment for check_packet_size option
Jonathan McDowell [Sun, 8 Sep 2019 17:05:38 +0000 (18:05 +0100)]
Add configuration file comment for check_packet_size option

5 years agoAdd defines for nettle_get_secp_* for Nettle pre 3.4
Jonathan McDowell [Sat, 7 Sep 2019 19:56:04 +0000 (19:56 +0000)]
Add defines for nettle_get_secp_* for Nettle pre 3.4

Debian 9 (stretch) has Nettle 3.3, so define these fallbacks so we
can build with crypto support there.

5 years agoAdd support for full signature verification
Jonathan McDowell [Sat, 7 Sep 2019 12:04:14 +0000 (12:04 +0000)]
Add support for full signature verification

For a long time it has been known that attacks against the keyserver
network were easy due to the lack of cryptographic verification on
signatures, as well as the lack of other checks and balances. Add the
ability to actually verify signatures, allowing those are that are not
valid (or that come from non-present keys) to be removed.

5 years agoError out if there's any problem setting up the keyd socket
Jonathan McDowell [Fri, 6 Sep 2019 17:56:51 +0000 (18:56 +0100)]
Error out if there's any problem setting up the keyd socket

Rather than ending up in an accept() loop that goes nowhere, print
the error we saw and exit.

5 years agoAdd dependency on pkg-config
Jonathan McDowell [Thu, 5 Sep 2019 15:17:42 +0000 (16:17 +0100)]
Add dependency on pkg-config

The move to cmake requires pkg-config in order to find nettle-dev
correctly.

5 years agoAdd MD5_DIGEST_SIZE to our local MD5 implementation header
Jonathan McDowell [Thu, 5 Sep 2019 13:18:33 +0000 (14:18 +0100)]
Add MD5_DIGEST_SIZE to our local MD5 implementation header

This is present in libnettle and has been made use of recently to
avoid a hard coded digest length value.

5 years agoRemove v5 keyid support when libnettle not present
Jonathan McDowell [Thu, 5 Sep 2019 13:06:44 +0000 (14:06 +0100)]
Remove v5 keyid support when libnettle not present

v5 key fingerprints are SHA256 based. We have fallbacks for MD5 + SHA1
when libnettle is not present, but there's no intent to provide a SHA256
fallback, and we're close to the point where support for building
without libnettle will be removed entirely.

5 years agoPass a keydb context into cleankeys in preparation for signature checks
Jonathan McDowell [Wed, 28 Aug 2019 07:20:03 +0000 (08:20 +0100)]
Pass a keydb context into cleankeys in preparation for signature checks

In order to validate signatures cleankeys() will need to do key lookups
of the signing keys. Plumb in the database context in preparation for
this.

5 years agoMove key database backends into their own directory
Jonathan McDowell [Tue, 27 Aug 2019 17:56:46 +0000 (18:56 +0100)]
Move key database backends into their own directory

These logically sit together and are separate from the core code, so
move them off to a separate directory. There are various bits of support
that should be hived off the core libonak and move in here too, but that
can wait until later.

5 years agoCleanup postinst to avoid recursive chown of database
Jonathan McDowell [Thu, 22 Aug 2019 07:17:49 +0000 (08:17 +0100)]
Cleanup postinst to avoid recursive chown of database

The recursive chown of /var/lib/onak has the potential to be abused
during installation, so just chown the top level directory and then run
the onak that's initialising the DB as the onak user, rather than root.

5 years agoSet Rules-Requires-Root to no
Jonathan McDowell [Thu, 22 Aug 2019 07:07:46 +0000 (08:07 +0100)]
Set Rules-Requires-Root to no

We can build as a normal user.

5 years agoBump debhelper compat level to 10
Jonathan McDowell [Thu, 22 Aug 2019 06:19:36 +0000 (07:19 +0100)]
Bump debhelper compat level to 10

Also remove now unnecessary build-depend on dh-systemd.

5 years agoRemove git clone depth for Travis-CI
Jonathan McDowell [Thu, 22 Aug 2019 06:14:38 +0000 (07:14 +0100)]
Remove git clone depth for Travis-CI

The default of 50 wasn't enough to be able to "git describe" our current
revision for the build process.

5 years agoAdd test for blacklisting functionality
Jonathan McDowell [Wed, 21 Aug 2019 19:07:09 +0000 (20:07 +0100)]
Add test for blacklisting functionality

5 years agoAdd option to only accept updates for existing keys
Jonathan McDowell [Wed, 21 Aug 2019 17:56:57 +0000 (18:56 +0100)]
Add option to only accept updates for existing keys

It's plausible in a curated keyring scenario where a keyserver should
accept updates to existing keys (new signatures, updated expiries, new
subkeys) but no entirely new keys. Add a configuration file option which
enforces this behaviour.

5 years agoAdd blank line before armoured PGP data
Jonathan McDowell [Wed, 21 Aug 2019 17:55:32 +0000 (18:55 +0100)]
Add blank line before armoured PGP data

When removing the Version: header it's still necessary to have a blank
line before the actual armoured data.

5 years agoClean up signature hash calculation code
Jonathan McDowell [Tue, 20 Aug 2019 07:12:52 +0000 (08:12 +0100)]
Clean up signature hash calculation code

Use the defined digest lengths for MD5/SHA1/SHA1X rather than magic
numbers, clear the hash type at the start and then only set it if we
know it.

5 years agoUpdate Travis CI to use Ubuntu 18.04 instead of 16.04
Jonathan McDowell [Mon, 19 Aug 2019 07:29:40 +0000 (08:29 +0100)]
Update Travis CI to use Ubuntu 18.04 instead of 16.04

5 years agoClean up GCC warnings
Jonathan McDowell [Mon, 19 Aug 2019 07:25:15 +0000 (08:25 +0100)]
Clean up GCC warnings

GCC -Wall found a valid issue with a & instead of a && in the keyring DB
backend, a buffer assignment missing a cast and some unused variables in
the DB4 backend.

5 years agoClean up use of shifts beyond composite types
Jonathan McDowell [Mon, 19 Aug 2019 06:28:16 +0000 (07:28 +0100)]
Clean up use of shifts beyond composite types

GCC with the -fsanitize=undefined flag issues complaints like:

runtime error: left shift of 232 by 24 places cannot be represented in
type 'int'

due to the fact we shift the byte values into a 64 bit value. Rather
than adding lots of casts split out the formation into a set of steps
that doesn't end up shifting the byte value, just the final 64 bit
value.

5 years agoAdd support for a key fingerprint blacklist
Jonathan McDowell [Sun, 18 Aug 2019 20:55:45 +0000 (21:55 +0100)]
Add support for a key fingerprint blacklist

There are various keys in the wild, such as Evil32 (https://evil32.com/)
which a keyserver is unlikely to want to carry in the general case.
Introduce the capability to have a blacklist of fingerprints which will
not be accepted into the keyserver.

5 years agoDeprecate the .conf configuration file format
Jonathan McDowell [Sun, 18 Aug 2019 19:46:39 +0000 (20:46 +0100)]
Deprecate the .conf configuration file format

The old .conf config file was intended to be compatible with the ancient
PKS keyserver. All new features are only supported with the .ini format
and this is going to make the automated tests supporting both more
awkward. So deprecate the old style and stop testing it.

5 years agoFix memory leak when updating keys
Jonathan McDowell [Sun, 18 Aug 2019 18:30:06 +0000 (19:30 +0100)]
Fix memory leak when updating keys

If the first new key had no new components we'd remove it from the list
but not actually free it. Fix things up so we free it properly. Found
with gcc's -fsanitize=leak option.

5 years agoFix up memory leaks in fs keydb backend deletion
Jonathan McDowell [Sun, 18 Aug 2019 18:03:44 +0000 (19:03 +0100)]
Fix up memory leaks in fs keydb backend deletion

We need to clean up the wordlist we created, as well as the copy of the
actual key we retrieved.

5 years agoFix memory leak in makewordlistfromkey()
Jonathan McDowell [Sun, 18 Aug 2019 17:49:47 +0000 (18:49 +0100)]
Fix memory leak in makewordlistfromkey()

We were building a linked list of words in each UID, but then not
cleaning up this linked list when we were done with it. Found with gcc
-fsanitize=leak

5 years agoProperly free database context when cleaning up fs backend
Jonathan McDowell [Sun, 18 Aug 2019 13:55:09 +0000 (14:55 +0100)]
Properly free database context when cleaning up fs backend

5 years agoFix memory leak when merging key signatures
Jonathan McDowell [Sun, 18 Aug 2019 10:03:47 +0000 (11:03 +0100)]
Fix memory leak when merging key signatures

This is a long-standing memory leak when merging signed packet lists. It
hasn't been observed in the wild because the key merging is normally
done in a transient process. Found using GCC with -fsanitize=leak

5 years agoCleanup DB4 deletion code from pre-fingerprint period
Jonathan McDowell [Mon, 12 Aug 2019 18:03:05 +0000 (19:03 +0100)]
Cleanup DB4 deletion code from pre-fingerprint period

Some remanents from the key ID based deletion function that are no
longer needed.

5 years agoFix up key deletion by key ID with onak tool
Jonathan McDowell [Mon, 12 Aug 2019 17:59:54 +0000 (18:59 +0100)]
Fix up key deletion by key ID with onak tool

The call to db_delete_key() was claiming we were in a transaction, which
isn't true and causes failures with deletion with DB4.

5 years agoExpose more of calculating the packet signature hash
Jonathan McDowell [Mon, 5 Aug 2019 18:27:06 +0000 (19:27 +0100)]
Expose more of calculating the packet signature hash

As preparation for full signature verification move to calculating the
signature hash and exposing it, and then doing the verification in the
cleaning routine.

5 years agoDrop v3 keys by default when cleaning keys
Jonathan McDowell [Sun, 4 Aug 2019 18:19:31 +0000 (19:19 +0100)]
Drop v3 keys by default when cleaning keys

v3 keys have long been considered insecure. While we want to retain
support for them there's no reason most keyservers should actually store
them these days. So drop them by default when running cleankeys()

5 years agoFix header size for v5 packet sig checks
Jonathan McDowell [Sat, 3 Aug 2019 10:10:09 +0000 (11:10 +0100)]
Fix header size for v5 packet sig checks

The keyheader for a v5 signature has a 4 byte length instead of a 2 byte
length, but the structure hadn't been increased in size.

5 years agoMove CGI sources to their own subdirectory
Jonathan McDowell [Sat, 3 Aug 2019 08:35:23 +0000 (09:35 +0100)]
Move CGI sources to their own subdirectory

Cleanup the code structure a bit by pulling those files only used for
the HKP interface into their own directory.

5 years agoRemove unused worddb_cmp() from DB4 backend
Jonathan McDowell [Sat, 3 Aug 2019 08:09:41 +0000 (09:09 +0100)]
Remove unused worddb_cmp() from DB4 backend

This function was no longer used, so remove it.

5 years agoRemove getfullkeyid functionality
Jonathan McDowell [Thu, 1 Aug 2019 21:32:51 +0000 (22:32 +0100)]
Remove getfullkeyid functionality

This expanded a 32 bit key ID into a 64 bit key ID. It's mostly
redundant, so encode 64 bit key IDs where necessary and rely on the
fetch fallback to 32 bit elsewhere.

5 years agoChange delete_key to use a full fingerprint
Jonathan McDowell [Thu, 1 Aug 2019 21:18:24 +0000 (22:18 +0100)]
Change delete_key to use a full fingerprint

delete_key was deleting a key based on the keyid, which is
insufficiently precise. Move over to the full fingerprint (even though
with some backends this is an effective no-op for now).

5 years agoImprove handling of colliding 64-bit key IDs
Jonathan McDowell [Thu, 1 Aug 2019 18:19:30 +0000 (19:19 +0100)]
Improve handling of colliding 64-bit key IDs

Originally key retrieval was all performed on the 64 bit key ID but back
in 2013 support was added for fetching by fingerprint. However not all
the pieces to deal with colliding 64 bit IDs were added at this time.
This commit improves things by:

 * Using the fingerprint to retrieve the key to update in update_keys()
 * Returning all keys that share a 64 bit key ID from the DB4 backend,
   rather than just the first found.
 * Adding a test to ensure multiple keys are returned for a colliding
   key lookup.

It also removes the old compatibility code for the DB4 backend with key
lookups by 64 bit key ID.

Note this isn't yet common in the wild; unlike Evil32 it is not possible
to create collisions for arbitrary key IDs.

5 years agoFix potential memory leak in wotsap tool
Jonathan McDowell [Wed, 31 Jul 2019 19:49:30 +0000 (20:49 +0100)]
Fix potential memory leak in wotsap tool

In failure paths we can leak the memory allocated to hold the directory
path. This isn't really a problem, as we'll exit shortly afterwards, but
scan-build complains and we should really fix for completeness.

5 years agoEnable sighash checking for v5 keys
Jonathan McDowell [Wed, 31 Jul 2019 18:17:44 +0000 (19:17 +0100)]
Enable sighash checking for v5 keys

v5 signatures are calculated slightly differently than v4 signatures, so
allow for this when checking the 2 leading bytes of the signature hash.

5 years agoExit on failure to initialise a dynamic DB backend
Jonathan McDowell [Wed, 31 Jul 2019 18:08:37 +0000 (19:08 +0100)]
Exit on failure to initialise a dynamic DB backend

The dynamic DB backend does a lot of checks to ensure it can load the
requested backend successfully, but didn't actually check that it
initialised correctly. Bomb out with a graceful error message if this
happens rather than leading the caller to think everything is ok.

5 years agoAdd an OpenPGP keyring backed database backend
Jonathan McDowell [Tue, 30 Jul 2019 18:40:17 +0000 (19:40 +0100)]
Add an OpenPGP keyring backed database backend

Allow the use of an OpenPGP keyring (like keyring.gpg from GnuPG v1) as
a read-only database backend. This is just a collection of keys
concatenated together. The file is mmaped on load and parsed for keys,
then simple linear searches are done for keyids/fingerprints.
Performance with large numbers of keys will not be good.

5 years agoAdd more generic OID parsing to decodekey
Jonathan McDowell [Tue, 30 Jul 2019 18:32:34 +0000 (15:32 -0300)]
Add more generic OID parsing to decodekey

Rather than only parsing the encoded OID to calculate the key size make
a helper function in decodekey and use that. This will be useful when
trying to parse key material for signature checks.

5 years agoExport fingerprint_cmp from keyarray.c
Jonathan McDowell [Tue, 30 Jul 2019 18:26:58 +0000 (15:26 -0300)]
Export fingerprint_cmp from keyarray.c

Comparing fingerprints is generally useful outside of the routines in
keyarray.c, so export the function prototype in the header file.

5 years agoRemove Version: header from armored output
Jonathan McDowell [Mon, 8 Jul 2019 11:06:31 +0000 (12:06 +0100)]
Remove Version: header from armored output

There is no benefit to this header and it leaks information about the
implementation of OpenPGP in use, which may open up other attacks. Drop
it.

5 years agoRemove auto* related files from .gitignore
Jonathan McDowell [Tue, 16 Apr 2019 08:14:03 +0000 (09:14 +0100)]
Remove auto* related files from .gitignore

5 years agoStop using 32-bit key IDs
Jonathan McDowell [Tue, 16 Apr 2019 20:09:29 +0000 (21:09 +0100)]
Stop using 32-bit key IDs

The time for 32-bit key IDs is long past (and even 64-bits are risky),
so switch to 64-bit IDs everywhere we display a key ID.

5 years agoAssume if we have Nettle it has all the hashes we need
Jonathan McDowell [Tue, 16 Apr 2019 06:48:24 +0000 (07:48 +0100)]
Assume if we have Nettle it has all the hashes we need

Older versions of Nettle didn't support the SHA2 functions fully so we
checked for their existence. Switch to assuming they're present if we
have Nettle at all.

5 years agoMove Travis to do CMake configure + build
Jonathan McDowell [Mon, 15 Apr 2019 18:48:58 +0000 (19:48 +0100)]
Move Travis to do CMake configure + build

Once more, with feeling, for the move from autoconf to cmake.

5 years agoAdd CMake dependency for Travis CI
Jonathan McDowell [Mon, 15 Apr 2019 18:39:24 +0000 (19:39 +0100)]
Add CMake dependency for Travis CI

5 years agoDrop "autoreconf -i" for Travis CI now we're using CMake
Jonathan McDowell [Mon, 15 Apr 2019 18:34:47 +0000 (19:34 +0100)]
Drop "autoreconf -i" for Travis CI now we're using CMake

5 years agoDon't require a database connection for a key index
Jonathan McDowell [Mon, 15 Apr 2019 18:23:20 +0000 (19:23 +0100)]
Don't require a database connection for a key index

We need an active keydb backend if we want to be able to lookup
UIDs for signatures, but if we don't have one we can still index the
key. Only use keyid2uid when we have a non-NULL dbctx.

5 years agoAdd support for v5 keys
Jonathan McDowell [Mon, 15 Apr 2019 18:19:22 +0000 (19:19 +0100)]
Add support for v5 keys

v5 is being specified in RFC4880bis. It uses a slightly different packet
format for public key packets and uses SHA2-256 for fingerprints. Add
basic support for parsing and storing these days, and some new unit
tests using the v5 test key.

5 years agoAdd support for issuer fingerprint subpackets
Jonathan McDowell [Mon, 15 Apr 2019 09:22:12 +0000 (10:22 +0100)]
Add support for issuer fingerprint subpackets

A new subpacket containing the entire fingerprint of the signature
issuer has been added in RFC4880bis. This improves the old issuer keyid
subpacket type.

5 years agoMove to CMake over autoconf
Jonathan McDowell [Sun, 14 Apr 2019 16:51:11 +0000 (17:51 +0100)]
Move to CMake over autoconf

The auto* tools are hard to work with, and I'd like to split out various
bits of onak into a shared library useful to other projects as well as
various internal helpers (e.g. a backend DB library). To help with that
move over to CMake as a more modern but still widely available build
system.

5 years agoCleanup tests to be able to run from a different directory
Jonathan McDowell [Wed, 10 Apr 2019 18:05:10 +0000 (19:05 +0100)]
Cleanup tests to be able to run from a different directory

runtests assumes its run from the directory it lives in, and that this
is the build directory. Improve it to be able to cope with a build in a
different directory to the source and work out the correct paths.

5 years agoAdd ability to drop overly large packets
Jonathan McDowell [Tue, 9 Apr 2019 19:54:57 +0000 (20:54 +0100)]
Add ability to drop overly large packets

As per draft-dkg-openpgp-abuse-resistant-keystore add the ability to
drop "large" packets. These are defined as UIDs more than 1024 bytes
long, UATs greater than 64k in size and all other packets larger than
8383 bytes (the maximum that will fit in a 2 byte new format packet
length). Disabled by default, enable with "check_packet_size" in the
verification config section.

5 years agoUse a set of policy flags to indicate what key cleaning to perform
Jonathan McDowell [Tue, 9 Apr 2019 18:53:54 +0000 (19:53 +0100)]
Use a set of policy flags to indicate what key cleaning to perform

To decouple cleankeys.c from the keyserver config, and prepare for an
extension of the policies available, use a set of flags to indicate what
key cleaning to perform.

5 years agoAdd Vim backup files + GNU Global tags to .gitignore
Jonathan McDowell [Tue, 9 Apr 2019 18:30:53 +0000 (19:30 +0100)]
Add Vim backup files + GNU Global tags to .gitignore

5 years agoUpdate Travis CI config to use Xenial
Jonathan McDowell [Tue, 9 Apr 2019 18:22:03 +0000 (19:22 +0100)]
Update Travis CI config to use Xenial

The default of Trusty is failing to find libsystemd-dev.

5 years agoMove keysigs into its only user, keydb.c
Jonathan McDowell [Tue, 9 Apr 2019 14:55:02 +0000 (15:55 +0100)]
Move keysigs into its only user, keydb.c

keysigs is only actually used within keydb.c and pulls in stats
structures unnecessarily to decodekey.c, so pull it inline.

5 years agoMove free_statskey into hash.c
Jonathan McDowell [Tue, 9 Apr 2019 14:42:28 +0000 (15:42 +0100)]
Move free_statskey into hash.c

free_statskey() is only used within hash.c, so move it out of mem.c and
scope it more narrowly.

5 years agoUpdate GPL location to URL rather than postal address
Jonathan McDowell [Tue, 9 Apr 2019 13:54:13 +0000 (14:54 +0100)]
Update GPL location to URL rather than postal address

5 years agoCleanup various includes
Jonathan McDowell [Tue, 9 Apr 2019 13:38:03 +0000 (14:38 +0100)]
Cleanup various includes

Run include-what-you-use and do some cleanups based on its suggestions.
Pull out some logging dependencies that don't need to be there in the
process.

5 years agoClean up a couple of format truncation warnings
Jonathan McDowell [Tue, 9 Apr 2019 12:30:37 +0000 (13:30 +0100)]
Clean up a couple of format truncation warnings

Newer GCCs will warn about truncation in strncpy/snprintf etc, so re-jig
things a bit to try and avoid it.

6 years agoUse generic fallback in stacked backend for non core routines
Jonathan McDowell [Tue, 25 Sep 2018 10:07:06 +0000 (11:07 +0100)]
Use generic fallback in stacked backend for non core routines

The non-core routines that don't directly return or store a key
structure often fall back to the generic routines under the hood. This
means we can miss propagating a retrieved key up to the top level of the
stack. Avoid this by only calling the non-generic version for the top
layer, then falling back to the generics which will do the appropriate
store on fallback.

8 years ago0.5.0 release onak-0.5.0
Jonathan McDowell [Sun, 28 Aug 2016 15:26:17 +0000 (16:26 +0100)]
0.5.0 release

Release; update version string in configure.ac, README, Doxyfile.
Update HISTORY and debian/changelog.

8 years agoRelax packet version check
Jonathan McDowell [Tue, 23 Aug 2016 10:54:30 +0000 (11:54 +0100)]
Relax packet version check

The version check on packets was too strict - there are a bunch of
packets that don't have a version (such as the UID). Make these checks
more specific based on the definitions from RFC4800.

(Lesson learned: Do not commit without running the automated tests.)

8 years agoImprove subpacket parsing robustness
Jonathan McDowell [Tue, 23 Aug 2016 08:27:30 +0000 (09:27 +0100)]
Improve subpacket parsing robustness

Although we checked on each round of subpackets that we were still
within the correct length, we weren't checking the subpacket length
itself fit within the remaining data. Fixes some issues found using
American Fuzzy Lop.

8 years agoAdd sanity check for PGP packet version
Jonathan McDowell [Mon, 22 Aug 2016 22:14:24 +0000 (23:14 +0100)]
Add sanity check for PGP packet version

At present only PGP packet versions up to 4 are supported. There's no
indication version 5+ will be backwards compatible, so if we see
anything higher it indicates something unsupported. Fixes some issues
found using American Fuzzy Lop.

8 years agoThrow away invalid packet data when parsing packets
Jonathan McDowell [Mon, 22 Aug 2016 16:35:02 +0000 (17:35 +0100)]
Throw away invalid packet data when parsing packets

We would detect that a packet wasn't correctly formed, and handle
requests to try to allocation too much memory that failed, when parsing
keys. However the old partial packet structure was still left around. If
we hit an error when parsing an incoming packet make sure it's fully
cleaned up.

8 years agoBe more robust when handling unexpected lack of data
Jonathan McDowell [Mon, 22 Aug 2016 16:32:37 +0000 (17:32 +0100)]
Be more robust when handling unexpected lack of data

Make sure we don't assume packets have data (though they should), or
that a key has any uids. Found using American Fuzzy Lop.

8 years agoPrevent sign extension when parsing large packet sizes
Jonathan McDowell [Mon, 22 Aug 2016 16:30:14 +0000 (17:30 +0100)]
Prevent sign extension when parsing large packet sizes

A 2GB+ packet is likely to be a mistake, but in the event it was
legitimate sign extension could result in a much larger amount of
memory being allocated (and probably failing). Fix this by trying
to ensure we're doing an unsigned left shift.

8 years agoInclude - in the permitted characters for the HKP base URL
Jonathan McDowell [Mon, 8 Aug 2016 22:05:18 +0000 (23:05 +0100)]
Include - in the permitted characters for the HKP base URL

- had been missed out as a valid character in the domain name for
the host we forward HKP requests to; add it.

8 years agoAdd logging of the HKP base URL for the HKP forwarding backend
Jonathan McDowell [Mon, 8 Aug 2016 22:04:14 +0000 (23:04 +0100)]
Add logging of the HKP base URL for the HKP forwarding backend

8 years agoAdd cleankey.o to CORE_OBJS
Jonathan McDowell [Mon, 8 Aug 2016 16:35:45 +0000 (17:35 +0100)]
Add cleankey.o to CORE_OBJS

Move cleankey.o from being an extra object to being part of the core
objects; the HKP backend is using it for starters and it so do various
other bits.

8 years agoAdd KEYD_CMD_UPDATE to keyd protocol
Jonathan McDowell [Mon, 4 Jul 2016 08:07:02 +0000 (10:07 +0200)]
Add KEYD_CMD_UPDATE to keyd protocol

When a key was being updated over keyd it would do a delete and then
a store, which ended up being outside a transaction. Add an update
command so that the backend can do the update fully itself.

8 years agoFix errors in onak-mail.pl
Jonathan McDowell [Fri, 10 Jun 2016 07:58:12 +0000 (08:58 +0100)]
Fix errors in onak-mail.pl

The change to the new configuration file format introduced some paper
bag errors in the mail processing script. Fix these, and add a Perl
syntax check into the test target to try and prevent this sort of thing
in future.

8 years agoFix use of keyd backend
Jonathan McDowell [Fri, 10 Jun 2016 07:26:53 +0000 (08:26 +0100)]
Fix use of keyd backend

When keyd is in use any backend configuration is ignored for the clients
and keyd contacted instead. The new config changes failed to correctly
migrate the overriding mechanism for this and as a result nothing was
using keyd.

8 years agoFix compilation breakage with PostgreSQL backend
Jonathan McDowell [Thu, 9 Jun 2016 14:35:09 +0000 (15:35 +0100)]
Fix compilation breakage with PostgreSQL backend

The migration to a specific backend database configuration structure
was incomplete for the PostgreSQL backend, causing compilation failures.

8 years agoRun autoreconf -i to produce configure script for Travis CI builds
Jonathan McDowell [Thu, 9 Jun 2016 14:23:33 +0000 (15:23 +0100)]
Run autoreconf -i to produce configure script for Travis CI builds

8 years agoAdd initial Travis CI configuration for GitHub CI builds
Jonathan McDowell [Thu, 9 Jun 2016 14:20:19 +0000 (15:20 +0100)]
Add initial Travis CI configuration for GitHub CI builds

8 years agoInclude statistics for fetching by SKS hash in "keydctl status"
Jonathan McDowell [Thu, 9 Jun 2016 11:00:50 +0000 (12:00 +0100)]
Include statistics for fetching by SKS hash in "keydctl status"

These statistics were already being collected and passed to keydctl,
but were not being displayed.

8 years agoClean keys before storing them in the stacked backend
Jonathan McDowell [Wed, 8 Jun 2016 22:24:05 +0000 (23:24 +0100)]
Clean keys before storing them in the stacked backend

If we fetch keys from a lower level of the stacked backends then run
the clean functions before trying to store them in the top level.

8 years agoAdd all hardening options for Debian build (in particular for bindnow + pie)
Jonathan McDowell [Wed, 8 Jun 2016 18:10:05 +0000 (19:10 +0100)]
Add all hardening options for Debian build (in particular for bindnow + pie)

8 years agoAdd onak to Provides: in Debian init script rather than just pgp-server
Jonathan McDowell [Wed, 8 Jun 2016 18:08:36 +0000 (19:08 +0100)]
Add onak to Provides: in Debian init script rather than just pgp-server

8 years agoUpdate Debian Vcs URLs to use secure variants
Jonathan McDowell [Wed, 8 Jun 2016 18:07:28 +0000 (19:07 +0100)]
Update Debian Vcs URLs to use secure variants

8 years agoFix up Debian systemd control file to allow non-socket activation
Jonathan McDowell [Wed, 8 Jun 2016 15:25:39 +0000 (16:25 +0100)]
Fix up Debian systemd control file to allow non-socket activation

Rather than relying on socket activation allow keyd to be started on
boot by adding the appropriate stanza to the onak.service file.

8 years agoBump Debian Standards-Version to 3.9.8.0
Jonathan McDowell [Wed, 8 Jun 2016 14:14:15 +0000 (15:14 +0100)]
Bump Debian Standards-Version to 3.9.8.0

No changes.

8 years agoFix use of absolute path in Debian postinst script
Jonathan McDowell [Wed, 8 Jun 2016 14:07:35 +0000 (15:07 +0100)]
Fix use of absolute path in Debian postinst script

The changes to the Debian postinst to update an existing modified
configuration to the new style called onak with a full pathname. This
is contrary to Policy, so drop the path as dpkg should call us with
a sane $PATH.

8 years agoAdd stacked backend
Jonathan McDowell [Wed, 8 Jun 2016 11:35:10 +0000 (12:35 +0100)]
Add stacked backend

This backend takes advantage of the new configuration file flexibility
to enable the stacking of multiple backends together, with each being
tried in turn until the desired keys are found. All stores go to the
first configured backend, and fetches from subsequent backends are
also stored in the first backend.

8 years agoSilence scan-build warning about uninitialised fd_set structure
Jonathan McDowell [Wed, 8 Jun 2016 11:27:41 +0000 (12:27 +0100)]
Silence scan-build warning about uninitialised fd_set structure

This is a false positive by scan-build (as FD_ZERO will initialise the
structure for us), but silence it anyway to achieve a clean run.