krb5: port MIT Linux keyring credentials cache (#166)
This commit is contained in:
		@@ -10,7 +10,7 @@ env:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
before_install:
 | 
					before_install:
 | 
				
			||||||
    - if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get update -qq; fi
 | 
					    - if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get update -qq; fi
 | 
				
			||||||
    - if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get install -qq bison comerr-dev flex libcap-ng-dev libdb-dev libedit-dev libjson-perl libldap2-dev libncurses5-dev libperl4-corelibs-perl libsqlite3-dev pkg-config python ss-dev texinfo unzip netbase; fi
 | 
					    - if [ $TRAVIS_OS_NAME = linux ]; then sudo apt-get install -qq bison comerr-dev flex libcap-ng-dev libdb-dev libedit-dev libjson-perl libldap2-dev libncurses5-dev libperl4-corelibs-perl libsqlite3-dev libkeyutils-dev pkg-config python ss-dev texinfo unzip netbase keyutils; fi
 | 
				
			||||||
    - if [ $TRAVIS_OS_NAME = osx ]; then brew update; fi
 | 
					    - if [ $TRAVIS_OS_NAME = osx ]; then brew update; fi
 | 
				
			||||||
    - if [ $TRAVIS_OS_NAME = osx ]; then brew install cpanm bison flex berkeley-db lmdb openldap openssl; fi
 | 
					    - if [ $TRAVIS_OS_NAME = osx ]; then brew install cpanm bison flex berkeley-db lmdb openldap openssl; fi
 | 
				
			||||||
    - if [ $TRAVIS_OS_NAME = osx ]; then sudo cpanm install JSON; fi
 | 
					    - if [ $TRAVIS_OS_NAME = osx ]; then sudo cpanm install JSON; fi
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								configure.ac
									
									
									
									
									
								
							@@ -349,6 +349,7 @@ AC_CHECK_HEADERS([\
 | 
				
			|||||||
	fnmatch.h				\
 | 
						fnmatch.h				\
 | 
				
			||||||
	inttypes.h				\
 | 
						inttypes.h				\
 | 
				
			||||||
	io.h					\
 | 
						io.h					\
 | 
				
			||||||
 | 
						keyutils.h				\
 | 
				
			||||||
	libutil.h				\
 | 
						libutil.h				\
 | 
				
			||||||
	limits.h				\
 | 
						limits.h				\
 | 
				
			||||||
	maillock.h				\
 | 
						maillock.h				\
 | 
				
			||||||
@@ -547,7 +548,28 @@ if test "$enable_kcm" = yes; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
AM_CONDITIONAL(KCM, test "$enable_kcm" = yes)
 | 
					AM_CONDITIONAL(KCM, test "$enable_kcm" = yes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl detect keyring on Linux
 | 
				
			||||||
 | 
					if test "$ac_cv_header_keyutils_h" = yes; then
 | 
				
			||||||
 | 
					    AC_CHECK_SIZEOF([key_serial_t],,[
 | 
				
			||||||
 | 
						#ifdef HAVE_INTTYPES_H
 | 
				
			||||||
 | 
						#include <inttypes.h>
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
						#ifdef HAVE_SYS_TYPES_H
 | 
				
			||||||
 | 
						#include <sys/types.h>
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
						#include <keyutils.h>
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AC_FIND_FUNC_NO_LIBS(add_key, keyutils)
 | 
				
			||||||
 | 
					if test -n "$LIB_add_key"; then
 | 
				
			||||||
 | 
					    saved_LIBS="$LIBS"
 | 
				
			||||||
 | 
					    LIBS="$LIBS $LIB_add_key"
 | 
				
			||||||
 | 
					    AC_CHECK_FUNCS(keyctl_get_persistent)
 | 
				
			||||||
 | 
					    LIBS="$saved_LIBS"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AC_CHECK_SIZEOF([time_t])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dnl Cray stuff
 | 
					dnl Cray stuff
 | 
				
			||||||
AC_CHECK_FUNCS(getudbnam setlim)
 | 
					AC_CHECK_FUNCS(getudbnam setlim)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,6 +67,7 @@ CLEANFILES =			\
 | 
				
			|||||||
	hx509.h			\
 | 
						hx509.h			\
 | 
				
			||||||
	hx509_err.h		\
 | 
						hx509_err.h		\
 | 
				
			||||||
	k524_err.h		\
 | 
						k524_err.h		\
 | 
				
			||||||
 | 
						k5e1_err.h		\
 | 
				
			||||||
	kafs.h			\
 | 
						kafs.h			\
 | 
				
			||||||
	kcm-protos.h		\
 | 
						kcm-protos.h		\
 | 
				
			||||||
	kdc-private.h		\
 | 
						kdc-private.h		\
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1425,6 +1425,13 @@ static const char *const rcsid[] = { (const char *)rcsid, "@(#)" msg }
 | 
				
			|||||||
/* Used with login -p */
 | 
					/* Used with login -p */
 | 
				
			||||||
/* #undef LOGIN_ARGS */
 | 
					/* #undef LOGIN_ARGS */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The size of `time_t', as computed by sizeof. */
 | 
				
			||||||
 | 
					#if defined (_USE_64BIT_TIME_T) || !defined( _USE_32BIT_TIME_T)
 | 
				
			||||||
 | 
					#define SIZEOF_TIME_T 8
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define SIZEOF_TIME_T 4
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef ROKEN_RENAME
 | 
					#ifdef ROKEN_RENAME
 | 
				
			||||||
#include "roken_rename.h"
 | 
					#include "roken_rename.h"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -451,6 +451,9 @@ void heim_w32_service_thread_detach(void *);
 | 
				
			|||||||
#define heim_base_exchange_pointer(t,v) __sync_lock_test_and_set((t), (v))
 | 
					#define heim_base_exchange_pointer(t,v) __sync_lock_test_and_set((t), (v))
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define heim_base_exchange_32(t,v)	heim_base_exchange_pointer((t), (v))
 | 
				
			||||||
 | 
					#define heim_base_exchange_64(t,v)	heim_base_exchange_pointer((t), (v))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(__sun)
 | 
					#elif defined(__sun)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <sys/atomic.h>
 | 
					#include <sys/atomic.h>
 | 
				
			||||||
@@ -461,6 +464,8 @@ void heim_w32_service_thread_detach(void *);
 | 
				
			|||||||
#define heim_base_atomic_max    UINT_MAX
 | 
					#define heim_base_atomic_max    UINT_MAX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define heim_base_exchange_pointer(t,v) atomic_swap_ptr((volatile void *)(t), (void *)(v))
 | 
					#define heim_base_exchange_pointer(t,v) atomic_swap_ptr((volatile void *)(t), (void *)(v))
 | 
				
			||||||
 | 
					#define heim_base_exchange_32(t,v)	atomic_swap_32((volatile uint32_t *)(t), (v))
 | 
				
			||||||
 | 
					#define heim_base_exchange_64(t,v)	atomic_swap_64((volatile uint64_t *)(t), (v))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(_AIX)
 | 
					#elif defined(_AIX)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -482,6 +487,28 @@ heim_base_exchange_pointer(void *p, void *newval)
 | 
				
			|||||||
    return val;
 | 
					    return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline uint32_t
 | 
				
			||||||
 | 
					heim_base_exchange_32(uint32_t *p, uint32_t newval)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint32_t val = *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (!compare_and_swap((atomic_p)p, (int *)&val, (int)newval))
 | 
				
			||||||
 | 
					        ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static inline uint64_t
 | 
				
			||||||
 | 
					heim_base_exchange_64(uint64_t *p, uint64_t newval)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint64_t val = *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (!compare_and_swaplp((atomic_l)p, (long *)&val, (long)newval))
 | 
				
			||||||
 | 
					        ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return val;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(_WIN32)
 | 
					#elif defined(_WIN32)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define heim_base_atomic_inc(x) InterlockedIncrement(x)
 | 
					#define heim_base_atomic_inc(x) InterlockedIncrement(x)
 | 
				
			||||||
@@ -490,6 +517,8 @@ heim_base_exchange_pointer(void *p, void *newval)
 | 
				
			|||||||
#define heim_base_atomic_max    MAXLONG
 | 
					#define heim_base_atomic_max    MAXLONG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define heim_base_exchange_pointer(t,v) InterlockedExchangePointer((PVOID volatile *)(t), (PVOID)(v))
 | 
					#define heim_base_exchange_pointer(t,v) InterlockedExchangePointer((PVOID volatile *)(t), (PVOID)(v))
 | 
				
			||||||
 | 
					#define heim_base_exchange_32(t,v)	((ULONG)InterlockedExchange((LONG volatile *)(t), (LONG)(v)))
 | 
				
			||||||
 | 
					#define heim_base_exchange_64(t,v)	((ULONG64)InterlockedExchange64((LONG64 violatile *)(t), (LONG64)(v)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -535,4 +564,12 @@ heim_base_exchange_pointer(void *target, void *value)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#endif /* defined(__GNUC__) && defined(HAVE___SYNC_ADD_AND_FETCH) */
 | 
					#endif /* defined(__GNUC__) && defined(HAVE___SYNC_ADD_AND_FETCH) */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if SIZEOF_TIME_T == 8
 | 
				
			||||||
 | 
					#define heim_base_exchange_time_t(t,v)	heim_base_exchange_64((t), (v))
 | 
				
			||||||
 | 
					#elif SIZEOF_TIME_T == 4
 | 
				
			||||||
 | 
					#define heim_base_exchange_time_t(t,v)	heim_base_exchange_32((t), (v))
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#error set SIZEOF_TIME_T for your platform
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* HEIM_BASE_H */
 | 
					#endif /* HEIM_BASE_H */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,6 +79,7 @@ libkrb5_la_LIBADD = \
 | 
				
			|||||||
	$(LIB_libintl) \
 | 
						$(LIB_libintl) \
 | 
				
			||||||
	$(LIBADD_roken) \
 | 
						$(LIBADD_roken) \
 | 
				
			||||||
	$(PTHREAD_LIBADD) \
 | 
						$(PTHREAD_LIBADD) \
 | 
				
			||||||
 | 
						$(LIB_add_key) \
 | 
				
			||||||
	$(LIB_door_create) \
 | 
						$(LIB_door_create) \
 | 
				
			||||||
	$(LIB_dlopen)
 | 
						$(LIB_dlopen)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -93,12 +94,13 @@ librfc3961_la_LIBADD = \
 | 
				
			|||||||
	$(LIB_libintl) \
 | 
						$(LIB_libintl) \
 | 
				
			||||||
	$(LIBADD_roken) \
 | 
						$(LIBADD_roken) \
 | 
				
			||||||
	$(PTHREAD_LIBADD) \
 | 
						$(PTHREAD_LIBADD) \
 | 
				
			||||||
 | 
						$(LIB_add_key) \
 | 
				
			||||||
	$(LIB_door_create) \
 | 
						$(LIB_door_create) \
 | 
				
			||||||
	$(LIB_dlopen)
 | 
						$(LIB_dlopen)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lib_LTLIBRARIES = libkrb5.la
 | 
					lib_LTLIBRARIES = libkrb5.la
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ERR_FILES = krb5_err.c krb_err.c heim_err.c k524_err.c
 | 
					ERR_FILES = krb5_err.c krb_err.c heim_err.c k524_err.c k5e1_err.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libkrb5_la_CPPFLAGS = \
 | 
					libkrb5_la_CPPFLAGS = \
 | 
				
			||||||
	-DBUILD_KRB5_LIB \
 | 
						-DBUILD_KRB5_LIB \
 | 
				
			||||||
@@ -183,6 +185,7 @@ dist_libkrb5_la_SOURCES =			\
 | 
				
			|||||||
	keytab_memory.c				\
 | 
						keytab_memory.c				\
 | 
				
			||||||
	krb5_locl.h				\
 | 
						krb5_locl.h				\
 | 
				
			||||||
	krb5-v4compat.h				\
 | 
						krb5-v4compat.h				\
 | 
				
			||||||
 | 
						krcache.c				\
 | 
				
			||||||
	krbhst.c				\
 | 
						krbhst.c				\
 | 
				
			||||||
	kuserok.c				\
 | 
						kuserok.c				\
 | 
				
			||||||
	kuserok_plugin.h			\
 | 
						kuserok_plugin.h			\
 | 
				
			||||||
@@ -276,7 +279,7 @@ ALL_OBJECTS += $(test_renew_OBJECTS)
 | 
				
			|||||||
ALL_OBJECTS += $(test_rfc3961_OBJECTS)
 | 
					ALL_OBJECTS += $(test_rfc3961_OBJECTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(ALL_OBJECTS): $(srcdir)/krb5-protos.h $(srcdir)/krb5-private.h
 | 
					$(ALL_OBJECTS): $(srcdir)/krb5-protos.h $(srcdir)/krb5-private.h
 | 
				
			||||||
$(ALL_OBJECTS): krb5_err.h heim_err.h k524_err.h krb5_err.h krb_err.h k524_err.h
 | 
					$(ALL_OBJECTS): krb5_err.h heim_err.h k524_err.h k5e1_err.h krb_err.h k524_err.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
librfc3961_la_SOURCES =				\
 | 
					librfc3961_la_SOURCES =				\
 | 
				
			||||||
	crc.c					\
 | 
						crc.c					\
 | 
				
			||||||
@@ -380,7 +383,7 @@ dist_include_HEADERS = \
 | 
				
			|||||||
noinst_HEADERS = $(srcdir)/krb5-private.h
 | 
					noinst_HEADERS = $(srcdir)/krb5-private.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nodist_include_HEADERS = krb5_err.h heim_err.h k524_err.h
 | 
					nodist_include_HEADERS = krb5_err.h heim_err.h k524_err.h k5e1_err.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# XXX use nobase_include_HEADERS = krb5/locate_plugin.h
 | 
					# XXX use nobase_include_HEADERS = krb5/locate_plugin.h
 | 
				
			||||||
krb5dir = $(includedir)/krb5
 | 
					krb5dir = $(includedir)/krb5
 | 
				
			||||||
@@ -396,9 +399,10 @@ CLEANFILES = \
 | 
				
			|||||||
	krb5_err.c krb5_err.h \
 | 
						krb5_err.c krb5_err.h \
 | 
				
			||||||
	krb_err.c krb_err.h \
 | 
						krb_err.c krb_err.h \
 | 
				
			||||||
	heim_err.c heim_err.h \
 | 
						heim_err.c heim_err.h \
 | 
				
			||||||
	k524_err.c k524_err.h
 | 
						k524_err.c k524_err.h \
 | 
				
			||||||
 | 
						k5e1_err.c k5e1_err.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(libkrb5_la_OBJECTS): krb5_err.h krb_err.h heim_err.h k524_err.h
 | 
					$(libkrb5_la_OBJECTS): krb5_err.h krb_err.h heim_err.h k524_err.h k5e1_err.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test_config_strings.out: test_config_strings.cfg
 | 
					test_config_strings.out: test_config_strings.cfg
 | 
				
			||||||
	$(CP) $(srcdir)/test_config_strings.cfg test_config_strings.out
 | 
						$(CP) $(srcdir)/test_config_strings.cfg test_config_strings.out
 | 
				
			||||||
@@ -413,6 +417,7 @@ EXTRA_DIST = \
 | 
				
			|||||||
	krb_err.et \
 | 
						krb_err.et \
 | 
				
			||||||
	heim_err.et \
 | 
						heim_err.et \
 | 
				
			||||||
	k524_err.et \
 | 
						k524_err.et \
 | 
				
			||||||
 | 
						k5e1_err.et \
 | 
				
			||||||
	$(man_MANS) \
 | 
						$(man_MANS) \
 | 
				
			||||||
	version-script.map \
 | 
						version-script.map \
 | 
				
			||||||
	test_config_strings.cfg \
 | 
						test_config_strings.cfg \
 | 
				
			||||||
@@ -429,3 +434,5 @@ krb_err.h: krb_err.et
 | 
				
			|||||||
heim_err.h: heim_err.et
 | 
					heim_err.h: heim_err.et
 | 
				
			||||||
 | 
					
 | 
				
			||||||
k524_err.h: k524_err.et
 | 
					k524_err.h: k524_err.et
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					k5e1_err.h: k5e1_err.et
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -166,11 +166,13 @@ libkrb5_gen_OBJS=	    \
 | 
				
			|||||||
	$(OBJ)\krb5_err.obj \
 | 
						$(OBJ)\krb5_err.obj \
 | 
				
			||||||
	$(OBJ)\krb_err.obj  \
 | 
						$(OBJ)\krb_err.obj  \
 | 
				
			||||||
	$(OBJ)\heim_err.obj \
 | 
						$(OBJ)\heim_err.obj \
 | 
				
			||||||
	$(OBJ)\k524_err.obj
 | 
						$(OBJ)\k524_err.obj \
 | 
				
			||||||
 | 
						$(OBJ)\k5e1_err.obj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INCFILES=			\
 | 
					INCFILES=			\
 | 
				
			||||||
	$(INCDIR)\heim_err.h	\
 | 
						$(INCDIR)\heim_err.h	\
 | 
				
			||||||
	$(INCDIR)\k524_err.h	\
 | 
						$(INCDIR)\k524_err.h	\
 | 
				
			||||||
 | 
						$(INCDIR)\k5e1_err.h	\
 | 
				
			||||||
        $(INCDIR)\kcm.h         \
 | 
					        $(INCDIR)\kcm.h         \
 | 
				
			||||||
	$(INCDIR)\krb_err.h	\
 | 
						$(INCDIR)\krb_err.h	\
 | 
				
			||||||
	$(INCDIR)\krb5.h	\
 | 
						$(INCDIR)\krb5.h	\
 | 
				
			||||||
@@ -346,6 +348,11 @@ $(OBJ)\k524_err.c $(OBJ)\k524_err.h: k524_err.et
 | 
				
			|||||||
	$(BINDIR)\compile_et.exe $(SRCDIR)\k524_err.et
 | 
						$(BINDIR)\compile_et.exe $(SRCDIR)\k524_err.et
 | 
				
			||||||
	cd $(SRCDIR)
 | 
						cd $(SRCDIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(OBJ)\k5e1_err.c $(OBJ)\k5e1_err.h: k5e1_err.et
 | 
				
			||||||
 | 
						cd $(OBJ)
 | 
				
			||||||
 | 
						$(BINDIR)\compile_et.exe $(SRCDIR)\k5e1_err.et
 | 
				
			||||||
 | 
						cd $(SRCDIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#----------------------------------------------------------------------
 | 
					#----------------------------------------------------------------------
 | 
				
			||||||
# libkrb5
 | 
					# libkrb5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,3 +64,4 @@ KRB5_LIB_VARIABLE const char *krb5_cc_type_memory = "MEMORY";
 | 
				
			|||||||
KRB5_LIB_VARIABLE const char *krb5_cc_type_kcm = "KCM";
 | 
					KRB5_LIB_VARIABLE const char *krb5_cc_type_kcm = "KCM";
 | 
				
			||||||
KRB5_LIB_VARIABLE const char *krb5_cc_type_scc = "SCC";
 | 
					KRB5_LIB_VARIABLE const char *krb5_cc_type_scc = "SCC";
 | 
				
			||||||
KRB5_LIB_VARIABLE const char *krb5_cc_type_dcc = "DIR";
 | 
					KRB5_LIB_VARIABLE const char *krb5_cc_type_dcc = "DIR";
 | 
				
			||||||
 | 
					KRB5_LIB_VARIABLE const char *krb5_cc_type_keyring = "KEYRING";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -290,6 +290,9 @@ cc_ops_register(krb5_context context)
 | 
				
			|||||||
    krb5_cc_register(context, &krb5_akcm_ops, TRUE);
 | 
					    krb5_cc_register(context, &krb5_akcm_ops, TRUE);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    krb5_cc_register(context, &krb5_kcm_ops, TRUE);
 | 
					    krb5_cc_register(context, &krb5_kcm_ops, TRUE);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(HAVE_KEYUTILS_H)
 | 
				
			||||||
 | 
					    krb5_cc_register(context, &krb5_krcc_ops, TRUE);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    _krb5_load_ccache_plugins(context);
 | 
					    _krb5_load_ccache_plugins(context);
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
@@ -1116,6 +1119,7 @@ krb5_init_ets(krb5_context context)
 | 
				
			|||||||
	krb5_add_et_list(context, initialize_heim_error_table_r);
 | 
						krb5_add_et_list(context, initialize_heim_error_table_r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	krb5_add_et_list(context, initialize_k524_error_table_r);
 | 
						krb5_add_et_list(context, initialize_k524_error_table_r);
 | 
				
			||||||
 | 
						krb5_add_et_list(context, initialize_k5e1_error_table_r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef COM_ERR_BINDDOMAIN_krb5
 | 
					#ifdef COM_ERR_BINDDOMAIN_krb5
 | 
				
			||||||
	bindtextdomain(COM_ERR_BINDDOMAIN_krb5, HEIMDAL_LOCALEDIR);
 | 
						bindtextdomain(COM_ERR_BINDDOMAIN_krb5, HEIMDAL_LOCALEDIR);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								lib/krb5/k5e1_err.et
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lib/krb5/k5e1_err.et
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					id "$Id$"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_table k5e1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					index 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					prefix KRB5_DCC
 | 
				
			||||||
 | 
					error_code CANNOT_CREATE,	"Can't create new subsidiary cache"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					prefix KRB5_KCC
 | 
				
			||||||
 | 
					error_code INVALID_ANCHOR,	"Invalid keyring anchor name"
 | 
				
			||||||
 | 
					error_code UNKNOWN_VERSION,	"Unknown keyring collection version"
 | 
				
			||||||
 | 
					error_code INVALID_UID,		"Invalid UID in persistent keyring name"
 | 
				
			||||||
@@ -45,6 +45,7 @@
 | 
				
			|||||||
#include <krb5_err.h>
 | 
					#include <krb5_err.h>
 | 
				
			||||||
#include <heim_err.h>
 | 
					#include <heim_err.h>
 | 
				
			||||||
#include <k524_err.h>
 | 
					#include <k524_err.h>
 | 
				
			||||||
 | 
					#include <k5e1_err.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <krb5_asn1.h>
 | 
					#include <krb5_asn1.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -961,6 +962,7 @@ extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_mcc_ops;
 | 
				
			|||||||
extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_kcm_ops;
 | 
					extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_kcm_ops;
 | 
				
			||||||
extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_akcm_ops;
 | 
					extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_akcm_ops;
 | 
				
			||||||
extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_scc_ops;
 | 
					extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_scc_ops;
 | 
				
			||||||
 | 
					extern KRB5_LIB_VARIABLE const krb5_cc_ops krb5_krcc_ops;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern KRB5_LIB_VARIABLE const krb5_kt_ops krb5_fkt_ops;
 | 
					extern KRB5_LIB_VARIABLE const krb5_kt_ops krb5_fkt_ops;
 | 
				
			||||||
extern KRB5_LIB_VARIABLE const krb5_kt_ops krb5_wrfkt_ops;
 | 
					extern KRB5_LIB_VARIABLE const krb5_kt_ops krb5_wrfkt_ops;
 | 
				
			||||||
@@ -975,6 +977,7 @@ extern KRB5_LIB_VARIABLE const char *krb5_cc_type_memory;
 | 
				
			|||||||
extern KRB5_LIB_VARIABLE const char *krb5_cc_type_kcm;
 | 
					extern KRB5_LIB_VARIABLE const char *krb5_cc_type_kcm;
 | 
				
			||||||
extern KRB5_LIB_VARIABLE const char *krb5_cc_type_scc;
 | 
					extern KRB5_LIB_VARIABLE const char *krb5_cc_type_scc;
 | 
				
			||||||
extern KRB5_LIB_VARIABLE const char *krb5_cc_type_dcc;
 | 
					extern KRB5_LIB_VARIABLE const char *krb5_cc_type_dcc;
 | 
				
			||||||
 | 
					extern KRB5_LIB_VARIABLE const char *krb5_cc_type_keyring;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __KRB5_H__ */
 | 
					#endif /* __KRB5_H__ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,6 +142,7 @@ struct _krb5_krb_auth_data;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <krb5.h>
 | 
					#include <krb5.h>
 | 
				
			||||||
#include <krb5_err.h>
 | 
					#include <krb5_err.h>
 | 
				
			||||||
 | 
					#include <k5e1_err.h>
 | 
				
			||||||
#include <asn1_err.h>
 | 
					#include <asn1_err.h>
 | 
				
			||||||
#ifdef PKINIT
 | 
					#ifdef PKINIT
 | 
				
			||||||
#include <hx509.h>
 | 
					#include <hx509.h>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2034
									
								
								lib/krb5/krcache.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2034
									
								
								lib/krb5/krcache.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -717,6 +717,8 @@ EXPORTS
 | 
				
			|||||||
	initialize_heim_error_table
 | 
						initialize_heim_error_table
 | 
				
			||||||
	initialize_k524_error_table_r
 | 
						initialize_k524_error_table_r
 | 
				
			||||||
	initialize_k524_error_table
 | 
						initialize_k524_error_table
 | 
				
			||||||
 | 
						initialize_k5e1_error_table_r
 | 
				
			||||||
 | 
						initialize_k5e1_error_table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ; variables
 | 
					        ; variables
 | 
				
			||||||
	krb5_mcc_ops            DATA
 | 
						krb5_mcc_ops            DATA
 | 
				
			||||||
@@ -727,6 +729,9 @@ EXPORTS
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef HAVE_KCM
 | 
					#ifdef HAVE_KCM
 | 
				
			||||||
	krb5_kcm_ops            DATA
 | 
						krb5_kcm_ops            DATA
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS
 | 
				
			||||||
 | 
						krb5_krcc_ops           DATA
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	krb5_wrfkt_ops          DATA
 | 
						krb5_wrfkt_ops          DATA
 | 
				
			||||||
	krb5_mkt_ops            DATA
 | 
						krb5_mkt_ops            DATA
 | 
				
			||||||
@@ -740,6 +745,7 @@ EXPORTS
 | 
				
			|||||||
	krb5_cc_type_file       DATA
 | 
						krb5_cc_type_file       DATA
 | 
				
			||||||
	krb5_cc_type_memory     DATA
 | 
						krb5_cc_type_memory     DATA
 | 
				
			||||||
	krb5_cc_type_kcm        DATA
 | 
						krb5_cc_type_kcm        DATA
 | 
				
			||||||
 | 
						krb5_cc_type_keyring    DATA
 | 
				
			||||||
	krb5_cc_type_scc        DATA
 | 
						krb5_cc_type_scc        DATA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ; Shared with GSSAPI krb5
 | 
					        ; Shared with GSSAPI krb5
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -391,6 +391,7 @@ test_cache_iter(krb5_context context, const char *type, int destroy)
 | 
				
			|||||||
	krb5_principal principal;
 | 
						krb5_principal principal;
 | 
				
			||||||
	char *name;
 | 
						char *name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						heim_assert(id != NULL, "credentials cache is non-NULL");
 | 
				
			||||||
	if (debug_flag)
 | 
						if (debug_flag)
 | 
				
			||||||
	    printf("name: %s\n", krb5_cc_get_name(context, id));
 | 
						    printf("name: %s\n", krb5_cc_get_name(context, id));
 | 
				
			||||||
	ret = krb5_cc_get_principal(context, id, &principal);
 | 
						ret = krb5_cc_get_principal(context, id, &principal);
 | 
				
			||||||
@@ -683,6 +684,9 @@ main(int argc, char **argv)
 | 
				
			|||||||
#ifdef USE_SQLITE
 | 
					#ifdef USE_SQLITE
 | 
				
			||||||
    test_cache_remove(context, krb5_cc_type_scc);
 | 
					    test_cache_remove(context, krb5_cc_type_scc);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS_H
 | 
				
			||||||
 | 
					    test_cache_remove(context, krb5_cc_type_keyring);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test_default_name(context);
 | 
					    test_default_name(context);
 | 
				
			||||||
    test_mcache(context);
 | 
					    test_mcache(context);
 | 
				
			||||||
@@ -693,6 +697,9 @@ main(int argc, char **argv)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
    test_init_vs_destroy(context, krb5_cc_type_scc);
 | 
					    test_init_vs_destroy(context, krb5_cc_type_scc);
 | 
				
			||||||
    test_init_vs_destroy(context, krb5_cc_type_dcc);
 | 
					    test_init_vs_destroy(context, krb5_cc_type_dcc);
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS_H
 | 
				
			||||||
 | 
					    test_init_vs_destroy(context, krb5_cc_type_keyring);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    test_mcc_default();
 | 
					    test_mcc_default();
 | 
				
			||||||
    test_def_cc_name(context);
 | 
					    test_def_cc_name(context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -722,6 +729,10 @@ main(int argc, char **argv)
 | 
				
			|||||||
    test_cache_iter(context, krb5_cc_type_dcc, 0);
 | 
					    test_cache_iter(context, krb5_cc_type_dcc, 0);
 | 
				
			||||||
    test_cache_iter(context, krb5_cc_type_dcc, 1);
 | 
					    test_cache_iter(context, krb5_cc_type_dcc, 1);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS_H
 | 
				
			||||||
 | 
					    test_cache_iter(context, krb5_cc_type_keyring, 0);
 | 
				
			||||||
 | 
					    test_cache_iter(context, krb5_cc_type_keyring, 1);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test_copy(context, krb5_cc_type_file, krb5_cc_type_file);
 | 
					    test_copy(context, krb5_cc_type_file, krb5_cc_type_file);
 | 
				
			||||||
    test_copy(context, krb5_cc_type_memory, krb5_cc_type_memory);
 | 
					    test_copy(context, krb5_cc_type_memory, krb5_cc_type_memory);
 | 
				
			||||||
@@ -736,6 +747,34 @@ main(int argc, char **argv)
 | 
				
			|||||||
    test_copy(context, krb5_cc_type_dcc, krb5_cc_type_file);
 | 
					    test_copy(context, krb5_cc_type_dcc, krb5_cc_type_file);
 | 
				
			||||||
    test_copy(context, krb5_cc_type_dcc, krb5_cc_type_scc);
 | 
					    test_copy(context, krb5_cc_type_dcc, krb5_cc_type_scc);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS_H
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_keyring, krb5_cc_type_file);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_file, krb5_cc_type_file);
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:", "KEYRING:bar");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:bar", "KEYRING:baz");
 | 
				
			||||||
 | 
					# ifdef HAVE_KEYCTL_GET_PERSISTENT
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_file, "KEYRING:persistent");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:persistent:", krb5_cc_type_file);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_file, "KEYRING:persistent:foo");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:persistent:foo", krb5_cc_type_file);
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_memory, "KEYRING:process:");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:process:", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_memory, "KEYRING:process:foo");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:process:foo", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_memory, "KEYRING:thread:");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:thread:", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_memory, "KEYRING:thread:foo");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:thread:foo", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_memory, "KEYRING:session:");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:session:", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_memory, "KEYRING:session:foo");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:session:foo", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_file, "KEYRING:user:");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:user:", krb5_cc_type_file);
 | 
				
			||||||
 | 
					    test_copy(context, krb5_cc_type_file, "KEYRING:user:foo");
 | 
				
			||||||
 | 
					    test_copy(context, "KEYRING:user:foo", krb5_cc_type_memory);
 | 
				
			||||||
 | 
					#endif /* HAVE_KEYUTILS_H */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test_move(context, krb5_cc_type_file);
 | 
					    test_move(context, krb5_cc_type_file);
 | 
				
			||||||
    test_move(context, krb5_cc_type_memory);
 | 
					    test_move(context, krb5_cc_type_memory);
 | 
				
			||||||
@@ -746,6 +785,21 @@ main(int argc, char **argv)
 | 
				
			|||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
    test_move(context, krb5_cc_type_dcc);
 | 
					    test_move(context, krb5_cc_type_dcc);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS_H
 | 
				
			||||||
 | 
					    test_move(context, krb5_cc_type_keyring);
 | 
				
			||||||
 | 
					# ifdef HAVE_KEYCTL_GET_PERSISTENT
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:persistent:");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:persistent:foo");
 | 
				
			||||||
 | 
					# endif
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:process:");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:process:foo");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:thread:");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:thread:foo");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:session:");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:session:foo");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:user:");
 | 
				
			||||||
 | 
					    test_move(context, "KEYRING:user:foo");
 | 
				
			||||||
 | 
					#endif /* HAVE_KEYUTILS_H */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test_prefix_ops(context, "FILE:/tmp/foo", &krb5_fcc_ops);
 | 
					    test_prefix_ops(context, "FILE:/tmp/foo", &krb5_fcc_ops);
 | 
				
			||||||
    test_prefix_ops(context, "FILE", &krb5_fcc_ops);
 | 
					    test_prefix_ops(context, "FILE", &krb5_fcc_ops);
 | 
				
			||||||
@@ -760,6 +814,10 @@ main(int argc, char **argv)
 | 
				
			|||||||
    test_prefix_ops(context, "DIR:", &krb5_dcc_ops);
 | 
					    test_prefix_ops(context, "DIR:", &krb5_dcc_ops);
 | 
				
			||||||
    test_prefix_ops(context, "DIR:tkt1", &krb5_dcc_ops);
 | 
					    test_prefix_ops(context, "DIR:tkt1", &krb5_dcc_ops);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef HAVE_KEYUTILS_H
 | 
				
			||||||
 | 
					    test_prefix_ops(context, "KEYRING:", &krb5_krcc_ops);
 | 
				
			||||||
 | 
					    test_prefix_ops(context, "KEYRING:foo", &krb5_krcc_ops);
 | 
				
			||||||
 | 
					#endif /* HAVE_KEYUTILS_H */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    krb5_cc_destroy(context, id1);
 | 
					    krb5_cc_destroy(context, id1);
 | 
				
			||||||
    krb5_cc_destroy(context, id2);
 | 
					    krb5_cc_destroy(context, id2);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -709,12 +709,15 @@ HEIMDAL_KRB5_2.0 {
 | 
				
			|||||||
		initialize_heim_error_table;
 | 
							initialize_heim_error_table;
 | 
				
			||||||
		initialize_k524_error_table_r;
 | 
							initialize_k524_error_table_r;
 | 
				
			||||||
		initialize_k524_error_table;
 | 
							initialize_k524_error_table;
 | 
				
			||||||
 | 
							initialize_k5e1_error_table_r;
 | 
				
			||||||
 | 
							initialize_k5e1_error_table;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		# variables
 | 
							# variables
 | 
				
			||||||
		krb5_dcc_ops;
 | 
							krb5_dcc_ops;
 | 
				
			||||||
		krb5_mcc_ops;
 | 
							krb5_mcc_ops;
 | 
				
			||||||
		krb5_acc_ops;
 | 
							krb5_acc_ops;
 | 
				
			||||||
		krb5_fcc_ops;
 | 
							krb5_fcc_ops;
 | 
				
			||||||
 | 
							krb5_krcc_ops;
 | 
				
			||||||
		krb5_scc_ops;
 | 
							krb5_scc_ops;
 | 
				
			||||||
		krb5_kcm_ops;
 | 
							krb5_kcm_ops;
 | 
				
			||||||
		krb5_wrfkt_ops;
 | 
							krb5_wrfkt_ops;
 | 
				
			||||||
@@ -730,6 +733,7 @@ HEIMDAL_KRB5_2.0 {
 | 
				
			|||||||
		krb5_cc_type_file;
 | 
							krb5_cc_type_file;
 | 
				
			||||||
		krb5_cc_type_memory;
 | 
							krb5_cc_type_memory;
 | 
				
			||||||
		krb5_cc_type_kcm;
 | 
							krb5_cc_type_kcm;
 | 
				
			||||||
 | 
							krb5_cc_type_keyring;
 | 
				
			||||||
		krb5_cc_type_scc;
 | 
							krb5_cc_type_scc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		# shared with HDB
 | 
							# shared with HDB
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,6 +73,7 @@ INCFILES=\
 | 
				
			|||||||
	$(SDKINCDIR)\krb5\asn1_err.h	\
 | 
						$(SDKINCDIR)\krb5\asn1_err.h	\
 | 
				
			||||||
	$(SDKINCDIR)\krb5\heim_err.h	\
 | 
						$(SDKINCDIR)\krb5\heim_err.h	\
 | 
				
			||||||
	$(SDKINCDIR)\krb5\k524_err.h	\
 | 
						$(SDKINCDIR)\krb5\k524_err.h	\
 | 
				
			||||||
 | 
						$(SDKINCDIR)\krb5\k5e1_err.h	\
 | 
				
			||||||
	$(SDKINCDIR)\krb5\krb5-protos.h	\
 | 
						$(SDKINCDIR)\krb5\krb5-protos.h	\
 | 
				
			||||||
	$(SDKINCDIR)\krb5\krb5-types.h	\
 | 
						$(SDKINCDIR)\krb5\krb5-types.h	\
 | 
				
			||||||
	$(SDKINCDIR)\krb5\krb5-v4compat.h	\
 | 
						$(SDKINCDIR)\krb5\krb5-v4compat.h	\
 | 
				
			||||||
@@ -105,6 +106,7 @@ INCFILES=\
 | 
				
			|||||||
	$(SDKINCDIR)\heimdal\asn1_err.h	\
 | 
						$(SDKINCDIR)\heimdal\asn1_err.h	\
 | 
				
			||||||
	$(SDKINCDIR)\heimdal\heim_err.h	\
 | 
						$(SDKINCDIR)\heimdal\heim_err.h	\
 | 
				
			||||||
	$(SDKINCDIR)\heimdal\k524_err.h	\
 | 
						$(SDKINCDIR)\heimdal\k524_err.h	\
 | 
				
			||||||
 | 
						$(SDKINCDIR)\heimdal\k5e1_err.h	\
 | 
				
			||||||
	$(SDKINCDIR)\heimdal\krb5-protos.h	\
 | 
						$(SDKINCDIR)\heimdal\krb5-protos.h	\
 | 
				
			||||||
	$(SDKINCDIR)\heimdal\krb5-types.h	\
 | 
						$(SDKINCDIR)\heimdal\krb5-types.h	\
 | 
				
			||||||
	$(SDKINCDIR)\heimdal\krb5-v4compat.h	\
 | 
						$(SDKINCDIR)\heimdal\krb5-v4compat.h	\
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user