Commit Graph

29159 Commits

Author SHA1 Message Date
Luke Howard 69b34d1b8a gss: fix signedness on is_initiator bitfield
In SAnon:

The is_initiator bitfield must be unsigned to avoid undefined behaviour, as
there is only a single bit defined. Thanks to Nico Williams for explaining
this.
2020-04-27 18:44:02 +10:00
Luke Howard c785af8b62 gss: update SAnon for draft-howard-gss-sanon-13
draft-howard-gss-sanon-13 will move extended (RFC4757) flags from the NegoEx
metadata to an optional component of the initial context token
2020-04-27 15:18:14 +10:00
Luke Howard 55a553c56d gss: don't use mechglue private header in SPNEGO
Unbreak last commit, including mech_locl.h in SPNEGO appears to break Windows
builds
2020-04-27 15:10:29 +10:00
Luke Howard 7cdc9934b1 gss: initialize output parameters in NegoEx
NegoEx failed to initialize output parameters in _gss_negoex_{init,accept}
which could lead it to crash if the underlying mechanism returned an error.
2020-04-27 14:38:33 +10:00
Luke Howard 56842561f8 gss: initialize *minor in _gss_sanon_inquire_cred() 2020-04-27 11:15:49 +10:00
Nicolas Williams 2cb40ed97c sanon: Fix flags and ctx export/import confusion
We were passing SANON flags to _gss_mg_import_rfc4121_context(), which
wants GSS flags.  Meanwhile, I broke gss_inquire_context() on imported
SAnon contexts when I did my review of SAnon.

This commit fixes both issues and removes SANON_FLAG_*, which were only
ever needed because of a flag to track whether a context was locally
initiated or accepted.  Now we use a separate int field of the sanon_ctx
to track whether a context was locally initiated.  Once an SAnon context
is fully established, we rely on gss_inquire_context() on the rfc4121
sub-context for all metadata that isn't the initiator and acceptor names
nor the mechanism OID.
2020-04-26 01:30:37 -05:00
Nicolas Williams 51fdb4bc04 krb5: Fix warning in krb5_get_error_string() 2020-04-26 01:30:37 -05:00
Nicolas Williams 5057d04f6a krb5: Fix display_status() incorrect major status 2020-04-25 23:19:30 -05:00
Luke Howard 4a7eb74374 gss: SAnon - the Simple Anonymous GSS-API mechanism
Add support for SAnon, a simple key agreement protocol that provides no
authentication of initiator or acceptor using x25519 ECDH key exchange.
See doc/standardization/draft-howard-gss-sanon-xx.txt for a protocol
description.
2020-04-25 23:19:30 -05:00
Luke Howard beda11a079 hcrypto: Add X25519
The X25519 implementation comes from libsodium. Explicit copyright
notices have been added to each file as well as some portability changes
(e.g. align.h).
2020-04-25 23:19:30 -05:00
Nicolas Williams 20f9b2be48 gss: Fix some test leaks 2020-04-25 21:22:32 -05:00
Nicolas Williams 1a8855e6c4 spnego: Also use mechglue names 2020-04-25 21:22:32 -05:00
Nicolas Williams 511b5e4e97 Revert "travis: Use ccache to speed up builds"
This reverts commit 37dee9bbc3, which did
not help speed up Travis-CI builds.
2020-04-24 19:05:19 -05:00
Nicolas Williams 37dee9bbc3 travis: Use ccache to speed up builds 2020-04-24 17:38:02 -05:00
Nicolas Williams 3ca80a69f4 travis: Show valgrind output in log
This might cause logs to get large.  We might need to post the logs to
some URI.
2020-04-24 16:02:35 -05:00
Nicolas Williams 6a48aa4a0f travis: Allow CI config to make check-valgrind
Setting MAKE_CHECK_SUFFIX=-valgrind in the environment will cause Travis
to make check-valgrind.
2020-04-24 16:02:35 -05:00
Nicolas Williams 03a08825d0 kadmin: fix leak 2020-04-24 16:02:35 -05:00
Nicolas Williams 9794f02245 roken: fix valgrind leak noise 2020-04-24 16:02:35 -05:00
Nicolas Williams d6e9584d6c hx509: Fix hx509_context_free() leak 2020-04-24 16:02:35 -05:00
Nicolas Williams e8441212d1 Move error functions from krb5 to base 2020-04-24 16:02:35 -05:00
Nicolas Williams e2d435cf2f Move lib/krb5/error_string.c to lib/base/
This commit contains only renames.
2020-04-24 16:02:35 -05:00
Nicolas Williams 01509f553d Move KDC audit functionality to lib/base/ 2020-04-24 16:02:35 -05:00
Nicolas Williams 679bcb6872 hx509: Add hx509.conf support
Just like krb5.conf, but hx509.conf, with all the same default locations
on Windows, OS X, and elsewhere, and HX509_CONFIG as the environment
variable equivalent of KRB5_CONFIG.
2020-04-24 16:02:33 -05:00
Nicolas Williams 78a21fdd95 Move more config file code from krb5 to base 2020-04-24 00:11:56 -05:00
Nicolas Williams 5eade227ce com_err: make error_table_name() thread-safe 2020-04-24 00:11:56 -05:00
Luke Howard 8d19f3f47f gss: pass mechanism error tokens through SPNEGO
Fix for issue #486 based on a patch by Nico Williams.

A GSS-API acceptor can return an error token to be sent to the initiator. Our
SPNEGO implementation discarded these when sending a SPNEGO reject response.
This patch fixes the SPNEGO acceptor to convey those in the SPNEGO response.

The SPNEGO initiator is also updated to not bail out early on receiving a
SPNEGO reject response from the acceptor, but instead pass the response token
(if any) to gss_init_sec_context(). A reject response with no response token
will continue to return an error.
2020-04-24 15:07:55 +10:00
Luke Howard dfb1e6fcf8 hcrypto: trim number of trials in prime number generation
Reduce the number of trials when generating RSA keys by calling
mp_prime_rabin_miller_trials() with the number of desired bits.

See libtom/libtommath#482.
2020-04-24 11:59:54 +10:00
Luke Howard 7eb397834e hcrypto: make libtommath v1.2.0 work with Heimdal 2020-04-24 11:59:54 +10:00
Luke Howard c403b66082 hcrypto: import libtommath v1.2.0 2020-04-24 11:59:54 +10:00
Nicolas Williams 7181c109d0 Properly implement neg_mechs & GM_USE_MG_CRED (fix) 2020-04-21 19:51:55 -05:00
Nicolas Williams e48e75cd22 Better support for "non-standard" GSS mechs (fix) 2020-04-21 19:51:16 -05:00
Luke Howard 3bfe62df6a gss: remove gss_release_cred_by_mech()
gss_release_cred_by_mech() was previously used by SPNEGO's implementation of
gss_set_neg_mechs(). This is now implemented in the mechanism glue. As we never
shipped gss_release_cred_by_mech(), it is safe to remove it and its exported
symbol.
2020-04-21 00:21:32 -05:00
Nicolas Williams a54761d68a Properly implement neg_mechs & GM_USE_MG_CRED
SPNEGO was already using union creds.  Now make the mechglue know about
it, delete all of the cred-related SPNEGO stubs that are now not called
(lib/gssapi/spnego/cred_stubs.c), and implement gss_get/set_neg_mechs()
by storing the OID set in the union cred.

This commit was essentially authored as much if not more by Luke Howard
<lukeh at padl.com> as much as by the listed author.
2020-04-21 00:21:32 -05:00
Luke Howard 2ec9e17042 gss: intern OID before adding to OID set
gss_add_oid_set_member() should according to RFC2744 add a copy of the OID to
the set; the current implementation just stored a pointer (which may not be
stable). As we have _gss_intern_oid(), call that before adding.
2020-04-21 00:13:50 -05:00
Nicolas Williams 9f3d9e1a0a Add gss_duplicate_oid_set() 2020-04-21 00:13:50 -05:00
Nicolas Williams 92c288994a Better support for "non-standard" GSS mechs
If an initial security context token doesn't have a standard header per
RFC2743 then try all mechanisms until one succeeds or all fail.

We still try to guess NTLMSSP, raw Kerberos, and SPNEGO, from tasting
the initial security context token.
2020-04-17 14:37:39 -05:00
Luke Howard 4199118c76 gss: fix gss_decapsulate_token() return codes
gss_decapsulate_token() should return GSS_S_BAD_MECH if the mechanism did not
match the expected one, and GSS_S_DEFECTIVE_TOKEN if the token could not be
parsed for some other reason, rather than GSS_S_FAILURE in both cases
2020-04-17 11:11:43 +10:00
Luke Howard 26a69856f6 gss: GSS_KRB5_IMPORT_RFC4121_CONTEXT_X / _gss_mg_import_rfc4121_context()
Add a new private interface (accessed through _gss_mg_import_rfc4121_context())
through which a skeletal krb5 mechanism context can be created, suitable for
RFC4121 message protection and PRF services.
2020-04-17 11:04:33 +10:00
Luke Howard 9383a88a86 gss: honor allocated_ctx in gss_{exchange,query}_meta_data
The NegoEx gss_{exchange,query}_meta_data functions set allocated_ctx but never
did anything with it. Use it to determine whether we should free the context
handle on error.
2020-04-16 17:22:37 +10:00
Luke Howard c70540480b gss: free user keytab before resolving system keytab
get_client_keytab() leaked the user keytab if it resolved but we could not find
the client principal. Free it before trying the system keytab.
2020-04-16 17:22:31 +10:00
Luke Howard 9eab344d35 gss: don't leak client_cred in test_context
Don't leak client credential handle in test_context.
2020-04-16 17:22:27 +10:00
Luke Howard 33137a8c82 gss: allow source/target to be null on export/import
Allow the source and target names to be NULL when exporting or importing a
security context for the krb5 mechanism. This will be used in the future to
support skeletal contexts that only provide RFC4121 message protection
services.
2020-04-16 15:20:10 +10:00
Luke Howard 865fffb0f5 gss: fix typo regression in setting minor_status
_gss_secure_release_buffer_set() patch changed minor_status to 0, not
*minor_status as correct. No behavioural change as
_gss_secure_release_buffer_set() would have set it anyway, but obviously this
was unintentional.
2020-04-16 10:44:04 +10:00
Nicolas Williams 354d76f63a Improve coverage script a bit 2020-04-15 19:05:21 -05:00
Luke Howard 2c8fa27224 gss: use _gss_secure_release_buffer_[set]
Use new helper APIs for securely zeroing and releasing buffers and buffer sets.
2020-04-15 16:23:17 +10:00
Luke Howard 689eef20ec gss: add _gss_secure_release_buffer_set()
Add _gss_secure_release_buffer_set() helper function for zeroing buffer set
contents before release.
2020-04-15 16:23:13 +10:00
Luke Howard b2eb5b0edf gss: add _gss_secure_release_buffer()
Add _gss_secure_release_buffer() helper function that zeros buffer
2020-04-15 16:23:08 +10:00
Luke Howard 1611ac457f krb5: allow NULL authenticator in krb5_auth_con_free()
When freeing an auth context, allow the authenticator to be NULL. Useful for
freeing partially allocated authentication context.
2020-04-15 16:23:02 +10:00
Nicolas Williams d2880425e5 Fix Coveralls badge to master branch 2020-04-14 20:48:19 -05:00
Nicolas Williams 3bdd074595 Recover coverage data on more files 2020-04-14 20:15:48 -05:00