asn/mit-krb5.git
5 years agok5-platform: Avoid allocating a register for protecting memset() zap
Andreas Schneider [Thu, 3 Jan 2019 16:19:32 +0000 (17:19 +0100)]
k5-platform: Avoid allocating a register for protecting memset()

See https://bugs.llvm.org/show_bug.cgi?id=15495

5 years agoAdd dns_canonicalize_hostname=fallback support
Simo Sorce [Tue, 4 Dec 2018 20:22:55 +0000 (15:22 -0500)]
Add dns_canonicalize_hostname=fallback support

Turn dns_canonicalize_hostname into a tristate variable, allowing the
value "fallback" as well as the true/false booleans.  If it is set to
fallback, delay DNS canonicalization and attempt it only in
krb5_get_credentials() if the KDC responds that the requested server
principal name is unknown.

[ghudson@mit.edu: added TGS tests; refactored code; edited commit
message and documentation]

ticket: 8765 (new)

5 years agoRemove incorrect KDC assertion
Isaac Boukris [Sat, 15 Dec 2018 09:56:36 +0000 (11:56 +0200)]
Remove incorrect KDC assertion

The assertion in return_enc_padata() is reachable because
kdc_make_s4u2self_rep() may have previously added encrypted padata.
It is no longer necessary because the code uses add_pa_data_element()
instead of allocating a new list.

CVE-2018-20217:

In MIT krb5 1.8 or later, an authenticated user who can obtain a TGT
using an older encryption type (DES, DES3, or RC4) can cause an
assertion failure in the KDC by sending an S4U2Self request.

[ghudson@mit.edu: rewrote commit message with CVE description]

ticket: 8767 (new)
tags: pullup
target_version: 1.17
target_version: 1.16-next
target_version: 1.15-next

5 years agoFix double-close in ksu get_authorized_princ_names
Robbie Harwood [Tue, 18 Dec 2018 20:18:13 +0000 (15:18 -0500)]
Fix double-close in ksu get_authorized_princ_names

If list_union() fails due to an allocation failure, then close_time()
will attempt to fclose users_fp and login_fp a second time.

This bug was originally introduced in commit
be95b52c2d0c21b1fe92f9f90166fc2fa8eecc95, and has been present in
every krb5 release since 1.1.

ticket: 8768 (new)
tags: pullup
target_version: 1.17
target_version: 1.16-next
target_version: 1.15-next

5 years agoAdd ksu option for non-forwardable tickets
Greg Hudson [Thu, 29 Nov 2018 16:59:25 +0000 (11:59 -0500)]
Add ksu option for non-forwardable tickets

Add ksu -F and -P options to explicitly not request forwardable and
proxiable tickets.

ticket: 8761

5 years agoIgnore password attributes for S4U2Self requests
Isaac Boukris [Mon, 3 Dec 2018 00:33:07 +0000 (02:33 +0200)]
Ignore password attributes for S4U2Self requests

For consistency with Windows KDCs, allow protocol transition to work
even if the password has expired or needs changing.

Also, when looking up an enterprise principal with an AS request,
treat ERR_KEY_EXP as confirmation that the client is present in the
realm.

[ghudson@mit.edu: added comment in kdc_process_s4u2self_req(); edited
commit message]

ticket: 8763 (new)
tags: pullup
target_version: 1.17

5 years agoFix spelling of auth_to_local example
Simo Sorce [Thu, 29 Nov 2018 21:47:48 +0000 (16:47 -0500)]
Fix spelling of auth_to_local example

ticket: 8762 (new)
tags: pullup
target_version: 1.17

5 years agoDocument necessary delay in master key rolllover
Greg Hudson [Mon, 26 Nov 2018 18:37:46 +0000 (13:37 -0500)]
Document necessary delay in master key rolllover

During master key rollover, if the old master key is purged
immediately after updating principal encryption, running processes may
not successfully update their in-memory copies of the master key.
Document that the administrator should delay purging the master key
until after propagation and some daemon activity.

ticket: 8744
tags: pullup
target_version: 1.17

5 years agoAdd tests for KCM ccache type
Greg Hudson [Thu, 22 Nov 2018 05:27:35 +0000 (00:27 -0500)]
Add tests for KCM ccache type

Using a trivial Python implementation of a KCM server, run the
t_ccache.py tests against the KCM ccache type.

5 years agoClear forwardable flag instead of denying request
Greg Hudson [Thu, 15 Nov 2018 18:40:43 +0000 (13:40 -0500)]
Clear forwardable flag instead of denying request

If the client requests a forwardable or proxiable ticket and the
option cannot be honored by policy, issue a non-forwardable or
non-proxiable ticket rather than denying the request.

Add a test script for testing KDC request options and populate it with
tests for the forwardable and proxiable flags.

ticket: 7871

5 years agoFix spurious errors from kcmio_unix_socket_write
Robbie Harwood [Mon, 5 Nov 2018 18:49:52 +0000 (13:49 -0500)]
Fix spurious errors from kcmio_unix_socket_write

Commit 33634a940166d0b21c3105bab8dcf5550fbbd678 accidentally changed
the return value from kcmio_unix_socket_write to be the result of the
write call.  Most commonly this resulted in it returning 8, which led
to many commands failing with "Exec format error".

ticket: 8758 (new)
tags: pullup
target_version: 1.17-next

5 years agoUpdates for krb5-1.18-prerelease
Greg Hudson [Tue, 30 Oct 2018 17:58:29 +0000 (13:58 -0400)]
Updates for krb5-1.18-prerelease

5 years agoUpdate features list for 1.17
Greg Hudson [Sat, 27 Oct 2018 21:48:26 +0000 (17:48 -0400)]
Update features list for 1.17

5 years agoUpdate auto-generated files
Greg Hudson [Sat, 27 Oct 2018 00:26:48 +0000 (20:26 -0400)]
Update auto-generated files

Regenerate dependency files and mit-krb5.pot.  Regenerate man pages
and NOTICE with python-sphinx 1.6.7.  Regenerate deltat.c with bison
3.0.4.  Update config.guess and config.sub from upstream (commit
2fa97a8a0ed37bec720bd118d65e674cebf50404).

5 years agoRetry KCM writes once on remote hangup
Robbie Harwood [Tue, 16 Oct 2018 19:19:46 +0000 (15:19 -0400)]
Retry KCM writes once on remote hangup

sssd's KCM daemon has a client timeout (typically 60 seconds).  Add
reconnection logic to kcmio_unix_socket_write() to allow this
behavior, and to potentially allow for the daemon to be upgraded.

[ghudson@mit.edu: adjusted commit message, comment, and code slightly]

ticket: 8760 (new)

5 years agoImprove code hygiene of kdb5_util dump helpers
Greg Hudson [Thu, 25 Oct 2018 16:55:50 +0000 (12:55 -0400)]
Improve code hygiene of kdb5_util dump helpers

kdb5_util dump can very briefly leak a file handle if the ok file
cannot be locked, or if the existing dump file cannot be read.  Add a
cleanup handler to prep_ok_file() and use proper output parameter
handling.  Change current_dump_sno_in_ulog() to close its file handle
before checking the result of fgets().  Reported by Bean Zhang.

5 years agoFix minor leak in kadmind password change dispatch
Greg Hudson [Thu, 25 Oct 2018 16:21:45 +0000 (12:21 -0400)]
Fix minor leak in kadmind password change dispatch

In the unlikely event that kadmind cannot resolve the KDB keytab in
schpw.c:dispatch(), don't leak the error message.  Reported by Bean
Zhang.

5 years agoFix leak on error in kadm5 randkey handling
Greg Hudson [Thu, 25 Oct 2018 15:56:58 +0000 (11:56 -0400)]
Fix leak on error in kadm5 randkey handling

An attempt to change the kadmin/history key with the -keepold flag
would leak the KDB entry and keysalt tuple as it returned an error.
Use the cleanup handler instead of returning directly.  Reported by
Bean Zhang.

ticket: 8759
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoDocument aliases for enterprise get_principal
Greg Hudson [Wed, 24 Oct 2018 03:00:24 +0000 (23:00 -0400)]
Document aliases for enterprise get_principal

Enterprise principals are always aliases.  In most contexts when we
see them we pass KRB5_KDB_FLAG_ALIAS_OK to the KDB module's
get_principal method, but for S4U2Self clients we currently do not.
Document that a KDB module may return an alias for enterprise
principals regardless of flags.

5 years agoUpdate README in src/man
Robbie Harwood [Mon, 15 Oct 2018 18:53:05 +0000 (14:53 -0400)]
Update README in src/man

5 years agoUpdate man pages to reference kerberos(7)
Robbie Harwood [Mon, 15 Oct 2018 19:19:12 +0000 (15:19 -0400)]
Update man pages to reference kerberos(7)

Remove broken references to old kerberos(1).  Reference kerberos(7)
from all man pages, and create/update their environment section so
that it references kerberos(7).

ticket: 8755

5 years agoModernize kerberos(7)
Robbie Harwood [Mon, 15 Oct 2018 17:20:30 +0000 (13:20 -0400)]
Modernize kerberos(7)

Update environment variable descriptions, using env_variables.rst as a
guide.  Replace the content in env_variables.rst with a pointer to
documentation at kerberos(7) so that we don't break external links and
don't duplicate content.

Replace references to rlogin.  Clarify and modernize other language.

ticket: 8755

5 years agoBring back general kerberos man page
Robbie Harwood [Tue, 9 Oct 2018 21:05:10 +0000 (17:05 -0400)]
Bring back general kerberos man page

Restore the content of kerberos(1) as it stood in
0f81e372a2830c9170f6e08dfa956841d0ebdfb1.  Convert to ReST to match
the other man pages, and install it as the more appropriate
kerberos(7).

Build kerberos(7) and check it in to avoid breaking the build.

ticket: 8755 (new)
tags: pullup
target_version: 1.16-next

5 years agoAdd GSS_KRB5_NT_ENTERPRISE_NAME name type
Isaac Boukris [Mon, 15 Oct 2018 15:33:15 +0000 (18:33 +0300)]
Add GSS_KRB5_NT_ENTERPRISE_NAME name type

Add a new name-type OID which causes a string to be imported as an
enterprise name.  This is useful for authenticating and impersonating
users with their UPN names.

Resurrect t_imp_name test to exercise importing of the new name OID.
Also add a test using the new name in cross-realm protocol transition,
to exercise s4u_identify_user() with multiple realms.

[ghudson@mit.edu: added Windows export entry; adjusted comments and
test code; edited commit message]

ticket: 8756 (new)

5 years agoStart S4U2Self realm lookup at server realm
Isaac Boukris [Tue, 23 Oct 2018 09:52:41 +0000 (12:52 +0300)]
Start S4U2Self realm lookup at server realm

When looking up the realm of an enterprise principal, start with the
realm of the server instead of the realm attached to the enterprise
name, as specified in [MS-SFU] 3.1.5.1.1.1.

[ghudson@mit.edu: simplified out client_data+client into just client;
edited commit message]

ticket: 8757 (new)

5 years agoDon't dump policies if principals are specified
Greg Hudson [Mon, 15 Oct 2018 22:32:31 +0000 (18:32 -0400)]
Don't dump policies if principals are specified

If kdb5_util dump is asked to filter for specific principals, do not
dump the policy database.

ticket: 8752 (new)

5 years agoFix up kdb5_util documentation
Greg Hudson [Mon, 15 Oct 2018 22:00:35 +0000 (18:00 -0400)]
Fix up kdb5_util documentation

In kdb5_util.rst, reorder the main option summary to match the order
they are documented in below, and document the -x option.  Remove the
kdb5_util create -h switch case as 'h' has never been in the getopt
string.  Add the -r18 option to the kdb5_util dump and load option
summaries.  Reword the kdb5_util load -hash option.  Remove the
nonexistent kdb5_util load dbname parameter.

In database.rst, alter the example for loading a single principal to
use the dump principal filtering functionality, as that functionality
does not currently exist for load.

In the kdb5_util usage error message, reorder the main options to
match the order in the documentation and to fit within 79 columns.
Also add the -P option.

ticket: 8751 (new)
tags: pullup
target_version: 1.16-next

5 years agoFix up some strings in recent t_pac.c tests
Isaac Boukris [Sat, 13 Oct 2018 13:36:55 +0000 (16:36 +0300)]
Fix up some strings in recent t_pac.c tests

ticket: 8749

5 years agoAdd test for cross realm S4U2Self using referrals
Isaac Boukris [Sat, 13 Oct 2018 13:27:02 +0000 (16:27 +0300)]
Add test for cross realm S4U2Self using referrals

[ghudson@mit.edu: factored out tgtname() in kdb_test.c; added trace
messages to tests and removed old redundant test]

ticket: 8747

5 years agoUse port-sockets.h macros in cc_kcm, sendto_kdc
Greg Hudson [Mon, 15 Oct 2018 23:12:45 +0000 (19:12 -0400)]
Use port-sockets.h macros in cc_kcm, sendto_kdc

Use SOCKET_CONNECT in cc_kcm.c and sendto_kdc.c to prevent SIGPIPE on
BSD-like systems.  Use other port-sockets.h macros in cc_kcm.c in case
it is ever used on Windows.

ticket: 8753

5 years agoPrevent SIGPIPE from socket writes on UNIX-likes
Robbie Harwood [Fri, 12 Oct 2018 20:57:05 +0000 (16:57 -0400)]
Prevent SIGPIPE from socket writes on UNIX-likes

When writing to a disconnected socket, try to only get EPIPE rather
than taking down the process with SIGPIPE.

On recent Linux and other systems which have it, switch from writev to
sendmsg and pass MSG_NOSIGNAL.

On BSD-likes, set SO_NOSIGPIPE at connect time.

ticket: 8753 (new)

5 years agoCorrect kpasswd_server description in krb5.conf(5)
Robbie Harwood [Tue, 16 Oct 2018 21:32:29 +0000 (17:32 -0400)]
Correct kpasswd_server description in krb5.conf(5)

ticket: 8754 (new)
tags: pullup
target_version: 1.16-next

5 years agoFix 64-bit Windows socket write error handling
Greg Hudson [Thu, 4 Oct 2018 22:10:48 +0000 (18:10 -0400)]
Fix 64-bit Windows socket write error handling

Add casts to ensure that the result type of SOCKET_WRITEV() on Windows
can represent -1.  Otherwise it will be treated as 2^32-1 when cast to
ssize_t on 64-bit Windows, which can lead to crashes in
krb5_sendto_kdc().  Reported by Puran Chand.

ticket: 8746 (new)
tags: pullup
target_version: 1.13-next

5 years agoAdd more constraints to S4U2Self processing
Isaac Boukris [Fri, 5 Oct 2018 11:43:51 +0000 (14:43 +0300)]
Add more constraints to S4U2Self processing

Of the eight possible combinations of local or cross TGT, local or
non-local user, and local server or referral, four are valid.  The
previous commit rejects two of the invalid cases (local TGT and
referral, with local or non-local user).  Document the four valid
cases and reject the remaining two invalid combinations.

[ghudson@mit.edu: rewrote commit message; added comment documenting
valid combinations; adjusted style and comments]

ticket: 8748 (new)

5 years agoAllow referrals for cross-realm S4U2Self requests
Isaac Boukris [Fri, 5 Oct 2018 11:14:32 +0000 (14:14 +0300)]
Allow referrals for cross-realm S4U2Self requests

According to MS-SFU 3.2.5.1.1, the KDC should issue a referral for
S4U2Self requests if the requesting service is not in the KDC's realm.
Commit 8a9909ff9ef6b51c5ed09ead6713888fbb34072f explicitly prevents
referrals for S4U2Self requests; on further analysis, this appears to
have been preserving a bug rather than applying a proper constraint.
However, we should not issue referrals for within-realm S4U2Self
requests.  (This should only come up if a server possesses a TGT but
its principal entry has been deleted.)

Remove the S4U2Self referral check in process_tgs_req().  Instead add
a more specific check in kdc_process_s4u2self_req(), adding new
parameters for the header server principal and a flag indicating
whether a referral is indicated.

[ghudson@mit.edu: rewrote commit message; adjusted style slightly]

ticket: 8747 (new)

5 years agoFix multiple leaks in ktutil addent
Greg Hudson [Thu, 11 Oct 2018 19:33:35 +0000 (15:33 -0400)]
Fix multiple leaks in ktutil addent

In ktutil_add(), free allocations on success as well as failure.
Change all early returns to jumps to the cleanup label.  Free the
password buffer and unparsed principal name.  Do list manipulation as
the final step to simplify cleanup.  Reported by Bean Zhang.

ticket: 8750

5 years agoAdd tests for different kinds of S4U2Self PACs
Isaac Boukris [Tue, 2 Oct 2018 13:22:31 +0000 (16:22 +0300)]
Add tests for different kinds of S4U2Self PACs

These new tests are based on PACs obtained from network captures.

[ghudson@mit.edu: adjusted style; added U() macro for nicer-looking
keyblock initializers]

ticket: 8749

5 years agoAdd PAC APIs which can include a client realm
Isaac Boukris [Sat, 29 Sep 2018 04:21:56 +0000 (07:21 +0300)]
Add PAC APIs which can include a client realm

These APIs are needed for KDC handling of cross-realm S4U2Self
tickets; see [MS-SFU] 3.2.5.x.  Note that we currently do not allow
re-signing a PAC to include the realm; the caller must create a new
one.

[ghudson@mit.edu: added documentation; changed names and parameter
order; edited commit message]

ticket: 8749 (new)

5 years agoPrefer TCP to UDP for password changes
Robbie Harwood [Mon, 8 Oct 2018 20:02:12 +0000 (16:02 -0400)]
Prefer TCP to UDP for password changes

When password changes are performed over UDP, spotty networks may
cause the client to retransmit.  This leads to replay errors if the
kpasswd server receives both requests, which hide the actual request
status and make it appear that the password has not been changed, when
it may in fact have been.  Use TCP instead with UDP fallback to avoid
this issue.

ticket: 7905

5 years agoAdd ktutil addent option to fetch salt from KDC
Greg Hudson [Thu, 27 Sep 2018 22:32:24 +0000 (18:32 -0400)]
Add ktutil addent option to fetch salt from KDC

Add a -f flag to ktutil addent.  If specified, the enctype need not be
specified (although it can be) and ktutil will request etype-info from
the KDC to produce the string-to-key parameters.

ticket: 8587

5 years agoAdd API to retrieve etype-info from KDC
Mubashir Kazia [Sat, 24 Jun 2017 19:47:53 +0000 (19:47 +0000)]
Add API to retrieve etype-info from KDC

Add the krb5_get_etype_info() API, which sends an initial ticket
request to the KDC and extracts an enctype, salt, and s2kparams value
from the first KDC reply.  This function will help ktutil use the
correct salt and s2kparams when creating keytabs.

[ghudson@mit.edu: renamed API to krb5_get_etype_info() and adjusted
behavior]

ticket: 8587

5 years agoDisable stdin buffering in libss dummy readline
Greg Hudson [Wed, 3 Oct 2018 22:45:56 +0000 (18:45 -0400)]
Disable stdin buffering in libss dummy readline

readline() is careful not to read more bytes from fd 0 than it has to.
Do the same in the dummy libss readline() by disabling stdin
buffering.

ticket: 8745

5 years agoUse "replica" in iprop settings
Greg Hudson [Thu, 27 Sep 2018 16:14:25 +0000 (12:14 -0400)]
Use "replica" in iprop settings

Change the default dump filename for iprop to "replica_datatrans", and
the iprop poll interval profile variable to "iprop_replica_poll",
preserving compatibility with the old name.

ticket: 8742 (new)

5 years agoUse the term "replica KDC" in source and docs
Greg Hudson [Mon, 17 Sep 2018 13:59:47 +0000 (09:59 -0400)]
Use the term "replica KDC" in source and docs

ticket: 8738 (new)

5 years agoFix incorrect TRACE usages to use {str}
Robbie Harwood [Thu, 27 Sep 2018 21:45:59 +0000 (17:45 -0400)]
Fix incorrect TRACE usages to use {str}

ticket: 8743 (new)
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoClarify sign_authdata() KDB method comments
Isaac Boukris [Wed, 12 Sep 2018 13:32:57 +0000 (16:32 +0300)]
Clarify sign_authdata() KDB method comments

5 years agoDon't rely on default realm in S4U2Self client
Isaac Boukris [Sat, 15 Sep 2018 07:28:48 +0000 (10:28 +0300)]
Don't rely on default realm in S4U2Self client

When converting server principal to enterprise name (to be possibly
used for cross-realm), ignore the realm when reparsing, to avoid a
spurious error if a default realm isn't configured.

[ghudson@mit.edu: added rewritten test case; edited commit message]

ticket: 8741
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoFix getdate.y compatability with POSIX yacc
Robbie Harwood [Tue, 25 Sep 2018 17:20:55 +0000 (13:20 -0400)]
Fix getdate.y compatability with POSIX yacc

Commit 28fd0a934cdc7b3b42ce213c6d334d4edf1ab591 muted a warning from
bison about shift/reduce conflicts in the grammer.  However, the
extension for suppressing the warning is bison-only.  Revert that
portion of the change and live with the warning rather than adding
additional conditionalization.  Reported by Michael Osipov.

5 years agoRemove LDAP osa_princ_ent_rec XDR functions
Greg Hudson [Fri, 21 Sep 2018 19:00:11 +0000 (15:00 -0400)]
Remove LDAP osa_princ_ent_rec XDR functions

The LDAP KDB module contained a duplicate set of functions to marshal
osa_princ_ent_ret structures, perhaps to avoid a circular dependency
on libkadm5srv before KDB modules were dynamically loaded.  We have
been using the libkadm5srv versions of those functions from the DB2
KDB module since release 1.8.  Use them from the LDAP KDB module as
well.

Since no rpcgen output remains in princ_xdr.c and princ_xdr.h, add
emacs mode lines for the krb5 C style to those files and make small
formatting adjustments to match.

5 years agoClarify documentation on pkinit_identities
Greg Hudson [Thu, 6 Sep 2018 17:20:56 +0000 (13:20 -0400)]
Clarify documentation on pkinit_identities

The documentation for pkinit_identities implies that we try harder to
use each value before ignoring the rest, when in fact we only go as
far as the first successful parse.  Soften the language and describe
the most likely use case for multiple values under the current
semantics.

ticket: 8733
tags: pullup
target_version: 1.16-next

5 years agoFix null deref on some invalid PKINIT identities
Greg Hudson [Thu, 6 Sep 2018 15:47:56 +0000 (11:47 -0400)]
Fix null deref on some invalid PKINIT identities

pkinit_identity.c:parse_fs_options() could crash if the first
strtok_r() call returns NULL, which happens when the residual string
begins with ','.  Fix this bug by checking for a leading comma and
checking the strtok_r() result, and add a test case.  Reported by Bean
Zhang.

Also return EINVAL rather than 0 on invalid input, and don't leave an
allocated value in idopts->cert_filename if we fail to copy the key
filename.

ticket: 8726

5 years agoAlways honor desired_name in gss_add_cred()
Greg Hudson [Sat, 15 Sep 2018 00:35:50 +0000 (20:35 -0400)]
Always honor desired_name in gss_add_cred()

Remove the conditionalization around the desired_name processing in
gss_add_cred_from(), so that we always honor the requested name.

ticket: 8737
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoFix misleading indentation in clnt_udp.c
Robbie Harwood [Tue, 18 Sep 2018 18:19:55 +0000 (14:19 -0400)]
Fix misleading indentation in clnt_udp.c

gcc warns that the `if` statement doesn't guard the length
assignment, which is true.  However, it wouldn't make sense for the
length assignment to be guarded by the `if` clause anyway, since the
previous statement is a `goto`.  De-indent for clarity.

5 years agoFix memory bugs in gss_add_cred() extension case
Greg Hudson [Thu, 13 Sep 2018 20:31:36 +0000 (16:31 -0400)]
Fix memory bugs in gss_add_cred() extension case

If gss_add_cred() is called with both an input_cred_handle and an
output_cred_handle, it creates a new credential with the elements of
the input credential plus the requested element.  Making a shallow
copy of mechs_array and cred_array from the old credential creates
aliased pointers which become invalid when one of the two credentials
is released, leading to use-after-free and double-free errors.

Instead, make a full copy of the input cred for this case.  Make this
copy at the beginning so that union_cred can always be modified in
place (and freed on error using gss_release_cred() if we created it),
removing the need for new_union_cred, new_mechs_array, and
new_cred_array.  Use a stack object for target_mechs to simplify
cleanup and reduce the number of failure cases.

GSSAPI provides no facility for copying a credential; since we mostly
use the GSSAPI as our SPI for mechanisms, we have no simple way to
copy mechanism creds when copying the union cred.  Use
gss_export_cred() and gss_import_cred() if the mechanism provides
them; otherwise fall back to gss_inquire_cred() and
gss_acquire_cred().

ticket: 8734
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoFix memory leak in gss_add_cred() creation case
Greg Hudson [Thu, 13 Sep 2018 15:29:46 +0000 (11:29 -0400)]
Fix memory leak in gss_add_cred() creation case

If gss_add_cred() is called with no input_cred_handle, it creates a
new credential with one element.  At the end of the function, use the
created credential as the output container, rather than creating a
second one and leaking the first.

Add a test program for gss_add_cred() and run it.

ticket: 8729
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoCheck mech cred in gss_inquire_cred_by_mech()
Greg Hudson [Thu, 13 Sep 2018 21:03:36 +0000 (17:03 -0400)]
Check mech cred in gss_inquire_cred_by_mech()

If gss_inquire_cred_by_mech() is called with a mechanism and there is
no corresponding mechanism credential in the union cred, return
GSS_S_NO_CRED (as Heimdal does) instead of interrogating the mechanism
about the default credential.

ticket: 8736 (new)
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoRemove strftime() conditionalization
Greg Hudson [Wed, 5 Sep 2018 19:35:12 +0000 (15:35 -0400)]
Remove strftime() conditionalization

strftime() is specified in C89.  The tree has not built without a
native strftime() at least as far back as 1.7 (because it is used
unconditionally in kdb5_mkey.c) and possibly for much longer.  Remove
the two copies of the NetBSD strftime.c and the fallback ctime() in
logger.c.

5 years agoCheck more time function results
Greg Hudson [Sat, 1 Sep 2018 21:30:33 +0000 (17:30 -0400)]
Check more time function results

In logger.c:klog_vsyslog(), check the return value of localtime().  In
ldap_principal2.c:getstringtime(), check the strftime() result and
don't leak strtime on error.

5 years agoFix name of .pdb file in ccapi/test/Makefile.in
Greg Hudson [Fri, 31 Aug 2018 17:19:21 +0000 (13:19 -0400)]
Fix name of .pdb file in ccapi/test/Makefile.in

The -Fd cl option specifies the location of the program database
filename, which should have the extension .pdb.  Using a .obj
extension causes a build failure with MSVC version 14.15.26726.

ticket: 8732 (new)

5 years agoCheck return values of time functions
Greg Hudson [Wed, 29 Aug 2018 19:04:13 +0000 (15:04 -0400)]
Check return values of time functions

Where ctime(), localtime(), or localtime_r() is used, check for
failure even if it is unlikely (reported by Bean Zhang).  Constify the
strdate() return type in kdb5_mkey.c and kadmin.c and the
ctime_uint32() return type in kproplog.c.  Use localtime_r()
unconditionally in str_conv.c as there is already a wrapper in that
file for the case where the platform doesn't have it.  Remove an
inoperative localtime() call in ktutil.c.

5 years agoCheck malloc() result in ss_execute_command()
Greg Hudson [Wed, 29 Aug 2018 19:40:24 +0000 (15:40 -0400)]
Check malloc() result in ss_execute_command()

Reported by Bean Zhang.

5 years agoCheck strdup return in kadm5_get_config_params()
Greg Hudson [Tue, 28 Aug 2018 01:10:53 +0000 (21:10 -0400)]
Check strdup return in kadm5_get_config_params()

When copying the realm string, if strdup() returns NULL, fail out with
ENOMEM instead of pretending the realm wasn't specified.  When copying
KRB5_DEFAULT_SUPPORTED_ENCTYPES, if strdup() returns NULL, fail out
with ENOMEM instead of crashing.  Reported by Bean Zhang.

ticket: 8727
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoDocument that DESTDIR must be an absolute path
Greg Hudson [Tue, 28 Aug 2018 16:11:35 +0000 (12:11 -0400)]
Document that DESTDIR must be an absolute path

ticket: 8731 (new)
tags: pullup
target_version: 1.16-next

5 years agoModernize krb5int_cc_creds_match_request() style
Greg Hudson [Fri, 3 Aug 2018 04:45:43 +0000 (00:45 -0400)]
Modernize krb5int_cc_creds_match_request() style

5 years agoLimit matching of user-to-user ccache credentials
Greg Hudson [Fri, 3 Aug 2018 04:36:10 +0000 (00:36 -0400)]
Limit matching of user-to-user ccache credentials

In krb5int_cc_creds_match_request(), do not yield a user-to-user
credential if the caller is not looking for one; it would not be
useful when a normal service ticket (encrypted in the service key) is
required.  Reported by Todd Lubin.

ticket: 8718

5 years agoDon't tag S4U2Proxy result creds as user-to-user
Greg Hudson [Fri, 3 Aug 2018 15:07:03 +0000 (11:07 -0400)]
Don't tag S4U2Proxy result creds as user-to-user

S4U2Proxy and user-to-user tickets are both obtained using a
second-ticket input, but only user-to-user tickets are encrypted in
the session key of the second ticket.  In gc_via_tkt.c, stop deducing
the is_skey flag from the presence of a second ticket and instead set
it based on the request KDC options.

ticket: 8721 (new)

5 years agoAdd kvno option for user-to-user
Greg Hudson [Fri, 24 Aug 2018 15:40:39 +0000 (11:40 -0400)]
Add kvno option for user-to-user

Add a --u2u option to kvno, with an argument to specify a credential
cache containing a krbtgt for the server principal.  Move the
-allow_svr test from appl/user_to_user to a new test script and add
additional tests.  Suggested by Chris Hecker.

ticket: 8730 (new)

5 years agoUse a hash table for MEMORY ccache resolution
Greg Hudson [Sun, 5 Aug 2018 03:55:18 +0000 (23:55 -0400)]
Use a hash table for MEMORY ccache resolution

In cc_memory.c, replace the linked list of caches with a hash table,
for better performance with large numbers of memory caches.

ticket: 8722 (new)

5 years agoUse k5_hashtab in KDC lookaside cache
Greg Hudson [Sun, 5 Aug 2018 00:23:11 +0000 (20:23 -0400)]
Use k5_hashtab in KDC lookaside cache

5 years agoAdd a hash table implementation to libkrb5support
Greg Hudson [Sun, 5 Aug 2018 00:11:09 +0000 (20:11 -0400)]
Add a hash table implementation to libkrb5support

5 years agoCheck public_oid in gss_export_cred()
Greg Hudson [Fri, 10 Aug 2018 15:58:11 +0000 (11:58 -0400)]
Check public_oid in gss_export_cred()

In gss_export_cred(), check the gssint_get_public_oid() result as well
as the gssint_get_mechanism() result.  There are probably no cases
where the former returns NULL and the latter does not, but it is easy
to be more obviously correct.  Reported by Bean Zhang.

5 years agoFix a typo in the kswitch man page
Greg Hudson [Mon, 13 Aug 2018 02:53:29 +0000 (22:53 -0400)]
Fix a typo in the kswitch man page

Fix a typo introduced by commit
fe44da52deea41483326debf2d9ad525f65e19f6.  Reported by Matthew
Krupcale.

ticket: 8728
tags: pullup
target_version: 1.16-next

5 years agoUpdate many documentation links to https
Greg Hudson [Wed, 8 Aug 2018 19:30:38 +0000 (15:30 -0400)]
Update many documentation links to https

Use secure URLs in the documentation where possible.  The Sphinx web
site does not appear to have a valid server cert, but does have a more
official URL.

ticket: 8725 (new)
tags: pullup
target_version: 1.16-next

5 years agoFix memory leaks in test programs
Greg Hudson [Sun, 5 Aug 2018 23:00:33 +0000 (19:00 -0400)]
Fix memory leaks in test programs

Fix additional memory leaks detected by a newer asan (clang version
6.0.0) in test programs.

5 years agoModernize krb5_read_password()
Greg Hudson [Sun, 5 Aug 2018 22:48:57 +0000 (18:48 -0400)]
Modernize krb5_read_password()

In krb5_read_password(), don't reuse k5prompt for verification as we
will reference it later.  Also use make_data() and zap(), and clean up
formatting.

5 years agoAdd kdestroy -p option
Greg Hudson [Wed, 8 Aug 2018 15:45:28 +0000 (11:45 -0400)]
Add kdestroy -p option

Add an option to destroy a cache within a collection by principal
name.  This option can be used together with -c to specify the
collection.  Also document that kdestroy -A and -c can be used
together (ticket 8602).

ticket: 8724 (new)

5 years agoUse PTHREAD_CFLAGS when testing for getpwnam_r()
sashan [Mon, 23 Jul 2018 12:56:15 +0000 (12:56 +0000)]
Use PTHREAD_CFLAGS when testing for getpwnam_r()

On Solaris, AX_PTHREAD can include -D_POSIX_PTHREAD_SEMANTICS in
PTHREAD_CFLAGS, which affects which variants of getpwnam_r() and
getpwuid_r() are declared by system headers.  In configure.in, use
PTHREAD_CFLAGS when testing for those functions to make sure that the
tests see the same variants as the build will.

[ghudson@mit.edu: rewrote commit message and comment]

ticket: 8723 (new)

5 years agoDon't include all MEMORY ccaches in collection
Greg Hudson [Wed, 1 Aug 2018 19:53:12 +0000 (15:53 -0400)]
Don't include all MEMORY ccaches in collection

In the MEMORY ccache implementation, only yield a cache in the
per-type cursor if it is the context default cache, matching the
behavior of FILE after commit 45360c9688ca963f75a2480f2cf818424fc3dc7b
(ticket 6955).

ticket: 8720 (new)

5 years agoExtend gss-sample timeout from 10s to 300s
Alejandro Perez [Wed, 1 Aug 2018 07:56:54 +0000 (09:56 +0200)]
Extend gss-sample timeout from 10s to 300s

Some GSS mechanisms (such as GSS EAP - RFC 7055) require user
interaction, and ten seconds is too little to allow users to select
the identity they want to use or type their password.  Make gss-client
and gss-server more useful for testing these mechanisms by extending
its timeout to five minutes.

[ghudson@mit.edu: edited commit message]

ticket: 8719 (new)

5 years agoAllow u2u requests when -allow_svr is set
Chris Hecker [Wed, 25 Jul 2018 05:57:23 +0000 (00:57 -0500)]
Allow u2u requests when -allow_svr is set

If KRB5_KDB_DISALLOW_SVR is set on the server principal, still allow
user-to-user tickets to be issued unless KRB5_KDB_DISALLOW_DUP_SKEY is
also set.  This change makes the KDC_ERR_MUST_USE_USER2USER error
message more appropriate.

ticket: 2641

[ghudson@mit.edu: added test case; updated documentation based on
suggestions by Patrick Moore; edited commit message]

5 years agoFix k5test prompts for Python 3
Greg Hudson [Wed, 25 Jul 2018 15:50:02 +0000 (11:50 -0400)]
Fix k5test prompts for Python 3

With Python 3, sys.stdout.write() of a partial line followed by
sys.stdin.readline() does not display the partial line.  Add explicit
flushes to make prompts visible in k5test.py.

ticket: 8710

5 years agoRemove outdated note in krb5kdc man page
Greg Hudson [Tue, 17 Jul 2018 15:33:03 +0000 (11:33 -0400)]
Remove outdated note in krb5kdc man page

Commit af5b77c887bfff24603715f8296c00d5eb839b0c (ticket 8348) removed
the interface-scanning workaround for platforms without pktinfo
support, so there is no longer an interaction between the krb5kdc -w
option and this workaround.

ticket: 8716 (new)
tags: pullup
target_version: 1.16-next

5 years agoMake krb5kdc -p affect TCP ports
Greg Hudson [Tue, 17 Jul 2018 15:29:19 +0000 (11:29 -0400)]
Make krb5kdc -p affect TCP ports

Now that the KDC listens for TCP connections by default (ticket 6731),
the "-p" option should affect both UDP and TCP default listening
ports.

ticket: 8715 (new)

5 years agoEliminate preprocessor-disabled dead code
Robbie Harwood [Mon, 16 Jul 2018 19:35:15 +0000 (15:35 -0400)]
Eliminate preprocessor-disabled dead code

It's been policy for a while now not to create "dead hunks" like
these.  A great deal of this code simply doesn't work because it
hasn't been kept up-to-date, and may never have worked.  Eliminate
these dead hunks along with the complexity to support them.

5 years agoFix some broken tests for Python 3
Robbie Harwood [Mon, 16 Jul 2018 20:44:01 +0000 (16:44 -0400)]
Fix some broken tests for Python 3

Remove python2 dependencies in .travis.yml and add python3-paste.
Convert t_daemon.py and jsonwalker.py to python3.  csjon has no
python3 version, so replace it with python's built-in JSON module.

python3-pyrad isn't available for Trusty, so krad and OTP tests are
currently not exercised by Travis.

[ghudson@mit.edu: squashed commits; edited commit message]

ticket: 8710

5 years agoZap copy of secret in RC4 string-to-key
Dylan Gray [Fri, 13 Jul 2018 22:09:01 +0000 (15:09 -0700)]
Zap copy of secret in RC4 string-to-key

Commit b8814745049b5f401e3ae39a81dc1e14598ae48c (ticket 8576) added a
zero-terminated copy of the input string in
krb5int_arcfour_string_to_key().  This copy should be zeroed when
freed as the input string typically contains a password.

[ghudson@mit.edu: rewrote commit message]

ticket: 8713 (new)

5 years agoUse SHA-256 instead of MD5 for audit ticket IDs
Greg Hudson [Tue, 10 Jul 2018 20:17:15 +0000 (16:17 -0400)]
Use SHA-256 instead of MD5 for audit ticket IDs

ticket: 8711 (new)

5 years agoConvert Python tests to Python 3
Greg Hudson [Tue, 20 Feb 2018 02:10:09 +0000 (21:10 -0500)]
Convert Python tests to Python 3

Look for python3 in configure.in and verify that we got it.  Convert
test code to conform to Python 3.

ticket: 8710 (new)

5 years agoFix bugs with concurrent use of MEMORY ccaches
Greg Hudson [Sun, 1 Jul 2018 04:12:25 +0000 (00:12 -0400)]
Fix bugs with concurrent use of MEMORY ccaches

A memory ccache iterator stores an alias into the cache object's
linked list of credentials.  If the cache is reinitialized while the
iterator is active, the alias becomes invalid.  Also, multiple handles
referencing the same memory ccache all use aliases to the same data
object; if one of the handles is destroyed, the other contains a
dangling pointer.

Fix the first issue by adding a generation counter to the cache and to
cursors, incremented each time the cache is initialized or destroyed.
Check the generation on each cursor step and end the iteration if the
list was invalidated.  Fix the second issue by adding a reference
count to the cache object, counting one reference for the table slot
and one for each open handle.  Empty the cache object on each destroy
operation, but only release the object when the last handle to it is
destroyed or closed.

Add regression tests for the two issues to t_cc.c.

The first issue was reported by Sorin Manolache.

ticket: 8202
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoCheck distclean target in Travis build
Greg Hudson [Mon, 9 Jul 2018 15:32:57 +0000 (11:32 -0400)]
Check distclean target in Travis build

Move the build commands to a shell script, run with the -e flag so any
failure causes the script to exit.  In the script, verify that "make
distclean" removes everything produced by "make" and "make check".

5 years agoExplicitly look for python2 in configure.in
Greg Hudson [Tue, 3 Jul 2018 05:20:50 +0000 (01:20 -0400)]
Explicitly look for python2 in configure.in

The executable "python" has traditionally been Python 2, but is
becoming more ambiguous as operating systems transition towards Python
3.  Look for "python2" in the path in preference to "python", and
check that what we found isn't Python 3.

Remove the "#!/usr/bin/python" headers at the start of Python test
scripts since we run them explicitly under python, not as executables.
Execute paste-kdcproxy.py via sys.executable in t_proxy.py so that it
doesn't need a #!/usr/bin/python header.

ticket: 8709 (new)

5 years agoFix some omissions in make clean
Greg Hudson [Wed, 4 Jul 2018 14:58:35 +0000 (14:58 +0000)]
Fix some omissions in make clean

5 years agoDisable canonicalization in ccselect tests
Greg Hudson [Wed, 4 Jul 2018 16:11:45 +0000 (16:11 +0000)]
Disable canonicalization in ccselect tests

DNS canonicalization can interfere with the fallback tests by changing
"localhost" to have multiple components, or (less likely) changing the
parent domain of foo.krbtest.com or foo.krbtest2.com.

5 years agoImprove ulog memory hygiene
Greg Hudson [Thu, 28 Jun 2018 04:15:11 +0000 (00:15 -0400)]
Improve ulog memory hygiene

Add a helper create_log_context() to initialize a krb5_context's
kdblog_context field, setting ulogfd to -1.  Use it in ulog_set_role()
and ulog_map().  In ulog_fini(), release ulogfd if it is not -1.

In ulog_map(), add a cleanup label and use it to finalize the log
context on failure, so that we don't (trivially) leak the mapped ulog.
To reduce the number of "retval = errno;" statements required for this
change, make extend_file_to() return a krb5_error_code.

The ulog leak on error was reported by Bean Zhang.

ticket: 8707

5 years agoFix OTP secret file leak and whitespace removal
Greg Hudson [Tue, 26 Jun 2018 16:47:10 +0000 (12:47 -0400)]
Fix OTP secret file leak and whitespace removal

In read_secret_file() in the OTP kdcpreauth module, add a cleanup
label and free filename on exit.  Also fix the whitespace stripping
code to correctly find the end offset, and use size_t rather than int
offsets.  The leak was reported by Bean Zhang.

ticket: 8704
tags: pullup
target_version: 1.16-next
target_version: 1.15-next

5 years agoFix memory handling in main in user_user/client.c
Robbie Harwood [Wed, 20 Jun 2018 15:18:46 +0000 (11:18 -0400)]
Fix memory handling in main in user_user/client.c

Static analyzers (here, clang) prefer explicit exit() calls rather
than return statements from main() when resources are not to be
released.

Also, eliminate dead call to krb5_recvauth() and close the
communication socket.

5 years agoDon't leak work queue items in gss-server
Robbie Harwood [Tue, 19 Jun 2018 15:32:44 +0000 (11:32 -0400)]
Don't leak work queue items in gss-server

On accept() failure in gss-server.c, we would leak the freshly
allocated work item.

5 years agoFix garbage return in extract_cammacs()
Robbie Harwood [Mon, 18 Jun 2018 21:49:52 +0000 (17:49 -0400)]
Fix garbage return in extract_cammacs()

If no cammacs were present, we would never initialize ret before
returning it.  (extract_cammcs() is currently never called with an
empty or null list, so this does not manifest as a bug.)

[ghudson@mit.edu: amended commit message]

5 years agoFix double free in kdc hammer
Robbie Harwood [Tue, 3 Oct 2017 19:01:55 +0000 (15:01 -0400)]
Fix double free in kdc hammer

If kdc5_hammer.c:krb5_string_to_key() fails, we didn't NULL out key
before returning it, leading to potential double-free.

5 years agoCorrectly handle fallback in KDC OTP callback
Robbie Harwood [Tue, 3 Oct 2017 18:28:47 +0000 (14:28 -0400)]
Correctly handle fallback in KDC OTP callback

In otp_state.c:callback(), avoid invoking the failure callback when we
fall back to the next token.  Since request_send() consumes the
request, don't try to free it.

[ghudson@mit.edu: added test case; edited commit message]

ticket: 8708
tags: pullup
target_version: 1.16-next
target_version: 1.15-next