Jeffrey Altman [Mon, 22 Dec 2003 18:24:41 +0000 (18:24 +0000)]
* dnssrv.c: wrap the entire module in #ifdef KRB5_DNS_LOOKUP to prevent
the dependency on the resolver library when DNS functionality is not
being compiled into the krb5 library.
Ken Raeburn [Sat, 20 Dec 2003 03:19:00 +0000 (03:19 +0000)]
* prompter.c (catch_signals, restore_signals): Take pointer to old signal
handler info as new argument.
(osiginfo): New typedef.
(setup_tty, restore_tty): Take pointer to old signal handler info and old
termios settings as new arguments.
(krb5_prompter_posix): Pass the extra arguments, addresses of new automatic
variables.
(osigint, saveparm): Variables deleted.
Ken Raeburn [Sat, 20 Dec 2003 02:46:49 +0000 (02:46 +0000)]
* sendto_kdc.c (default_debug_handler, put, putstr): Define only if DEBUG is
defined.
(DEBUG): Don't define.
(krb5int_sendtokdc_debug_handler): Initialize to null if DEBUG is not defined.
Ken Raeburn [Sat, 20 Dec 2003 02:26:17 +0000 (02:26 +0000)]
Replace the array of 8 mit_des_cblock object 'mit_des_zeroblock' defined
locally in multiple files with one defined in f_cbc.c; make it a single element
rather than an array.
Jeffrey Altman [Fri, 19 Dec 2003 05:29:32 +0000 (05:29 +0000)]
The new functions krb5int_c_mandatory_cksumtype, krb5_ser_pack_int64,
and krb5_ser_unpack_int64 are considered private. Therefore, in order
for them to be used from within gssapi they must be added to the
krb5int_accessor mechanism. This allows us to not publicize their
existence via exportation on Windows or MacOSX.
Jeffrey Altman [Fri, 19 Dec 2003 00:19:20 +0000 (00:19 +0000)]
* cc_retr.c: Extract the test to determine if a credential matches
a requested credential according to the specified fields into
a private function: krb5int_cc_creds_match_request()
* cc_mslsa.c: Extend the functionality of krb5_lcc_retrieve() to
perform a MS Kerberos LSA ticket request if there is no matching
credential in the cache. The MS Kerberos LSA places the following
restriction on what tickets it will place into the LSA cache:
tickets obtained by an application request for a specific
set of kerberos flags or enctype will not be cached.
Therefore, we first make a request with no flags or enctype in
the hope that we will be lucky and get the right ones anyway.
If not, we make the application's request and return that ticket
if it matches the other criteria.
Implemented a similar technique for krb5_lcc_store(). Since we
can not write to the cache, when a store request is made we
instead perform a ticket request through the lsa for a matching
credential. If we receive one, we return success. Otherwise,
we return the KRB5_CC_READONLY error.
With these changes I am now able to operate entirely with the MSLSA
ccache as the default cache provided the MS LSA credentials are
for the principal I wish to use. Obviously, one cannot change
principals while the MSLSA ccache is the default.
Ken Raeburn [Tue, 16 Dec 2003 19:21:49 +0000 (19:21 +0000)]
* conv_creds.c (krb5int_encode_v4tkt): Zero out unused parts of ticket. Use a
temorary in case krb5_int32 isn't "int".
(decode_v4tkt): Use a temorary in case krb5_int32 isn't "int".
Jeffrey Altman [Mon, 15 Dec 2003 17:54:40 +0000 (17:54 +0000)]
* win-mac.h: source code written to the C99 standard assumes there
are standard definitions for the MAX sizes of C types including
size_t. The MAX preprocessor variables are declared in limits.h
but limits.h is not included by any of the other header files.
We will therefore include it via win-mac.h. We must also add a
declaration of SIZE_MAX (for size_t) because Microsoft does not
provide one.
Jeffrey Altman [Mon, 15 Dec 2003 15:55:15 +0000 (15:55 +0000)]
* cc_msla.c: Enable purging of the MS Kerberos LSA cache when the TGT
has expired. This will force the LSA to get a new TGT instead of
returning the expired version.
Jeffrey Altman [Mon, 15 Dec 2003 13:58:10 +0000 (13:58 +0000)]
* when initiating an enumeration of the ccache contents perform
a fetch of the TGT. This will trigger an update request by
the MS LSA on Windows 2000 and XP which is perfectly willing
to allow TGTs to expire.
Ken Raeburn [Sat, 13 Dec 2003 18:16:57 +0000 (18:16 +0000)]
Gets a bit closer, still not working..
* ftpcmd.y (getline): Allow "AUTH" as an unprotected command.
* ftpd.c (login): Fix checks for accept_sec_context status. Only send back one
message in the CONTINUE_NEEDED case.
(with_gss_error_text): New function, split out from reply_gss_error.
(reply_gss_error): Call it.
(reply_gss_error_1): New function.
(log_gss_error, log_gss_error_1): New functions.
(login): Call log_gss_error instead of syslog on error from gss_display_name.
Ken Raeburn [Sat, 13 Dec 2003 07:32:01 +0000 (07:32 +0000)]
* default.exp (passes): Add an AES-only pass.
(start_kerberos_daemons): Check for error "No principal in keytab matches
desired name".
(dump_db): New proc, for debugging.
(spawn_xterm): Add GSSCLIENT to list of exported variables.
Ken Raeburn [Sat, 13 Dec 2003 07:07:23 +0000 (07:07 +0000)]
Add 64-bit sequence number support. Do sequence number ordering tests relative
to the initial value rather than absolute. Support tokens without pseudo-ASN.1
wrappers. Don't restrict enctype lists. Implement CFX token support.
With CFX_EXERCISE defined, use random padding, random rotates, and bogus
initial tokens, to exercise the associated code paths.
Ken Raeburn [Sat, 13 Dec 2003 06:28:35 +0000 (06:28 +0000)]
Add platform-dependent 64-bit and inline-function support via new header
k5-platform.h. Add 64-bit serializer support. [Not needed for ticket 1471,
but needed for 2040 and annoying to check in separately.]
Add to (internal for now) crypto API a function to get the mandatory checksum
type associated with an enctype.
New support for server-generated subkey, selected via an auth_context flag.
Tom Yu [Sat, 13 Dec 2003 01:20:56 +0000 (01:20 +0000)]
* Makefile.in: Move ##WIN32## constructs from inside
backslash-continued lists, as it was breaking them. Move explicit
dependency information from under automatic dependencies.
Jeffrey Altman [Fri, 12 Dec 2003 22:22:36 +0000 (22:22 +0000)]
* Added new krb5_ccache type "MSLSA" for Windows only.
This new ccache type provides an interface for the MIT krb5_cc api
functions to be used to access the contents of the MS Kerberos LSA
cache. The ccache type is read-only because the MS Kerberos LSA
does not allow third party applications to insert credentials into
the cache.
The primary motivation of this work was to encapsulate the complex
operations necessary to manipulate the MS Kerberos LSA. The code
was far from trivial and was often implemented incorrectly. Worse
still was the fact that each version of Windows since W2K modified
the use of the LSA API.
The code which was originally donated in the form of ms2mit.c had
many memory and handle leaks which were acceptable for a one time
application such as ms2mit.c. Unfortunately, this code has started
to appear in many other applications: KfW's Leash, the AFS Wake
systray tool, and others.
By using the new MSLSA ccache the implementation of ms2mit.c went
from 890 lines to 50 lines of code and comments. All that is necessary
is for the MSLSA ccache to be resolved and for its contents to be
copied with krb5_cc_copy_creds to the default ccache.
The MSLSA ccache implements all of the functions of a ccache except
those which would be used to store data into the ccache. When a
write attempt is performed the new error KRB5_CC_READONLY is returned.
The residual portion of the MSLSA ccache name is current ignored
but preserved. If you ask for ccache "MSLSA:myname" you will be
given access to the LSA cache for the current Logon Session. If
you later ask for the name of the ccache you will be returned the
same name. In the future, the residual might be used to provide
information necessary to identify a specific logon session whose
cache it is desired to access. If this is ever done, the applications
which use it will have to possess the SeTcbPrivilege privilege.
Using KfW's Leash it is now possible to set the Krb5 credential
cache to "MSLSA:" and use it to monitor the contents of the
MS Kerberos LSA cache.
As part of adding this functionality, krb5_32.dll is not linked
against the "secur32.lib" library as the Lsa security sdk routines
are stored in the SECUR32.DLL file.
Added kg_sync_ccache_name(), kg_get_ccache_name, and kg_set_ccache_name() and rewrote gss_krb5_ccache_name() and added a call to kg_sync_ccache_name() to acquire_init_cred() to fix a bug where on systems with multiple ccaches that GSSAPI gets stuck on the ccache that was default when it launched
Jeffrey Altman [Mon, 8 Dec 2003 20:17:00 +0000 (20:17 +0000)]
Add support for conditional inclusion of flags when building as part of
KfW. The only flag defined at this time is USE_LEASH which is defined
to allow GSSAPI32.DLL to enable the use of Leash Kinit dialogs when
there are no tickets
Tom Yu [Sat, 6 Dec 2003 00:39:23 +0000 (00:39 +0000)]
work around Solaris 9 pty-close bug
Create a LD_PRELOAD object, exitsleep, that will sleep for a short
time prior to calling the real exit() function. This attempts to work
around a Solaris 9 kernel bug where output will get lost if it is
written to a pty immediately prior to the pty close.
Jeffrey Altman [Mon, 27 Oct 2003 19:59:22 +0000 (19:59 +0000)]
* sendto_kdc.c: Sockets must be closed with closesocket() instead
of close() for proper socket deallocation on systems which do
not use file descriptors for sockets. i.e., Windows.
Jeffrey Altman [Tue, 21 Oct 2003 22:20:48 +0000 (22:20 +0000)]
Because of the failure of Windows 2000 and Windows XP to perform proper
ticket expiration time management, the MS Kerberos LSA will return
tickets to a calling application with lifetimes as short as one second.
Tickets with lifetimes less than five minutes can cause problems for
most apps. Tickets with lifetimes less than 20 minutes will trigger the
Leash ticket lifetime warnings.
Instead of accepting whatever tickets are returned by MS LSA from the
cache, if the ticket lifetime is less than 20 minutes force a retrieval
operation bypassing the LSA ticket cache.
Tom Yu [Fri, 17 Oct 2003 02:32:31 +0000 (02:32 +0000)]
* api.1/lock.exp: Work around a race condition in the Solaris 9
pty implementation: output sent to a pty slave immediately before
last close/exit can get lost on the way to the master. This is
Sun bug #4927647. The workaround consists of changing the tests
to always make lock-test wait to read a character prior to
exiting, so any output prior to the "wait" directive will not get
lost.
Tom Yu [Wed, 8 Oct 2003 23:53:23 +0000 (23:53 +0000)]
Save encoded KRB-SAFE-BODY to avoid problems caused by re-encoding it.
Also, handle correctly implemented RFC 1510 KRB-SAFE i.e., checksummed
over KRB-SAFE-BODY only.
Ken Raeburn [Sat, 27 Sep 2003 00:16:16 +0000 (00:16 +0000)]
Add --enable-maintainer-mode option to configure, and prevent rebuilding of
include/krb5/autoconf.h.in and */configure if it's not enabled. Anything else
we should only rebuild in maintainer mode?
* aclocal.m4 (KRB5_AC_MAINTAINER_MODE): New macro.
(CONFIG_RULES): Invoke it.
* config/post.in (configure): Make configure depend on configure.in and
aclocal.m4 only if maintainer mode is enabled.
* include/Makefile.in ($(srcdir)/krb5/autoconf.h.in): Depend on autoconf.stmp
only if maintainer mode is enabled.
Ken Raeburn [Sat, 13 Sep 2003 03:33:14 +0000 (03:33 +0000)]
Alpha OSF build fails because daemon() tries to call setpgrp because
it doesn't know setsid is available. It's using autoconf.h, but no
longer using the defines set in lib/krb5/posix/Makefile.
Ken Raeburn [Sat, 30 Aug 2003 01:55:40 +0000 (01:55 +0000)]
While libc5 isn't one of our supported configurations, this is a simple enough
change. It should be in the 1.4 release. (Next 1.3.x release? I don't know.)
* fake-addrinfo.h (WRAP_GETADDRINFO, COPY_FIRST_CANONNAME): Don't define on
Linux unless HAVE_GETADDRINFO is defined, for libc5 compatibility.
Ken Raeburn [Sat, 30 Aug 2003 01:09:41 +0000 (01:09 +0000)]
Copy and build daemon.c in whatever directories need it, instead of building it
into the krb5 library.
* aclocal.m4 (KRB5_AC_NEED_DAEMON): New macro.
* appl/bsd/configure.in, kadmin/configure.in, kdc/configure.in,
krb524/configure.in, slave/configure.in: Use it. Don't directly check if
prototype for daemon() is needed.
* kadmin/server/Makefile.in (OBJS), kadmin/v5passwdd/Makefile.in (SERV_OBJS),
kdc/Makefile.in (OBJS, fakeka), krb524/Makefile.in (SERVER_OBJS),
slave/Makefile.in (SERVEROBJS): Use LIBOBJS.
* config/post.in (daemon.c): New rule for copying daemon.c locally
from lib/krb5/posix.
Ken Raeburn [Fri, 29 Aug 2003 07:09:48 +0000 (07:09 +0000)]
krshd hangs in linux nightly testing
A typical stack trace:
#0 0xffffe002 in ?? ()
#1 0x420da75f in syslog () from /lib/tls/libc.so.6
#2 0x0804ad06 in cleanup (signumber=15) at krshd.c:567
#3 <signal handler called>
#4 0xffffe000 in ?? ()
#5 0x4202774e in sigaction () from /lib/tls/libc.so.6
#6 0x0804ac82 in cleanup (signumber=1) at krshd.c:548
#7 <signal handler called>
#8 0xffffe002 in ?? ()
#9 0x4202774e in sigaction () from /lib/tls/libc.so.6
#10 0x420daa21 in vsyslog () from /lib/tls/libc.so.6
#11 0x420da75f in syslog () from /lib/tls/libc.so.6
#12 0x0804b670 in doit (f=3, fromp=0xbfffda50) at krshd.c:1313
#13 0x0804ab87 in main (argc=11, argv=0xbfffdb34) at krshd.c:459
#14 0x420156a4 in __libc_start_main () from /lib/tls/libc.so.6
Yes, we're calling syslog from inside a signal handler. Yes, this is
bad. And from some poking about that I did earlier, it appears that
there's some locking code in vsyslog which may be deadlocking in the
nested call. And this usually seems to happen when logging the "shell
process completed" message.
This is a quick patch to switch off the signal handlers before logging
that message. I suspect the breakage happens earlier, though, so this
might not fix the bug, just maybe move it around a little.
* krshd.c (ignore_signals): Split out from cleanup().
(doit): Call it when the shell process has completed, before calling syslog.
Ken Raeburn [Wed, 27 Aug 2003 01:10:56 +0000 (01:10 +0000)]
In my tests (2GHz P4 Linux, 5 minutes, no pre-existing replay cache), this gets
about a 10% speedup adding entries to an already open replay cache.
* rc_dfl.c (alive): Take a timestamp argument instead of the context, and don't
check the current time here. All callers changed to pass in the current time.
(rc_store): Take a timestamp argument. All callers changed to pass in the
current time.
Ken Raeburn [Tue, 26 Aug 2003 20:34:46 +0000 (20:34 +0000)]
* cc_file.c (krb5_fcc_store_int32, krb5_fcc_store_ui_4, krb5_fcc_store_ui_2)
(krb5_fcc_store_octet): Remove gratuitous conditionalizing of casts on
USE_STDIO, left over from merge.
Ken Raeburn [Tue, 26 Aug 2003 16:27:55 +0000 (16:27 +0000)]
* aclocal.m4 (WITH_CCOPTS, WITH_CPPOPTS, WITH_LINKER, WITH_LDOPTS,
KRB5_INIT_CCOPTS, WITH_CC_DEPRECATED_ARG): Deleted.
(CONFIG_RULES): Do the non-useless parts directly here.
(V5_SET_TOPDIR): Work quietly.
(WITH_KRB4): Use AC_MSG_NOTICE.
Ken Raeburn [Thu, 21 Aug 2003 08:28:48 +0000 (08:28 +0000)]
* dnssrv.c: New file; split out DNS SRV RR query support...
* locate_kdc.c: ...from here. Always compile in the calls.
* Makefile.in (STLIBOBJS, OBJS, SRCS): Add it.
Ken Raeburn [Thu, 21 Aug 2003 03:55:53 +0000 (03:55 +0000)]
Make things work on IRIX again
* fake-addrinfo.h (inline): Move definitions further up, before first use. Do
use __inline__ for gcc without c99 support.
(GET_SERV_BY_NAME) [!GETSERVBYNAME_R_RETURNS_INT]: Fix invocation for IRIX
definition.
* socket-utils.h: Include port-sockets.h to get a definition for struct
sockaddr_storage.
Ken Raeburn [Thu, 21 Aug 2003 01:50:02 +0000 (01:50 +0000)]
First cut at adding local caching to the getaddrinfo support. Still needs work
* fake-addrinfo.h: Delete the unused WRAP_GETNAMEINFO support.
(HAVE_GETADDRINFO) [__APPLE__ && __MACH__]: Don't undefine.
(FAI_CACHE) [__APPLE__ && __MACH__]: Define.
(system_getaddrinfo, system_freeaddrinfo, system_getnameinfo): New functions.
(gaiptr, faiptr, gniptr): Variables deleted. Change references to use the
system_* functions above.
(getaddrinfo, freeaddrinfo) [FAI_CACHE]: Define as macros to the my_fake_*
versions.
(protoname, socktypename, familyname): Use caller-supplied buffers instead of
local static buffers.
(debug_dump_getaddrinfo_args): Provide a buffer.
(NEED_FAKE_GETNAMEINFO): Define if HAVE_GETADDRINFO is not defined.
(inline): Rework macros to test for C99 and IRIX.
(NEED_FAKE_GETADDRINFO): Define if FAI_CACHE is defined.
(fai_add_entry) [KRB5_USE_INET6]: Support IPv6.
(CACHE_ENTRY_LIFETIME): New macro.
(struct face, struct fac): New types.
(fac): New static variable.
(plant_face, find_face): New functions.
(fai_add_hosts_by_name) [FAI_CACHE]: Check the cache before looking up the
hostname. Add the looked-up host info to the cache.
(fake_getaddrinfo): Call GET_SERV_BY_NAME instead of conditionally calling
getservbyname or getservbyname_r. Don't pass AF_INET to
fai_add_hosts_by_name.
(fake_getnameinfo): Define only if NEED_FAKE_GETNAMEINFO is defined.
(gai_strerror): Define if either HAVE_FAKE_GETADDRINFO or NEED_FAKE_GETNAMEINFO
is defined.
(getaddrinfo): Do define function if FAI_CACHE is defined.
(getnameinfo): Define only if NEED_FAKE_GETNAMEINFO is defined.