Commit Graph

29288 Commits

Author SHA1 Message Date
Jeffrey Altman
33bb2479b9 base: common_plugin.h define KRB5_CALLCONV / KRB5_LIB_CALL
common_plugin.h is expected to be usable on its own.
For backward compatibility, restore the definitions of
KRB5_CALLCONV and KRB5_LIB_CALL.

Change-Id: I6d2239f91ab48b9a6b71816b5221807382dc5914
2020-05-27 23:22:40 -05:00
Jeffrey Altman
d4c0d34548 lib/krb5: krb5_get_instance does not work on Windows 7
krb5_get_instance() is meant to ensure that the shared library
instance of heimdal loaded by a plugin matches the instance that
loaded the plugin.  It works by declaring a static C string whose
memory address will be used as an instance identifier.  If the
instance returned from the plugin matches the instance obtain
by the code that loads the plugin, then we can conclude the two
instances are the same.

This doesn't work on Windows 7.  When heimdal.dll loads a plugin
that is linked to heimdal.dll, the plugin's heimdal.dll is always
a new instance.  However, the requirement for plugin safety is
not that the plugin be the same instance in memory but that they
be the same instance on disk.

This change loads the path name and version string for the module
and generates a hash of those strings as an instance identifier.

Change-Id: I1c0651969e9738c5feecb0b323969d13efd4704d
2020-05-27 23:22:40 -05:00
Andrew Bartlett
1a65611f61 Check some error returns from *asprintf()
This avoids these compiler warnings on Ubuntu 18.04
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)

expand_path.c: In function ‘expand_token’:
expand_path.c:493:17: warning: ignoring return value of ‘asprintf’, declared with attribute warn_unused_result [-Wunused-result]
                 asprintf(&arg, "%.*s", (int)(token_end - colon - 1), colon + 1);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
log.c: In function ‘fmtkv’:
log.c:646:5: warning: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result [-Wunused-result]
     vasprintf(&buf1, fmt, ap);
     ^~~~~~~~~~~~~~~~~~~~~~~~~

mech/context.c: In function ‘gss_mg_set_error_string’:
mech/context.c:212:5: warning: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result [-Wunused-result]
     (void) vasprintf(&str, fmt, ap);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mech/context.c: In function ‘_gss_mg_log_name’:
mech/context.c:319:6: warning: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result [-Wunused-result]
      (void) vasprintf(&str, fmt, ap);
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mech/context.c: In function ‘_gss_mg_log_cred’:
mech/context.c:346:5: warning: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result [-Wunused-result]
     (void) vasprintf(&str, fmt, ap);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

kerberos5.c: In function ‘_kdc_set_e_text’:
kerberos5.c:338:5: warning: ignoring return value of ‘vasprintf’, declared with attribute warn_unused_result [-Wunused-result]
     vasprintf(&e_text, fmt, ap);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
2020-05-27 21:54:26 -04:00
Jeffrey Altman
f91f786dd6 base: common_plugin.h add missing typedefs
ea90ca86664c73fb8d415f3cc7baacdf8a6dd685("Move some infra bits of
lib/krb5/ to lib/base/ (2)") forgot to add typedefs

  heim_get_instance_func_t
  krb5_get_instance_t

required for compilation of krb5_get_instance style plugins.

Change-Id: I3130f86034be1f9f79694eca0d1b309e247fd03f
2020-05-27 09:01:22 -04:00
Jeffrey Altman
739f7e0484 krb5: not_found must free krb5_get_error_message string
Even though krb5_get_error_message() returns 'const char *' the
C-string is allocated and must be freed using krb5_free_error_message().

Change-Id: I8d4ef6fce12f113617443d15abadf51f1e04cf1a
2020-05-27 09:01:22 -04:00
Jeffrey Altman
c6213fc894 base: heim_conf_parse_file_multi remove extra unused parameter
This call

  heim_warn(context, ret, "Ignoring", fname);

doesn't require the 'fname' paramter.  Remove it.

Change-Id: Ia339568658306a903a64ff9e098f914e7387bdd7
2020-05-27 09:01:22 -04:00
Isaac Boukris
662dfbb38b Test including malformed krb5.conf file 2020-05-26 13:10:11 -04:00
Isaac Boukris
6d33cb8290 Fix core dump handling in travis CI 2020-05-26 13:10:11 -04:00
Jeffrey Altman
f0de5f5c43 lib/base: heim_config_parse_file_multi warn if ignoring included config
At present Heimdal silently ignores included configuration files that
cannot be successfully opened or parsed.  This is done to ensure that
an administrator or configuration management tool cannot lock users
out of a machine due to an editing mistake.

This change modifies heim_config_parse_file_multi() to warn the user
if a configuration file cannot be parsed or if an included ("include"
or "includedir") configuration file cannot be opened.  Example warnings
for a configuration file starting with:

  includedir c:/temp

where some of the matching file names cannot be parsed:

  Ignoring: c:\temp\20170516:1: binding before section

or opened:

  Ignoring: open or stat c:\temp\AUAA-83: Permission denied

A top level configuration file will also generate a warning if it
can be opened but cannot be parsed successfully produces

  Ignoring: c:\temp\foo.cmd:1: binding before section
  Ignoring: C:\ProgramData\Kerberos\krb5.conf:22: unmatched }

Change-Id: I455854156f4a61e1b7dad7f96601eca23d2368eb
2020-05-26 11:48:45 -05:00
Jeffrey Altman
5502fa4eca lib/base: heim_config_parse_file do not leak 'newfname'
Refactor heim_config_parse_file() to use a common exit and
ensure that 'newfname' is freed on all exit paths.

Change-Id: Ie805ce2f9d6cbd26a3b98dc944b40864945b6d80
2020-05-26 11:48:45 -05:00
Jeffrey Altman
58db0edea0 lib/base: heim_config_parse_debug doesn't return com_err table errors
A non-zero return value from heim_config_parse_debug() means there
was an failure to open or parse the configuration data.  However, it
is not necessarily an error code.  Callers when setting an error
message must use an error code.

This change to heim_config_parse_file_multi() and
heim_config_parse_string_multi() set an error code of
HEIM_ERR_CONFIG_BADFORMAT when setting the error message.

Change-Id: I534b9af1c50e32d79799a936cb6252dab99c2a64
2020-05-26 11:48:45 -05:00
Jeffrey Altman
965121630c lib/base: heim_config_parse_dir_multi do not overwrite error
In heim_config_parse_dir_multi() do not call heim_enomem(context)
when returning ENOMEM when a better error has already been set in
the context.  Just return ENOMEM.

Change-Id: I9bd9de552b2b04b5a7328ac635e911d6e95422ef
2020-05-26 11:48:45 -05:00
Jeffrey Altman
728639e817 lib/base: heim_config_parse_debug initialize output parameters
The caller of heim_config_parse_debug() expects the output
parameters to be initialized even when the return code is non-zero.
This change initializes the output parameters in case the caller
did not.  Not all code paths assign values to the output parameters
which can result in unexpected termination of the process when
an uninitialized stack pointer is assumed to be valid.

Change-Id: Ib7530a9f16ba3e1500a7e27ccdd8ad9f0492b464
2020-05-26 11:48:45 -05:00
Jeffrey Altman
fde95037a8 lib/krb5: not_found() do not substitute the error text
not_found() is called internally with error code KRB5_CC_NOTFOUND
from find_cred() and get_cred_kdc_capath_worker() where a hard
coded error string "Matching credential not found" makes sense.
However, it is also called from krb5_get_creds() and
krb5_get_credentials_with_flags() with error codes that are
returned from the KDC where hiding the true error string
confuses the end user and hampers debugging.

This change replaces the hard coded string with the result
of krb5_get_error_message() and appends the service ticket
name.

Change-Id: I275c66c7b5783ae25029dce5b851cb389b118bcc
2020-05-26 11:48:45 -05:00
Jeffrey Altman
aa47b5f1a3 Don't override the PATH_SEP definition if present
PATH_SEP is declared on Windows to be ";" and not ":"
by include/config.h.w32.

lib/base/context.c and lib/hx509.c must not override an existing
setting.  Otherwise, file lists cannot be separated and will be
treated as a single file name.

Change-Id: I5521188faca36e41fbae95fbb8942970eab261c8
2020-05-26 11:48:45 -05:00
Jeffrey Altman
6bdbf3ca27 windows: revert change to ldebug
ea90ca8666 ("Move some infra bits of
lib/krb5/ to lib/base/ (2)") inappropriately altered the declaration
of the "ldebug" macro which stores the switches passed to "link.exe".
There is no "/RELEASE" switch and the "/DEBUG" switch instructs the
linker to produce files containing debug symbols (.pdb) which are
required for generating the Windows assemblies.

This change restores the prior behavior.

Change-Id: I61b8fd4759ba84671858f7c8275dbd25af1638e6
2020-05-26 11:48:45 -05:00
Jeffrey Altman
3074561796 lib/base: introduce HEIM_BASE_USE_PATH_TOKENS
KRB5_USE_PATH_TOKENS cannot be used within lib/base as its value
is declared in lib/krb5/krb5.h.  Declare HEIM_BASE_USE_PATH_TOKENS
in lib/base/baselocl.h and test for it in
heim_config_parse_file_multi().

By conditionalizing heim_config_parse_file_multi() behavior on
KRB5_USE_PATH_TOKENS heim_expand_path_tokens() is not executed
and open() is called on a path without token substitution.  As a
result open() always fails with ENOENT.

Change-Id: I29dc018bc560519b76314232b2d51f53bde6313c
2020-05-26 11:48:45 -05:00
Jeffrey Altman
f77618ef15 roken: stdint.hin libtommath 1.2.0 needs more
libtommath 1.2.0 c403b66082
("hcrypto: import libtommath v1.2.0") needs more from stdint.h
than what Heimdal previously declared.  Add more integer type
declarations and integer MIN/MAX macros.

Also, on Windows declare 64-bit integers using __int64 as
"long long" is not supported as 64-bit type across all visual
studio compiler versions.

Change-Id: I944bedc67bcb26374ffb30eb3dfd7c6108a98fc3
2020-05-26 11:48:45 -05:00
Jeffrey Altman
afc9ebe08b fix calling conventions
When a function is assigned to a function pointer that is declared
with a particular calling convention, then the assigned function
must be declared with that calling convention as well.  Otherwise,
kaboom!!!

The following functions are fixed by this change:

kuser/kx509.c
  validate1()
  add1_2chain()

lib/base/log.c
  log_syslog()
  close_syslog()
  log_file()
  close_file()

lib/gssapi/mech/context.c
  gss_set_log_function()

lib/krb5/kx509.c
  certs_export_func()

Change-Id: Ib68abf739e3385e98136fa4e4f5a0240e9fce033
2020-05-26 11:48:45 -05:00
Nicolas Williams
e3dbc89f8f appveyor: Install zstd before other pkgs
Some pacman packages are now being compressed with the ZST algorithm,
but pacman can't handle that unless we first install `zstd`.  This
commit does that.
2020-05-25 16:55:18 -05:00
Nicolas Williams
d1d900034f kinit: Make default-for-princ behavior optional
We can't just default to useing the krb5_cc_default_for() ccache for a
principal -- that breaks a number of uses of kinit.
2020-05-25 14:07:05 -05:00
Nico Williams
1243ea6a9a Merge pull request #711 from nicowilliams/master
Fix gss_krb5_copy_ccache() (broken by MEM:anon)
2020-05-13 21:57:25 -05:00
Nicolas Williams
001cf39374 hcrypto: Fix more warnings (rsa-ltm) 2020-04-27 17:56:59 -05:00
Luke Howard
0d3682e6a8 gss: unconditionally set certain flags in SAnon ISC
SAnon unconditionally sets the replay, sequence, confidentiality, and integrity
flags on the acceptor; do so on the initiator as well. Some indentation
cleanups are also included in this commit.
2020-04-28 07:38:31 +10:00
Nicolas Williams
f88526ae78 hcrypto: Fix leaks in test_rsa.c 2020-04-27 13:14:21 -05:00
Nicolas Williams
32517c0627 hcrypto: Better RSA key generation (ltm) 2020-04-27 13:14:21 -05:00
Nicolas Williams
e4d1a91c13 hcrypto: Fix warnings in LTM 2020-04-27 13:14:21 -05:00
Luke Howard
65d7f35047 doc: update to draft-howard-gss-sanon-13.txt 2020-04-27 22:38:19 +10:00
Luke Howard
815ea80b4f gss: mask out SAnon req_flags after computing session key
In SAnon, the optional flags send in the initial context token are input into
the key derivation function. Mask out the flags we wish to ignore after (not
before) calling the key derivation function, as the initiator may not know
which flags we wish to ignore.
2020-04-27 22:32:59 +10:00
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