summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.in191
-rw-r--r--src/appl/Makefile.in10
-rw-r--r--src/ccapi/lib/ccapi_context.c1
-rw-r--r--src/ccapi/lib/ccapi_ipc.c7
-rw-r--r--src/ccapi/lib/ccapi_ipc.h1
-rw-r--r--src/ccapi/lib/ccapi_os_ipc.h1
-rw-r--r--src/ccapi/lib/mac/ccapi_os_ipc.c8
-rw-r--r--src/ccapi/lib/win/Makefile.in2
-rw-r--r--src/ccapi/lib/win/ccapi_os_ipc.cxx7
-rw-r--r--src/ccapi/server/win/Makefile.in218
-rw-r--r--src/ccapi/server/win/Server.sln40
-rw-r--r--src/ccapi/server/win/Server.vcproj454
-rw-r--r--src/ccapi/server/win/WorkItem.cpp252
-rw-r--r--src/ccapi/server/win/WorkQueue.cpp122
-rw-r--r--src/ccapi/server/win/ccs_os_server.cpp1926
-rw-r--r--src/ccapi/test/Makefile.in38
-rw-r--r--src/ccapi/test/pingtest.c14
-rw-r--r--src/clients/kinit/kinit.c2
-rw-r--r--src/clients/klist/klist.c4
-rw-r--r--src/config/pre.in4
-rw-r--r--src/config/win-pre.in3
-rw-r--r--src/include/k5-int.h6
-rw-r--r--src/include/win-mac.h7
-rw-r--r--src/lib/Makefile.in34
-rw-r--r--src/lib/crypto/Makefile.in50
-rw-r--r--src/lib/crypto/builtin/Makefile.in74
-rw-r--r--src/lib/crypto/builtin/aes/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/camellia/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/des/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/enc_provider/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/enc_provider/camellia.c2
-rw-r--r--src/lib/crypto/builtin/hash_provider/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/md4/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/md5/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/sha1/Makefile.in4
-rw-r--r--src/lib/crypto/builtin/sha2/Makefile.in4
-rw-r--r--src/lib/crypto/crypto_tests/Makefile.in31
-rw-r--r--src/lib/crypto/krb/Makefile.in94
-rw-r--r--src/lib/crypto/krb/arcfour/Makefile.in8
-rw-r--r--src/lib/crypto/krb/checksum/Makefile.in6
-rw-r--r--src/lib/crypto/krb/crc32/Makefile.in4
-rw-r--r--src/lib/crypto/krb/dk/Makefile.in6
-rw-r--r--src/lib/crypto/krb/old/Makefile.in8
-rw-r--r--src/lib/crypto/krb/prf/Makefile.in10
-rw-r--r--src/lib/crypto/krb/prng/Makefile.in44
-rw-r--r--src/lib/crypto/krb/prng/fortuna/Makefile.in8
-rw-r--r--src/lib/crypto/krb/prng/nss/Makefile.in2
-rw-r--r--src/lib/crypto/krb/prng/yarrow/Makefile.in12
-rw-r--r--src/lib/crypto/krb/rand2key/Makefile.in6
-rw-r--r--src/lib/crypto/krb/raw/Makefile.in8
-rw-r--r--src/lib/gssapi/generic/Makefile.in2
-rw-r--r--src/lib/gssapi/krb5/copy_ccache.c2
-rw-r--r--src/lib/gssapi/krb5/get_tkt_flags.c2
-rw-r--r--src/lib/gssapi/krb5/gssapiP_krb5.h16
-rw-r--r--src/lib/gssapi/krb5/gssapi_krb5.c2
-rw-r--r--src/lib/gssapi/krb5/krb5_gss_glue.c2
-rw-r--r--src/lib/gssapi/krb5/lucid_context.c4
-rw-r--r--src/lib/gssapi/krb5/set_allowable_enctypes.c2
-rw-r--r--src/lib/gssapi/krb5/set_ccache.c2
-rw-r--r--src/lib/gssapi/mechglue/g_mechattr.c9
-rw-r--r--src/lib/gssapi/mechglue/g_oid_ops.c2
-rw-r--r--src/lib/gssapi/mechglue/g_store_cred.c17
-rw-r--r--src/lib/gssapi/mechglue/mglueP.h12
-rw-r--r--src/lib/gssapi/spnego/gssapiP_spnego.h1
-rw-r--r--src/lib/gssapi/spnego/spnego_mech.c4
-rw-r--r--src/lib/gssapi32.def71
-rw-r--r--src/lib/krb5/asn.1/krb5_decode.c2
-rw-r--r--src/lib/krb5/keytab/kt_file.c2
-rw-r--r--src/lib/krb5/krb/Makefile.in1
-rw-r--r--src/lib/krb5/krb/auth_con.c4
-rw-r--r--src/lib/krb5/krb/get_creds.c2
-rw-r--r--src/lib/krb5/krb/kfree.c20
-rw-r--r--src/lib/krb5/os/hst_realm.c2
-rw-r--r--src/lib/krb5_32.def122
-rw-r--r--src/lib/win_glue.c22
-rw-r--r--src/util/profile/Makefile.in4
-rw-r--r--src/util/profile/prof_parse.c39
-rw-r--r--src/windows/Makefile.in31
-rw-r--r--src/windows/README52
-rw-r--r--src/windows/build/bkw.pl5
-rw-r--r--src/windows/ntsecapitest.c11
-rw-r--r--src/windows/ntsecapitest.pl11
82 files changed, 2191 insertions, 2050 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index 16d04e65c2..5a78c77bbf 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -66,13 +66,10 @@ all-windows:: maybe-awk Makefile-windows
@echo Making in clients
cd ..\clients
$(MAKE) -$(MFLAGS)
- @echo Making in appl\gss-sample
- cd ..\appl\gss-sample
+ @echo Making in appl
+ cd ..\appl
$(MAKE) -$(MFLAGS)
- @echo Making in appl\gssftp\ftp
- cd ..\..\appl\gssftp\ftp
- $(MAKE) -$(MFLAGS)
- cd ..\..\..
+ cd ..
world::
date
@@ -185,8 +182,7 @@ config-windows:: Makefile-windows
##DOS##MKFDEP=$(WCONFIG_EXE) config\win-pre.in config\win-post.in
WINMAKEFILES=Makefile \
- appl\gss-sample\Makefile \
- appl\gssftp\ftp\Makefile \
+ appl\Makefile appl\gss-sample\Makefile \
ccapi\Makefile \
ccapi\lib\win\Makefile \
ccapi\server\win\Makefile \
@@ -196,17 +192,19 @@ WINMAKEFILES=Makefile \
clients\kpasswd\Makefile clients\kvno\Makefile \
clients\kcpytkt\Makefile clients\kdeltkt\Makefile \
include\Makefile \
- lib\Makefile lib\crypto\Makefile \
- lib\crypto\krb\crc32\Makefile lib\crypto\@CRYPTO_IMPL@\des\Makefile \
- lib\crypto\krb\dk\Makefile lib\crypto\@CRYPTO_IMPL@\enc_provider\Makefile \
- lib\crypto\@CRYPTO_IMPL@\hash_provider\Makefile \
- lib\crypto\krb\keyhash_provider\Makefile \
- lib\crypto\krb\prf\Makefile lib\crypto\krb\rand2key\Makefile \
- lib\crypto\krb\raw\Makefile lib\crypto\krb\old\Makefile \
- lib\crypto\@CRYPTO_IMPL@\sha1\Makefile lib\crypto\@CRYPTO_IMPL@\arcfour\Makefile \
- lib\crypto\@CRYPTO_IMPL@\md4\Makefile lib\crypto\@CRYPTO_IMPL@\md5\Makefile \
- lib\crypto\krb\prng\Makefile lib\crypto\@CRYPTO_IMPL@\aes\Makefile \
- lib\crypto\crypto_tests \
+ lib\Makefile lib\crypto\Makefile lib\crypto\krb\Makefile \
+ lib\crypto\krb\crc32\Makefile lib\crypto\krb\rand2key\Makefile \
+ lib\crypto\krb\prng\Makefile lib\crypto\krb\prng\yarrow\Makefile \
+ lib\crypto\krb\prf\Makefile lib\crypto\krb\checksum\Makefile \
+ lib\crypto\krb\old\Makefile lib\crypto\krb\raw\Makefile \
+ lib\crypto\krb\arcfour\Makefile lib\crypto\krb\dk\Makefile \
+ lib\crypto\builtin\Makefile lib\crypto\builtin\aes\Makefile \
+ lib\crypto\builtin\enc_provider\Makefile \
+ lib\crypto\builtin\des\Makefile lib\crypto\builtin\md5\Makefile \
+ lib\crypto\builtin\camellia\Makefile lib\crypto\builtin\md4\Makefile \
+ lib\crypto\builtin\hash_provider\Makefile \
+ lib\crypto\builtin\sha2\Makefile lib\crypto\builtin\sha1\Makefile \
+ lib\crypto\crypto_tests\Makefile \
lib\gssapi\Makefile lib\gssapi\generic\Makefile \
lib\gssapi\krb5\Makefile lib\gssapi\mechglue\Makefile \
lib\gssapi\spnego\Makefile \
@@ -232,9 +230,9 @@ WINMAKEFILES=Makefile \
##DOS##Makefile: Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##appl\gss-sample\Makefile: appl\gss-sample\Makefile.in $(MKFDEP)
+##DOS##appl\Makefile: appl\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##appl\gssftp\ftp\Makefile: appl\gssftp\ftp\Makefile.in $(MKFDEP)
+##DOS##appl\gss-sample\Makefile: appl\gss-sample\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
##DOS##ccapi\Makefile: ccapi\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
@@ -268,35 +266,49 @@ WINMAKEFILES=Makefile \
##DOS## $(WCONFIG) config < $@.in > $@
##DOS##lib\crypto\krb\crc32\Makefile: lib\crypto\krb\crc32\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\des\Makefile: lib\crypto\@CRYPTO_IMPL@\des\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\rand2key\Makefile: lib\crypto\krb\rand2key\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\krb\dk\Makefile: lib\crypto\krb\dk\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\prng\fortuna\Makefile: lib\crypto\krb\prng\fortuna\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\enc_provider\Makefile: lib\crypto\@CRYPTO_IMPL@\enc_provider\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\prng\yarrow\Makefile: lib\crypto\krb\prng\yarrow\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\hash_provider\Makefile: lib\crypto\@CRYPTO_IMPL@\hash_provider\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\prng\Makefile: lib\crypto\krb\prng\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\krb\keyhash_provider\Makefile: lib\crypto\krb\keyhash_provider\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\prf\Makefile: lib\crypto\krb\prf\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\sha1\Makefile: lib\crypto\@CRYPTO_IMPL@\sha1\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\checksum\Makefile: lib\crypto\krb\checksum\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\arcfour\Makefile: lib\crypto\@CRYPTO_IMPL@\arcfour\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\Makefile: lib\crypto\krb\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\md4\Makefile: lib\crypto\@CRYPTO_IMPL@\md4\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\old\Makefile: lib\crypto\krb\old\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\md5\Makefile: lib\crypto\md5\@CRYPTO_IMPL@\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\raw\Makefile: lib\crypto\krb\raw\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\krb\yarrow\Makefile: lib\crypto\krb\yarrow\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\arcfour\Makefile: lib\crypto\krb\arcfour\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\aes\Makefile: lib\crypto\@CRYPTO_IMPL@\aes\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\krb\dk\Makefile: lib\crypto\krb\dk\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\krb\old\Makefile: lib\crypto\krb\old\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\builtin\aes\Makefile: lib\crypto\builtin\aes\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\krb\raw\Makefile: lib\crypto\krb\raw\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\builtin\enc_provider\Makefile: lib\crypto\builtin\enc_provider\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\krb\Makefile: lib\crypto\krb\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\builtin\des\Makefile: lib\crypto\builtin\des\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\builtin\md5\Makefile: lib\crypto\builtin\md5\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\builtin\camellia\Makefile: lib\crypto\builtin\camellia\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\builtin\md4\Makefile: lib\crypto\builtin\md4\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\builtin\hash_provider\Makefile: lib\crypto\builtin\hash_provider\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
-##DOS##lib\crypto\@CRYPTO_IMPL@\Makefile: lib\crypto\@CRYPTO_IMPL@\Makefile.in $(MKFDEP)
+##DOS##lib\crypto\builtin\sha2\Makefile: lib\crypto\builtin\sha2\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\builtin\sha1\Makefile: lib\crypto\builtin\sha1\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\builtin\Makefile: lib\crypto\builtin\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##lib\crypto\crypto_tests\Makefile: lib\crypto\crypto_tests\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
##DOS##lib\gssapi\Makefile: lib\gssapi\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
@@ -373,13 +385,10 @@ clean-windows:: Makefile-windows
@echo Making clean in clients
cd ..\clients
$(MAKE) -$(MFLAGS) clean
- @echo Making clean in appl\gss-sample
- cd ..\appl\gss-sample
- $(MAKE) -$(MFLAGS) clean
- @echo Making clean in appl\gssftp\ftp
- cd ..\..\appl\gssftp\ftp
+ @echo Making clean in appl
+ cd ..\appl
$(MAKE) -$(MFLAGS) clean
- cd ..\..\..
+ cd ..
@echo Making clean in root
#
@@ -393,41 +402,43 @@ ren2long:
# Macintosh sites from the source tree on Unix.
#
ZIP=zip
-FILES= ./* \
+FILES= ./* appl/* appl/gss-sample/* \
clients/* clients/kdestroy/* clients/kinit/* clients/klist/* \
- clients/kpasswd/* clients/kcpytkt/* clients/kdeltkt/* \
- config/* include/* include/kerberosIV/* \
- include/krb5/* include/krb5/stock/* include/sys/* lib/* \
- lib/crypto/* lib/crypto/krb/crc32/* lib/crypto/@CRYPTO_IMPL@/des/* lib/crypto/krb/dk/* \
- lib/crypto/@CRYPTO_IMPL@/enc_provider/* lib/crypto/@CRYPTO_IMPL@/hash_provider/* \
- lib/crypto/krb/keyhash_provider/* \
- lib/crypto/krb/prf/* lib/crypto/krb/rand2key/* \
- lib/crypto/krb/old/* lib/crypto/krb/raw/* \
- lib/crypto/@CRYPTO_IMPL@/sha1/* lib/crypto/@CRYPTO_IMPL@/arcfour/* \
- lib/crypto/@CRYPTO_IMPL@/md4/* \
- lib/crypto/@CRYPTO_IMPL@/md5/* lib/crypto/krb/prng/* \
- lib/crypto/krb/prng/@PRNG_ALG@/* \
- lib/crypto/@CRYPTO_IMPL@/* lib/crypto/krb/* lib/crypto/crypto_tests \
+ clients/kpasswd/* clients/kvno/* clients/kcpytkt/* clients/kdeltkt/* \
+ config/* include/* \
+ include/krb5/* lib/* lib/crypto/* lib/crypto/krb/* \
+ lib/crypto/krb/crc32/* lib/crypto/krb/rand2key/* \
+ lib/crypto/krb/prng/fortuna/* lib/crypto/krb/prng/nss/* \
+ lib/crypto/krb/prng/yarrow/* lib/crypto/krb/prng/* \
+ lib/crypto/krb/prf/* lib/crypto/krb/checksum/* lib/crypto/krb/old/* \
+ lib/crypto/krb/raw/* lib/crypto/krb/arcfour/* lib/crypto/krb/dk/* \
+ lib/crypto/builtin/aes/* lib/crypto/builtin/enc_provider/* \
+ lib/crypto/builtin/des/* lib/crypto/builtin/md5/* \
+ lib/crypto/builtin/camellia/* lib/crypto/builtin/md4/* \
+ lib/crypto/builtin/hash_provider/* lib/crypto/builtin/sha2/* \
+ lib/crypto/builtin/sha1/* lib/crypto/builtin/* \
+ lib/crypto/crypto_tests/* \
lib/gssapi/* lib/gssapi/generic/* lib/gssapi/krb5/* \
lib/gssapi/mechglue/* lib/gssapi/spnego/* \
lib/krb5/* lib/krb5/asn.1/* lib/krb5/krb/* \
lib/krb5/ccache/* lib/krb5/ccache/ccapi/* \
lib/krb5/error_tables/* \
- lib/krb5/keytab/* lib/krb5/keytab/file/* lib/krb5/keytab/srvtab/* \
- lib/krb5/os/* lib/krb5/posix/* lib/krb5/rcache/* \
- util/* util/et/* util/profile/*
+ lib/krb5/keytab/* lib/krb5/os/* lib/krb5/posix/* lib/krb5/rcache/* \
+ lib/krb5/unicode/* lib/krb5/unicode/utbm/* lib/krb5/unicode/ure/* \
+ lib/krb5/unicode/ucdata/* \
+ util/* util/et/* util/profile/* util/support/*
WINFILES= \
- ccapi/common/* ccapi/common/win/* ccapi/common/win/OldCC/* \
+ ccapi/* ccapi/common/* ccapi/common/win/* ccapi/common/win/OldCC/* \
ccapi/lib/* ccapi/lib/win/* ccapi/lib/win/OldCC/* \
ccapi/server/* ccapi/server/win/* \
- ccapi\test\* \
+ ccapi/test/* \
util/windows/* windows/* windows/lib/* windows/cns/* \
windows/wintel/* windows/gss/* windows/gina/* windows/ms2mit/* \
windows/kfwlogon/*
WINBINARYFILES= windows/*/*.ico windows/*/*.doc windows/*/*.hlp \
- windows/*/*.hpj windows/lib/*.lib
+ windows/*/*.hpj
#
# Part of building the PC release has to be done on Unix. This includes
@@ -456,7 +467,7 @@ ETOUT = \
$(GK)gssapi_err_krb5.h $(GK)gssapi_err_krb5.c \
$(CCL)ccapi_err.h $(CCL)ccapi_err.c
-HOUT = $(INC)krb5\krb5.h $(GG)gssapi.h $(PR)profile.h
+HOUT = $(INC)krb5/krb5.h $(GG)gssapi.h $(PR)profile.h
CLEANUP= Makefile $(ETOUT) $(HOUT) \
include/profile.h include/osconf.h \
@@ -549,10 +560,10 @@ $(CE)test1.c: $(AC) $(CE)test1.et
$(CE)test2.c: $(AC) $(CE)test2.et
$(AWK) -f $(AC) outfile=$@ $(CE)test2.et
-KRBHDEP = $(INC)krb5\krb5.hin $(INC)krb5_err.h $(INC)k5e1_err.h \
+KRBHDEP = $(INC)krb5/krb5.hin $(INC)krb5_err.h $(INC)k5e1_err.h \
$(INC)kdb5_err.h $(INC)kv5m_err.h $(INC)krb524_err.h $(INC)asn1_err.h
-$(INC)krb5\krb5.h: $(KRBHDEP)
+$(INC)krb5/krb5.h: $(KRBHDEP)
rm -f $@
cat $(KRBHDEP) > $@
$(PR)profile.h: $(PR)profile.hin $(PR)prof_err.h
@@ -584,6 +595,8 @@ distclean-windows:
config\rm.bat $(KBINDIR)\*.dll $(KBINDIR)\*.exe
@if exist $(KBINDIR)\nul rmdir $(KBINDIR)
+# Avoid using $(CP) here because the nul+ hack breaks implicit
+# destination filenames.
install-windows::
@if "$(KRB_INSTALL_DIR)"=="" @echo KRB_INSTALL_DIR is not defined! Please define it.
@if "$(KRB_INSTALL_DIR)"=="" @dir /b \nul\nul
@@ -594,31 +607,29 @@ install-windows::
@if not exist "$(KRB_INSTALL_DIR)\include\gssapi\$(NULL)" @mkdir "$(KRB_INSTALL_DIR)\include\gssapi"
@if not exist "$(KRB_INSTALL_DIR)\lib\$(NULL)" @mkdir "$(KRB_INSTALL_DIR)\lib"
@if not exist "$(KRB_INSTALL_DIR)\bin\$(NULL)" @mkdir "$(KRB_INSTALL_DIR)\bin"
- $(CP) include\krb5.h "$(KRB_INSTALL_DIR)\include\."
- $(CP) include\krb5\krb5.h "$(KRB_INSTALL_DIR)\include\krb5\."
- $(CP) include\win-mac.h "$(KRB_INSTALL_DIR)\include\."
- $(CP) include\profile.h "$(KRB_INSTALL_DIR)\include\."
- $(CP) include\com_err.h "$(KRB_INSTALL_DIR)\include\."
- $(CP) include\gssapi\gssapi.h "$(KRB_INSTALL_DIR)\include\gssapi\."
- $(CP) include\gssapi\gssapi_krb5.h "$(KRB_INSTALL_DIR)\include\gssapi\."
- $(CP) lib\$(OUTPRE)*.lib "$(KRB_INSTALL_DIR)\lib\."
- $(CP) lib\$(OUTPRE)*.dll "$(KRB_INSTALL_DIR)\bin\."
- $(CP) windows\cns\$(OUTPRE)krb5.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) windows\wintel\$(OUTPRE)telnet.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) windows\gss\$(OUTPRE)gss.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) appl\gss-sample\$(OUTPRE)gss-server.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) appl\gss-sample\$(OUTPRE)gss-client.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) windows\ms2mit\$(OUTPRE)ms2mit.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) appl\gssftp\ftp\$(OUTPRE)ftp.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) ccapi\lib\win\$(OUTPRE)ccapi.dll "$(KRB_INSTALL_DIR)\bin\."
- $(CP) ccapi\server\win\$(OUTPRE)ccapiserver.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\kvno\$(OUTPRE)kvno.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\klist\$(OUTPRE)klist.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\kinit\$(OUTPRE)kinit.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\kdestroy\$(OUTPRE)kdestroy.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\kcpytkt\$(OUTPRE)kcpytkt.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\kdeltkt\$(OUTPRE)kdeltkt.exe "$(KRB_INSTALL_DIR)\bin\."
- $(CP) clients\kpasswd\$(OUTPRE)kpasswd.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy include\krb5.h "$(KRB_INSTALL_DIR)\include\."
+ copy include\krb5\krb5.h "$(KRB_INSTALL_DIR)\include\krb5\."
+ copy include\win-mac.h "$(KRB_INSTALL_DIR)\include\."
+ copy include\profile.h "$(KRB_INSTALL_DIR)\include\."
+ copy include\com_err.h "$(KRB_INSTALL_DIR)\include\."
+ copy include\gssapi\gssapi.h "$(KRB_INSTALL_DIR)\include\gssapi\."
+ copy include\gssapi\gssapi_krb5.h "$(KRB_INSTALL_DIR)\include\gssapi\."
+ copy lib\$(OUTPRE)*.lib "$(KRB_INSTALL_DIR)\lib\."
+ copy lib\$(OUTPRE)*.dll "$(KRB_INSTALL_DIR)\bin\."
+ copy windows\cns\$(OUTPRE)krb5.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy windows\gss\$(OUTPRE)gss.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy appl\gss-sample\$(OUTPRE)gss-server.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy appl\gss-sample\$(OUTPRE)gss-client.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy windows\ms2mit\$(OUTPRE)ms2mit.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy ccapi\lib\win\srctmp\$(OUTPRE)ccapi.dll "$(KRB_INSTALL_DIR)\bin\."
+ copy ccapi\server\win\srctmp\$(OUTPRE)ccapiserver.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\kvno\$(OUTPRE)kvno.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\klist\$(OUTPRE)klist.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\kinit\$(OUTPRE)kinit.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\kdestroy\$(OUTPRE)kdestroy.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\kcpytkt\$(OUTPRE)kcpytkt.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\kdeltkt\$(OUTPRE)kdeltkt.exe "$(KRB_INSTALL_DIR)\bin\."
+ copy clients\kpasswd\$(OUTPRE)kpasswd.exe "$(KRB_INSTALL_DIR)\bin\."
install-unix::
$(INSTALL_SCRIPT) krb5-config \
diff --git a/src/appl/Makefile.in b/src/appl/Makefile.in
index 57eafd2e3c..015961110d 100644
--- a/src/appl/Makefile.in
+++ b/src/appl/Makefile.in
@@ -3,4 +3,14 @@ BUILDTOP=$(REL)..
SUBDIRS= sample simple user_user gss-sample
+all-windows::
+ @echo Making in gss-sample
+ cd gss-sample
+ $(MAKE) -$(MFLAGS)
+ cd ..
+clean-windows::
+ @echo Making clean in lib\crypto
+ cd gss-sample
+ $(MAKE) -$(MFLAGS) clean
+ cd ..
diff --git a/src/ccapi/lib/ccapi_context.c b/src/ccapi/lib/ccapi_context.c
index da8aa59f08..7715139ff4 100644
--- a/src/ccapi/lib/ccapi_context.c
+++ b/src/ccapi/lib/ccapi_context.c
@@ -114,7 +114,6 @@ static void cci_thread_fini (void)
remove_error_table(&et_CAPI_error_table);
cci_context_change_time_thread_fini ();
- cci_ipc_thread_fini ();
}
diff --git a/src/ccapi/lib/ccapi_ipc.c b/src/ccapi/lib/ccapi_ipc.c
index 54b5faa867..0f14df80af 100644
--- a/src/ccapi/lib/ccapi_ipc.c
+++ b/src/ccapi/lib/ccapi_ipc.c
@@ -36,13 +36,6 @@ cc_int32 cci_ipc_thread_init (void)
/* ------------------------------------------------------------------------ */
-void cci_ipc_thread_fini (void)
-{
- cci_os_ipc_thread_fini ();
-}
-
-/* ------------------------------------------------------------------------ */
-
static cc_int32 _cci_ipc_send (enum cci_msg_id_t in_request_name,
cc_int32 in_launch_server,
cci_identifier_t in_identifier,
diff --git a/src/ccapi/lib/ccapi_ipc.h b/src/ccapi/lib/ccapi_ipc.h
index 5b7d5d3745..03b890b1fc 100644
--- a/src/ccapi/lib/ccapi_ipc.h
+++ b/src/ccapi/lib/ccapi_ipc.h
@@ -30,7 +30,6 @@
#include "cci_common.h"
cc_int32 cci_ipc_thread_init (void);
-void cci_ipc_thread_fini (void);
cc_int32 cci_ipc_send (enum cci_msg_id_t in_request_name,
cci_identifier_t in_identifier,
diff --git a/src/ccapi/lib/ccapi_os_ipc.h b/src/ccapi/lib/ccapi_os_ipc.h
index b5e0405997..eabea254e2 100644
--- a/src/ccapi/lib/ccapi_os_ipc.h
+++ b/src/ccapi/lib/ccapi_os_ipc.h
@@ -30,7 +30,6 @@
#include "cci_common.h"
cc_int32 cci_os_ipc_thread_init (void);
-void cci_os_ipc_thread_fini (void);
cc_int32 cci_os_ipc (cc_int32 in_launch_server,
k5_ipc_stream in_request_stream,
diff --git a/src/ccapi/lib/mac/ccapi_os_ipc.c b/src/ccapi/lib/mac/ccapi_os_ipc.c
index e0a81d8786..a25297e311 100644
--- a/src/ccapi/lib/mac/ccapi_os_ipc.c
+++ b/src/ccapi/lib/mac/ccapi_os_ipc.c
@@ -40,14 +40,6 @@ cc_int32 cci_os_ipc_thread_init (void)
/* ------------------------------------------------------------------------ */
-void cci_os_ipc_thread_fini (void)
-{
- /* k5_ipc_send_request handles all thread data for us */
- return;
-}
-
-/* ------------------------------------------------------------------------ */
-
cc_int32 cci_os_ipc (cc_int32 in_launch_server,
k5_ipc_stream in_request_stream,
k5_ipc_stream *out_reply_stream)
diff --git a/src/ccapi/lib/win/Makefile.in b/src/ccapi/lib/win/Makefile.in
index d5ca7a55be..7ca749a189 100644
--- a/src/ccapi/lib/win/Makefile.in
+++ b/src/ccapi/lib/win/Makefile.in
@@ -116,4 +116,4 @@ clean::
if exist $(OUTPRE)*.map del $(OUTPRE)*.map
if exist $(OUTPRE)*.pdb del $(OUTPRE)*.pdb
if exist *.err del *.err
- if exist $(SRCTMP) rm -rf $(SRCTMP)
+ if exist $(SRCTMP) rmdir /s /q $(SRCTMP)
diff --git a/src/ccapi/lib/win/ccapi_os_ipc.cxx b/src/ccapi/lib/win/ccapi_os_ipc.cxx
index b6fc70155c..062558cb1f 100644
--- a/src/ccapi/lib/win/ccapi_os_ipc.cxx
+++ b/src/ccapi/lib/win/ccapi_os_ipc.cxx
@@ -120,13 +120,6 @@ extern "C" cc_int32 cci_os_ipc_thread_init (void) {
/* ------------------------------------------------------------------------ */
-void cci_os_ipc_thread_fini (void)
-{
-}
-
-
-/* ------------------------------------------------------------------------ */
-
cc_int32 cci_os_ipc (cc_int32 in_launch_server,
k5_ipc_stream in_request_stream,
k5_ipc_stream* out_reply_stream) {
diff --git a/src/ccapi/server/win/Makefile.in b/src/ccapi/server/win/Makefile.in
index 3d8da6d223..36909b85eb 100644
--- a/src/ccapi/server/win/Makefile.in
+++ b/src/ccapi/server/win/Makefile.in
@@ -1,109 +1,109 @@
-# makefile: Constructs the Kerberos for Windows CCAPI server.
-
-#BUILDTOP is krb5/src and is relative to krb5/src/ccapi/server/win, for making Makefile.
-BUILDTOP=..\..\..\
-CCAPI = $(BUILDTOP)\CCAPI
-CO = $(CCAPI)\common
-COWIN = $(CCAPI)\common\win
-CCUTIL = $(CCAPI)\common\win\OldCC
-SRVDIR = $(CCAPI)\server
-SRVWIN = $(SRVDIR)\win
-POSIX = $(BUILDTOP)\lib\krb5\posix
-SRCTMP = $(SRVWIN)\srctmp
-
-!if defined(KRB5_KFW_COMPILE)
-KFWINC= /I$(BUILDTOP)\..\..\krbcc\include
-!endif
-
-OBJS = $(OUTPRE)cci_array_internal.$(OBJEXT) \
- $(OUTPRE)cci_cred_union.$(OBJEXT) \
- $(OUTPRE)cci_debugging.$(OBJEXT) \
- $(OUTPRE)cci_identifier.$(OBJEXT) \
- $(OUTPRE)cci_message.$(OBJEXT) \
- $(OUTPRE)cci_os_debugging.$(OBJEXT) \
- $(OUTPRE)cci_os_identifier.$(OBJEXT) \
- $(OUTPRE)ccs_array.$(OBJEXT) \
- $(OUTPRE)ccs_cache_collection.$(OBJEXT) \
- $(OUTPRE)ccs_callback.$(OBJEXT) \
- $(OUTPRE)ccs_ccache.$(OBJEXT) \
- $(OUTPRE)ccs_ccache_iterator.$(OBJEXT) \
- $(OUTPRE)ccs_client.$(OBJEXT) \
- $(OUTPRE)ccs_credentials.$(OBJEXT) \
- $(OUTPRE)ccs_credentials_iterator.$(OBJEXT) \
- $(OUTPRE)ccs_list.$(OBJEXT) \
- $(OUTPRE)ccs_list_internal.$(OBJEXT) \
- $(OUTPRE)ccs_lock.$(OBJEXT) \
- $(OUTPRE)ccs_lock_state.$(OBJEXT) \
- $(OUTPRE)ccs_os_pipe.$(OBJEXT) \
- $(OUTPRE)ccs_os_server.$(OBJEXT) \
- $(OUTPRE)ccs_pipe.$(OBJEXT) \
- $(OUTPRE)ccs_reply_c.$(OBJEXT) \
- $(OUTPRE)ccs_request_proc.$(OBJEXT) \
- $(OUTPRE)ccs_server.$(OBJEXT) \
- $(OUTPRE)ccs_win_pipe.$(OBJEXT) \
- $(OUTPRE)ccs_request_s.$(OBJEXT) \
- $(OUTPRE)ccutils.$(OBJEXT) \
- $(OUTPRE)init.$(OBJEXT) \
- $(OUTPRE)opts.$(OBJEXT) \
- $(OUTPRE)secure.$(OBJEXT) \
- $(OUTPRE)tls.$(OBJEXT) \
- $(OUTPRE)util.$(OBJEXT) \
- $(OUTPRE)win-utils.$(OBJEXT) \
- $(OUTPRE)WorkItem.$(OBJEXT) \
- $(OUTPRE)WorkQueue.$(OBJEXT)
-
-##### Options
-
-# Because all the sources are pulled together into the temp directory SRCTMP,
-# the only includes we need are to directories outside of ccapi.
-LOCALINCLUDES = /I..\$(BUILDTOP) /I..\$(BUILDTOP)\include /I..\$(BUILDTOP)\include\krb5 $(KFWINC) \
- -I..\$(BUILDTOP)\util\et /I.
-MIDLI = /I..\$(BUILDTOP)\include
-
-CPPFLAGS = $(CPPFLAGS) /EHsc -D_CRTAPI1=_cdecl -D_CRTAPI2=_cdecl -DWINVER=0x0501 \
--D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS
-
-##### Linker
-LINK = link
-LIBS = ..\$(SLIB) rpcrt4.lib advapi32.lib ws2_32.lib user32.lib
-LFLAGS = /nologo $(LOPTS)
-
-
-all:: Makefile copysrc midl $(OUTPRE)ccapiserver.exe finish
-
-ccs_request.h ccs_request_c.c ccs_request_s.c : ccs_request.idl ccs_request.acf
- midl $(MIDL_OPTIMIZATION) $(MIDLI) -oldnames -cpp_cmd $(CC) -cpp_opt "-E" \
- ccs_request.idl
-
-ccs_reply.h ccs_reply_c.c ccs_reply_s.c : ccs_reply.idl ccs_reply.acf
- midl $(MIDL_OPTIMIZATION) $(MIDLI) -oldnames -cpp_cmd $(CC) -cpp_opt "-E" \
- ccs_reply.idl
-
-copysrc :
- echo "Copying all sources needed to build ccapiserver.exe to $(SRCTMP)"
- if NOT exist $(SRCTMP)\nul mkdir $(SRCTMP)
- xcopy /D/Y $(CO)\*.* $(SRCTMP)
- xcopy /D/Y $(COWIN)\*.* $(SRCTMP)
- xcopy /D/Y $(CCUTIL)\*.* $(SRCTMP)
- xcopy /D/Y $(SRVDIR)\*.* $(SRCTMP)
- xcopy /D/Y $(SRVWIN)\*.* $(SRCTMP)
- cd $(SRCTMP)
- if NOT exist $(OUTPRE)\nul mkdir $(OUTPRE)
-
-midl : ccs_request.h ccs_reply.h
-
-$(OUTPRE)ccapiserver.exe: $(OBJS)
- $(LINK) $(LFLAGS) /map:$*.map /out:$@ $(OBJS) $(LIBS) $(conlibsdll) $(conflags)
-
-finish :
- @echo "Finished building ccapiserver.exe"
- cd
-
-clean::
- if exist $(OUTPRE)*.exe del $(OUTPRE)*.exe
- if exist $(OUTPRE)*.obj del $(OUTPRE)*.obj
- if exist $(OUTPRE)*.res del $(OUTPRE)*.res
- if exist $(OUTPRE)*.map del $(OUTPRE)*.map
- if exist $(OUTPRE)*.pdb del $(OUTPRE)*.pdb
- if exist *.err del *.err
- if exist $(SRCTMP) rm -rf $(SRCTMP)
+# makefile: Constructs the Kerberos for Windows CCAPI server.
+
+#BUILDTOP is krb5/src and is relative to krb5/src/ccapi/server/win, for making Makefile.
+BUILDTOP=..\..\..
+CCAPI = $(BUILDTOP)\CCAPI
+CO = $(CCAPI)\common
+COWIN = $(CCAPI)\common\win
+CCUTIL = $(CCAPI)\common\win\OldCC
+SRVDIR = $(CCAPI)\server
+SRVWIN = $(SRVDIR)\win
+POSIX = $(BUILDTOP)\lib\krb5\posix
+SRCTMP = $(SRVWIN)\srctmp
+
+!if defined(KRB5_KFW_COMPILE)
+KFWINC= /I$(BUILDTOP)\..\..\krbcc\include
+!endif
+
+OBJS = $(OUTPRE)cci_array_internal.$(OBJEXT) \
+ $(OUTPRE)cci_cred_union.$(OBJEXT) \
+ $(OUTPRE)cci_debugging.$(OBJEXT) \
+ $(OUTPRE)cci_identifier.$(OBJEXT) \
+ $(OUTPRE)cci_message.$(OBJEXT) \
+ $(OUTPRE)cci_os_debugging.$(OBJEXT) \
+ $(OUTPRE)cci_os_identifier.$(OBJEXT) \
+ $(OUTPRE)ccs_array.$(OBJEXT) \
+ $(OUTPRE)ccs_cache_collection.$(OBJEXT) \
+ $(OUTPRE)ccs_callback.$(OBJEXT) \
+ $(OUTPRE)ccs_ccache.$(OBJEXT) \
+ $(OUTPRE)ccs_ccache_iterator.$(OBJEXT) \
+ $(OUTPRE)ccs_client.$(OBJEXT) \
+ $(OUTPRE)ccs_credentials.$(OBJEXT) \
+ $(OUTPRE)ccs_credentials_iterator.$(OBJEXT) \
+ $(OUTPRE)ccs_list.$(OBJEXT) \
+ $(OUTPRE)ccs_list_internal.$(OBJEXT) \
+ $(OUTPRE)ccs_lock.$(OBJEXT) \
+ $(OUTPRE)ccs_lock_state.$(OBJEXT) \
+ $(OUTPRE)ccs_os_pipe.$(OBJEXT) \
+ $(OUTPRE)ccs_os_server.$(OBJEXT) \
+ $(OUTPRE)ccs_pipe.$(OBJEXT) \
+ $(OUTPRE)ccs_reply_c.$(OBJEXT) \
+ $(OUTPRE)ccs_request_proc.$(OBJEXT) \
+ $(OUTPRE)ccs_server.$(OBJEXT) \
+ $(OUTPRE)ccs_win_pipe.$(OBJEXT) \
+ $(OUTPRE)ccs_request_s.$(OBJEXT) \
+ $(OUTPRE)ccutils.$(OBJEXT) \
+ $(OUTPRE)init.$(OBJEXT) \
+ $(OUTPRE)opts.$(OBJEXT) \
+ $(OUTPRE)secure.$(OBJEXT) \
+ $(OUTPRE)tls.$(OBJEXT) \
+ $(OUTPRE)util.$(OBJEXT) \
+ $(OUTPRE)win-utils.$(OBJEXT) \
+ $(OUTPRE)WorkItem.$(OBJEXT) \
+ $(OUTPRE)WorkQueue.$(OBJEXT)
+
+##### Options
+
+# Because all the sources are pulled together into the temp directory SRCTMP,
+# the only includes we need are to directories outside of ccapi.
+LOCALINCLUDES = /I..\$(BUILDTOP) /I..\$(BUILDTOP)\include /I..\$(BUILDTOP)\include\krb5 $(KFWINC) \
+ -I..\$(BUILDTOP)\util\et /I.
+MIDLI = /I..\$(BUILDTOP)\include
+
+CPPFLAGS = $(CPPFLAGS) /EHsc -D_CRTAPI1=_cdecl -D_CRTAPI2=_cdecl -DWINVER=0x0501 \
+-D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS
+
+##### Linker
+LINK = link
+LIBS = ..\$(SLIB) rpcrt4.lib advapi32.lib ws2_32.lib user32.lib
+LFLAGS = /nologo $(LOPTS)
+
+
+all:: Makefile copysrc midl $(OUTPRE)ccapiserver.exe finish
+
+ccs_request.h ccs_request_c.c ccs_request_s.c : ccs_request.idl ccs_request.acf
+ midl $(MIDL_OPTIMIZATION) $(MIDLI) -oldnames -cpp_cmd $(CC) -cpp_opt "-E" \
+ ccs_request.idl
+
+ccs_reply.h ccs_reply_c.c ccs_reply_s.c : ccs_reply.idl ccs_reply.acf
+ midl $(MIDL_OPTIMIZATION) $(MIDLI) -oldnames -cpp_cmd $(CC) -cpp_opt "-E" \
+ ccs_reply.idl
+
+copysrc :
+ echo "Copying all sources needed to build ccapiserver.exe to $(SRCTMP)"
+ if NOT exist $(SRCTMP)\nul mkdir $(SRCTMP)
+ xcopy /D/Y $(CO)\*.* $(SRCTMP)
+ xcopy /D/Y $(COWIN)\*.* $(SRCTMP)
+ xcopy /D/Y $(CCUTIL)\*.* $(SRCTMP)
+ xcopy /D/Y $(SRVDIR)\*.* $(SRCTMP)
+ xcopy /D/Y $(SRVWIN)\*.* $(SRCTMP)
+ cd $(SRCTMP)
+ if NOT exist $(OUTPRE)\nul mkdir $(OUTPRE)
+
+midl : ccs_request.h ccs_reply.h
+
+$(OUTPRE)ccapiserver.exe: $(OBJS)
+ $(LINK) $(LFLAGS) /map:$*.map /out:$@ $(OBJS) $(LIBS) $(conlibsdll) $(conflags)
+
+finish :
+ @echo "Finished building ccapiserver.exe"
+ cd
+
+clean::
+ if exist $(OUTPRE)*.exe del $(OUTPRE)*.exe
+ if exist $(OUTPRE)*.obj del $(OUTPRE)*.obj
+ if exist $(OUTPRE)*.res del $(OUTPRE)*.res
+ if exist $(OUTPRE)*.map del $(OUTPRE)*.map
+ if exist $(OUTPRE)*.pdb del $(OUTPRE)*.pdb
+ if exist *.err del *.err
+ if exist $(SRCTMP) rm -rf $(SRCTMP)
diff --git a/src/ccapi/server/win/Server.sln b/src/ccapi/server/win/Server.sln
index 64cc7f08c9..ea1bd455f6 100644
--- a/src/ccapi/server/win/Server.sln
+++ b/src/ccapi/server/win/Server.sln
@@ -1,20 +1,20 @@
-
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server", "Server.vcproj", "{114DCD80-6D13-4AAA-9510-B51CE6D94C1C}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Debug|Win32.ActiveCfg = Debug|Win32
- {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Debug|Win32.Build.0 = Debug|Win32
- {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Release|Win32.ActiveCfg = Release|Win32
- {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Server", "Server.vcproj", "{114DCD80-6D13-4AAA-9510-B51CE6D94C1C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Debug|Win32.Build.0 = Debug|Win32
+ {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Release|Win32.ActiveCfg = Release|Win32
+ {114DCD80-6D13-4AAA-9510-B51CE6D94C1C}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/ccapi/server/win/Server.vcproj b/src/ccapi/server/win/Server.vcproj
index 39db361d8e..626c7a3c78 100644
--- a/src/ccapi/server/win/Server.vcproj
+++ b/src/ccapi/server/win/Server.vcproj
@@ -1,227 +1,227 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8.00"
- Name="Server"
- ProjectGUID="{114DCD80-6D13-4AAA-9510-B51CE6D94C1C}"
- RootNamespace="Server"
- Keyword="MakeFileProj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="nmake"
- ReBuildCommandLine="nmake"
- CleanCommandLine="nmake clean"
- Output=""
- PreprocessorDefinitions="WIN32;_DEBUG;"
- IncludeSearchPath=""
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="nmake"
- ReBuildCommandLine="nmake"
- CleanCommandLine="nmake clean"
- Output=""
- PreprocessorDefinitions="WIN32;NDEBUG;"
- IncludeSearchPath=""
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath="..\..\common\cci_debugging.h"
- >
- </File>
- <File
- RelativePath="..\..\common\cci_os_debugging.h"
- >
- </File>
- <File
- RelativePath="..\..\common\cci_stream.h"
- >
- </File>
- <File
- RelativePath=".\ccs_reply.h"
- >
- </File>
- <File
- RelativePath=".\ccs_request.h"
- >
- </File>
- <File
- RelativePath="..\ccs_server.h"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\ccutils.h"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\init.hxx"
- >
- </File>
- <File
- RelativePath="..\..\..\include\k5-platform.h"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\secure.hxx"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\util.h"
- >
- </File>
- <File
- RelativePath="..\..\common\win\win-utils.h"
- >
- </File>
- <File
- RelativePath=".\workitem.h"
- >
- </File>
- <File
- RelativePath=".\WorkQueue.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath="..\..\common\cci_debugging.c"
- >
- </File>
- <File
- RelativePath="..\..\common\win\cci_os_debugging.c"
- >
- </File>
- <File
- RelativePath="..\..\common\cci_stream.c"
- >
- </File>
- <File
- RelativePath="..\ccs_lock.c"
- >
- </File>
- <File
- RelativePath=".\ccs_os_pipe.c"
- >
- </File>
- <File
- RelativePath=".\ccs_os_server.cpp"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccs_reply.Idl"
- >
- </File>
- <File
- RelativePath=".\ccs_reply_c.c"
- >
- </File>
- <File
- RelativePath=".\ccs_reply_s.c"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccs_request.idl"
- >
- </File>
- <File
- RelativePath=".\ccs_request_c.c"
- >
- </File>
- <File
- RelativePath=".\ccs_request_proc.c"
- >
- </File>
- <File
- RelativePath=".\ccs_request_s.cpp"
- >
- </File>
- <File
- RelativePath="..\ccs_server.c"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\ccutils.c"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\init.cxx"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\secure.cxx"
- >
- </File>
- <File
- RelativePath="..\..\common\win\ccutil\util.cxx"
- >
- </File>
- <File
- RelativePath="..\..\common\win\win-utils.c"
- >
- </File>
- <File
- RelativePath=".\WorkItem.cpp"
- >
- </File>
- <File
- RelativePath=".\WorkQueue.cpp"
- >
- </File>
- </Filter>
- <File
- RelativePath="..\..\common\win\ccs_reply.Acf"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="Server"
+ ProjectGUID="{114DCD80-6D13-4AAA-9510-B51CE6D94C1C}"
+ RootNamespace="Server"
+ Keyword="MakeFileProj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="0"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="nmake"
+ ReBuildCommandLine="nmake"
+ CleanCommandLine="nmake clean"
+ Output=""
+ PreprocessorDefinitions="WIN32;_DEBUG;"
+ IncludeSearchPath=""
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="0"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="nmake"
+ ReBuildCommandLine="nmake"
+ CleanCommandLine="nmake clean"
+ Output=""
+ PreprocessorDefinitions="WIN32;NDEBUG;"
+ IncludeSearchPath=""
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\common\cci_debugging.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\cci_os_debugging.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\cci_stream.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_reply.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_request.h"
+ >
+ </File>
+ <File
+ RelativePath="..\ccs_server.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\ccutils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\init.hxx"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\include\k5-platform.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\secure.hxx"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\util.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\win-utils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\workitem.h"
+ >
+ </File>
+ <File
+ RelativePath=".\WorkQueue.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\common\cci_debugging.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\cci_os_debugging.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\cci_stream.c"
+ >
+ </File>
+ <File
+ RelativePath="..\ccs_lock.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_os_pipe.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_os_server.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccs_reply.Idl"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_reply_c.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_reply_s.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccs_request.idl"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_request_c.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_request_proc.c"
+ >
+ </File>
+ <File
+ RelativePath=".\ccs_request_s.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\ccs_server.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\ccutils.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\init.cxx"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\secure.cxx"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\ccutil\util.cxx"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\win\win-utils.c"
+ >
+ </File>
+ <File
+ RelativePath=".\WorkItem.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\WorkQueue.cpp"
+ >
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\..\common\win\ccs_reply.Acf"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/ccapi/server/win/WorkItem.cpp b/src/ccapi/server/win/WorkItem.cpp
index 1b1725a8aa..22e209de9f 100644
--- a/src/ccapi/server/win/WorkItem.cpp
+++ b/src/ccapi/server/win/WorkItem.cpp
@@ -1,126 +1,126 @@
-/*
- * $Header$
- *
- * Copyright 2008 Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- * require a specific license from the United States Government.
- * It is the responsibility of any person or organization contemplating
- * export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission. Furthermore if you modify this software you must label
- * your software as modified software and not distribute it in such a
- * fashion that it might be confused with the original M.I.T. software.
- * M.I.T. makes no representations about the suitability of
- * this software for any purpose. It is provided "as is" without express
- * or implied warranty.
- */
-
-#include <string.h>
-#include "assert.h"
-
-#pragma warning (disable : 4996)
-
-#include "win-utils.h"
-#include "WorkItem.h"
-
-extern "C" {
-#include "cci_debugging.h"
- }
-
-// CountedBuffer makes a copy of the data. Each CountedBuffer must be deleted.
-
-void deleteBuffer(char** buf) {
- if (*buf) {
- delete [](*buf);
- *buf = NULL;
- }
- }
-
-// WorkItem contains a CountedBuffer which must be deleted,
-// so each WorkItem must be deleted.
-WorkItem::WorkItem(k5_ipc_stream buf, WIN_PIPE* pipe, const long type, const long sst)
-: _buf(buf), _rpcmsg(type), _pipe(pipe), _sst(sst) { }
-
-WorkItem::WorkItem(const WorkItem& item) : _buf(NULL), _rpcmsg(0), _pipe(NULL), _sst(0) {
-
- k5_ipc_stream _buf = NULL;
- krb5int_ipc_stream_new(&_buf);
- krb5int_ipc_stream_write(_buf,
- krb5int_ipc_stream_data(item.payload()),
- krb5int_ipc_stream_size(item.payload()) );
- WorkItem(_buf, item._pipe, item._rpcmsg, item._sst);
- }
-
-WorkItem::WorkItem() : _buf(NULL), _rpcmsg(CCMSG_INVALID), _pipe(NULL), _sst(0) { }
-
-WorkItem::~WorkItem() {
- if (_buf) krb5int_ipc_stream_release(_buf);
- if (_pipe) ccs_win_pipe_release(_pipe);
- }
-
-const k5_ipc_stream WorkItem::take_payload() {
- k5_ipc_stream temp = payload();
- _buf = NULL;
- return temp;
- }
-
-WIN_PIPE* WorkItem::take_pipe() {
- WIN_PIPE* temp = pipe();
- _pipe = NULL;
- return temp;
- }
-
-WorkList::WorkList() {
- assert(InitializeCriticalSectionAndSpinCount(&cs, 0x80000400));
- }
-
-WorkList::~WorkList() {
- // Delete any WorkItems in the queue:
- WorkItem* item;
- cci_debug_printf("%s", __FUNCTION__);
- char buf[2048];
- char* pbuf = (char*)buf;
- while (remove(&item)) {
- cci_debug_printf("WorkList::~WorkList() deleting %s", item->print(pbuf));
- delete item;
- }
-
- DeleteCriticalSection(&cs);
- }
-
-char* WorkItem::print(char* buf) {
- sprintf(buf, "WorkItem msg#:%d sst:%ld pipe:<%s>/0x%X", _rpcmsg, _sst,
- ccs_win_pipe_getUuid(_pipe), ccs_win_pipe_getHandle(_pipe));
- return buf;
- }
-
-int WorkList::add(WorkItem* item) {
- EnterCriticalSection(&cs);
- wl.push_front(item);
- LeaveCriticalSection(&cs);
- return 1;
- }
-
-int WorkList::remove(WorkItem** item) {
- bool bEmpty;
-
- bEmpty = wl.empty() & 1;
-
- if (!bEmpty) {
- EnterCriticalSection(&cs);
- *item = wl.back();
- wl.pop_back();
- LeaveCriticalSection(&cs);
- }
-
- return !bEmpty;
- }
+/*
+ * $Header$
+ *
+ * Copyright 2008 Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ * require a specific license from the United States Government.
+ * It is the responsibility of any person or organization contemplating
+ * export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission. Furthermore if you modify this software you must label
+ * your software as modified software and not distribute it in such a
+ * fashion that it might be confused with the original M.I.T. software.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express
+ * or implied warranty.
+ */
+
+#include <string.h>
+#include "assert.h"
+
+#pragma warning (disable : 4996)
+
+#include "win-utils.h"
+#include "WorkItem.h"
+
+extern "C" {
+#include "cci_debugging.h"
+ }
+
+// CountedBuffer makes a copy of the data. Each CountedBuffer must be deleted.
+
+void deleteBuffer(char** buf) {
+ if (*buf) {
+ delete [](*buf);
+ *buf = NULL;
+ }
+ }
+
+// WorkItem contains a CountedBuffer which must be deleted,
+// so each WorkItem must be deleted.
+WorkItem::WorkItem(k5_ipc_stream buf, WIN_PIPE* pipe, const long type, const long sst)
+: _buf(buf), _rpcmsg(type), _pipe(pipe), _sst(sst) { }
+
+WorkItem::WorkItem(const WorkItem& item) : _buf(NULL), _rpcmsg(0), _pipe(NULL), _sst(0) {
+
+ k5_ipc_stream _buf = NULL;
+ krb5int_ipc_stream_new(&_buf);
+ krb5int_ipc_stream_write(_buf,
+ krb5int_ipc_stream_data(item.payload()),
+ krb5int_ipc_stream_size(item.payload()) );
+ WorkItem(_buf, item._pipe, item._rpcmsg, item._sst);
+ }
+
+WorkItem::WorkItem() : _buf(NULL), _rpcmsg(CCMSG_INVALID), _pipe(NULL), _sst(0) { }
+
+WorkItem::~WorkItem() {
+ if (_buf) krb5int_ipc_stream_release(_buf);
+ if (_pipe) ccs_win_pipe_release(_pipe);
+ }
+
+const k5_ipc_stream WorkItem::take_payload() {
+ k5_ipc_stream temp = payload();
+ _buf = NULL;
+ return temp;
+ }
+
+WIN_PIPE* WorkItem::take_pipe() {
+ WIN_PIPE* temp = pipe();
+ _pipe = NULL;
+ return temp;
+ }
+
+WorkList::WorkList() {
+ assert(InitializeCriticalSectionAndSpinCount(&cs, 0x80000400));
+ }
+
+WorkList::~WorkList() {
+ // Delete any WorkItems in the queue:
+ WorkItem* item;
+ cci_debug_printf("%s", __FUNCTION__);
+ char buf[2048];
+ char* pbuf = (char*)buf;
+ while (remove(&item)) {
+ cci_debug_printf("WorkList::~WorkList() deleting %s", item->print(pbuf));
+ delete item;
+ }
+
+ DeleteCriticalSection(&cs);
+ }
+
+char* WorkItem::print(char* buf) {
+ sprintf(buf, "WorkItem msg#:%d sst:%ld pipe:<%s>/0x%X", _rpcmsg, _sst,
+ ccs_win_pipe_getUuid(_pipe), ccs_win_pipe_getHandle(_pipe));
+ return buf;
+ }
+
+int WorkList::add(WorkItem* item) {
+ EnterCriticalSection(&cs);
+ wl.push_front(item);
+ LeaveCriticalSection(&cs);
+ return 1;
+ }
+
+int WorkList::remove(WorkItem** item) {
+ bool bEmpty;
+
+ bEmpty = wl.empty() & 1;
+
+ if (!bEmpty) {
+ EnterCriticalSection(&cs);
+ *item = wl.back();
+ wl.pop_back();
+ LeaveCriticalSection(&cs);
+ }
+
+ return !bEmpty;
+ }
diff --git a/src/ccapi/server/win/WorkQueue.cpp b/src/ccapi/server/win/WorkQueue.cpp
index f16ad117e4..cc12054a10 100644
--- a/src/ccapi/server/win/WorkQueue.cpp
+++ b/src/ccapi/server/win/WorkQueue.cpp
@@ -1,61 +1,61 @@
-/*
- * $Header$
- *
- * Copyright 2008 Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- * require a specific license from the United States Government.
- * It is the responsibility of any person or organization contemplating
- * export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission. Furthermore if you modify this software you must label
- * your software as modified software and not distribute it in such a
- * fashion that it might be confused with the original M.I.T. software.
- * M.I.T. makes no representations about the suitability of
- * this software for any purpose. It is provided "as is" without express
- * or implied warranty.
- */
-
-extern "C" {
- #include "cci_debugging.h"
- }
-
-#include "WorkItem.h"
-
-WorkList worklist;
-
-/* C interfaces: */
-EXTERN_C bool worklist_isEmpty() {
- return worklist.isEmpty();
- }
-
-EXTERN_C int worklist_add( const long rpcmsg,
- const ccs_pipe_t pipe,
- const k5_ipc_stream stream,
- const time_t serverStartTime) {
- return worklist.add(new WorkItem(stream, pipe, rpcmsg, serverStartTime) );
- }
-
-EXTERN_C int worklist_remove(long* rpcmsg,
- ccs_pipe_t* pipe,
- k5_ipc_stream* stream,
- time_t* sst) {
- WorkItem* item = NULL;
- cc_int32 err = worklist.remove(&item);
-
- *rpcmsg = item->type();
- *pipe = item->take_pipe();
- *stream = item->take_payload();
- *sst = item->sst();
- delete item;
- return err;
- }
-
+/*
+ * $Header$
+ *
+ * Copyright 2008 Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ * require a specific license from the United States Government.
+ * It is the responsibility of any person or organization contemplating
+ * export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission. Furthermore if you modify this software you must label
+ * your software as modified software and not distribute it in such a
+ * fashion that it might be confused with the original M.I.T. software.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express
+ * or implied warranty.
+ */
+
+extern "C" {
+ #include "cci_debugging.h"
+ }
+
+#include "WorkItem.h"
+
+WorkList worklist;
+
+/* C interfaces: */
+EXTERN_C bool worklist_isEmpty() {
+ return worklist.isEmpty();
+ }
+
+EXTERN_C int worklist_add( const long rpcmsg,
+ const ccs_pipe_t pipe,
+ const k5_ipc_stream stream,
+ const time_t serverStartTime) {
+ return worklist.add(new WorkItem(stream, pipe, rpcmsg, serverStartTime) );
+ }
+
+EXTERN_C int worklist_remove(long* rpcmsg,
+ ccs_pipe_t* pipe,
+ k5_ipc_stream* stream,
+ time_t* sst) {
+ WorkItem* item = NULL;
+ cc_int32 err = worklist.remove(&item);
+
+ *rpcmsg = item->type();
+ *pipe = item->take_pipe();
+ *stream = item->take_payload();
+ *sst = item->sst();
+ delete item;
+ return err;
+ }
+
diff --git a/src/ccapi/server/win/ccs_os_server.cpp b/src/ccapi/server/win/ccs_os_server.cpp
index b22fdfa9b9..e0695876d6 100644
--- a/src/ccapi/server/win/ccs_os_server.cpp
+++ b/src/ccapi/server/win/ccs_os_server.cpp
@@ -1,963 +1,963 @@
-/*
- * $Header$
- *
- * Copyright 2008 Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- * require a specific license from the United States Government.
- * It is the responsibility of any person or organization contemplating
- * export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission. Furthermore if you modify this software you must label
- * your software as modified software and not distribute it in such a
- * fashion that it might be confused with the original M.I.T. software.
- * M.I.T. makes no representations about the suitability of
- * this software for any purpose. It is provided "as is" without express
- * or implied warranty.
- */
-
-#include "process.h"
-#include "windows.h"
-
-extern "C" {
-#include "ccs_common.h"
-#include "ccs_os_notify.h"
-#include "ccs_os_server.h"
-#include "ccs_reply.h"
-#include "ccs_request.h"
-#include "win-utils.h"
-#include "ccutils.h"
- }
-
-#include "WorkQueue.h"
-#include "util.h"
-#include "opts.hxx"
-#include "init.hxx"
-
-#pragma warning (disable : 4996)
-
-BOOL bListen = TRUE; /* Why aren't bool and true defined? */
-const char* sessID = NULL; /* The logon session we are running on behalf of. */
-time_t _sst = 0;
-unsigned char* pszNetworkAddress = NULL;
-unsigned char* pszStringBinding = NULL;
-BOOL bRpcHandleInited = FALSE;
-_RPC_ASYNC_STATE* rpcState = NULL;
-
-/* Thread procedures can take only one void* argument. We put all the args we want
- to pass into this struct and then pass a pointer to the struct: */
-struct RpcRcvArgs {
- char* networkAddress;
- unsigned char* protocolSequence;
- unsigned char* sessID; /* Used for this server's endpoint */
- unsigned char* uuid; /* Used for client's UUID */
- ParseOpts::Opts* opts;
- RPC_STATUS status;
- } rpcargs = { NULL, /* pszNetworkAddress */
- (unsigned char*)"ncalrpc", /* pszProtocolSequence */
- NULL, /* sessID placeholder */
- NULL, /* uuid placeholder */
- NULL }; /* Opts placeholder */
-
-/* Command line format:
- argv[0] Program name
- argv[1] session ID to use
- argv[2] "D" Debug: go into infinite loop in ccs_os_server_initialize so process
- can be attached in debugger.
- Any other value: continue
- */
-#define N_FIXED_ARGS 3
-#define SERVER_REPLY_RPC_HANDLE ccs_reply_IfHandle
-
-/* Forward declarations: */
-void receiveLoop(void* rpcargs);
-void connectionListener(void* rpcargs);
-void Usage(const char* argv0);
-void printError(TCHAR* msg);
-void setMySST() {_sst = time(&_sst);}
-time_t getMySST() {return _sst;}
-RPC_STATUS send_connection_reply(ccs_pipe_t in_pipe);
-void RPC_ENTRY clientListener( _RPC_ASYNC_STATE*,
- void* Context,
- RPC_ASYNC_EVENT Event);
-RPC_STATUS RPC_ENTRY sec_callback( IN RPC_IF_ID *Interface,
- IN void *Context);
-RPC_STATUS send_init(char* clientUUID);
-//DWORD alloc_name(LPSTR* pname, LPSTR postfix);
-
-
-/* The layout of the rest of this module:
-
- The four entrypoints defined in ccs_os_server.h:
- ccs_os_server_initialize
- cc_int32 ccs_os_server_cleanup
- cc_int32 ccs_os_server_listen_loop
- cc_int32 ccs_os_server_send_reply
-
- Other routines needed by those four.
- */
-
-/* ------------------------------------------------------------------------ */
-
-cc_int32 ccs_os_server_initialize (int argc, const char *argv[]) {
- cc_int32 err = 0;
- ParseOpts::Opts opts = { 0 };
- ParseOpts PO;
- BOOL bAdjustedShutdown = FALSE;
- HMODULE hKernel32 = GetModuleHandle("kernel32");
-
- if (!err) {
- sessID = argv[1];
- setMySST();
-
- opts.cMinCalls = 1;
- opts.cMaxCalls = 20;
- opts.fDontWait = TRUE;
-
-#ifdef CCAPI_TEST_OPTIONS
- PO.SetValidOpts("kemnfubc");
-#else
- PO.SetValidOpts("kc");
-#endif
-
- PO.Parse(opts, argc, (char**)argv);
-
-// while(*argv[2] == 'D') {} /* Hang here to attach process with debugger. */
-
- if (hKernel32) {
- typedef BOOL (WINAPI *FP_SetProcessShutdownParameters)(DWORD, DWORD);
- FP_SetProcessShutdownParameters pSetProcessShutdownParameters =
- (FP_SetProcessShutdownParameters)
- GetProcAddress(hKernel32, "SetProcessShutdownParameters");
- if (pSetProcessShutdownParameters) {
- bAdjustedShutdown = pSetProcessShutdownParameters(100, 0);
- }
- }
- cci_debug_printf("%s Shutdown Parameters",
- bAdjustedShutdown ? "Adjusted" : "Did not adjust");
-
- err = Init::Initialize();
- }
-
-// if (!err) {
-// if (opts.bShutdown) {
-// status = shutdown_server(opts.pszEndpoint);
-// }
-// }
-// else {
-// status = startup_server(opts);
-// }
-
- if (err) {
- Init::Cleanup();
- fprintf( stderr, "An error occured while %s the server (%u)\n",
- opts.bShutdown ? "shutting down" : "starting/running",
- err);
- exit(cci_check_error (err));
- }
-
- return cci_check_error (err);
- }
-
-/* ------------------------------------------------------------------------ */
-
-cc_int32 ccs_os_server_cleanup (int argc, const char *argv[]) {
- cc_int32 err = 0;
-
- cci_debug_printf("%s for user <%s> shutting down.", argv[0], argv[1]);
-
- return cci_check_error (err);
- }
-
-/* ------------------------------------------------------------------------ */
-
-/* This function takes work items off the work queue and executes them.
- * This is the one and only place where the multi-threaded Windows code
- * calls into the single-threaded common code.
- *
- * The actual 'listening' for requests from clients happens after receiveloop
- * establishes the RPC endpoint the clients will connect to and the RPC procedures
- * put the work items into the work queue.
- */
-cc_int32 ccs_os_server_listen_loop (int argc, const char *argv[]) {
- cc_int32 err = 0;
- uintptr_t threadStatus;
- unsigned int loopCounter = 0;
-
- ParseOpts::Opts opts = { 0 };
- ParseOpts PO;
-
- opts.cMinCalls = 1;
- opts.cMaxCalls = 20;
- opts.fDontWait = TRUE;
-
-#ifdef CCAPI_TEST_OPTIONS
- PO.SetValidOpts("kemnfubc");
-#else
- PO.SetValidOpts("kc");
-#endif
- PO.Parse(opts, argc, (char**)argv);
-
-
- //++ debug stuff
- #define INFO_BUFFER_SIZE 32767
- TCHAR infoBuf[INFO_BUFFER_SIZE];
- DWORD bufCharCount = INFO_BUFFER_SIZE;
- // Get and display the user name.
- bufCharCount = INFO_BUFFER_SIZE;
- if( !GetUserName( infoBuf, &bufCharCount ) ) printError( TEXT("GetUserName") );
- //--
-
- /* Sending the reply from within the request RPC handler doesn't seem to work.
- So we listen for requests in a separate thread and put the requests in a
- queue. */
- rpcargs.sessID = (unsigned char*)sessID;
- rpcargs.opts = &opts;
- threadStatus = _beginthread(receiveLoop, 0, (void*)&rpcargs);
-
- /* We handle the queue entries here. Work loop: */
- while (TRUE) {
- loopCounter++;
- if (worklist_isEmpty() & 1) {
- SleepEx(1000, TRUE);
- }
- else if (TRUE) { // Take next WorkItem from the queue:
- k5_ipc_stream buf = NULL;
- long rpcmsg = CCMSG_INVALID;
- time_t serverStartTime = 0xDEADDEAD;
- RPC_STATUS status = 0;
- char* uuid = NULL;
- k5_ipc_stream stream = NULL;
- ccs_pipe_t pipe = NULL;
- ccs_pipe_t pipe2 = NULL;
-
- if (worklist_remove(&rpcmsg, &pipe, &buf, &serverStartTime)) {
- uuid = ccs_win_pipe_getUuid(pipe);
-#if 0
- cci_debug_printf("%s: processing WorkItem msg:%ld pipeUUID:<%s> pipeHandle:0x%X SST:%ld",
- __FUNCTION__, rpcmsg, uuid, ccs_win_pipe_getHandle(pipe), serverStartTime);
-#endif
- if (serverStartTime <= getMySST()) {
- switch (rpcmsg) {
- case CCMSG_CONNECT: {
- cci_debug_printf(" Processing CONNECT");
- rpcargs.uuid = (unsigned char*)uuid;
-
- // Even if a disconnect message is received before this code finishes,
- // it won't be dequeued and processed until after this code finishes.
- // So we can add the client after starting the connection listener.
- connectionListener((void*)&rpcargs);
- status = rpcargs.status;
-
- if (!status) {
- status = ccs_server_add_client(pipe);
- }
- if (!status) {status = send_connection_reply(pipe);}
- break;
- }
- case CCMSG_DISCONNECT: {
- cci_debug_printf(" Processing DISCONNECT");
- if (!status) {
- status = ccs_server_remove_client(pipe);
- }
- break;
- }
- case CCMSG_REQUEST:
- cci_debug_printf(" Processing REQUEST");
- ccs_pipe_copy(&pipe2, pipe);
- // Dispatch message here, setting both pipes to the client UUID:
- err = ccs_server_handle_request (pipe, pipe2, buf);
- break;
- case CCMSG_PING:
- cci_debug_printf(" Processing PING");
- err = krb5int_ipc_stream_new (&stream);
- err = krb5int_ipc_stream_write(stream, "This is a test of the emergency broadcasting system", 52);
- err = ccs_os_server_send_reply(pipe, stream);
- break;
- default:
- cci_debug_printf("Huh? Received invalid message type %ld from UUID:<%s>",
- rpcmsg, uuid);
- break;
- }
- if (buf) krb5int_ipc_stream_release(buf);
- /* Don't free uuid, which was allocated here. A pointer to it is in the
- rpcargs struct which was passed to connectionListener which will be
- received by ccapi_listen when the client exits. ccapi_listen needs
- the uuid to know which client to disconnect.
- */
- }
- // Server's start time is different from what the client thinks.
- // That means the server has rebooted since the client connected.
- else {
- cci_debug_printf("Whoops! Server has rebooted since client established connection.");
- }
- }
- else {cci_debug_printf("Huh? Queue not empty but no item to remove.");}
- }
- }
-
- return cci_check_error (err);
- }
-
-/* ------------------------------------------------------------------------ */
-
-cc_int32 ccs_os_server_send_reply (ccs_pipe_t in_pipe,
- k5_ipc_stream in_reply_stream) {
-
- /* ccs_pipe_t in_reply_pipe is a char* reply endpoint.
- k5_ipc_stream in_reply_stream is the data to be sent.
- */
-
- cc_int32 err = 0;
- char* uuid = ccs_win_pipe_getUuid(in_pipe);
- HANDLE h = ccs_win_pipe_getHandle(in_pipe);
-
- if (!err) {
- err = send_init(uuid); // Sets RPC handle to be used.
- }
-
- if (!err) {
- RpcTryExcept {
- long status;
- ccs_rpc_request_reply( // make call with user message
- CCMSG_REQUEST_REPLY, /* Message type */
- (unsigned char*)&h, /* client's tspdata* */
- (unsigned char*)uuid,
- getMySST(),
- krb5int_ipc_stream_size(in_reply_stream), /* Length of buffer */
- (const unsigned char*)krb5int_ipc_stream_data(in_reply_stream), /* Data buffer */
- &status ); /* Return code */
- }
- RpcExcept(1) {
- cci_check_error(RpcExceptionCode());
- }
- RpcEndExcept
- }
-
- /* The calls to the remote procedures are complete. */
- /* Free whatever we allocated: */
- err = RpcBindingFree(&SERVER_REPLY_RPC_HANDLE);
-
- return cci_check_error (err);
- }
-
-
-/* Windows-specific routines: */
-
-void Usage(const char* argv0) {
- printf("Usage:\n");
- printf("%s [m maxcalls] [n mincalls] [f dontwait] [h|?]]\n", argv0);
- printf(" CCAPI server process.\n");
- printf(" h|? whow usage message. <\n");
- }
-
-/* ------------------------------------------------------------------------ */
-/* The receive thread repeatedly issues RpcServerListen.
- When a message arrives, it is handled in the RPC procedure.
- */
-void receiveLoop(void* rpcargs) {
-
- struct RpcRcvArgs* rcvargs = (struct RpcRcvArgs*)rpcargs;
- RPC_STATUS status = FALSE;
- unsigned char* pszSecurity = NULL;
- LPSTR endpoint = NULL;
- LPSTR event_name = NULL;
- PSECURITY_DESCRIPTOR psd = NULL;
- HANDLE hEvent = 0;
- Init::InitInfo info;
-
- cci_debug_printf("THREAD BEGIN: %s", __FUNCTION__);
-
- status = Init::Info(info);
-
- /* Build complete RPC endpoint using previous CCAPI implementation: */
- if (!status) {
- if (!rcvargs->opts->pszEndpoint) {
- if (!status) {
- status = alloc_name(&endpoint, "ep", isNT());
- }
-
- if (!status) {
- status = alloc_name(&event_name, "startup", isNT());
- }
-
- if (!status) {
- hEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, event_name);
- // We ignore any error opening the event because we do not know who started us.
- // [Comment paraphrased from previous implementation, whence it was copied.]
- }
- }
- else {
- endpoint = rcvargs->opts->pszEndpoint;
- }
- }
-
- cci_debug_printf("%s Registering endpoint %s", __FUNCTION__, endpoint);
-
- if (!status && isNT()) {
- status = alloc_own_security_descriptor_NT(&psd);
- }
-
- if (!status) {
- status = RpcServerUseProtseqEp(rcvargs->protocolSequence,
- rcvargs->opts->cMaxCalls,
- (RPC_CSTR)endpoint,
- rcvargs->opts->bDontProtect ? 0 : psd); // SD
- }
-
- if (!status) {
- status = RpcServerRegisterAuthInfo(0, // server principal
- RPC_C_AUTHN_WINNT,
- 0,
- 0);
- }
-
- while (bListen && !status) {
- cci_debug_printf("%s is listening ...", __FUNCTION__);
-
- if (!info.isNT) {
- status = RpcServerRegisterIf(ccs_request_ServerIfHandle, // interface
- NULL, // MgrTypeUuid
- NULL); // MgrEpv; null means use default
- }
- else {
- status = info.fRpcServerRegisterIfEx(ccs_request_ServerIfHandle, // interface
- NULL, // MgrTypeUuid
- NULL, // MgrEpv; 0 means default
- RPC_IF_ALLOW_SECURE_ONLY,
- rcvargs->opts->cMaxCalls,
- rcvargs->opts->bSecCallback ?
- (RPC_IF_CALLBACK_FN*)sec_callback : 0 );
- }
-
- if (!status) {
- status = RpcServerListen(rcvargs->opts->cMinCalls,
- rcvargs->opts->cMaxCalls,
- rcvargs->opts->fDontWait);
- }
-
- if (!status) {
- if (rcvargs->opts->fDontWait) {
- if (hEvent) SetEvent(hEvent); // Ignore any error -- SetEvent is an optimization.
- status = RpcMgmtWaitServerListen();
- }
- }
- }
-
- if (status) { // Cleanup in case of errors:
- if (hEvent) CloseHandle(hEvent);
- free_alloc_p(&event_name);
- free_alloc_p(&psd);
- if (endpoint && (endpoint != rcvargs->opts->pszEndpoint))
- free_alloc_p(&endpoint);
- }
-
- _endthread();
- } // End receiveLoop
-
-
-#if 0
-
- return status;
-}
-#endif
-
-
-
-/* ------------------------------------------------------------------------ */
-/* The connection listener thread waits forever for a call to the CCAPI_CLIENT_<UUID>
- endpoint, ccapi_listen function to complete. If the call completes or gets an
- RPC exception, it means the client has disappeared.
-
- A separate connectionListener is started for each client that has connected to the server.
- */
-
-void connectionListener(void* rpcargs) {
-
- struct RpcRcvArgs* rcvargs = (struct RpcRcvArgs*)rpcargs;
- RPC_STATUS status = FALSE;
- char* endpoint;
- unsigned char* pszOptions = NULL;
- unsigned char * pszUuid = NULL;
-
- endpoint = clientEndpoint((char*)rcvargs->uuid);
- rpcState = (RPC_ASYNC_STATE*)malloc(sizeof(RPC_ASYNC_STATE));
- status = RpcAsyncInitializeHandle(rpcState, sizeof(RPC_ASYNC_STATE));
- cci_debug_printf("");
- cci_debug_printf("%s About to LISTEN to <%s>", __FUNCTION__, endpoint);
-
- rpcState->UserInfo = rcvargs->uuid;
- rpcState->NotificationType = RpcNotificationTypeApc;
- rpcState->u.APC.NotificationRoutine = clientListener;
- rpcState->u.APC.hThread = 0;
-
- /* [If in use] Free previous binding: */
- if (bRpcHandleInited) {
- // Free previous binding (could have been used to call ccapi_listen
- // in a different client thread).
- // Don't check result or update status.
- RpcStringFree(&pszStringBinding);
- RpcBindingFree(&SERVER_REPLY_RPC_HANDLE);
- bRpcHandleInited = FALSE;
- }
-
- /* Set up binding to the client's endpoint: */
- if (!status) {
- status = RpcStringBindingCompose(
- pszUuid,
- pszProtocolSequence,
- pszNetworkAddress,
- (RPC_CSTR)endpoint,
- pszOptions,
- &pszStringBinding);
- }
-
- /* Set the binding handle that will be used to bind to the server. */
- if (!status) {
- status = RpcBindingFromStringBinding(pszStringBinding, &SERVER_REPLY_RPC_HANDLE);
- }
- if (!status) {bRpcHandleInited = TRUE;}
-
- RpcTryExcept {
- cci_debug_printf(" Calling remote procedure ccapi_listen");
- ccapi_listen(rpcState, SERVER_REPLY_RPC_HANDLE, CCMSG_LISTEN, &status);
- /* Asynchronous call will return immediately. */
- }
- RpcExcept(1) {
- status = cci_check_error(RpcExceptionCode());
- }
- RpcEndExcept
-
- rcvargs->status = status;
- } // End connectionListener
-
-
-void RPC_ENTRY clientListener(
- _RPC_ASYNC_STATE* pAsync,
- void* Context,
- RPC_ASYNC_EVENT Event
- ) {
-
- ccs_pipe_t pipe = ccs_win_pipe_new((char*)pAsync->UserInfo, NULL);
-
- cci_debug_printf("%s(0x%X, ...) async routine for <0x%X:%s>!",
- __FUNCTION__, pAsync, pAsync->UserInfo, pAsync->UserInfo);
-
- worklist_add( CCMSG_DISCONNECT,
- pipe,
- NULL, /* No payload with connect request */
- (const time_t)0 ); /* No server session number with connect request */
- }
-
-
-void printError( TCHAR* msg ) {
- DWORD eNum;
- TCHAR sysMsg[256];
- TCHAR* p;
-
- eNum = GetLastError( );
- FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, eNum,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- sysMsg, 256, NULL );
-
- // Trim the end of the line and terminate it with a null
- p = sysMsg;
- while( ( *p > 31 ) || ( *p == 9 ) )
- ++p;
- do { *p-- = 0; } while( ( p >= sysMsg ) &&
- ( ( *p == '.' ) || ( *p < 33 ) ) );
-
- // Display the message
- cci_debug_printf("%s failed with error %d (%s)", msg, eNum, sysMsg);
- }
-
-
-RPC_STATUS send_init(char* clientUUID) {
- RPC_STATUS status;
- unsigned char * pszUuid = NULL;
- unsigned char * pszOptions = NULL;
-
- /* Use a convenience function to concatenate the elements of */
- /* the string binding into the proper sequence. */
- status = RpcStringBindingCompose(pszUuid,
- pszProtocolSequence,
- pszNetworkAddress,
- (unsigned char*)clientEndpoint(clientUUID),
- pszOptions,
- &pszStringBinding);
- if (status) {return (status);}
-
- /* Set the binding handle that will be used to bind to the RPC server [the 'client']. */
- status = RpcBindingFromStringBinding(pszStringBinding, &SERVER_REPLY_RPC_HANDLE);
- return (status);
- }
-
-RPC_STATUS send_finish() {
- RPC_STATUS status;
- /* Can't shut down client -- it runs listen function which */
- /* server uses to detect the client going away. */
-
- /* The calls to the remote procedures are complete. */
- /* Free the string and the binding handle */
- status = RpcStringFree(&pszStringBinding); // remote calls done; unbind
- if (status) {return (status);}
-
- status = RpcBindingFree(&SERVER_REPLY_RPC_HANDLE); // remote calls done; unbind
-
- return (status);
- }
-
-RPC_STATUS send_connection_reply(ccs_pipe_t in_pipe) {
- char* uuid = ccs_win_pipe_getUuid (in_pipe);
- HANDLE h = ccs_win_pipe_getHandle(in_pipe);
- RPC_STATUS status = send_init(uuid);
-
- RpcTryExcept {
- ccs_rpc_connect_reply( // make call with user message
- CCMSG_CONNECT_REPLY, /* Message type */
- (unsigned char*)&h, /* client's tspdata* */
- (unsigned char*)uuid,
- getMySST(), /* Server's session number = it's start time */
- &status ); /* Return code */
- }
- RpcExcept(1) {
- cci_check_error(RpcExceptionCode());
- }
- RpcEndExcept
-
- status = send_finish();
- return (status);
- }
-
-#if 0
-DWORD alloc_name(LPSTR* pname, LPSTR postfix) {
- DWORD len = strlen(sessID) + 1 + strlen(postfix) + 1;
-
- *pname = (LPSTR)malloc(len);
- if (!*pname) return GetLastError();
- _snprintf(*pname, len, "%s.%s", sessID, postfix);
- return 0;
- }
-#endif
-
-RPC_STATUS GetPeerName( RPC_BINDING_HANDLE hClient,
- LPTSTR pszClientName,
- int iMaxLen) {
- RPC_STATUS Status = RPC_S_OK;
- RPC_BINDING_HANDLE hServer = NULL;
- PTBYTE pszStringBinding = NULL;
- PTBYTE pszClientNetAddr = NULL;
- PTBYTE pszProtSequence = NULL;
-
- memset(pszClientName, 0, iMaxLen * sizeof(TCHAR));
-
- __try {
- // Create a partially bound server handle from the client handle.
- Status = RpcBindingServerFromClient (hClient, &hServer);
- if (Status != RPC_S_OK) __leave;
-
- // Get the partially bound server string binding and parse it.
- Status = RpcBindingToStringBinding (hServer,
- &pszStringBinding);
- if (Status != RPC_S_OK) __leave;
-
- // String binding only contains protocol sequence and client
- // address, and is not currently implemented for named pipes.
- Status = RpcStringBindingParse (pszStringBinding, NULL,
- &pszProtSequence, &pszClientNetAddr,
- NULL, NULL);
- if (Status != RPC_S_OK)
- __leave;
- int iLen = lstrlen(pszClientName) + 1;
- if (iMaxLen < iLen)
- Status = RPC_S_BUFFER_TOO_SMALL;
- lstrcpyn(pszClientName, (LPCTSTR)pszClientNetAddr, iMaxLen);
- }
- __finally {
- if (pszProtSequence)
- RpcStringFree (&pszProtSequence);
-
- if (pszClientNetAddr)
- RpcStringFree (&pszClientNetAddr);
-
- if (pszStringBinding)
- RpcStringFree (&pszStringBinding);
-
- if (hServer)
- RpcBindingFree (&hServer);
- }
- return Status;
-}
-
-struct client_auth_info {
- RPC_AUTHZ_HANDLE authz_handle;
- unsigned char* server_principal; // need to RpcFreeString this
- ULONG authn_level;
- ULONG authn_svc;
- ULONG authz_svc;
-};
-
-RPC_STATUS
-GetClientId(
- RPC_BINDING_HANDLE hClient,
- char* client_id,
- int max_len,
- client_auth_info* info
- )
-{
- RPC_AUTHZ_HANDLE authz_handle = 0;
- unsigned char* server_principal = 0;
- ULONG authn_level = 0;
- ULONG authn_svc = 0;
- ULONG authz_svc = 0;
- RPC_STATUS status = 0;
-
- memset(client_id, 0, max_len);
-
- if (info) {
- memset(info, 0, sizeof(client_auth_info));
- }
-
- status = RpcBindingInqAuthClient(hClient, &authz_handle,
- info ? &server_principal : 0,
- &authn_level, &authn_svc, &authz_svc);
- if (status == RPC_S_OK)
- {
- if (info) {
- info->server_principal = server_principal;
- info->authz_handle = authz_handle;
- info->authn_level = authn_level;
- info->authn_svc = authn_svc;
- info->authz_svc = authz_svc;
- }
-
- if (authn_svc == RPC_C_AUTHN_WINNT) {
- WCHAR* username = (WCHAR*)authz_handle;
- int len = lstrlenW(username) + 1;
- if (max_len < len)
- status = RPC_S_BUFFER_TOO_SMALL;
- _snprintf(client_id, max_len, "%S", username);
- } else {
- status = RPC_S_UNKNOWN_AUTHN_SERVICE;
- }
- }
- return status;
-}
-
-char*
-rpc_error_to_string(
- RPC_STATUS status
- )
-{
- switch(status) {
- case RPC_S_OK:
- return "OK";
- case RPC_S_INVALID_BINDING:
- return "Invalid binding";
- case RPC_S_WRONG_KIND_OF_BINDING:
- return "Wrong binding";
- case RPC_S_BINDING_HAS_NO_AUTH:
- RpcRaiseException(RPC_S_BINDING_HAS_NO_AUTH);
- return "Binding has no auth";
- default:
- return "BUG: I am confused";
- }
-}
-
-void
-print_client_info(
- RPC_STATUS peer_status,
- const char* peer_name,
- RPC_STATUS client_status,
- const char* client_id,
- client_auth_info* info
- )
-{
- if (peer_status == RPC_S_OK || peer_status == RPC_S_BUFFER_TOO_SMALL) {
- cci_debug_printf("%s Peer Name is \"%s\"", __FUNCTION__, peer_name);
- } else {
- cci_debug_printf("%s Error %u getting Peer Name (%s)",
- __FUNCTION__, peer_status, rpc_error_to_string(peer_status));
- }
-
- if (client_status == RPC_S_OK || client_status == RPC_S_BUFFER_TOO_SMALL) {
- if (info) {
- cci_debug_printf("%s Client Auth Info"
- "\tServer Principal: %s\n"
- "\tAuthentication Level: %d\n"
- "\tAuthentication Service: %d\n"
- "\tAuthorization Service: %d\n",
- __FUNCTION__,
- info->server_principal,
- info->authn_level,
- info->authn_svc,
- info->authz_svc);
- }
- cci_debug_printf("%s Client ID is \"%s\"", __FUNCTION__, client_id);
- } else {
- cci_debug_printf("%s Error getting Client Info (%u = %s)",
- __FUNCTION__, client_status, rpc_error_to_string(client_status));
- }
-}
-
-DWORD sid_check() {
- DWORD status = 0;
- HANDLE hToken_c = 0;
- HANDLE hToken_s = 0;
- PTOKEN_USER ptu_c = 0;
- PTOKEN_USER ptu_s = 0;
- DWORD len = 0;
- BOOL bImpersonate = FALSE;
-
- // Note GetUserName will fail while impersonating at identify
- // level. The workaround is to impersonate, OpenThreadToken,
- // revert, call GetTokenInformation, and finally, call
- // LookupAccountSid.
-
- // XXX - Note: This workaround does not appear to work.
- // OpenThreadToken fails with error 1346: "Either a requid
- // impersonation level was not provided or the provided
- // impersonation level is invalid".
-
- status = RpcImpersonateClient(0);
-
- if (!status) {
- bImpersonate = TRUE;
- if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken_c))
- status = GetLastError();
- }
-
- if (!status) {
- status = RpcRevertToSelf();
- }
-
- if (!status) {
- bImpersonate = FALSE;
-
- len = 0;
- GetTokenInformation(hToken_c, TokenUser, ptu_c, 0, &len);
- if (len == 0) status = 1;
- }
-
- if (!status) {
- if (!(ptu_c = (PTOKEN_USER)LocalAlloc(0, len)))
- status = GetLastError();
- }
-
- if (!status) {
- if (!GetTokenInformation(hToken_c, TokenUser, ptu_c, len, &len))
- status = GetLastError();
- }
-
- if (!status) {
- if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken_s))
- status = GetLastError();
- }
-
- if (!status) {
- len = 0;
- GetTokenInformation(hToken_s, TokenUser, ptu_s, 0, &len);
- if (len == 0) status = GetLastError();
- }
-
- if (!status) {
- if (!(ptu_s = (PTOKEN_USER)LocalAlloc(0, len)))
- status = GetLastError();
- }
-
- if (!status) {
- if (!GetTokenInformation(hToken_s, TokenUser, ptu_s, len, &len))
- status = GetLastError();
- }
-
- if (!EqualSid(ptu_s->User.Sid, ptu_c->User.Sid))
- status = RPC_S_ACCESS_DENIED;
-
-/* Cleanup: */
- if (!hToken_c && !bImpersonate)
- cci_debug_printf("%s Cannot impersonate (%u)", __FUNCTION__, status);
- else if (!hToken_c)
- cci_debug_printf("%s Failed to open client token (%u)", __FUNCTION__, status);
- else if (bImpersonate)
- cci_debug_printf("%s Failed to revert (%u)", __FUNCTION__, status);
- else if (!ptu_c)
- cci_debug_printf("%s Failed to get client token user info (%u)",
- __FUNCTION__, status);
- else if (!hToken_s)
- cci_debug_printf("%s Failed to open server token (%u)", __FUNCTION__, status);
- else if (!ptu_s)
- cci_debug_printf("%s Failed to get server token user info (%u)",
- __FUNCTION__, status);
- else if (status == RPC_S_ACCESS_DENIED)
- cci_debug_printf("%s SID **does not** match!", __FUNCTION__);
- else if (status == RPC_S_OK)
- cci_debug_printf("%s SID matches!", __FUNCTION__);
- else
- if (status) {
- cci_debug_printf("%s unrecognized error %u", __FUNCTION__, status);
- abort();
- }
-
- if (bImpersonate) RpcRevertToSelf();
- if (hToken_c && hToken_c != INVALID_HANDLE_VALUE)
- CloseHandle(hToken_c);
- if (ptu_c) LocalFree(ptu_c);
- if (hToken_s && hToken_s != INVALID_HANDLE_VALUE)
- CloseHandle(hToken_s);
- if (ptu_s) LocalFree(ptu_s);
- if (status) cci_debug_printf("%s returning %u", __FUNCTION__, status);
- return status;
- }
-
-RPC_STATUS RPC_ENTRY sec_callback( IN RPC_IF_ID *Interface,
- IN void *Context) {
- char peer_name[1024];
- char client_name[1024];
- RPC_STATUS peer_status;
- RPC_STATUS client_status;
-
- cci_debug_printf("%s", __FUNCTION__);
- peer_status = GetPeerName(Context, peer_name, sizeof(peer_name));
- client_status = GetClientId(Context, client_name, sizeof(client_name), 0);
- print_client_info(peer_status, peer_name, client_status, client_name, 0);
- DWORD sid_status = sid_check();
- cci_debug_printf("%s returning (%u)", __FUNCTION__, sid_status);
- return sid_status;
- }
-
-
-
-/*********************************************************************/
-/* MIDL allocate and free */
-/*********************************************************************/
-
-extern "C" void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {
- return(malloc(len));
- }
-
-extern "C" void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {
- free(ptr);
- }
-
-/* stubs */
-extern "C" cc_int32
-ccs_os_notify_cache_collection_changed (ccs_cache_collection_t cc)
-{
- return 0;
-}
-
-extern "C" cc_int32
-ccs_os_notify_ccache_changed (ccs_cache_collection_t cc, const char *name)
-{
- return 0;
-}
+/*
+ * $Header$
+ *
+ * Copyright 2008 Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ * require a specific license from the United States Government.
+ * It is the responsibility of any person or organization contemplating
+ * export to obtain such a license before exporting.
+ *
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission. Furthermore if you modify this software you must label
+ * your software as modified software and not distribute it in such a
+ * fashion that it might be confused with the original M.I.T. software.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose. It is provided "as is" without express
+ * or implied warranty.
+ */
+
+#include "process.h"
+#include "windows.h"
+
+extern "C" {
+#include "ccs_common.h"
+#include "ccs_os_notify.h"
+#include "ccs_os_server.h"
+#include "ccs_reply.h"
+#include "ccs_request.h"
+#include "win-utils.h"
+#include "ccutils.h"
+ }
+
+#include "WorkQueue.h"
+#include "util.h"
+#include "opts.hxx"
+#include "init.hxx"
+
+#pragma warning (disable : 4996)
+
+BOOL bListen = TRUE; /* Why aren't bool and true defined? */
+const char* sessID = NULL; /* The logon session we are running on behalf of. */
+time_t _sst = 0;
+unsigned char* pszNetworkAddress = NULL;
+unsigned char* pszStringBinding = NULL;
+BOOL bRpcHandleInited = FALSE;
+_RPC_ASYNC_STATE* rpcState = NULL;
+
+/* Thread procedures can take only one void* argument. We put all the args we want
+ to pass into this struct and then pass a pointer to the struct: */
+struct RpcRcvArgs {
+ char* networkAddress;
+ unsigned char* protocolSequence;
+ unsigned char* sessID; /* Used for this server's endpoint */
+ unsigned char* uuid; /* Used for client's UUID */
+ ParseOpts::Opts* opts;
+ RPC_STATUS status;
+ } rpcargs = { NULL, /* pszNetworkAddress */
+ (unsigned char*)"ncalrpc", /* pszProtocolSequence */
+ NULL, /* sessID placeholder */
+ NULL, /* uuid placeholder */
+ NULL }; /* Opts placeholder */
+
+/* Command line format:
+ argv[0] Program name
+ argv[1] session ID to use
+ argv[2] "D" Debug: go into infinite loop in ccs_os_server_initialize so process
+ can be attached in debugger.
+ Any other value: continue
+ */
+#define N_FIXED_ARGS 3
+#define SERVER_REPLY_RPC_HANDLE ccs_reply_IfHandle
+
+/* Forward declarations: */
+void receiveLoop(void* rpcargs);
+void connectionListener(void* rpcargs);
+void Usage(const char* argv0);
+void printError(TCHAR* msg);
+void setMySST() {_sst = time(&_sst);}
+time_t getMySST() {return _sst;}
+RPC_STATUS send_connection_reply(ccs_pipe_t in_pipe);
+void RPC_ENTRY clientListener( _RPC_ASYNC_STATE*,
+ void* Context,
+ RPC_ASYNC_EVENT Event);
+RPC_STATUS RPC_ENTRY sec_callback( IN RPC_IF_ID *Interface,
+ IN void *Context);
+RPC_STATUS send_init(char* clientUUID);
+//DWORD alloc_name(LPSTR* pname, LPSTR postfix);
+
+
+/* The layout of the rest of this module:
+
+ The four entrypoints defined in ccs_os_server.h:
+ ccs_os_server_initialize
+ cc_int32 ccs_os_server_cleanup
+ cc_int32 ccs_os_server_listen_loop
+ cc_int32 ccs_os_server_send_reply
+
+ Other routines needed by those four.
+ */
+
+/* ------------------------------------------------------------------------ */
+
+cc_int32 ccs_os_server_initialize (int argc, const char *argv[]) {
+ cc_int32 err = 0;
+ ParseOpts::Opts opts = { 0 };
+ ParseOpts PO;
+ BOOL bAdjustedShutdown = FALSE;
+ HMODULE hKernel32 = GetModuleHandle("kernel32");
+
+ if (!err) {
+ sessID = argv[1];
+ setMySST();
+
+ opts.cMinCalls = 1;
+ opts.cMaxCalls = 20;
+ opts.fDontWait = TRUE;
+
+#ifdef CCAPI_TEST_OPTIONS
+ PO.SetValidOpts("kemnfubc");
+#else
+ PO.SetValidOpts("kc");
+#endif
+
+ PO.Parse(opts, argc, (char**)argv);
+
+// while(*argv[2] == 'D') {} /* Hang here to attach process with debugger. */
+
+ if (hKernel32) {
+ typedef BOOL (WINAPI *FP_SetProcessShutdownParameters)(DWORD, DWORD);
+ FP_SetProcessShutdownParameters pSetProcessShutdownParameters =
+ (FP_SetProcessShutdownParameters)
+ GetProcAddress(hKernel32, "SetProcessShutdownParameters");
+ if (pSetProcessShutdownParameters) {
+ bAdjustedShutdown = pSetProcessShutdownParameters(100, 0);
+ }
+ }
+ cci_debug_printf("%s Shutdown Parameters",
+ bAdjustedShutdown ? "Adjusted" : "Did not adjust");
+
+ err = Init::Initialize();
+ }
+
+// if (!err) {
+// if (opts.bShutdown) {
+// status = shutdown_server(opts.pszEndpoint);
+// }
+// }
+// else {
+// status = startup_server(opts);
+// }
+
+ if (err) {
+ Init::Cleanup();
+ fprintf( stderr, "An error occured while %s the server (%u)\n",
+ opts.bShutdown ? "shutting down" : "starting/running",
+ err);
+ exit(cci_check_error (err));
+ }
+
+ return cci_check_error (err);
+ }
+
+/* ------------------------------------------------------------------------ */
+
+cc_int32 ccs_os_server_cleanup (int argc, const char *argv[]) {
+ cc_int32 err = 0;
+
+ cci_debug_printf("%s for user <%s> shutting down.", argv[0], argv[1]);
+
+ return cci_check_error (err);
+ }
+
+/* ------------------------------------------------------------------------ */
+
+/* This function takes work items off the work queue and executes them.
+ * This is the one and only place where the multi-threaded Windows code
+ * calls into the single-threaded common code.
+ *
+ * The actual 'listening' for requests from clients happens after receiveloop
+ * establishes the RPC endpoint the clients will connect to and the RPC procedures
+ * put the work items into the work queue.
+ */
+cc_int32 ccs_os_server_listen_loop (int argc, const char *argv[]) {
+ cc_int32 err = 0;
+ uintptr_t threadStatus;
+ unsigned int loopCounter = 0;
+
+ ParseOpts::Opts opts = { 0 };
+ ParseOpts PO;
+
+ opts.cMinCalls = 1;
+ opts.cMaxCalls = 20;
+ opts.fDontWait = TRUE;
+
+#ifdef CCAPI_TEST_OPTIONS
+ PO.SetValidOpts("kemnfubc");
+#else
+ PO.SetValidOpts("kc");
+#endif
+ PO.Parse(opts, argc, (char**)argv);
+
+
+ //++ debug stuff
+ #define INFO_BUFFER_SIZE 32767
+ TCHAR infoBuf[INFO_BUFFER_SIZE];
+ DWORD bufCharCount = INFO_BUFFER_SIZE;
+ // Get and display the user name.
+ bufCharCount = INFO_BUFFER_SIZE;
+ if( !GetUserName( infoBuf, &bufCharCount ) ) printError( TEXT("GetUserName") );
+ //--
+
+ /* Sending the reply from within the request RPC handler doesn't seem to work.
+ So we listen for requests in a separate thread and put the requests in a
+ queue. */
+ rpcargs.sessID = (unsigned char*)sessID;
+ rpcargs.opts = &opts;
+ threadStatus = _beginthread(receiveLoop, 0, (void*)&rpcargs);
+
+ /* We handle the queue entries here. Work loop: */
+ while (TRUE) {
+ loopCounter++;
+ if (worklist_isEmpty() & 1) {
+ SleepEx(1000, TRUE);
+ }
+ else if (TRUE) { // Take next WorkItem from the queue:
+ k5_ipc_stream buf = NULL;
+ long rpcmsg = CCMSG_INVALID;
+ time_t serverStartTime = 0xDEADDEAD;
+ RPC_STATUS status = 0;
+ char* uuid = NULL;
+ k5_ipc_stream stream = NULL;
+ ccs_pipe_t pipe = NULL;
+ ccs_pipe_t pipe2 = NULL;
+
+ if (worklist_remove(&rpcmsg, &pipe, &buf, &serverStartTime)) {
+ uuid = ccs_win_pipe_getUuid(pipe);
+#if 0
+ cci_debug_printf("%s: processing WorkItem msg:%ld pipeUUID:<%s> pipeHandle:0x%X SST:%ld",
+ __FUNCTION__, rpcmsg, uuid, ccs_win_pipe_getHandle(pipe), serverStartTime);
+#endif
+ if (serverStartTime <= getMySST()) {
+ switch (rpcmsg) {
+ case CCMSG_CONNECT: {
+ cci_debug_printf(" Processing CONNECT");
+ rpcargs.uuid = (unsigned char*)uuid;
+
+ // Even if a disconnect message is received before this code finishes,
+ // it won't be dequeued and processed until after this code finishes.
+ // So we can add the client after starting the connection listener.
+ connectionListener((void*)&rpcargs);
+ status = rpcargs.status;
+
+ if (!status) {
+ status = ccs_server_add_client(pipe);
+ }
+ if (!status) {status = send_connection_reply(pipe);}
+ break;
+ }
+ case CCMSG_DISCONNECT: {
+ cci_debug_printf(" Processing DISCONNECT");
+ if (!status) {
+ status = ccs_server_remove_client(pipe);
+ }
+ break;
+ }
+ case CCMSG_REQUEST:
+ cci_debug_printf(" Processing REQUEST");
+ ccs_pipe_copy(&pipe2, pipe);
+ // Dispatch message here, setting both pipes to the client UUID:
+ err = ccs_server_handle_request (pipe, pipe2, buf);
+ break;
+ case CCMSG_PING:
+ cci_debug_printf(" Processing PING");
+ err = krb5int_ipc_stream_new (&stream);
+ err = krb5int_ipc_stream_write(stream, "This is a test of the emergency broadcasting system", 52);
+ err = ccs_os_server_send_reply(pipe, stream);
+ break;
+ default:
+ cci_debug_printf("Huh? Received invalid message type %ld from UUID:<%s>",
+ rpcmsg, uuid);
+ break;
+ }
+ if (buf) krb5int_ipc_stream_release(buf);
+ /* Don't free uuid, which was allocated here. A pointer to it is in the
+ rpcargs struct which was passed to connectionListener which will be
+ received by ccapi_listen when the client exits. ccapi_listen needs
+ the uuid to know which client to disconnect.
+ */
+ }
+ // Server's start time is different from what the client thinks.
+ // That means the server has rebooted since the client connected.
+ else {
+ cci_debug_printf("Whoops! Server has rebooted since client established connection.");
+ }
+ }
+ else {cci_debug_printf("Huh? Queue not empty but no item to remove.");}
+ }
+ }
+
+ return cci_check_error (err);
+ }
+
+/* ------------------------------------------------------------------------ */
+
+cc_int32 ccs_os_server_send_reply (ccs_pipe_t in_pipe,
+ k5_ipc_stream in_reply_stream) {
+
+ /* ccs_pipe_t in_reply_pipe is a char* reply endpoint.
+ k5_ipc_stream in_reply_stream is the data to be sent.
+ */
+
+ cc_int32 err = 0;
+ char* uuid = ccs_win_pipe_getUuid(in_pipe);
+ HANDLE h = ccs_win_pipe_getHandle(in_pipe);
+
+ if (!err) {
+ err = send_init(uuid); // Sets RPC handle to be used.
+ }
+
+ if (!err) {
+ RpcTryExcept {
+ long status;
+ ccs_rpc_request_reply( // make call with user message
+ CCMSG_REQUEST_REPLY, /* Message type */
+ (unsigned char*)&h, /* client's tspdata* */
+ (unsigned char*)uuid,
+ getMySST(),
+ krb5int_ipc_stream_size(in_reply_stream), /* Length of buffer */
+ (const unsigned char*)krb5int_ipc_stream_data(in_reply_stream), /* Data buffer */
+ &status ); /* Return code */
+ }
+ RpcExcept(1) {
+ cci_check_error(RpcExceptionCode());
+ }
+ RpcEndExcept
+ }
+
+ /* The calls to the remote procedures are complete. */
+ /* Free whatever we allocated: */
+ err = RpcBindingFree(&SERVER_REPLY_RPC_HANDLE);
+
+ return cci_check_error (err);
+ }
+
+
+/* Windows-specific routines: */
+
+void Usage(const char* argv0) {
+ printf("Usage:\n");
+ printf("%s [m maxcalls] [n mincalls] [f dontwait] [h|?]]\n", argv0);
+ printf(" CCAPI server process.\n");
+ printf(" h|? whow usage message. <\n");
+ }
+
+/* ------------------------------------------------------------------------ */
+/* The receive thread repeatedly issues RpcServerListen.
+ When a message arrives, it is handled in the RPC procedure.
+ */
+void receiveLoop(void* rpcargs) {
+
+ struct RpcRcvArgs* rcvargs = (struct RpcRcvArgs*)rpcargs;
+ RPC_STATUS status = FALSE;
+ unsigned char* pszSecurity = NULL;
+ LPSTR endpoint = NULL;
+ LPSTR event_name = NULL;
+ PSECURITY_DESCRIPTOR psd = NULL;
+ HANDLE hEvent = 0;
+ Init::InitInfo info;
+
+ cci_debug_printf("THREAD BEGIN: %s", __FUNCTION__);
+
+ status = Init::Info(info);
+
+ /* Build complete RPC endpoint using previous CCAPI implementation: */
+ if (!status) {
+ if (!rcvargs->opts->pszEndpoint) {
+ if (!status) {
+ status = alloc_name(&endpoint, "ep", isNT());
+ }
+
+ if (!status) {
+ status = alloc_name(&event_name, "startup", isNT());
+ }
+
+ if (!status) {
+ hEvent = OpenEvent(EVENT_MODIFY_STATE, FALSE, event_name);
+ // We ignore any error opening the event because we do not know who started us.
+ // [Comment paraphrased from previous implementation, whence it was copied.]
+ }
+ }
+ else {
+ endpoint = rcvargs->opts->pszEndpoint;
+ }
+ }
+
+ cci_debug_printf("%s Registering endpoint %s", __FUNCTION__, endpoint);
+
+ if (!status && isNT()) {
+ status = alloc_own_security_descriptor_NT(&psd);
+ }
+
+ if (!status) {
+ status = RpcServerUseProtseqEp(rcvargs->protocolSequence,
+ rcvargs->opts->cMaxCalls,
+ (RPC_CSTR)endpoint,
+ rcvargs->opts->bDontProtect ? 0 : psd); // SD
+ }
+
+ if (!status) {
+ status = RpcServerRegisterAuthInfo(0, // server principal
+ RPC_C_AUTHN_WINNT,
+ 0,
+ 0);
+ }
+
+ while (bListen && !status) {
+ cci_debug_printf("%s is listening ...", __FUNCTION__);
+
+ if (!info.isNT) {
+ status = RpcServerRegisterIf(ccs_request_ServerIfHandle, // interface
+ NULL, // MgrTypeUuid
+ NULL); // MgrEpv; null means use default
+ }
+ else {
+ status = info.fRpcServerRegisterIfEx(ccs_request_ServerIfHandle, // interface
+ NULL, // MgrTypeUuid
+ NULL, // MgrEpv; 0 means default
+ RPC_IF_ALLOW_SECURE_ONLY,
+ rcvargs->opts->cMaxCalls,
+ rcvargs->opts->bSecCallback ?
+ (RPC_IF_CALLBACK_FN*)sec_callback : 0 );
+ }
+
+ if (!status) {
+ status = RpcServerListen(rcvargs->opts->cMinCalls,
+ rcvargs->opts->cMaxCalls,
+ rcvargs->opts->fDontWait);
+ }
+
+ if (!status) {
+ if (rcvargs->opts->fDontWait) {
+ if (hEvent) SetEvent(hEvent); // Ignore any error -- SetEvent is an optimization.
+ status = RpcMgmtWaitServerListen();
+ }
+ }
+ }
+
+ if (status) { // Cleanup in case of errors:
+ if (hEvent) CloseHandle(hEvent);
+ free_alloc_p(&event_name);
+ free_alloc_p(&psd);
+ if (endpoint && (endpoint != rcvargs->opts->pszEndpoint))
+ free_alloc_p(&endpoint);
+ }
+
+ _endthread();
+ } // End receiveLoop
+
+
+#if 0
+
+ return status;
+}
+#endif
+
+
+
+/* ------------------------------------------------------------------------ */
+/* The connection listener thread waits forever for a call to the CCAPI_CLIENT_<UUID>
+ endpoint, ccapi_listen function to complete. If the call completes or gets an
+ RPC exception, it means the client has disappeared.
+
+ A separate connectionListener is started for each client that has connected to the server.
+ */
+
+void connectionListener(void* rpcargs) {
+
+ struct RpcRcvArgs* rcvargs = (struct RpcRcvArgs*)rpcargs;
+ RPC_STATUS status = FALSE;
+ char* endpoint;
+ unsigned char* pszOptions = NULL;
+ unsigned char * pszUuid = NULL;
+
+ endpoint = clientEndpoint((char*)rcvargs->uuid);
+ rpcState = (RPC_ASYNC_STATE*)malloc(sizeof(RPC_ASYNC_STATE));
+ status = RpcAsyncInitializeHandle(rpcState, sizeof(RPC_ASYNC_STATE));
+ cci_debug_printf("");
+ cci_debug_printf("%s About to LISTEN to <%s>", __FUNCTION__, endpoint);
+
+ rpcState->UserInfo = rcvargs->uuid;
+ rpcState->NotificationType = RpcNotificationTypeApc;
+ rpcState->u.APC.NotificationRoutine = clientListener;
+ rpcState->u.APC.hThread = 0;
+
+ /* [If in use] Free previous binding: */
+ if (bRpcHandleInited) {
+ // Free previous binding (could have been used to call ccapi_listen
+ // in a different client thread).
+ // Don't check result or update status.
+ RpcStringFree(&pszStringBinding);
+ RpcBindingFree(&SERVER_REPLY_RPC_HANDLE);
+ bRpcHandleInited = FALSE;
+ }
+
+ /* Set up binding to the client's endpoint: */
+ if (!status) {
+ status = RpcStringBindingCompose(
+ pszUuid,
+ pszProtocolSequence,
+ pszNetworkAddress,
+ (RPC_CSTR)endpoint,
+ pszOptions,
+ &pszStringBinding);
+ }
+
+ /* Set the binding handle that will be used to bind to the server. */
+ if (!status) {
+ status = RpcBindingFromStringBinding(pszStringBinding, &SERVER_REPLY_RPC_HANDLE);
+ }
+ if (!status) {bRpcHandleInited = TRUE;}
+
+ RpcTryExcept {
+ cci_debug_printf(" Calling remote procedure ccapi_listen");
+ ccapi_listen(rpcState, SERVER_REPLY_RPC_HANDLE, CCMSG_LISTEN, &status);
+ /* Asynchronous call will return immediately. */
+ }
+ RpcExcept(1) {
+ status = cci_check_error(RpcExceptionCode());
+ }
+ RpcEndExcept
+
+ rcvargs->status = status;
+ } // End connectionListener
+
+
+void RPC_ENTRY clientListener(
+ _RPC_ASYNC_STATE* pAsync,
+ void* Context,
+ RPC_ASYNC_EVENT Event
+ ) {
+
+ ccs_pipe_t pipe = ccs_win_pipe_new((char*)pAsync->UserInfo, NULL);
+
+ cci_debug_printf("%s(0x%X, ...) async routine for <0x%X:%s>!",
+ __FUNCTION__, pAsync, pAsync->UserInfo, pAsync->UserInfo);
+
+ worklist_add( CCMSG_DISCONNECT,
+ pipe,
+ NULL, /* No payload with connect request */
+ (const time_t)0 ); /* No server session number with connect request */
+ }
+
+
+void printError( TCHAR* msg ) {
+ DWORD eNum;
+ TCHAR sysMsg[256];
+ TCHAR* p;
+
+ eNum = GetLastError( );
+ FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, eNum,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ sysMsg, 256, NULL );
+
+ // Trim the end of the line and terminate it with a null
+ p = sysMsg;
+ while( ( *p > 31 ) || ( *p == 9 ) )
+ ++p;
+ do { *p-- = 0; } while( ( p >= sysMsg ) &&
+ ( ( *p == '.' ) || ( *p < 33 ) ) );
+
+ // Display the message
+ cci_debug_printf("%s failed with error %d (%s)", msg, eNum, sysMsg);
+ }
+
+
+RPC_STATUS send_init(char* clientUUID) {
+ RPC_STATUS status;
+ unsigned char * pszUuid = NULL;
+ unsigned char * pszOptions = NULL;
+
+ /* Use a convenience function to concatenate the elements of */
+ /* the string binding into the proper sequence. */
+ status = RpcStringBindingCompose(pszUuid,
+ pszProtocolSequence,
+ pszNetworkAddress,
+ (unsigned char*)clientEndpoint(clientUUID),
+ pszOptions,
+ &pszStringBinding);
+ if (status) {return (status);}
+
+ /* Set the binding handle that will be used to bind to the RPC server [the 'client']. */
+ status = RpcBindingFromStringBinding(pszStringBinding, &SERVER_REPLY_RPC_HANDLE);
+ return (status);
+ }
+
+RPC_STATUS send_finish() {
+ RPC_STATUS status;
+ /* Can't shut down client -- it runs listen function which */
+ /* server uses to detect the client going away. */
+
+ /* The calls to the remote procedures are complete. */
+ /* Free the string and the binding handle */
+ status = RpcStringFree(&pszStringBinding); // remote calls done; unbind
+ if (status) {return (status);}
+
+ status = RpcBindingFree(&SERVER_REPLY_RPC_HANDLE); // remote calls done; unbind
+
+ return (status);
+ }
+
+RPC_STATUS send_connection_reply(ccs_pipe_t in_pipe) {
+ char* uuid = ccs_win_pipe_getUuid (in_pipe);
+ HANDLE h = ccs_win_pipe_getHandle(in_pipe);
+ RPC_STATUS status = send_init(uuid);
+
+ RpcTryExcept {
+ ccs_rpc_connect_reply( // make call with user message
+ CCMSG_CONNECT_REPLY, /* Message type */
+ (unsigned char*)&h, /* client's tspdata* */
+ (unsigned char*)uuid,
+ getMySST(), /* Server's session number = it's start time */
+ &status ); /* Return code */
+ }
+ RpcExcept(1) {
+ cci_check_error(RpcExceptionCode());
+ }
+ RpcEndExcept
+
+ status = send_finish();
+ return (status);
+ }
+
+#if 0
+DWORD alloc_name(LPSTR* pname, LPSTR postfix) {
+ DWORD len = strlen(sessID) + 1 + strlen(postfix) + 1;
+
+ *pname = (LPSTR)malloc(len);
+ if (!*pname) return GetLastError();
+ _snprintf(*pname, len, "%s.%s", sessID, postfix);
+ return 0;
+ }
+#endif
+
+RPC_STATUS GetPeerName( RPC_BINDING_HANDLE hClient,
+ LPTSTR pszClientName,
+ int iMaxLen) {
+ RPC_STATUS Status = RPC_S_OK;
+ RPC_BINDING_HANDLE hServer = NULL;
+ PTBYTE pszStringBinding = NULL;
+ PTBYTE pszClientNetAddr = NULL;
+ PTBYTE pszProtSequence = NULL;
+
+ memset(pszClientName, 0, iMaxLen * sizeof(TCHAR));
+
+ __try {
+ // Create a partially bound server handle from the client handle.
+ Status = RpcBindingServerFromClient (hClient, &hServer);
+ if (Status != RPC_S_OK) __leave;
+
+ // Get the partially bound server string binding and parse it.
+ Status = RpcBindingToStringBinding (hServer,
+ &pszStringBinding);
+ if (Status != RPC_S_OK) __leave;
+
+ // String binding only contains protocol sequence and client
+ // address, and is not currently implemented for named pipes.
+ Status = RpcStringBindingParse (pszStringBinding, NULL,
+ &pszProtSequence, &pszClientNetAddr,
+ NULL, NULL);
+ if (Status != RPC_S_OK)
+ __leave;
+ int iLen = lstrlen(pszClientName) + 1;
+ if (iMaxLen < iLen)
+ Status = RPC_S_BUFFER_TOO_SMALL;
+ lstrcpyn(pszClientName, (LPCTSTR)pszClientNetAddr, iMaxLen);
+ }
+ __finally {
+ if (pszProtSequence)
+ RpcStringFree (&pszProtSequence);
+
+ if (pszClientNetAddr)
+ RpcStringFree (&pszClientNetAddr);
+
+ if (pszStringBinding)
+ RpcStringFree (&pszStringBinding);
+
+ if (hServer)
+ RpcBindingFree (&hServer);
+ }
+ return Status;
+}
+
+struct client_auth_info {
+ RPC_AUTHZ_HANDLE authz_handle;
+ unsigned char* server_principal; // need to RpcFreeString this
+ ULONG authn_level;
+ ULONG authn_svc;
+ ULONG authz_svc;
+};
+
+RPC_STATUS
+GetClientId(
+ RPC_BINDING_HANDLE hClient,
+ char* client_id,
+ int max_len,
+ client_auth_info* info
+ )
+{
+ RPC_AUTHZ_HANDLE authz_handle = 0;
+ unsigned char* server_principal = 0;
+ ULONG authn_level = 0;
+ ULONG authn_svc = 0;
+ ULONG authz_svc = 0;
+ RPC_STATUS status = 0;
+
+ memset(client_id, 0, max_len);
+
+ if (info) {
+ memset(info, 0, sizeof(client_auth_info));
+ }
+
+ status = RpcBindingInqAuthClient(hClient, &authz_handle,
+ info ? &server_principal : 0,
+ &authn_level, &authn_svc, &authz_svc);
+ if (status == RPC_S_OK)
+ {
+ if (info) {
+ info->server_principal = server_principal;
+ info->authz_handle = authz_handle;
+ info->authn_level = authn_level;
+ info->authn_svc = authn_svc;
+ info->authz_svc = authz_svc;
+ }
+
+ if (authn_svc == RPC_C_AUTHN_WINNT) {
+ WCHAR* username = (WCHAR*)authz_handle;
+ int len = lstrlenW(username) + 1;
+ if (max_len < len)
+ status = RPC_S_BUFFER_TOO_SMALL;
+ _snprintf(client_id, max_len, "%S", username);
+ } else {
+ status = RPC_S_UNKNOWN_AUTHN_SERVICE;
+ }
+ }
+ return status;
+}
+
+char*
+rpc_error_to_string(
+ RPC_STATUS status
+ )
+{
+ switch(status) {
+ case RPC_S_OK:
+ return "OK";
+ case RPC_S_INVALID_BINDING:
+ return "Invalid binding";
+ case RPC_S_WRONG_KIND_OF_BINDING:
+ return "Wrong binding";
+ case RPC_S_BINDING_HAS_NO_AUTH:
+ RpcRaiseException(RPC_S_BINDING_HAS_NO_AUTH);
+ return "Binding has no auth";
+ default:
+ return "BUG: I am confused";
+ }
+}
+
+void
+print_client_info(
+ RPC_STATUS peer_status,
+ const char* peer_name,
+ RPC_STATUS client_status,
+ const char* client_id,
+ client_auth_info* info
+ )
+{
+ if (peer_status == RPC_S_OK || peer_status == RPC_S_BUFFER_TOO_SMALL) {
+ cci_debug_printf("%s Peer Name is \"%s\"", __FUNCTION__, peer_name);
+ } else {
+ cci_debug_printf("%s Error %u getting Peer Name (%s)",
+ __FUNCTION__, peer_status, rpc_error_to_string(peer_status));
+ }
+
+ if (client_status == RPC_S_OK || client_status == RPC_S_BUFFER_TOO_SMALL) {
+ if (info) {
+ cci_debug_printf("%s Client Auth Info"
+ "\tServer Principal: %s\n"
+ "\tAuthentication Level: %d\n"
+ "\tAuthentication Service: %d\n"
+ "\tAuthorization Service: %d\n",
+ __FUNCTION__,
+ info->server_principal,
+ info->authn_level,
+ info->authn_svc,
+ info->authz_svc);
+ }
+ cci_debug_printf("%s Client ID is \"%s\"", __FUNCTION__, client_id);
+ } else {
+ cci_debug_printf("%s Error getting Client Info (%u = %s)",
+ __FUNCTION__, client_status, rpc_error_to_string(client_status));
+ }
+}
+
+DWORD sid_check() {
+ DWORD status = 0;
+ HANDLE hToken_c = 0;
+ HANDLE hToken_s = 0;
+ PTOKEN_USER ptu_c = 0;
+ PTOKEN_USER ptu_s = 0;
+ DWORD len = 0;
+ BOOL bImpersonate = FALSE;
+
+ // Note GetUserName will fail while impersonating at identify
+ // level. The workaround is to impersonate, OpenThreadToken,
+ // revert, call GetTokenInformation, and finally, call
+ // LookupAccountSid.
+
+ // XXX - Note: This workaround does not appear to work.
+ // OpenThreadToken fails with error 1346: "Either a requid
+ // impersonation level was not provided or the provided
+ // impersonation level is invalid".
+
+ status = RpcImpersonateClient(0);
+
+ if (!status) {
+ bImpersonate = TRUE;
+ if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken_c))
+ status = GetLastError();
+ }
+
+ if (!status) {
+ status = RpcRevertToSelf();
+ }
+
+ if (!status) {
+ bImpersonate = FALSE;
+
+ len = 0;
+ GetTokenInformation(hToken_c, TokenUser, ptu_c, 0, &len);
+ if (len == 0) status = 1;
+ }
+
+ if (!status) {
+ if (!(ptu_c = (PTOKEN_USER)LocalAlloc(0, len)))
+ status = GetLastError();
+ }
+
+ if (!status) {
+ if (!GetTokenInformation(hToken_c, TokenUser, ptu_c, len, &len))
+ status = GetLastError();
+ }
+
+ if (!status) {
+ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken_s))
+ status = GetLastError();
+ }
+
+ if (!status) {
+ len = 0;
+ GetTokenInformation(hToken_s, TokenUser, ptu_s, 0, &len);
+ if (len == 0) status = GetLastError();
+ }
+
+ if (!status) {
+ if (!(ptu_s = (PTOKEN_USER)LocalAlloc(0, len)))
+ status = GetLastError();
+ }
+
+ if (!status) {
+ if (!GetTokenInformation(hToken_s, TokenUser, ptu_s, len, &len))
+ status = GetLastError();
+ }
+
+ if (!EqualSid(ptu_s->User.Sid, ptu_c->User.Sid))
+ status = RPC_S_ACCESS_DENIED;
+
+/* Cleanup: */
+ if (!hToken_c && !bImpersonate)
+ cci_debug_printf("%s Cannot impersonate (%u)", __FUNCTION__, status);
+ else if (!hToken_c)
+ cci_debug_printf("%s Failed to open client token (%u)", __FUNCTION__, status);
+ else if (bImpersonate)
+ cci_debug_printf("%s Failed to revert (%u)", __FUNCTION__, status);
+ else if (!ptu_c)
+ cci_debug_printf("%s Failed to get client token user info (%u)",
+ __FUNCTION__, status);
+ else if (!hToken_s)
+ cci_debug_printf("%s Failed to open server token (%u)", __FUNCTION__, status);
+ else if (!ptu_s)
+ cci_debug_printf("%s Failed to get server token user info (%u)",
+ __FUNCTION__, status);
+ else if (status == RPC_S_ACCESS_DENIED)
+ cci_debug_printf("%s SID **does not** match!", __FUNCTION__);
+ else if (status == RPC_S_OK)
+ cci_debug_printf("%s SID matches!", __FUNCTION__);
+ else
+ if (status) {
+ cci_debug_printf("%s unrecognized error %u", __FUNCTION__, status);
+ abort();
+ }
+
+ if (bImpersonate) RpcRevertToSelf();
+ if (hToken_c && hToken_c != INVALID_HANDLE_VALUE)
+ CloseHandle(hToken_c);
+ if (ptu_c) LocalFree(ptu_c);
+ if (hToken_s && hToken_s != INVALID_HANDLE_VALUE)
+ CloseHandle(hToken_s);
+ if (ptu_s) LocalFree(ptu_s);
+ if (status) cci_debug_printf("%s returning %u", __FUNCTION__, status);
+ return status;
+ }
+
+RPC_STATUS RPC_ENTRY sec_callback( IN RPC_IF_ID *Interface,
+ IN void *Context) {
+ char peer_name[1024];
+ char client_name[1024];
+ RPC_STATUS peer_status;
+ RPC_STATUS client_status;
+
+ cci_debug_printf("%s", __FUNCTION__);
+ peer_status = GetPeerName(Context, peer_name, sizeof(peer_name));
+ client_status = GetClientId(Context, client_name, sizeof(client_name), 0);
+ print_client_info(peer_status, peer_name, client_status, client_name, 0);
+ DWORD sid_status = sid_check();
+ cci_debug_printf("%s returning (%u)", __FUNCTION__, sid_status);
+ return sid_status;
+ }
+
+
+
+/*********************************************************************/
+/* MIDL allocate and free */
+/*********************************************************************/
+
+extern "C" void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {
+ return(malloc(len));
+ }
+
+extern "C" void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {
+ free(ptr);
+ }
+
+/* stubs */
+extern "C" cc_int32
+ccs_os_notify_cache_collection_changed (ccs_cache_collection_t cc)
+{
+ return 0;
+}
+
+extern "C" cc_int32
+ccs_os_notify_ccache_changed (ccs_cache_collection_t cc, const char *name)
+{
+ return 0;
+}
diff --git a/src/ccapi/test/Makefile.in b/src/ccapi/test/Makefile.in
index 175e06bf04..bf950b6a7f 100644
--- a/src/ccapi/test/Makefile.in
+++ b/src/ccapi/test/Makefile.in
@@ -6,7 +6,7 @@ CCAPI=$(BUILDTOP)$(S)CCAPI
KFWINC= /I$(BUILDTOP)\..\..\krbcc\include
!endif
-# Because all the sources are in .,
+# Because all the sources are in .,
# the only includes we need are to directories outside of ccapi.
LOCALINCLUDES = /I$(BUILDTOP) /I$(BUILDTOP)$(S)include /I$(BUILDTOP)$(S)include$(S)krb5 $(KFWINC) \
-I$(BUILDTOP)$(S)util$(S)et /I. -I$(CCAPI)$(S)COMMON -I$(CCAPI)$(S)LIB
@@ -21,7 +21,6 @@ LOCALINCLUDES = /I$(BUILDTOP) /I$(BUILDTOP)$(S)include /I$(BUILDTOP)$(S)include$
##DOS## ccs_reply.h \
##DOS## ccs_request.h \
##DOS## ccs_request_c.c \
-##DOS## cci_stream.h \
##DOS## cci_types.h \
##DOS## win-utils.h
@@ -29,6 +28,7 @@ LOCALINCLUDES = /I$(BUILDTOP) /I$(BUILDTOP)$(S)include /I$(BUILDTOP)$(S)include$
##DOS## ccapi_ccache_iterator.c \
##DOS## ccapi_context.c \
##DOS## ccapi_context_change_time.c \
+##DOS## ccapi_err.c \
##DOS## ccapi_ipc.c \
##DOS## ccapi_credentials.c \
##DOS## ccapi_credentials_iterator.c \
@@ -37,8 +37,7 @@ LOCALINCLUDES = /I$(BUILDTOP) /I$(BUILDTOP)$(S)include /I$(BUILDTOP)$(S)include$
##DOS##COMSRC=cci_cred_union.c \
##DOS## cci_identifier.c \
-##DOS## cci_message.c \
-##DOS## cci_stream.c
+##DOS## cci_message.c
##DOS##COWSRC=cci_os_identifier.c
@@ -65,6 +64,7 @@ PINGOBJS = $(OUTPRE)ccapi_ccache.$(OBJEXT) \
$(OUTPRE)ccapi_ccache_iterator.$(OBJEXT) \
$(OUTPRE)ccapi_context.$(OBJEXT) \
$(OUTPRE)ccapi_context_change_time.$(OBJEXT) \
+ $(OUTPRE)ccapi_err.$(OBJEXT) \
$(OUTPRE)ccapi_ipc.$(OBJEXT) \
$(OUTPRE)ccapi_credentials.$(OBJEXT) \
$(OUTPRE)ccapi_credentials_iterator.$(OBJEXT) \
@@ -74,7 +74,6 @@ PINGOBJS = $(OUTPRE)ccapi_ccache.$(OBJEXT) \
$(OUTPRE)cci_identifier.$(OBJEXT) \
$(OUTPRE)cci_os_identifier.$(OBJEXT) \
$(OUTPRE)cci_message.$(OBJEXT) \
- $(OUTPRE)cci_stream.$(OBJEXT) \
$(OUTPRE)ccs_request_c.$(OBJEXT) \
$(OUTPRE)pingtest.$(OBJEXT) \
$(OBJECTS)
@@ -86,7 +85,7 @@ TEST_NAMES = test_cc_ccache_iterator_next \
test_constants \
test_cc_initialize \
test_cc_credentials_iterator_next
-
+
MORE_TESTS = test_cc_context_release \
test_cc_context_get_change_time \
test_cc_context_get_default_ccache_name \
@@ -136,7 +135,7 @@ MORE_TESTS = test_cc_context_release \
##### Linker
LINK = link
LIBS = -lkrb5
-##DOS##LIBS = advapi32.lib rpcrt4.lib user32.lib ws2_32.lib ccapi.lib
+##DOS##LIBS = $(CLIB) $(SLIB) advapi32.lib rpcrt4.lib user32.lib ws2_32.lib ccapi.lib
LFLAGS = /nologo $(LOPTS)
all-mac:: setup-test-dir pingtest simple_lock_test build-base build-tests link-tests copy-script success-message
@@ -149,14 +148,14 @@ build-base: $(PINGOBJS)
# compile each test
build-tests: $(TEST_NAMES)
@echo build-tests complete.
-
-$(TEST_NAMES):
- @echo DBG: $@
+
+$(TEST_NAMES):
+ @echo DBG: $@
$(CC) $(ALL_CFLAGS) -Fe$(TESTDIR)$(S)$@.exe -Fd$(OBJDIR)$(S)$@.obj $@.c $(OBJECTS) $(LIBS)
# Clean .obj from .:
$(RM) $@.$(OBJEXT)
##-- These two rules build each element of the list.
-
+
# Make a build directory
setup-test-dir:
@echo "Removing old destination directory... $(DSTDIR)"
@@ -164,13 +163,13 @@ setup-test-dir:
mkdir -p "$(TESTDIR)"
if [ -d "$(OBJDIR)" ]; then chmod -R u+w "$(OBJDIR)" && rm -rf "$(OBJDIR)"; fi
mkdir -p "$(OBJDIR)"
-
+
## The same trick as used in TEST_NAMES to run an action on each element ofthe list WINH:
setup-windows: $(WINH) $(LIBSRC) $(COMSRC) $(COWSRC)
if NOT exist $(TESTDIR) mkdir $(TESTDIR)
if NOT exist $(OBJDIR) mkdir $(OBJDIR)
set LINK = link
-
+
# This rule assumes that nmake in ..\lib\win has already run.
# That is how ..\Makefile.in is set up.
$(WINH):
@@ -187,8 +186,8 @@ $(COWSRC):
# This rule assumes that nmake in ..\lib\win\ has already run.
$(OUTPRE)pingtest.exe: $(OBJECTS) $(PINGOBJS)
-# There doesn't appear to be any way to examine a variable and return a value
-# indicating whether a string is present in it. We use a perl script to
+# There doesn't appear to be any way to examine a variable and return a value
+# indicating whether a string is present in it. We use a perl script to
# check the LIB variable. If the path to ccapi.lib isn't present, the script
# deletes a.tmp and the following nmake actions correct LIB.
echo %%PATH%% > a.tmp
@@ -197,8 +196,8 @@ $(OUTPRE)pingtest.exe: $(OBJECTS) $(PINGOBJS)
@echo Adding ..\lib\win\srctmp to LIB
set LIB=%%LIB%%;..\lib\win\srctmp
)
- $(LINK) $(linkdebug) /map:$(@B)1.map -out:$(*B)1.exe $(conflags) $(PINGOBJS) $(LIBS)
- $(LINK) $(LFLAGS) /map:$(@B)2.map /out:$(*B)2.exe $(conflags) $(PINGOBJS) $(LIBS) $(conlibsdll)
+ $(LINK) $(linkdebug) /map:$(@B)1.map -out:$(*B)1.exe $(conflags) $(PINGOBJS) $(LIBS)
+ $(LINK) $(LFLAGS) /map:$(@B)2.map /out:$(*B)2.exe $(conflags) $(PINGOBJS) $(LIBS) $(conlibsdll)
link-tests: $(TEST_NAMES)
@@ -212,10 +211,7 @@ simple_lock_test:
$(CC) -o $(TESTDIR)/simple_lock_test simple_lock_test.c $(LIBS)
copy-script:
- echo Copy script ...
- cd
- dir ccapi_test
- cp $(SCRIPT_NAME) $(DSTDIR)$(S)$(SCRIPT_NAME)
+ $(CP) $(SCRIPT_NAME) $(DSTDIR)$(S)$(SCRIPT_NAME)
success-message:
@echo
diff --git a/src/ccapi/test/pingtest.c b/src/ccapi/test/pingtest.c
index d64db2e4b6..d44839f71a 100644
--- a/src/ccapi/test/pingtest.c
+++ b/src/ccapi/test/pingtest.c
@@ -9,7 +9,6 @@
#include "cci_debugging.h"
#include "CredentialsCache.h"
-#include "cci_stream.h"
#include "win-utils.h"
#include "ccs_request.h"
@@ -18,9 +17,9 @@
extern cc_int32 cci_os_ipc_thread_init (void);
extern cc_int32 cci_os_ipc_msg( cc_int32 in_launch_server,
- cci_stream_t in_request_stream,
+ k5_ipc_stream in_request_stream,
cc_int32 in_msg,
- cci_stream_t* out_reply_stream);
+ k5_ipc_stream* out_reply_stream);
static DWORD dwTlsIndex;
@@ -68,8 +67,8 @@ RPC_STATUS send_test(char* endpoint) {
int main( int argc, char *argv[]) {
cc_int32 err = 0;
cc_context_t context = NULL;
- cci_stream_t send_stream = NULL;
- cci_stream_t reply_stream = NULL;
+ k5_ipc_stream send_stream = NULL;
+ k5_ipc_stream reply_stream = NULL;
char* message = "Hello, RPC!";
@@ -85,8 +84,9 @@ int main( int argc, char *argv[]) {
err = cci_os_ipc_thread_init();
}
if (!err) {
- err = cci_stream_new (&send_stream);
- err = cci_stream_write(send_stream, message, 1+strlen(message));
+ err = krb5int_ipc_stream_new (&send_stream);
+ err = krb5int_ipc_stream_write(send_stream, message,
+ 1+strlen(message));
}
if (!err) {
diff --git a/src/clients/kinit/kinit.c b/src/clients/kinit/kinit.c
index 26641e8d1f..d8746cb41a 100644
--- a/src/clients/kinit/kinit.c
+++ b/src/clients/kinit/kinit.c
@@ -650,6 +650,7 @@ k5_kinit(opts, k5)
if ((opts->action == INIT_KT) && opts->keytab_name)
{
+#ifndef _WIN32
if (strncmp(opts->keytab_name, "KDB:", 3) == 0) {
code = kinit_kdb_init(&k5->ctx,
krb5_princ_realm(k5->ctx, k5->me)->data);
@@ -660,6 +661,7 @@ k5_kinit(opts, k5)
goto cleanup;
}
}
+#endif
code = krb5_kt_resolve(k5->ctx, opts->keytab_name, &keytab);
if (code != 0) {
diff --git a/src/clients/klist/klist.c b/src/clients/klist/klist.c
index f8d3cd87ac..304d69db45 100644
--- a/src/clients/klist/klist.c
+++ b/src/clients/klist/klist.c
@@ -184,7 +184,11 @@ main(argc, argv)
}
if (print_version) {
+#ifdef _WIN32 /* No access to autoconf vars; fix somehow. */
+ printf("Kerberos for Windows\n");
+#else
printf("%s version %s\n", PACKAGE_NAME, PACKAGE_VERSION);
+#endif
exit(0);
}
diff --git a/src/config/pre.in b/src/config/pre.in
index 8efa54913f..de08645550 100644
--- a/src/config/pre.in
+++ b/src/config/pre.in
@@ -411,6 +411,10 @@ TCL_RPATH = @TCL_RPATH@
TCL_MAYBE_RPATH = @TCL_MAYBE_RPATH@
TCL_INCLUDES = @TCL_INCLUDES@
+# Crypto and PRNG back-end selections
+CRYPTO_IMPL = @CRYPTO_IMPL@
+PRNG_ALG = @PRNG_ALG@
+
# error table rules
#
### /* these are invoked as $(...) foo.et, which works, but could be better */
diff --git a/src/config/win-pre.in b/src/config/win-pre.in
index 52f0e5b475..a71d88da3e 100644
--- a/src/config/win-pre.in
+++ b/src/config/win-pre.in
@@ -228,6 +228,9 @@ MFLAGS=$(MAKEFLAGS)
MAKE=-$(MAKE)
!endif
+CRYPTO_IMPL = builtin
+PRNG_ALG = yarrow
+
CFLAGS = $(CCOPTS)
ALL_CFLAGS = $(DEFS) $(DEFINES) $(LOCALINCLUDES) $(CPPFLAGS) $(CFLAGS)
diff --git a/src/include/k5-int.h b/src/include/k5-int.h
index a0d7c17285..9a81d3bbcc 100644
--- a/src/include/k5-int.h
+++ b/src/include/k5-int.h
@@ -2347,10 +2347,10 @@ typedef struct _krb5int_access {
/* Used for encrypted challenge fast factor*/
krb5_error_code (*encode_enc_data)(const krb5_enc_data *, krb5_data **);
krb5_error_code (*decode_enc_data)(const krb5_data *, krb5_enc_data **);
- void (*free_enc_data)(krb5_context, krb5_enc_data *);
+ void (KRB5_CALLCONV *free_enc_data)(krb5_context, krb5_enc_data *);
krb5_error_code (*encode_enc_ts)(const krb5_pa_enc_ts *, krb5_data **);
krb5_error_code (*decode_enc_ts)(const krb5_data *, krb5_pa_enc_ts **);
- void (*free_enc_ts)(krb5_context, krb5_pa_enc_ts *);
+ void (KRB5_CALLCONV *free_enc_ts)(krb5_context, krb5_pa_enc_ts *);
krb5_error_code
(*encrypt_helper)(krb5_context, const krb5_keyblock *, krb5_keyusage,
const krb5_data *, krb5_enc_data *);
@@ -2668,7 +2668,7 @@ void krb5int_dbgref_dump_principal(char *, krb5_principal);
#endif
/* Common hostname-parsing code. */
-krb5_error_code KRB5_CALLCONV
+krb5_error_code
krb5int_clean_hostname(krb5_context, const char *, char *, size_t);
krb5_error_code
diff --git a/src/include/win-mac.h b/src/include/win-mac.h
index 85f7a376f6..84ffe7976c 100644
--- a/src/include/win-mac.h
+++ b/src/include/win-mac.h
@@ -195,10 +195,10 @@ typedef _W64 int ssize_t;
* Functions with slightly different names on the PC
*/
#ifndef strcasecmp
-#define strcasecmp stricmp
+#define strcasecmp _stricmp
#endif
#ifndef strncasecmp
-#define strncasecmp strnicmp
+#define strncasecmp _strnicmp
#endif
/* VS2005 has deprecated strdup */
@@ -206,6 +206,9 @@ typedef _W64 int ssize_t;
#define strdup _strdup
#endif
+/* Windows has its own name for reentrant strtok. */
+#define strtok_r strtok_s
+
HINSTANCE get_lib_instance(void);
#define GETSOCKNAME_ARG2_TYPE struct sockaddr
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
index 55e9b0f37d..07954f89b9 100644
--- a/src/lib/Makefile.in
+++ b/src/lib/Makefile.in
@@ -35,10 +35,8 @@ clean-windows::
##WIN32##CLIBS = $(BUILDTOP)\util\et\$(OUTPRE)comerr.lib
##WIN32##PLIBS = $(BUILDTOP)\util\profile\$(OUTPRE)profile.lib
##WIN32##KLIBS = krb5\$(OUTPRE)krb5.lib crypto\$(OUTPRE)crypto.lib \
-##WIN32## $(BUILDTOP)\util\profile\$(OUTPRE)profile.lib \
-##WIN32## des425\$(OUTPRE)des425.lib
+##WIN32## $(BUILDTOP)\util\profile\$(OUTPRE)profile.lib
##WIN32##GLIBS = gssapi\$(OUTPRE)gssapi.lib
-##WIN32##K4LIBS = krb4\$(OUTPRE)krb4.lib
##WIN32##SDEF = k5sprt32.def
@@ -46,7 +44,6 @@ clean-windows::
##WIN32##PDEF = xpprof32.def
##WIN32##KDEF = krb5_32.def
##WIN32##GDEF = gssapi32.def
-##WIN32##K4DEF = krb4_32.def
@@ -60,7 +57,6 @@ clean-windows::
##WIN32##S_GLUE=$(OUTPRE)support_glue.obj
##WIN32##K5_GLUE=$(OUTPRE)k5_glue.obj
-##WIN32##K4_GLUE=$(OUTPRE)k4_glue.obj
##WIN32##GSS_GLUE=$(OUTPRE)gss_glue.obj
##WIN32##COMERR_GLUE=$(OUTPRE)comerr_glue.obj
##WIN32##PROF_GLUE=$(OUTPRE)prof_glue.obj
@@ -70,7 +66,6 @@ clean-windows::
##WIN32##PGLUE=$(PROF_GLUE)
##WIN32##KGLUE=$(K5_GLUE)
##WIN32##GGLUE=$(GSS_GLUE)
-##WIN32##K4GLUE=$(K4_GLUE)
##WIN32##RCFLAGS=$(CPPFLAGS) -I$(top_srcdir) -D_WIN32 -DRES_ONLY
@@ -79,7 +74,6 @@ clean-windows::
##WIN32##PRES=$(PLIB:.lib=.res)
##WIN32##KRES=$(KLIB:.lib=.res)
##WIN32##GRES=$(GLIB:.lib=.res)
-##WIN32##K4RES=$(K4LIB:.lib=.res)
##WIN32##$(SRES): $(VERSIONRC)
##WIN32## $(RC) $(RCFLAGS) -DSUPPORT_LIB -fo $@ -r $**
@@ -89,8 +83,6 @@ clean-windows::
##WIN32## $(RC) $(RCFLAGS) -DPROF_LIB -fo $@ -r $**
##WIN32##$(KRES): $(KRB5RC)
##WIN32## $(RC) $(RCFLAGS) -DKRB5_LIB -fo $@ -r $**
-##WIN32##$(K4RES): $(VERSIONRC)
-##WIN32## $(RC) $(RCFLAGS) -DKRB4_LIB -fo $@ -r $**
##WIN32##$(GRES): $(VERSIONRC)
##WIN32## $(RC) $(RCFLAGS) -DGSSAPI_LIB -fo $@ -r $**
##WIN32##$(KRB5RC): $(VERSIONRC)
@@ -98,7 +90,7 @@ clean-windows::
##WIN32##$(SLIB): $(SDEF) $(SLIBS) $(SGLUE) $(SRES)
##WIN32## link $(WINDLLFLAGS) -def:$(SDEF) -out:$*.dll \
##WIN32## $(SLIBS) $(SGLUE) $(SRES) $(WINLIBS) $(SCLIB)
-##WIN32## $(_VC_MANIFEST_EMBED_DLL)
+##WIN32## $(_VC_MANIFEST_EMBED_DLL)
##WIN32##$(SDEF): ..\util\support\libkrb5support.exports
##WIN32## echo EXPORTS > $(SDEF).new
##WIN32## type ..\util\support\libkrb5support.exports >> $(SDEF).new
@@ -125,15 +117,8 @@ clean-windows::
##WIN32## $(GLIBS) $(GGLUE) $(GRES) $(KLIB) $(CLIB) $(SLIB) $(WINLIBS) $(SCLIB)
##WIN32## $(_VC_MANIFEST_EMBED_DLL)
-##WIN32##$(K4LIB): $(K4DEF) $(K4LIBS) $(K4GLUE) $(K4RES) $(KLIB) $(CLIB) $(PLIB)
-##WIN32## link $(WINDLLFLAGS) -def:$(K4DEF) -out:$*.dll \
-##WIN32## $(K4LIBS) $(K4GLUE) $(K4RES) $(KLIB) $(CLIB) $(PLIB) $(WINLIBS) $(SCLIB)
-##WIN32## $(_VC_MANIFEST_EMBED_DLL)
-
##WIN32##$(K5_GLUE): win_glue.c
##WIN32## $(CC) $(ALL_CFLAGS) $(MITFLAGS) /c /DKRB5=1 /Fo$@ $**
-##WIN32##$(K4_GLUE): win_glue.c
-##WIN32## $(CC) $(ALL_CFLAGS) /c /DKRB4=1 /Fo$@ $**
##WIN32##$(GSS_GLUE): win_glue.c
##WIN32## $(CC) $(ALL_CFLAGS) /c /DGSSAPI=1 /Fo$@ $**
##WIN32##$(COMERR_GLUE): win_glue.c
@@ -145,7 +130,6 @@ clean-windows::
##WIN32### Build Convenience
##WIN32##comerr.lib: $(CLIB)
-##WIN32##krb4.lib: $(K4LIB)
##WIN32##krb5.lib: $(KLIB)
##WIN32##gssapi.lib: $(GLIB)
##WIN32##profile.lib: $(PLIB)
@@ -157,12 +141,6 @@ clean-windows::
##WIN32## @echo Making in lib\krb5
##WIN32## cd ..\krb5
##WIN32## $(MAKE) -$(MFLAGS)
-##WIN32## @echo Making in lib\des425
-##WIN32## cd ..\des425
-##WIN32## $(MAKE) -$(MFLAGS)
-##WIN32## @echo Making in lib\krb4
-##WIN32## cd ..\krb4
-##WIN32## $(MAKE) -$(MFLAGS)
##WIN32## @echo Making in lib\gssapi
##WIN32## cd ..\gssapi
##WIN32## $(MAKE) -$(MFLAGS)
@@ -170,7 +148,7 @@ clean-windows::
##WIN32## cd ..
##WIN32##all-windows:: lib-windows
-##WIN32##lib-windows:: krb5.lib gssapi.lib krb4.lib
+##WIN32##lib-windows:: krb5.lib gssapi.lib
##WIN32##clean-windows::
##WIN32## @echo Making clean in lib\crypto
@@ -179,12 +157,6 @@ clean-windows::
##WIN32## @echo Making clean in lib\krb5
##WIN32## cd ..\krb5
##WIN32## $(MAKE) -$(MFLAGS) clean
-##WIN32## @echo Making clean in lib\des425
-##WIN32## cd ..\des425
-##WIN32## $(MAKE) -$(MFLAGS) clean
-##WIN32## @echo Making clean in lib\krb4
-##WIN32## cd ..\krb4
-##WIN32## $(MAKE) -$(MFLAGS) clean
##WIN32## @echo Making clean in lib\gssapi
##WIN32## cd ..\gssapi
##WIN32## $(MAKE) -$(MFLAGS) clean
diff --git a/src/lib/crypto/Makefile.in b/src/lib/crypto/Makefile.in
index a1d0eb747b..12098d60ca 100644
--- a/src/lib/crypto/Makefile.in
+++ b/src/lib/crypto/Makefile.in
@@ -1,6 +1,6 @@
mydir=lib/crypto
BUILDTOP=$(REL)..$(S)..
-SUBDIRS= krb @CRYPTO_IMPL@ crypto_tests
+SUBDIRS= krb $(CRYPTO_IMPL) crypto_tests
RUN_SETUP = @KRB5_RUN_ENV@
PROG_LIBPATH=-L$(TOPLIBD)
@@ -19,32 +19,32 @@ LIBFINIFUNC=cryptoint_cleanup_library
RELDIR=crypto
STOBJLISTS=krb/crc32/OBJS.ST krb/dk/OBJS.ST \
- @CRYPTO_IMPL@/enc_provider/OBJS.ST \
- @CRYPTO_IMPL@/hash_provider/OBJS.ST \
+ $(CRYPTO_IMPL)/enc_provider/OBJS.ST \
+ $(CRYPTO_IMPL)/hash_provider/OBJS.ST \
krb/checksum/OBJS.ST krb/prf/OBJS.ST krb/rand2key/OBJS.ST \
krb/old/OBJS.ST krb/raw/OBJS.ST krb/prng/OBJS.ST \
- krb/prng/@PRNG_ALG@/OBJS.ST \
- @CRYPTO_IMPL@/md4/OBJS.ST @CRYPTO_IMPL@/md5/OBJS.ST \
- @CRYPTO_IMPL@/sha1/OBJS.ST \
- @CRYPTO_IMPL@/sha2/OBJS.ST \
+ krb/prng/$(PRNG_ALG)/OBJS.ST \
+ $(CRYPTO_IMPL)/md4/OBJS.ST $(CRYPTO_IMPL)/md5/OBJS.ST \
+ $(CRYPTO_IMPL)/sha1/OBJS.ST \
+ $(CRYPTO_IMPL)/sha2/OBJS.ST \
krb/arcfour/OBJS.ST \
- @CRYPTO_IMPL@/aes/OBJS.ST @CRYPTO_IMPL@/des/OBJS.ST \
- @CRYPTO_IMPL@/camellia/OBJS.ST krb/OBJS.ST \
- @CRYPTO_IMPL@/OBJS.ST
+ $(CRYPTO_IMPL)/aes/OBJS.ST $(CRYPTO_IMPL)/des/OBJS.ST \
+ $(CRYPTO_IMPL)/camellia/OBJS.ST krb/OBJS.ST \
+ $(CRYPTO_IMPL)/OBJS.ST
SUBDIROBJLISTS=krb/crc32/OBJS.ST krb/dk/OBJS.ST \
- @CRYPTO_IMPL@/enc_provider/OBJS.ST \
- @CRYPTO_IMPL@/hash_provider/OBJS.ST \
+ $(CRYPTO_IMPL)/enc_provider/OBJS.ST \
+ $(CRYPTO_IMPL)/hash_provider/OBJS.ST \
krb/checksum/OBJS.ST krb/prf/OBJS.ST krb/rand2key/OBJS.ST \
krb/old/OBJS.ST krb/raw/OBJS.ST krb/prng/OBJS.ST \
- krb/prng/@PRNG_ALG@/OBJS.ST \
- @CRYPTO_IMPL@/md4/OBJS.ST @CRYPTO_IMPL@/md5/OBJS.ST \
- @CRYPTO_IMPL@/sha1/OBJS.ST \
- @CRYPTO_IMPL@/sha2/OBJS.ST \
+ krb/prng/$(PRNG_ALG)/OBJS.ST \
+ $(CRYPTO_IMPL)/md4/OBJS.ST $(CRYPTO_IMPL)/md5/OBJS.ST \
+ $(CRYPTO_IMPL)/sha1/OBJS.ST \
+ $(CRYPTO_IMPL)/sha2/OBJS.ST \
krb/arcfour/OBJS.ST \
- @CRYPTO_IMPL@/aes/OBJS.ST @CRYPTO_IMPL@/des/OBJS.ST \
- @CRYPTO_IMPL@/camellia/OBJS.ST krb/OBJS.ST \
- @CRYPTO_IMPL@/OBJS.ST
+ $(CRYPTO_IMPL)/aes/OBJS.ST $(CRYPTO_IMPL)/des/OBJS.ST \
+ $(CRYPTO_IMPL)/camellia/OBJS.ST krb/OBJS.ST \
+ $(CRYPTO_IMPL)/OBJS.ST
# No dependencies. Record places to find this shared object if the target
# link editor and loader support it.
@@ -58,7 +58,9 @@ SHLIB_LDFLAGS= $(LDFLAGS) @SHLIB_RPATH_DIRS@
SHLIB_LIBDIRS= @SHLIB_LIBDIRS@
SHLIB_RDIRS=$(KRB5_LIBDIR)
-##DOS##LIBOBJS = $(OBJS)
+##DOS##LIBNAME=$(OUTPRE)crypto.lib
+##DOS##OBJFILEDEP=$(OUTPRE)crc32.lst $(OUTPRE)rand2key.lst $(OUTPRE)yarrow.lst $(OUTPRE)prng.lst $(OUTPRE)prf.lst $(OUTPRE)checksum.lst $(OUTPRE)krb.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)arcfour.lst $(OUTPRE)dk.lst $(OUTPRE)aes.lst $(OUTPRE)enc_provider.lst $(OUTPRE)des.lst $(OUTPRE)md5.lst $(OUTPRE)camellia.lst $(OUTPRE)md4.lst $(OUTPRE)hash_provider.lst $(OUTPRE)sha2.lst $(OUTPRE)sha1.lst $(OUTPRE)builtin.lst
+##DOS##OBJFILELIST=@$(OUTPRE)crc32.lst @$(OUTPRE)rand2key.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)prng.lst @$(OUTPRE)prf.lst @$(OUTPRE)checksum.lst @$(OUTPRE)krb.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)dk.lst @$(OUTPRE)aes.lst @$(OUTPRE)enc_provider.lst @$(OUTPRE)des.lst @$(OUTPRE)md5.lst @$(OUTPRE)camellia.lst @$(OUTPRE)md4.lst @$(OUTPRE)hash_provider.lst @$(OUTPRE)sha2.lst @$(OUTPRE)sha1.lst @$(OUTPRE)builtin.lst
all-unix:: all-liblinks
install-unix:: install-libs
@@ -76,8 +78,8 @@ all-windows::
cd krb
@echo Making in crypto\krb
$(MAKE) -$(MFLAGS)
- cd ..\@CRYPTO_IMPL@
- @echo Making in crypto\@CRYPTO_IMPL@
+ cd ..\$(CRYPTO_IMPL)
+ @echo Making in crypto\$(CRYPTO_IMPL)
$(MAKE) -$(MFLAGS)
cd ..\crypto_tests
@echo Making in crypto\crypto_tests
@@ -88,8 +90,8 @@ clean-windows::
cd krb
@echo Making in clean crypto\krb
$(MAKE) -$(MFLAGS) clean
- cd ..\@CRYPTO_IMPL@
- @echo Making clean in crypto\@CRYPTO_IMPL@
+ cd ..\$(CRYPTO_IMPL)
+ @echo Making clean in crypto\$(CRYPTO_IMPL)
$(MAKE) -$(MFLAGS) clean
cd ..\crypto_tests
@echo Making clean in crypto\crypto_tests
diff --git a/src/lib/crypto/builtin/Makefile.in b/src/lib/crypto/builtin/Makefile.in
index 240d2895b3..603c57cd07 100644
--- a/src/lib/crypto/builtin/Makefile.in
+++ b/src/lib/crypto/builtin/Makefile.in
@@ -20,11 +20,9 @@ DEFS=
EXTRADEPSRCS= $(srcdir)/t_cf2.c
-##DOSBUILDTOP = ..\..\..
-##DOSLIBNAME=$(OUTPRE)crypto.lib
-##DOSOBJFILE=$(OUTPRE)crypto.lst
-##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)kh_pro.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst $(OUTPRE)camellia.lst
-##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)kh_pro.lst $(OUTPRE)aes.lst $(OUTPRE)camellia.lst
+##DOS##BUILDTOP = ..\..\..
+##DOS##PREFIXDIR = builtin
+##DOS##OBJFILE = ..\$(OUTPRE)builtin.lst
STLIBOBJS=\
hmac.o \
@@ -78,91 +76,97 @@ clean::
all-windows::
- cd ..\des
- @echo Making in crypto\des
+ cd des
+ @echo Making in crypto\builtin\des
$(MAKE) -$(MFLAGS)
cd ..\md4
- @echo Making in crypto\md4
+ @echo Making in crypto\builtin\md4
$(MAKE) -$(MFLAGS)
cd ..\md5
- @echo Making in crypto\md5
+ @echo Making in crypto\builtin\md5
$(MAKE) -$(MFLAGS)
cd ..\sha1
- @echo Making in crypto\sha1
+ @echo Making in crypto\builtin\sha1
$(MAKE) -$(MFLAGS)
- cd ..\sh2a
- @echo Making in crypto\sha2
+ cd ..\sha2
+ @echo Making in crypto\builtin\sha2
$(MAKE) -$(MFLAGS)
cd ..\hash_provider
- @echo Making in crypto\hash_provider
+ @echo Making in crypto\builtin\hash_provider
$(MAKE) -$(MFLAGS)
cd ..\enc_provider
- @echo Making in crypto\enc_provider
+ @echo Making in crypto\builtin\enc_provider
$(MAKE) -$(MFLAGS)
cd ..\aes
- @echo Making in crypto\aes
+ @echo Making in crypto\builtin\aes
$(MAKE) -$(MFLAGS)
cd ..\camellia
- @echo Making in crypto\camellia
+ @echo Making in crypto\builtin\camellia
$(MAKE) -$(MFLAGS)
cd ..
+ @echo Making in crypto\builtin
clean-windows::
- cd ..\des
- @echo Making clean in crypto\des
+ cd des
+ @echo Making clean in crypto\builtin\des
$(MAKE) -$(MFLAGS) clean
cd ..\md4
- @echo Making clean in crypto\md4
+ @echo Making clean in crypto\builtin\md4
$(MAKE) -$(MFLAGS) clean
cd ..\md5
- @echo Making clean in crypto\md5
+ @echo Making clean in crypto\builtin\md5
$(MAKE) -$(MFLAGS) clean
cd ..\sha1
- @echo Making clean in crypto\sha1
+ @echo Making clean in crypto\builtin\sha1
$(MAKE) -$(MFLAGS) clean
cd ..\sha2
- @echo Making clean in crypto\sha2
+ @echo Making clean in crypto\builtin\sha2
$(MAKE) -$(MFLAGS) clean
cd ..\hash_provider
- @echo Making clean in crypto\hash_provider
+ @echo Making clean in crypto\builtin\hash_provider
$(MAKE) -$(MFLAGS) clean
cd ..\enc_provider
- @echo Making clean in crypto\enc_provider
+ @echo Making clean in crypto\builtin\enc_provider
$(MAKE) -$(MFLAGS) clean
cd ..\aes
- @echo Making clean in crypto\aes
+ @echo Making clean in crypto\builtin\aes
$(MAKE) -$(MFLAGS) clean
cd ..\camellia
- @echo Making clean in crypto\camellia
+ @echo Making clean in crypto\builtin\camellia
$(MAKE) -$(MFLAGS) clean
cd ..
+ @echo Making clean in crypto\builtin
check-windows::
- cd ..\des
- @echo Making check in crypto\des
+ cd des
+ @echo Making check in crypto\builtin\des
$(MAKE) -$(MFLAGS) check
cd ..\md4
- @echo Making check in crypto\md4
+ @echo Making check in crypto\builtin\md4
$(MAKE) -$(MFLAGS) check
cd ..\md5
- @echo Making check in crypto\md5
+ @echo Making check in crypto\builtin\md5
$(MAKE) -$(MFLAGS) check
cd ..\sha1
- @echo Making check in crypto\sha1
+ @echo Making check in crypto\builtin\sha1
+ $(MAKE) -$(MFLAGS) check
+ cd ..\sha2
+ @echo Making check in crypto\builtin\sha2
$(MAKE) -$(MFLAGS) check
cd ..\hash_provider
- @echo Making check in crypto\hash_provider
+ @echo Making check in crypto\builtin\hash_provider
$(MAKE) -$(MFLAGS) check
cd ..\enc_provider
- @echo Making check in crypto\enc_provider
+ @echo Making check in crypto\builtin\enc_provider
$(MAKE) -$(MFLAGS) check
cd ..\aes
- @echo Making check in crypto\aes
+ @echo Making check in crypto\builtin\aes
$(MAKE) -$(MFLAGS) check
cd ..\camellia
- @echo Making check in crypto\camellia
+ @echo Making check in crypto\builtin\camellia
$(MAKE) -$(MFLAGS) check
cd ..
+ @echo Making check in crypto\builtin
@lib_frag@
diff --git a/src/lib/crypto/builtin/aes/Makefile.in b/src/lib/crypto/builtin/aes/Makefile.in
index 260cc97cc3..64f73a379b 100644
--- a/src/lib/crypto/builtin/aes/Makefile.in
+++ b/src/lib/crypto/builtin/aes/Makefile.in
@@ -4,8 +4,8 @@ LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../krb/dk -I$(srcdir)/../../../..
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=aes
-##DOS##OBJFILE=..\$(OUTPRE)aes.lst
+##DOS##PREFIXDIR = builtin\aes
+##DOS##OBJFILE = ..\..\$(OUTPRE)aes.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/builtin/camellia/Makefile.in b/src/lib/crypto/builtin/camellia/Makefile.in
index d848defd84..2ad3e73f66 100644
--- a/src/lib/crypto/builtin/camellia/Makefile.in
+++ b/src/lib/crypto/builtin/camellia/Makefile.in
@@ -7,8 +7,8 @@ LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../krb/dk \
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=camellia
-##DOS##OBJFILE=..\$(OUTPRE)camellia.lst
+##DOS##PREFIXDIR = builtin\camellia
+##DOS##OBJFILE = ..\..\$(OUTPRE)camellia.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/builtin/des/Makefile.in b/src/lib/crypto/builtin/des/Makefile.in
index 325fdc2629..5001d48bfc 100644
--- a/src/lib/crypto/builtin/des/Makefile.in
+++ b/src/lib/crypto/builtin/des/Makefile.in
@@ -4,8 +4,8 @@ LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../.. -I$(srcdir)/../../krb
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=des
-##DOS##OBJFILE=..\$(OUTPRE)des.lst
+##DOS##PREFIXDIR = builtin\des
+##DOS##OBJFILE = ..\..\$(OUTPRE)des.lst
RUN_SETUP = @KRB5_RUN_ENV@
PROG_LIBPATH=-L$(TOPLIBD)
diff --git a/src/lib/crypto/builtin/enc_provider/Makefile.in b/src/lib/crypto/builtin/enc_provider/Makefile.in
index aadec6e6a8..80bfc60bd3 100644
--- a/src/lib/crypto/builtin/enc_provider/Makefile.in
+++ b/src/lib/crypto/builtin/enc_provider/Makefile.in
@@ -10,8 +10,8 @@ LOCALINCLUDES = -I$(srcdir)/../des \
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=enc_provider
-##DOS##OBJFILE=..\$(OUTPRE)enc_prov.lst
+##DOS##PREFIXDIR = builtin\enc_provider
+##DOS##OBJFILE = ..\..\$(OUTPRE)enc_provider.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/builtin/enc_provider/camellia.c b/src/lib/crypto/builtin/enc_provider/camellia.c
index 566f2d78fb..337a3104d3 100644
--- a/src/lib/crypto/builtin/enc_provider/camellia.c
+++ b/src/lib/crypto/builtin/enc_provider/camellia.c
@@ -358,9 +358,11 @@ krb5int_camellia_cbc_mac(krb5_key key, const krb5_crypto_iov *data,
}
const struct krb5_enc_provider krb5int_enc_camellia128 = {
+ 0
};
const struct krb5_enc_provider krb5int_enc_camellia256 = {
+ 0
};
#endif /* CAMELLIA */
diff --git a/src/lib/crypto/builtin/hash_provider/Makefile.in b/src/lib/crypto/builtin/hash_provider/Makefile.in
index 36ec412c5f..e91901ee5b 100644
--- a/src/lib/crypto/builtin/hash_provider/Makefile.in
+++ b/src/lib/crypto/builtin/hash_provider/Makefile.in
@@ -5,8 +5,8 @@ LOCALINCLUDES = -I$(srcdir)/../../krb/crc32 -I$(srcdir)/../md4 \
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=hash_provider
-##DOS##OBJFILE=..\$(OUTPRE)hash_pro.lst
+##DOS##PREFIXDIR = builtin\hash_provider
+##DOS##OBJFILE = ..\..\$(OUTPRE)hash_provider.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/builtin/md4/Makefile.in b/src/lib/crypto/builtin/md4/Makefile.in
index 561927a1e0..00ec64315a 100644
--- a/src/lib/crypto/builtin/md4/Makefile.in
+++ b/src/lib/crypto/builtin/md4/Makefile.in
@@ -4,8 +4,8 @@ LOCALINCLUDES = -I$(srcdir)
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=md4
-##DOS##OBJFILE=..\$(OUTPRE)md4.lst
+##DOS##PREFIXDIR = builtin\md4
+##DOS##OBJFILE = ..\..\$(OUTPRE)md4.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/builtin/md5/Makefile.in b/src/lib/crypto/builtin/md5/Makefile.in
index 6a1f52fa6c..840bb62b94 100644
--- a/src/lib/crypto/builtin/md5/Makefile.in
+++ b/src/lib/crypto/builtin/md5/Makefile.in
@@ -3,8 +3,8 @@ BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=md5
-##DOS##OBJFILE=..\$(OUTPRE)md5.lst
+##DOS##PREFIXDIR = builtin\md5
+##DOS##OBJFILE = ..\..\$(OUTPRE)md5.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/builtin/sha1/Makefile.in b/src/lib/crypto/builtin/sha1/Makefile.in
index ec51713a19..719f633702 100644
--- a/src/lib/crypto/builtin/sha1/Makefile.in
+++ b/src/lib/crypto/builtin/sha1/Makefile.in
@@ -3,8 +3,8 @@ BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=sha1
-##DOS##OBJFILE=..\$(OUTPRE)sha1.lst
+##DOS##PREFIXDIR = builtin\sha1
+##DOS##OBJFILE = ..\..\$(OUTPRE)sha1.lst
RUN_SETUP = @KRB5_RUN_ENV@
PROG_LIBPATH=-L$(TOPLIBD)
diff --git a/src/lib/crypto/builtin/sha2/Makefile.in b/src/lib/crypto/builtin/sha2/Makefile.in
index 535d7eeb85..3b854ec29e 100644
--- a/src/lib/crypto/builtin/sha2/Makefile.in
+++ b/src/lib/crypto/builtin/sha2/Makefile.in
@@ -3,8 +3,8 @@ BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=sha2
-##DOS##OBJFILE=..\$(OUTPRE)sha2.lst
+##DOS##PREFIXDIR = builtin\sha2
+##DOS##OBJFILE = ..\..\$(OUTPRE)sha2.lst
RUN_SETUP = @KRB5_RUN_ENV@
PROG_LIBPATH=-L$(TOPLIBD)
diff --git a/src/lib/crypto/crypto_tests/Makefile.in b/src/lib/crypto/crypto_tests/Makefile.in
index 06b1745e92..17e1683d61 100644
--- a/src/lib/crypto/crypto_tests/Makefile.in
+++ b/src/lib/crypto/crypto_tests/Makefile.in
@@ -1,15 +1,16 @@
mydir=lib/crypto/crypto_tests
BUILDTOP=$(REL)..$(S)..$(S)..
-LOCALINCLUDES = -I$(srcdir)/../krb -I$(srcdir)/../@CRYPTO_IMPL@/enc_provider \
- -I$(srcdir)/../@CRYPTO_IMPL@/hash_provider -I$(srcdir)/../krb/keyhash_provider \
- -I$(srcdir)/../krb/dk -I$(srcdir)/../@CRYPTO_IMPL@/ \
- -I$(srcdir)/../krb/prng \
- -I$(srcdir)/../krb/prng/@PRNG_ALG@ \
- -I$(srcdir)/../krb/crc32 -I$(srcdir)/../krb/old -I$(srcdir)/../krb/raw \
- -I$(srcdir)/../@CRYPTO_IMPL@/aes -I$(srcdir)/../@CRYPTO_IMPL@/des \
- -I$(srcdir)/../@CRYPTO_IMPL@/arcfour -I$(srcdir)/../@CRYPTO_IMPL@/sha1 \
- -I$(srcdir)/../@CRYPTO_IMPL@/md5 -I$(srcdir)/../@CRYPTO_IMPL@/md4 \
- -I$(srcdir)/../@CRYPTO_IMPL@/camellia
+LOCALINCLUDES = -I$(srcdir)/../krb -I$(srcdir)/../$(CRYPTO_IMPL)/enc_provider \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/hash_provider \
+ -I$(srcdir)/../krb/keyhash_provider -I$(srcdir)/../krb/dk \
+ -I$(srcdir)/../$(CRYPTO_IMPL) -I$(srcdir)/../krb/prng \
+ -I$(srcdir)/../krb/prng/$(PRNG_ALG) -I$(srcdir)/../krb/crc32 \
+ -I$(srcdir)/../krb/old -I$(srcdir)/../krb/raw \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/aes -I$(srcdir)/../$(CRYPTO_IMPL)/des \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/arcfour \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/sha1 \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/md5 -I$(srcdir)/../$(CRYPTO_IMPL)/md4 \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/camellia
RUN_SETUP = @KRB5_RUN_ENV@
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
@@ -39,13 +40,7 @@ EXTRADEPSRCS=\
$(srcdir)/t_fork.c \
$(srcdir)/ytest.c
-##DOSBUILDTOP = ..\..\..
-##DOSLIBNAME=$(OUTPRE)crypto.lib
-##DOSOBJFILE=$(OUTPRE)crypto.lst
-##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)kh_pro.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst
-##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)arcfour.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)kh_pro.lst $(OUTPRE)aes.lst
-
-##DOS##LIBOBJS = $(OBJS)
+##DOS##BUILDTOP = ..\..\..
# NOTE: The t_cksum known checksum values are primarily for regression
# testing. They are not derived a priori, but are known to produce
@@ -63,7 +58,7 @@ check-unix:: t_nfold t_encrypt t_decrypt t_prf t_prng t_cmac t_hmac \
$(RUN_SETUP) $(VALGRIND) ./t_encrypt
$(RUN_SETUP) $(VALGRIND) ./t_decrypt
$(RUN_SETUP) $(VALGRIND) ./t_prng <$(srcdir)/t_prng.seed >t_prng.output
- if [ @PRNG_ALG@ = yarrow ]; then \
+ if [ $(PRNG_ALG) = yarrow ]; then \
diff t_prng.output $(srcdir)/t_prng.expected; \
fi
$(RUN_SETUP) $(VALGRIND) ./t_cmac
diff --git a/src/lib/crypto/krb/Makefile.in b/src/lib/crypto/krb/Makefile.in
index 94b06c4eeb..7536bf80be 100644
--- a/src/lib/crypto/krb/Makefile.in
+++ b/src/lib/crypto/krb/Makefile.in
@@ -2,25 +2,25 @@ mydir=lib/crypto/krb
BUILDTOP=$(REL)..$(S)..$(S)..
SUBDIRS= arcfour checksum crc32 dk \
prf rand2key old raw prng
-LOCALINCLUDES = -I$(srcdir) -I$(srcdir)/../@CRYPTO_IMPL@/enc_provider -I$(srcdir)/dk \
- -I$(srcdir)/../@CRYPTO_IMPL@/hash_provider \
- -I$(srcdir)/prf -I$(srcdir)/rand2key \
+LOCALINCLUDES = -I$(srcdir) -I$(srcdir)/../$(CRYPTO_IMPL)/enc_provider \
+ -I$(srcdir)/dk -I$(srcdir)/../$(CRYPTO_IMPL)/hash_provider \
+ -I$(srcdir)/prf -I$(srcdir)/rand2key \
-I$(srcdir)/old -I$(srcdir)/raw \
- -I$(srcdir)/prng \
- -I$(srcdir)/prng/@PRNG_ALG@ \
- -I$(srcdir)/../@CRYPTO_IMPL@/ -I$(srcdir)/../@CRYPTO_IMPL@/des \
- -I$(srcdir)/../@CRYPTO_IMPL@/aes -I$(srcdir)/arcfour \
- -I$(srcdir)/../@CRYPTO_IMPL@/camellia \
- -I$(srcdir)/../@CRYPTO_IMPL@/sha1 -I$(srcdir)/../@CRYPTO_IMPL@
+ -I$(srcdir)/prng \
+ -I$(srcdir)/prng/$(PRNG_ALG) \
+ -I$(srcdir)/../$(CRYPTO_IMPL) \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/des \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/aes -I$(srcdir)/arcfour \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/camellia \
+ -I$(srcdir)/../$(CRYPTO_IMPL)/sha1 \
+ -I$(srcdir)/../$(CRYPTO_IMPL)
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
DEFS=
-##DOSBUILDTOP = ..\..\..
-##DOSLIBNAME=$(OUTPRE)crypto.lib
-##DOSOBJFILE=$(OUTPRE)crypto.lst
-##DOSOBJFILELIST=@$(OUTPRE)crypto.lst @$(OUTPRE)des.lst @$(OUTPRE)md4.lst @$(OUTPRE)md5.lst @$(OUTPRE)sha1.lst @$(OUTPRE)arcfour.lst @$(OUTPRE)crc32.lst @$(OUTPRE)dk.lst @$(OUTPRE)old.lst @$(OUTPRE)raw.lst @$(OUTPRE)enc_prov.lst @$(OUTPRE)hash_pro.lst @$(OUTPRE)cksum.lst @$(OUTPRE)yarrow.lst @$(OUTPRE)aes.lst
-##DOSOBJFILEDEP =$(OUTPRE)crypto.lst $(OUTPRE)des.lst $(OUTPRE)md4.lst $(OUTPRE)md5.lst $(OUTPRE)sha1.lst $(OUTPRE)arcfour.lst $(OUTPRE)crc32.lst $(OUTPRE)dk.lst $(OUTPRE)old.lst $(OUTPRE)raw.lst $(OUTPRE)enc_prov.lst $(OUTPRE)hash_pro.lst $(OUTPRE)cksum.lst $(OUTPRE)aes.lst
+##DOS##BUILDTOP = ..\..\..
+##DOS##PREFIXDIR = krb
+##DOS##OBJFILE = ..\$(OUTPRE)krb.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
@@ -67,7 +67,7 @@ STLIBOBJS=\
OBJS=\
$(OUTPRE)aead.$(OBJEXT) \
$(OUTPRE)block_size.$(OBJEXT) \
- $(OUTPRE)cf2$(OBJEXT) \
+ $(OUTPRE)cf2.$(OBJEXT) \
$(OUTPRE)checksum_length.$(OBJEXT) \
$(OUTPRE)cksumtype_to_string.$(OBJEXT) \
$(OUTPRE)cksumtypes.$(OBJEXT) \
@@ -83,7 +83,7 @@ OBJS=\
$(OUTPRE)encrypt_length.$(OBJEXT) \
$(OUTPRE)enctype_util.$(OBJEXT) \
$(OUTPRE)etypes.$(OBJEXT) \
- $(OUTPRE)key.$(OBJECT) \
+ $(OUTPRE)key.$(OBJEXT) \
$(OUTPRE)keyblocks.$(OBJEXT) \
$(OUTPRE)keyed_cksum.$(OBJEXT) \
$(OUTPRE)keyed_checksum_types.$(OBJEXT) \
@@ -98,6 +98,7 @@ OBJS=\
$(OUTPRE)random_to_key.$(OBJEXT) \
$(OUTPRE)state.$(OBJEXT) \
$(OUTPRE)string_to_cksumtype.$(OBJEXT) \
+ $(OUTPRE)string_to_key.$(OBJEXT) \
$(OUTPRE)valid_cksumtype.$(OBJEXT) \
$(OUTPRE)verify_checksum.$(OBJEXT) \
$(OUTPRE)verify_checksum_iov.$(OBJEXT)
@@ -143,11 +144,11 @@ SRCS=\
STOBJLISTS=arcfour/OBJS.ST checksum/OBJS.ST crc32/OBJS.ST \
dk/OBJS.ST prf/OBJS.ST rand2key/OBJS.ST \
- old/OBJS.ST raw/OBJS.ST prng/@PRNG_ALG@/OBJS.ST prng/OBJS.ST OBJS.ST
+ old/OBJS.ST raw/OBJS.ST prng/$(PRNG_ALG)/OBJS.ST prng/OBJS.ST OBJS.ST
SUBDIROBJLISTS=arcfour/OBJS.ST checksum/OBJS.ST crc32/OBJS.ST \
dk/OBJS.ST prf/OBJS.ST rand2key/OBJS.ST \
- old/OBJS.ST raw/OBJS.ST prng/@PRNG_ALG@/OBJS.ST prng/OBJS.ST
+ old/OBJS.ST raw/OBJS.ST prng/$(PRNG_ALG)/OBJS.ST prng/OBJS.ST
##DOS##LIBOBJS = $(OBJS)
@@ -160,93 +161,96 @@ clean-unix:: clean-libobjs
all-windows::
cd arcfour
- @echo Making in crypto\arcfour
+ @echo Making in crypto\krb\arcfour
$(MAKE) -$(MFLAGS)
cd ..\crc32
- @echo Making in crypto\crc32
+ @echo Making in crypto\krb\crc32
$(MAKE) -$(MFLAGS)
cd ..\checksum
- @echo Making in crypto\checksum
+ @echo Making in crypto\krb\checksum
$(MAKE) -$(MFLAGS)
cd ..\dk
- @echo Making in crypto\dk
+ @echo Making in crypto\krb\dk
$(MAKE) -$(MFLAGS)
cd ..\prf
- @echo Making in crypto\prf
+ @echo Making in crypto\krb\prf
$(MAKE) -$(MFLAGS)
cd ..\rand2key
- @echo Making in crypto\rand2key
+ @echo Making in crypto\krb\rand2key
$(MAKE) -$(MFLAGS)
cd ..\old
- @echo Making in crypto\old
+ @echo Making in crypto\krb\old
$(MAKE) -$(MFLAGS)
cd ..\raw
- @echo Making in crypto\raw
+ @echo Making in crypto\krb\raw
$(MAKE) -$(MFLAGS)
cd ..\prng
- @echo Making in crypto\prng
+ @echo Making in crypto\krb\prng
$(MAKE) -$(MFLAGS)
cd ..
+ @echo Making in crypto\krb
clean-windows::
cd arcfour
- @echo Making in clean crypto\arcfour
+ @echo Making in clean crypto\krb\arcfour
$(MAKE) -$(MFLAGS) clean
cd ..\crc32
- @echo Making in clean crypto\crc32
+ @echo Making in clean crypto\krb\crc32
$(MAKE) -$(MFLAGS) clean
cd ..\checksum
- @echo Making clean in crypto\checksum
+ @echo Making clean in crypto\krb\checksum
$(MAKE) -$(MFLAGS) clean
cd ..\dk
- @echo Making clean in crypto\dk
+ @echo Making clean in crypto\krb\dk
$(MAKE) -$(MFLAGS) clean
cd ..\prf
- @echo Making clean in crypto\prf
+ @echo Making clean in crypto\krb\prf
$(MAKE) -$(MFLAGS) clean
cd ..\rand2key
- @echo Making clean in crypto\rand2key
+ @echo Making clean in crypto\krb\rand2key
$(MAKE) -$(MFLAGS) clean
cd ..\old
- @echo Making clean in crypto\old
+ @echo Making clean in crypto\krb\old
$(MAKE) -$(MFLAGS) clean
cd ..\raw
- @echo Making clean in crypto\raw
+ @echo Making clean in crypto\krb\raw
$(MAKE) -$(MFLAGS) clean
cd ..\prng
- @echo Making clean in crypto\prng
+ @echo Making clean in crypto\krb\prng
$(MAKE) -$(MFLAGS) clean
cd ..
+ @echo Making clean in crypto\krb
check-windows::
cd arcfour
- @echo Making in check crypto\arcfour
+ @echo Making in check crypto\krb\arcfour
$(MAKE) -$(MFLAGS) check
cd ..\crc32
- @echo Making in check crypto\crc32
+ @echo Making in check crypto\krb\crc32
$(MAKE) -$(MFLAGS) check
cd ..\checksum
- @echo Making check in crypto\checksum
+ @echo Making check in crypto\krb\checksum
$(MAKE) -$(MFLAGS) check
cd ..\dk
- @echo Making check in crypto\dk
+ @echo Making check in crypto\krb\dk
$(MAKE) -$(MFLAGS) check
cd ..\prf
- @echo Making check in crypto\prf
+ @echo Making check in crypto\krb\prf
$(MAKE) -$(MFLAGS) check
cd ..\rand2key
- @echo Making check in crypto\rand2key
+ @echo Making check in crypto\krb\rand2key
$(MAKE) -$(MFLAGS) check
cd ..\old
- @echo Making check in crypto\old
+ @echo Making check in crypto\krb\old
$(MAKE) -$(MFLAGS) check
cd ..\raw
- @echo Making check in crypto\raw
+ @echo Making check in crypto\krb\raw
$(MAKE) -$(MFLAGS) check
cd ..\prng
- @echo Making check in crypto\prng
+ @echo Making check in crypto\krb\prng
$(MAKE) -$(MFLAGS) check
cd ..
+ @echo Making check in crypto\krb
@lib_frag@
diff --git a/src/lib/crypto/krb/arcfour/Makefile.in b/src/lib/crypto/krb/arcfour/Makefile.in
index bd234faffb..f3f0a9bb02 100644
--- a/src/lib/crypto/krb/arcfour/Makefile.in
+++ b/src/lib/crypto/krb/arcfour/Makefile.in
@@ -1,12 +1,12 @@
mydir=lib/crypto/krb/arcfour
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
-LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@ \
- -I$(srcdir)/../../@CRYPTO_IMPL@/md4
+LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../$(CRYPTO_IMPL) \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/md4
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=arcfour
-##DOS##OBJFILE=..\$(OUTPRE)arcfour.lst
+##DOS##PREFIXDIR = krb\arcfour
+##DOS##OBJFILE = ..\..\$(OUTPRE)arcfour.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/checksum/Makefile.in b/src/lib/crypto/krb/checksum/Makefile.in
index 826afd189d..65a8cbcf4d 100644
--- a/src/lib/crypto/krb/checksum/Makefile.in
+++ b/src/lib/crypto/krb/checksum/Makefile.in
@@ -4,15 +4,15 @@ LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../arcfour
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=checksum
-##DOS##OBJFILE=..\$(OUTPRE)cksum.lst
+##DOS##PREFIXDIR = krb\checksum
+##DOS##OBJFILE = ..\..\$(OUTPRE)checksum.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
STLIBOBJS= cbc.o cmac.o confounder.o hmac_md5.o unkeyed.o
-OBJS= $(OUTPRE)cbc.$(OBJEXT) $(OUTPRE)cmac.$(OBJECT) \
+OBJS= $(OUTPRE)cbc.$(OBJEXT) $(OUTPRE)cmac.$(OBJEXT) \
$(OUTPRE)confounder.$(OBJEXT) $(OUTPRE)hmac_md5.$(OBJEXT) \
$(OUTPRE)unkeyed.$(OBJEXT)
diff --git a/src/lib/crypto/krb/crc32/Makefile.in b/src/lib/crypto/krb/crc32/Makefile.in
index b34f3aa720..d46c739626 100644
--- a/src/lib/crypto/krb/crc32/Makefile.in
+++ b/src/lib/crypto/krb/crc32/Makefile.in
@@ -3,8 +3,8 @@ BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=crc32
-##DOS##OBJFILE=..\$(OUTPRE)crc32.lst
+##DOS##PREFIXDIR = krb\crc32
+##DOS##OBJFILE = ..\..\$(OUTPRE)crc32.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/dk/Makefile.in b/src/lib/crypto/krb/dk/Makefile.in
index cd804bc6d9..0a710110c1 100644
--- a/src/lib/crypto/krb/dk/Makefile.in
+++ b/src/lib/crypto/krb/dk/Makefile.in
@@ -1,11 +1,11 @@
mydir=lib/crypto/krb/dk
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
-LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@
+LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../$(CRYPTO_IMPL)
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=dk
-##DOS##OBJFILE=..\$(OUTPRE)dk.lst
+##DOS##PREFIXDIR = krb\dk
+##DOS##OBJFILE = ..\..\$(OUTPRE)dk.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/old/Makefile.in b/src/lib/crypto/krb/old/Makefile.in
index cc3c7f602b..0f21070cf5 100644
--- a/src/lib/crypto/krb/old/Makefile.in
+++ b/src/lib/crypto/krb/old/Makefile.in
@@ -1,11 +1,11 @@
mydir=lib/crypto/krb/old
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
-LOCALINCLUDES = -I$(srcdir)/../../@CRYPTO_IMPL@/des -I$(srcdir)/.. -I$(srcdir)
+LOCALINCLUDES = -I$(srcdir)/../../$(CRYPTO_IMPL)/des -I$(srcdir)/.. -I$(srcdir)
DEFS=
-##DOS##BUILDTOP = ..\..\..
-##DOS##PREFIXDIR=old
-##DOS##OBJFILE=..\$(OUTPRE)old.lst
+##DOS##BUILDTOP = ..\..\..\..
+##DOS##PREFIXDIR = krb\old
+##DOS##OBJFILE = ..\..\$(OUTPRE)old.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/prf/Makefile.in b/src/lib/crypto/krb/prf/Makefile.in
index a0e1ad6b10..c2f412d8ea 100644
--- a/src/lib/crypto/krb/prf/Makefile.in
+++ b/src/lib/crypto/krb/prf/Makefile.in
@@ -2,14 +2,14 @@ mydir=lib/crypto/krb/prf
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
LOCALINCLUDES = -I$(srcdir) -I$(srcdir)/.. \
-I$(srcdir)/../dk \
- -I$(srcdir)/../../@CRYPTO_IMPL@ \
- -I$(srcdir)/../../@CRYPTO_IMPL@/md5 \
- -I$(srcdir)/../../@CRYPTO_IMPL@/sha1
+ -I$(srcdir)/../../$(CRYPTO_IMPL) \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/md5 \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/sha1
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=prf
-##DOS##OBJFILE=..\$(OUTPRE)prf.lst
+##DOS##PREFIXDIR = krb\prf
+##DOS##OBJFILE = ..\..\$(OUTPRE)prf.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/prng/Makefile.in b/src/lib/crypto/krb/prng/Makefile.in
index 76a9388b86..cef3710cfc 100644
--- a/src/lib/crypto/krb/prng/Makefile.in
+++ b/src/lib/crypto/krb/prng/Makefile.in
@@ -1,16 +1,19 @@
mydir=lib/crypto/krb/prng
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
-SUBDIRS= @PRNG_ALG@
-LOCALINCLUDES = -I$(srcdir) -I$(srcdir)/../../@CRYPTO_IMPL@/enc_provider \
- -I$(srcdir)/../../@CRYPTO_IMPL@/hash_provider \
- -I$(srcdir)/@PRNG_ALG@ \
- -I$(srcdir)/../../@CRYPTO_IMPL@/ \
- -I$(srcdir)/../../@CRYPTO_IMPL@/aes \
- -I$(srcdir)/../../@CRYPTO_IMPL@/sha1 -I$(srcdir)/../../@CRYPTO_IMPL@/sha2
+SUBDIRS= $(PRNG_ALG)
+LOCALINCLUDES = -I$(srcdir) -I$(srcdir)/../../$(CRYPTO_IMPL)/enc_provider \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/hash_provider \
+ -I$(srcdir)/$(PRNG_ALG) \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/ \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/aes \
+ -I$(srcdir)/../../$(CRYPTO_IMPL)/sha1 -I$(srcdir)/../../$(CRYPTO_IMPL)/sha2
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
DEFS=
+##DOS##BUILDTOP = ..\..\..\..
+##DOS##PREFIXDIR = krb\prng
+##DOS##OBJFILE = ..\..\$(OUTPRE)prng.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
@@ -24,9 +27,11 @@ OBJS=\
SRCS=\
$(srcdir)/prng.c
-STOBJLISTS= OBJS.ST @PRNG_ALG@/OBJS.ST
+##DOS##LIBOBJS = $(OBJS)
-SUBDIROBJLISTS= @PRNG_ALG@/OBJS.ST
+STOBJLISTS= OBJS.ST $(PRNG_ALG)/OBJS.ST
+
+SUBDIROBJLISTS= $(PRNG_ALG)/OBJS.ST
all-unix:: all-libobjs
@@ -36,6 +41,27 @@ depend:: $(SRCS)
clean-unix:: clean-libobjs
+all-windows::
+ cd yarrow
+ @echo Making in crypto\krb\prng\yarrow
+ $(MAKE) -$(MFLAGS)
+ cd ..
+ @echo Making in crypto\krb\prng
+
+clean-windows::
+ cd yarrow
+ @echo Making clean in crypto\krb\prng\yarrow
+ $(MAKE) -$(MFLAGS) clean
+ cd ..
+ @echo Making clean in crypto\krb\prng
+
+check-windows::
+ cd yarrow
+ @echo Making check in crypto\krb\prng\yarrow
+ $(MAKE) -$(MFLAGS) check
+ cd ..
+ @echo Making check in crypto\krb\prng
+
@lib_frag@
@libobj_frag@
diff --git a/src/lib/crypto/krb/prng/fortuna/Makefile.in b/src/lib/crypto/krb/prng/fortuna/Makefile.in
index fd66e08c33..367eb01742 100644
--- a/src/lib/crypto/krb/prng/fortuna/Makefile.in
+++ b/src/lib/crypto/krb/prng/fortuna/Makefile.in
@@ -1,10 +1,10 @@
mydir=lib/crypto/krb/prng/fortuna
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..$(S)..
LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../.. \
- -I$(srcdir)/../../../@CRYPTO_IMPL@ \
- -I$(srcdir)/../../../@CRYPTO_IMPL@/sha2 \
- -I$(srcdir)/../../../@CRYPTO_IMPL@/aes \
- -I$(srcdir)/../../../@CRYPTO_IMPL@/enc_provider
+ -I$(srcdir)/../../../$(CRYPTO_IMPL) \
+ -I$(srcdir)/../../../$(CRYPTO_IMPL)/sha2 \
+ -I$(srcdir)/../../../$(CRYPTO_IMPL)/aes \
+ -I$(srcdir)/../../../$(CRYPTO_IMPL)/enc_provider
DEFS=
RUN_SETUP = @KRB5_RUN_ENV@
PROG_LIBPATH=-L$(TOPLIBD)
diff --git a/src/lib/crypto/krb/prng/nss/Makefile.in b/src/lib/crypto/krb/prng/nss/Makefile.in
index 04fbd1957a..d6d29b9329 100644
--- a/src/lib/crypto/krb/prng/nss/Makefile.in
+++ b/src/lib/crypto/krb/prng/nss/Makefile.in
@@ -2,7 +2,7 @@ mydir=lib/crypto/krb/prng/nss
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..$(S)..
CRYPTO_IMPL_CFLAGS=@CRYPTO_IMPL_CFLAGS@
LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../.. \
- -I$(srcdir)/../../../@CRYPTO_IMPL@ $(CRYPTO_IMPL_CFLAGS)
+ -I$(srcdir)/../../../$(CRYPTO_IMPL) $(CRYPTO_IMPL_CFLAGS)
DEFS=
PROG_LIBPATH=-L$(TOPLIBD)
diff --git a/src/lib/crypto/krb/prng/yarrow/Makefile.in b/src/lib/crypto/krb/prng/yarrow/Makefile.in
index 40dd85aa03..93d6bc44c0 100644
--- a/src/lib/crypto/krb/prng/yarrow/Makefile.in
+++ b/src/lib/crypto/krb/prng/yarrow/Makefile.in
@@ -1,14 +1,14 @@
mydir=lib/crypto/krb/prng/yarrow
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..$(S)..
LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../.. \
- -I$(srcdir)/../../../@CRYPTO_IMPL@ \
- -I$(srcdir)/../../../@CRYPTO_IMPL@/sha1 \
- -I$(srcdir)/../../../@CRYPTO_IMPL@/enc_provider
+ -I$(srcdir)/../../../$(CRYPTO_IMPL) \
+ -I$(srcdir)/../../../$(CRYPTO_IMPL)/sha1 \
+ -I$(srcdir)/../../../$(CRYPTO_IMPL)/enc_provider
DEFS=
-##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=yarrow
-##DOS##OBJFILE=..\$(OUTPRE)yarrow.lst
+##DOS##BUILDTOP = ..\..\..\..\..
+##DOS##PREFIXDIR = krb\prng\yarrow
+##DOS##OBJFILE = ..\..\..\$(OUTPRE)yarrow.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/rand2key/Makefile.in b/src/lib/crypto/krb/rand2key/Makefile.in
index adde89b94e..f6975d7d9e 100644
--- a/src/lib/crypto/krb/rand2key/Makefile.in
+++ b/src/lib/crypto/krb/rand2key/Makefile.in
@@ -1,11 +1,11 @@
mydir=lib/crypto/krb/rand2key
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
-LOCALINCLUDES = -I$(srcdir)/. -I$(srcdir)/../../@CRYPTO_IMPL@/des
+LOCALINCLUDES = -I$(srcdir)/. -I$(srcdir)/../../$(CRYPTO_IMPL)/des
DEFS=
##DOS##BUILDTOP = ..\..\..\..
-##DOS##PREFIXDIR=rand2key
-##DOS##OBJFILE=..\$(OUTPRE)rand2key.lst
+##DOS##PREFIXDIR = krb\rand2key
+##DOS##OBJFILE= ..\..\$(OUTPRE)rand2key.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/crypto/krb/raw/Makefile.in b/src/lib/crypto/krb/raw/Makefile.in
index 147b1d52e6..a9c3b09d83 100644
--- a/src/lib/crypto/krb/raw/Makefile.in
+++ b/src/lib/crypto/krb/raw/Makefile.in
@@ -1,11 +1,11 @@
mydir=lib/crypto/krb/raw
BUILDTOP=$(REL)..$(S)..$(S)..$(S)..
-LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../@CRYPTO_IMPL@
+LOCALINCLUDES = -I$(srcdir)/.. -I$(srcdir)/../../$(CRYPTO_IMPL)
DEFS=
-##DOS##BUILDTOP = ..\..\..
-##DOS##PREFIXDIR=raw
-##DOS##OBJFILE=..\$(OUTPRE)raw.lst
+##DOS##BUILDTOP = ..\..\..\..
+##DOS##PREFIXDIR = krb\raw
+##DOS##OBJFILE = ..\..\$(OUTPRE)raw.lst
PROG_LIBPATH=-L$(TOPLIBD)
PROG_RPATH=$(KRB5_LIBDIR)
diff --git a/src/lib/gssapi/generic/Makefile.in b/src/lib/gssapi/generic/Makefile.in
index e4a0d58d07..65482c915e 100644
--- a/src/lib/gssapi/generic/Makefile.in
+++ b/src/lib/gssapi/generic/Makefile.in
@@ -45,7 +45,7 @@ include_xom=@include_xom@
##DOS##include_stdint=rem
##DOS##include_inttypes=rem
##DOS##include_xom=rem
-gssapi.h: gssapi.hin $(BUILDTOP)/include/autoconf.h
+gssapi.h: gssapi.hin
@echo "Creating gssapi.h" ; \
h=gss$$$$; $(RM) $$h; \
(echo "/* This is the gssapi.h prologue. */"; \
diff --git a/src/lib/gssapi/krb5/copy_ccache.c b/src/lib/gssapi/krb5/copy_ccache.c
index efc68073da..fbb7a48a19 100644
--- a/src/lib/gssapi/krb5/copy_ccache.c
+++ b/src/lib/gssapi/krb5/copy_ccache.c
@@ -1,7 +1,7 @@
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
#include "gssapiP_krb5.h"
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_copy_ccache(OM_uint32 *minor_status,
gss_cred_id_t *cred_handle,
const gss_OID desired_object,
diff --git a/src/lib/gssapi/krb5/get_tkt_flags.c b/src/lib/gssapi/krb5/get_tkt_flags.c
index 07f0c97279..636fc04db4 100644
--- a/src/lib/gssapi/krb5/get_tkt_flags.c
+++ b/src/lib/gssapi/krb5/get_tkt_flags.c
@@ -27,7 +27,7 @@
* $Id$
*/
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_get_tkt_flags(OM_uint32 *minor_status,
const gss_ctx_id_t context_handle,
const gss_OID desired_object,
diff --git a/src/lib/gssapi/krb5/gssapiP_krb5.h b/src/lib/gssapi/krb5/gssapiP_krb5.h
index 1cb1c10625..a0e60be5e6 100644
--- a/src/lib/gssapi/krb5/gssapiP_krb5.h
+++ b/src/lib/gssapi/krb5/gssapiP_krb5.h
@@ -1003,7 +1003,7 @@ kg_compose_deleg_cred(OM_uint32 *minor_status,
#define GSS_KRB5_GET_TKT_FLAGS_OID_LENGTH 11
#define GSS_KRB5_GET_TKT_FLAGS_OID "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x05\x01"
-OM_uint32 KRB5_CALLCONV gss_krb5int_get_tkt_flags
+OM_uint32 gss_krb5int_get_tkt_flags
(OM_uint32 *minor_status,
const gss_ctx_id_t context_handle,
const gss_OID desired_object,
@@ -1012,7 +1012,7 @@ OM_uint32 KRB5_CALLCONV gss_krb5int_get_tkt_flags
#define GSS_KRB5_COPY_CCACHE_OID_LENGTH 11
#define GSS_KRB5_COPY_CCACHE_OID "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x05\x02"
-OM_uint32 KRB5_CALLCONV gss_krb5int_copy_ccache
+OM_uint32 gss_krb5int_copy_ccache
(OM_uint32 *minor_status,
gss_cred_id_t *cred_handle,
const gss_OID desired_oid,
@@ -1026,11 +1026,9 @@ struct krb5_gss_ccache_name_req {
const char **out_name;
};
-OM_uint32 KRB5_CALLCONV gss_krb5int_ccache_name
- (OM_uint32 *minor_status,
- const gss_OID,
- const gss_OID,
- const gss_buffer_t);
+OM_uint32
+gss_krb5int_ccache_name(OM_uint32 *minor_status, const gss_OID, const gss_OID,
+ const gss_buffer_t);
#define GSS_KRB5_INQ_SSPI_SESSION_KEY_OID_LENGTH 11
#define GSS_KRB5_INQ_SSPI_SESSION_KEY_OID "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x05\x05"
@@ -1046,7 +1044,7 @@ struct krb5_gss_set_allowable_enctypes_req {
krb5_enctype *ktypes;
};
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_set_allowable_enctypes(OM_uint32 *minor_status,
gss_cred_id_t *cred,
const gss_OID desired_oid,
@@ -1118,7 +1116,7 @@ struct krb5_gss_import_cred_req {
krb5_keytab keytab;
};
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_import_cred(OM_uint32 *minor_status,
gss_cred_id_t *cred,
const gss_OID desired_oid,
diff --git a/src/lib/gssapi/krb5/gssapi_krb5.c b/src/lib/gssapi/krb5/gssapi_krb5.c
index 25534e56b6..50d4e36dda 100644
--- a/src/lib/gssapi/krb5/gssapi_krb5.c
+++ b/src/lib/gssapi/krb5/gssapi_krb5.c
@@ -590,10 +590,12 @@ static struct {
{GSS_KRB5_FREE_LUCID_SEC_CONTEXT_OID_LENGTH, GSS_KRB5_FREE_LUCID_SEC_CONTEXT_OID},
gss_krb5int_free_lucid_sec_context
},
+#ifndef _WIN32
{
{GSS_KRB5_USE_KDC_CONTEXT_OID_LENGTH, GSS_KRB5_USE_KDC_CONTEXT_OID},
krb5int_gss_use_kdc_context
},
+#endif
};
static OM_uint32
diff --git a/src/lib/gssapi/krb5/krb5_gss_glue.c b/src/lib/gssapi/krb5/krb5_gss_glue.c
index eb9dd83ca1..bc3b7c7f92 100644
--- a/src/lib/gssapi/krb5/krb5_gss_glue.c
+++ b/src/lib/gssapi/krb5/krb5_gss_glue.c
@@ -298,6 +298,7 @@ krb5_gss_register_acceptor_identity(const char *keytab)
return major_status;
}
+#ifndef _WIN32
krb5_error_code
krb5_gss_use_kdc_context(void)
{
@@ -327,6 +328,7 @@ krb5_gss_use_kdc_context(void)
return ret;
}
+#endif
/*
* This API should go away and be replaced with an accessor
diff --git a/src/lib/gssapi/krb5/lucid_context.c b/src/lib/gssapi/krb5/lucid_context.c
index b1454cf71d..6fe069bdad 100644
--- a/src/lib/gssapi/krb5/lucid_context.c
+++ b/src/lib/gssapi/krb5/lucid_context.c
@@ -60,10 +60,10 @@ make_external_lucid_ctx_v1(
* Exported routines
*/
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_export_lucid_sec_context(
OM_uint32 *minor_status,
- gss_ctx_id_t context_handle,
+ const gss_ctx_id_t context_handle,
const gss_OID desired_object,
gss_buffer_set_t *data_set)
{
diff --git a/src/lib/gssapi/krb5/set_allowable_enctypes.c b/src/lib/gssapi/krb5/set_allowable_enctypes.c
index de1c5a4db0..0daf8b1356 100644
--- a/src/lib/gssapi/krb5/set_allowable_enctypes.c
+++ b/src/lib/gssapi/krb5/set_allowable_enctypes.c
@@ -59,7 +59,7 @@
#endif
#include "gssapi_krb5.h"
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_set_allowable_enctypes(OM_uint32 *minor_status,
gss_cred_id_t *cred_handle,
const gss_OID desired_oid,
diff --git a/src/lib/gssapi/krb5/set_ccache.c b/src/lib/gssapi/krb5/set_ccache.c
index 7d52608df4..4b6c89065f 100644
--- a/src/lib/gssapi/krb5/set_ccache.c
+++ b/src/lib/gssapi/krb5/set_ccache.c
@@ -31,7 +31,7 @@
#include <string.h>
#include "gssapiP_krb5.h"
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gss_krb5int_ccache_name(OM_uint32 *minor_status,
const gss_OID desired_mech,
const gss_OID desired_object,
diff --git a/src/lib/gssapi/mechglue/g_mechattr.c b/src/lib/gssapi/mechglue/g_mechattr.c
index d23f32664d..5f863e38b7 100644
--- a/src/lib/gssapi/mechglue/g_mechattr.c
+++ b/src/lib/gssapi/mechglue/g_mechattr.c
@@ -91,7 +91,8 @@ testMechAttrsKnown(gss_const_OID_set critical,
return 1;
}
-OM_uint32 gss_indicate_mechs_by_attrs(
+OM_uint32 KRB5_CALLCONV
+gss_indicate_mechs_by_attrs(
OM_uint32 *minor,
gss_const_OID_set desired_mech_attrs,
gss_const_OID_set except_mech_attrs,
@@ -154,7 +155,8 @@ cleanup:
return status;
}
-OM_uint32 gss_inquire_attrs_for_mech(
+OM_uint32 KRB5_CALLCONV
+gss_inquire_attrs_for_mech(
OM_uint32 *minor,
gss_const_OID mech_oid,
gss_OID_set *mech_attrs,
@@ -213,7 +215,8 @@ OM_uint32 gss_inquire_attrs_for_mech(
return GSS_S_COMPLETE;
}
-OM_uint32 gss_display_mech_attr(
+OM_uint32 KRB5_CALLCONV
+gss_display_mech_attr(
OM_uint32 *minor,
gss_const_OID mech_attr,
gss_buffer_t name,
diff --git a/src/lib/gssapi/mechglue/g_oid_ops.c b/src/lib/gssapi/mechglue/g_oid_ops.c
index a68aca9edc..f87febfb23 100644
--- a/src/lib/gssapi/mechglue/g_oid_ops.c
+++ b/src/lib/gssapi/mechglue/g_oid_ops.c
@@ -100,7 +100,7 @@ gss_str_to_oid(minor_status, oid_str, oid)
return status;
}
-OM_uint32 KRB5_CALLCONV
+OM_uint32
gssint_copy_oid_set(
OM_uint32 *minor_status,
const gss_OID_set_desc * const oidset,
diff --git a/src/lib/gssapi/mechglue/g_store_cred.c b/src/lib/gssapi/mechglue/g_store_cred.c
index 3b286ecd4e..f7de1d613a 100644
--- a/src/lib/gssapi/mechglue/g_store_cred.c
+++ b/src/lib/gssapi/mechglue/g_store_cred.c
@@ -53,14 +53,15 @@ val_store_cred_args(
}
-OM_uint32 gss_store_cred(minor_status,
- input_cred_handle,
- cred_usage,
- desired_mech,
- overwrite_cred,
- default_cred,
- elements_stored,
- cred_usage_stored)
+OM_uint32 KRB5_CALLCONV
+gss_store_cred(minor_status,
+ input_cred_handle,
+ cred_usage,
+ desired_mech,
+ overwrite_cred,
+ default_cred,
+ elements_stored,
+ cred_usage_stored)
OM_uint32 *minor_status;
gss_cred_id_t input_cred_handle;
diff --git a/src/lib/gssapi/mechglue/mglueP.h b/src/lib/gssapi/mechglue/mglueP.h
index 63d89c7717..3524ceae48 100644
--- a/src/lib/gssapi/mechglue/mglueP.h
+++ b/src/lib/gssapi/mechglue/mglueP.h
@@ -727,18 +727,6 @@ gssint_userok(
int * /* user_ok */
);
-OM_uint32
-gss_store_cred(
- OM_uint32 *, /* minor_status */
- const gss_cred_id_t, /* input_cred_handle */
- gss_cred_usage_t, /* cred_usage */
- const gss_OID, /* desired_mech */
- OM_uint32, /* overwrite_cred */
- OM_uint32, /* default_cred */
- gss_OID_set *, /* elements_stored */
- gss_cred_usage_t * /* cred_usage_stored */
-);
-
int
gssint_get_der_length(
unsigned char **, /* buf */
diff --git a/src/lib/gssapi/spnego/gssapiP_spnego.h b/src/lib/gssapi/spnego/gssapiP_spnego.h
index 50f05678d6..3c2edbbdde 100644
--- a/src/lib/gssapi/spnego/gssapiP_spnego.h
+++ b/src/lib/gssapi/spnego/gssapiP_spnego.h
@@ -13,7 +13,6 @@ extern "C" {
#endif
#include <gssapi/gssapi.h>
-#include <syslog.h>
#define SEC_CONTEXT_TOKEN 1
#define SPNEGO_SIZE_OF_INT 4
diff --git a/src/lib/gssapi/spnego/spnego_mech.c b/src/lib/gssapi/spnego/spnego_mech.c
index 519050a142..7847146696 100644
--- a/src/lib/gssapi/spnego/spnego_mech.c
+++ b/src/lib/gssapi/spnego/spnego_mech.c
@@ -61,8 +61,6 @@
*/
/* #pragma ident "@(#)spnego_mech.c 1.7 04/09/28 SMI" */
-#include <sys/param.h>
-#include <unistd.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
@@ -2417,7 +2415,7 @@ spnego_gss_complete_auth_token(
OM_uint32
spnego_gss_acquire_cred_impersonate_name(OM_uint32 *minor_status,
const gss_cred_id_t impersonator_cred_handle,
- gss_name_t desired_name,
+ const gss_name_t desired_name,
OM_uint32 time_req,
gss_OID_set desired_mechs,
gss_cred_usage_t cred_usage,
diff --git a/src/lib/gssapi32.def b/src/lib/gssapi32.def
index fa36f51ed8..96dbae4216 100644
--- a/src/lib/gssapi32.def
+++ b/src/lib/gssapi32.def
@@ -97,3 +97,74 @@ EXPORTS
gss_mech_set_krb5_both @43 DATA
GSS_KRB5_NT_PRINCIPAL_NAME @8 DATA
gss_mech_krb5_wrong @41 DATA
+
+; Added in krb5 1.7-1.9
+ gss_acquire_cred_impersonate_name
+ gss_acquire_cred_with_password
+ gss_add_buffer_set_member
+ gss_add_cred_impersonate_name
+ gss_complete_auth_token
+ gss_create_empty_buffer_set
+ gss_delete_name_attribute
+ gss_display_mech_attr
+ gss_display_name_ext
+ gss_export_name_composite
+ gss_get_name_attribute
+ gss_indicate_mechs_by_attrs
+ gss_inquire_attrs_for_mech
+ gss_inquire_cred_by_oid
+ gss_inquire_mech_for_saslname
+ gss_inquire_name
+ gss_inquire_saslname_for_mech
+ gss_inquire_sec_context_by_oid
+ gsskrb5_extract_authtime_from_sec_context
+ gsskrb5_extract_authz_data_from_sec_context
+ gss_krb5_import_cred
+ gss_krb5_set_cred_rcache
+ gss_map_name_to_any
+ gss_pseudo_random
+ gss_release_any_name_mapping
+ gss_release_buffer_set
+ gss_release_iov_buffer
+ gss_set_cred_option
+ gss_set_name_attribute
+ gss_set_neg_mechs
+ gss_set_sec_context_option
+ gss_store_cred
+ gss_unwrap_aead
+ gss_unwrap_iov
+ gss_wrap_aead
+ gss_wrap_iov
+ gss_wrap_iov_length
+
+ GSS_C_INQ_SSPI_SESSION_KEY DATA
+ GSS_C_MA_AUTH_INIT DATA
+ GSS_C_MA_AUTH_INIT_ANON DATA
+ GSS_C_MA_AUTH_INIT_INIT DATA
+ GSS_C_MA_AUTH_TARG DATA
+ GSS_C_MA_AUTH_TARG_ANON DATA
+ GSS_C_MA_AUTH_TARG_INIT DATA
+ GSS_C_MA_CBINDINGS DATA
+ GSS_C_MA_COMPRESS DATA
+ GSS_C_MA_CONF_PROT DATA
+ GSS_C_MA_CTX_TRANS DATA
+ GSS_C_MA_DELEG_CRED DATA
+ GSS_C_MA_DEPRECATED DATA
+ GSS_C_MA_INTEG_PROT DATA
+ GSS_C_MA_ITOK_FRAMED DATA
+ GSS_C_MA_MECH_COMPOSITE DATA
+ GSS_C_MA_MECH_CONCRETE DATA
+ GSS_C_MA_MECH_GLUE DATA
+ GSS_C_MA_MECH_NEGO DATA
+ GSS_C_MA_MECH_PSEUDO DATA
+ GSS_C_MA_MIC DATA
+ GSS_C_MA_NOT_DFLT_MECH DATA
+ GSS_C_MA_NOT_MECH DATA
+ GSS_C_MA_OOS_DET DATA
+ GSS_C_MA_PFS DATA
+ GSS_C_MA_PROT_READY DATA
+ GSS_C_MA_REPLAY_DET DATA
+ GSS_C_MA_WRAP DATA
+ gss_mech_iakerb DATA
+ gss_nt_exported_name DATA
+ gss_nt_service_name_v2 DATA
diff --git a/src/lib/krb5/asn.1/krb5_decode.c b/src/lib/krb5/asn.1/krb5_decode.c
index 7aeb6bfe58..af5c659286 100644
--- a/src/lib/krb5/asn.1/krb5_decode.c
+++ b/src/lib/krb5/asn.1/krb5_decode.c
@@ -1242,7 +1242,7 @@ krb5_error_code decode_krb5_iakerb_finished
cleanup(free);
}
-krb5_error_code
+krb5_error_code KRB5_CALLCONV
krb5int_get_authdata_containee_types(krb5_context context,
const krb5_authdata *authdata,
unsigned int *num,
diff --git a/src/lib/krb5/keytab/kt_file.c b/src/lib/krb5/keytab/kt_file.c
index 8c6677e254..677a1971ee 100644
--- a/src/lib/krb5/keytab/kt_file.c
+++ b/src/lib/krb5/keytab/kt_file.c
@@ -159,7 +159,7 @@ krb5_ktfileint_find_slot(krb5_context, krb5_keytab, krb5_int32 *,
* initialized with file keytab routines.
*/
-static krb5_error_code
+static krb5_error_code KRB5_CALLCONV
krb5_ktfile_resolve(krb5_context context, const char *name,
krb5_keytab *id_out)
{
diff --git a/src/lib/krb5/krb/Makefile.in b/src/lib/krb5/krb/Makefile.in
index 0737a2e533..d4db454d4b 100644
--- a/src/lib/krb5/krb/Makefile.in
+++ b/src/lib/krb5/krb/Makefile.in
@@ -115,6 +115,7 @@ STLIBOBJS= \
OBJS= $(OUTPRE)addr_comp.$(OBJEXT) \
$(OUTPRE)addr_order.$(OBJEXT) \
$(OUTPRE)addr_srch.$(OBJEXT) \
+ $(OUTPRE)allow_weak.$(OBJEXT) \
$(OUTPRE)appdefault.$(OBJEXT) \
$(OUTPRE)auth_con.$(OBJEXT) \
$(OUTPRE)authdata.$(OBJEXT) \
diff --git a/src/lib/krb5/krb/auth_con.c b/src/lib/krb5/krb/auth_con.c
index 5efb371050..65c87667d7 100644
--- a/src/lib/krb5/krb/auth_con.c
+++ b/src/lib/krb5/krb/auth_con.c
@@ -601,7 +601,7 @@ krb5_auth_con_get_subkey_enctype(krb5_context context,
return 0;
}
-krb5_error_code KRB5_CALLCONV
+krb5_error_code
krb5_auth_con_get_authdata_context(krb5_context context,
krb5_auth_context auth_context,
krb5_authdata_context *ad_context)
@@ -610,7 +610,7 @@ krb5_auth_con_get_authdata_context(krb5_context context,
return 0;
}
-krb5_error_code KRB5_CALLCONV
+krb5_error_code
krb5_auth_con_set_authdata_context(krb5_context context,
krb5_auth_context auth_context,
krb5_authdata_context ad_context)
diff --git a/src/lib/krb5/krb/get_creds.c b/src/lib/krb5/krb/get_creds.c
index ac28598603..8fb22c6ed1 100644
--- a/src/lib/krb5/krb/get_creds.c
+++ b/src/lib/krb5/krb/get_creds.c
@@ -1143,7 +1143,7 @@ krb5_tkt_creds_free(krb5_context context, krb5_tkt_creds_context ctx)
free(ctx);
}
-krb5_error_code
+krb5_error_code KRB5_CALLCONV
krb5_tkt_creds_get(krb5_context context, krb5_tkt_creds_context ctx)
{
krb5_error_code code;
diff --git a/src/lib/krb5/krb/kfree.c b/src/lib/krb5/krb/kfree.c
index 6a8cdd5225..476a513bbd 100644
--- a/src/lib/krb5/krb/kfree.c
+++ b/src/lib/krb5/krb/kfree.c
@@ -808,7 +808,8 @@ krb5_free_etype_list(krb5_context context,
free(etypes);
}
}
-void krb5_free_fast_req(krb5_context context, krb5_fast_req *val)
+void KRB5_CALLCONV
+krb5_free_fast_req(krb5_context context, krb5_fast_req *val)
{
if (val == NULL)
return;
@@ -816,7 +817,8 @@ void krb5_free_fast_req(krb5_context context, krb5_fast_req *val)
free(val);
}
-void krb5_free_fast_armor(krb5_context context, krb5_fast_armor *val)
+void KRB5_CALLCONV
+krb5_free_fast_armor(krb5_context context, krb5_fast_armor *val)
{
if (val == NULL)
return;
@@ -824,7 +826,8 @@ void krb5_free_fast_armor(krb5_context context, krb5_fast_armor *val)
free(val);
}
-void krb5_free_fast_response(krb5_context context, krb5_fast_response *val)
+void KRB5_CALLCONV
+krb5_free_fast_response(krb5_context context, krb5_fast_response *val)
{
if (!val)
return;
@@ -834,8 +837,8 @@ void krb5_free_fast_response(krb5_context context, krb5_fast_response *val)
free(val);
}
-void krb5_free_fast_finished
-(krb5_context context, krb5_fast_finished *val)
+void KRB5_CALLCONV
+krb5_free_fast_finished(krb5_context context, krb5_fast_finished *val)
{
if (!val)
return;
@@ -844,7 +847,8 @@ void krb5_free_fast_finished
free(val);
}
-void krb5_free_typed_data(krb5_context context, krb5_typed_data **in)
+void
+krb5_free_typed_data(krb5_context context, krb5_typed_data **in)
{
int i = 0;
if (in == NULL) return;
@@ -857,8 +861,8 @@ void krb5_free_typed_data(krb5_context context, krb5_typed_data **in)
free(in);
}
-void krb5_free_fast_armored_req(krb5_context context,
- krb5_fast_armored_req *val)
+void KRB5_CALLCONV
+krb5_free_fast_armored_req(krb5_context context, krb5_fast_armored_req *val)
{
if (val == NULL)
return;
diff --git a/src/lib/krb5/os/hst_realm.c b/src/lib/krb5/os/hst_realm.c
index 96a022f4df..5c4e21d6a0 100644
--- a/src/lib/krb5/os/hst_realm.c
+++ b/src/lib/krb5/os/hst_realm.c
@@ -371,7 +371,7 @@ krb5_get_fallback_host_realm(krb5_context context,
* Common code for krb5_get_host_realm and krb5_get_fallback_host_realm
* to do basic sanity checks on supplied hostname.
*/
-krb5_error_code KRB5_CALLCONV
+krb5_error_code
krb5int_clean_hostname(krb5_context context,
const char *host, char *local_host, size_t lhsize)
{
diff --git a/src/lib/krb5_32.def b/src/lib/krb5_32.def
index 569c9ff170..a7e236e25a 100644
--- a/src/lib/krb5_32.def
+++ b/src/lib/krb5_32.def
@@ -12,7 +12,6 @@
; PRIVATE - Private entrypoint. It should not be called by anything other
; than gssapi32.dll or krb4_32.dll.
; GSSAPI - Private entrypoint used by gssapi32.dll.
-; KRB4 - Private entrypoint used by krb4_32.dll.
; KRB5_CALLCONV_WRONG - entrypoint that should have used KRB5_CALLCONV, but
; did not due to developer error
@@ -258,17 +257,6 @@ EXPORTS
krb5int_accessor @267 ; INTERNAL (to end all internals)
-; Temporary exports (DO NOT USE)
-; DO NOT USE -- Currently required for krb4_32.dll
-; des_ecb_encrypt @3 ; PRIVATE KRB4
-; des_new_random_key @6 ; PRIVATE KRB4
-; des_key_sched @5 ; PRIVATE KRB4
-; des_pcbc_encrypt @7 ; PRIVATE KRB4
-; des_quad_cksum @8 ; PRIVATE KRB4
-; des_string_to_key @9 ; PRIVATE KRB4
-; des_init_random_number_generator @4 ; PRIVATE KRB4
-; afs_string_to_key @1 ; PRIVATE KRB4
-
; DO NOT USE -- Currently required to implement gssapi32.dll
decode_krb5_ap_req @2 ; PRIVATE GSSAPI k5-int.h KRB5_CALLCONV_WRONG
krb5_externalize_opaque @114 ; PRIVATE GSSAPI k5-int.h
@@ -300,7 +288,7 @@ EXPORTS
krb5_free_error_message @134
krb5_clear_error_message @94
-; new in 1.7
+; new in 1.7-1.9
krb5_rd_rep_dce
krb5_mk_rep_dce
krb5_c_padding_length
@@ -309,3 +297,111 @@ EXPORTS
krb5_c_decrypt_iov
krb5_c_make_checksum_iov
krb5_c_verify_checksum_iov
+ krb5_allow_weak_crypto
+ krb5_anonymous_principal
+ krb5_anonymous_realm
+ krb5_auth_con_getkey_k
+ krb5_auth_con_getrecvsubkey_k
+ krb5_auth_con_getsendsubkey_k
+ krb5_auth_con_setrecvsubkey_k
+ krb5_auth_con_setsendsubkey_k
+ krb5_build_principal_alloc_va
+ krb5_c_crypto_length_iov
+ krb5_c_free_state
+ krb5_c_fx_cf2_simple
+ krb5_c_init_state
+ krb5_c_keylengths
+ krb5_c_random_add_entropy
+ krb5_c_random_os_entropy
+ krb5_c_random_to_key
+ krb5_cc_dup
+ krb5_cc_get_config
+ krb5_cc_set_config
+ krb5_copy_error_message
+ krb5_decode_authdata_container
+ krb5_encode_authdata_container
+ krb5_enctype_to_name
+ krb5_get_fallback_host_realm
+ krb5_get_init_creds_opt_get_fast_flags
+ krb5_get_init_creds_opt_set_anonymous
+ krb5_get_init_creds_opt_set_canonicalize
+ krb5_get_init_creds_opt_set_expire_callback
+ krb5_get_init_creds_opt_set_fast_ccache
+ krb5_get_init_creds_opt_set_fast_ccache_name
+ krb5_get_init_creds_opt_set_fast_flags
+ krb5_get_init_creds_opt_set_out_ccache
+ krb5_init_creds_free
+ krb5_init_creds_get
+ krb5_init_creds_get_creds
+ krb5_init_creds_get_error
+ krb5_init_creds_get_times
+ krb5_init_creds_init
+ krb5_init_creds_set_keytab
+ krb5_init_creds_set_password
+ krb5_init_creds_set_service
+ krb5_init_creds_step
+ krb5_is_config_principal
+ krb5_k_create_key
+ krb5_k_decrypt
+ krb5_k_decrypt_iov
+ krb5_k_encrypt
+ krb5_k_encrypt_iov
+ krb5_k_free_key
+ krb5_k_key_enctype
+ krb5_k_key_keyblock
+ krb5_k_make_checksum
+ krb5_k_make_checksum_iov
+ krb5_k_prf
+ krb5_k_reference_key
+ krb5_k_verify_checksum
+ krb5_k_verify_checksum_iov
+ krb5_make_authdata_kdc_issued
+ krb5_merge_authdata
+ krb5_pac_add_buffer
+ krb5_pac_free
+ krb5_pac_get_buffer
+ krb5_pac_get_types
+ krb5_pac_init
+ krb5_pac_parse
+ krb5_pac_verify
+ krb5_parse_name_flags
+ krb5_principal_compare_any_realm
+ krb5_principal_compare_flags
+ krb5_tkt_creds_free
+ krb5_tkt_creds_get
+ krb5_tkt_creds_get_creds
+ krb5_tkt_creds_get_times
+ krb5_tkt_creds_init
+ krb5_tkt_creds_step
+ krb5_unparse_name_flags
+ krb5_unparse_name_flags_ext
+ krb5_verify_authdata_kdc_issued
+
+; More internal symbols used by gssapi
+ decode_krb5_error ; PRIVATE GSSAPI
+ decode_krb5_iakerb_finished ; PRIVATE GSSAPI
+ decode_krb5_iakerb_header ; PRIVATE GSSAPI
+ encode_krb5_iakerb_finished ; PRIVATE GSSAPI
+ encode_krb5_iakerb_header ; PRIVATE GSSAPI
+ encode_krb5_ticket ; PRIVATE GSSAPI
+ krb5_auth_con_get_authdata_context ; PRIVATE GSSAPI
+ krb5_auth_con_set_authdata_context ; PRIVATE GSSAPI
+ krb5_authdata_context_copy ; PRIVATE GSSAPI
+ krb5_authdata_context_free ; PRIVATE GSSAPI
+ krb5_authdata_context_init ; PRIVATE GSSAPI
+ krb5_authdata_delete_attribute ; PRIVATE GSSAPI
+ krb5_authdata_export_attributes ; PRIVATE GSSAPI
+ krb5_authdata_export_authdata ; PRIVATE GSSAPI
+ krb5_authdata_export_internal ; PRIVATE GSSAPI
+ krb5_authdata_free_internal ; PRIVATE GSSAPI
+ krb5_authdata_get_attribute ; PRIVATE GSSAPI
+ krb5_authdata_get_attribute_types ; PRIVATE GSSAPI
+ krb5_authdata_import_attributes ; PRIVATE GSSAPI
+ krb5_authdata_set_attribute ; PRIVATE GSSAPI
+ krb5_free_iakerb_finished ; PRIVATE GSSAPI
+ krb5_free_iakerb_header ; PRIVATE GSSAPI
+ krb5_get_credentials_for_user ; PRIVATE GSSAPI
+ krb5_get_credentials_for_proxy ; PRIVATE GSSAPI
+ krb5_sendto_kdc ; PRIVATE GSSAPI
+ krb5int_copy_data_contents_add0 ; PRIVATE GSSAPI
+ krb5int_free_data_list ; PRIVATE GSSAPI
diff --git a/src/lib/win_glue.c b/src/lib/win_glue.c
index b18178e1c7..3d6dd7206f 100644
--- a/src/lib/win_glue.c
+++ b/src/lib/win_glue.c
@@ -1,12 +1,5 @@
-#ifdef KRB4
-#include <kerberosIV/krb.h>
-#endif
#include "k5-int.h"
-#ifdef KRB4
-#include <kerberosIV/krb_err.h>
-#include <kerberosIV/kadm_err.h>
-#endif
#ifdef KRB5
#include "krb5_err.h"
#include "kv5m_err.h"
@@ -374,24 +367,13 @@ control(int mode)
profile_library_finalizer();
break;
}
-#elif defined KRB4
- switch (mode){
- case DLL_STARTUP:
- add_error_table(&et_krb_error_table);
- add_error_table(&et_kadm_error_table);
- break;
- case DLL_SHUTDOWN:
- remove_error_table(&et_krb_error_table);
- remove_error_table(&et_kadm_error_table);
- break;
- }
#elif defined GSSAPI
switch (mode) {
case DLL_STARTUP:
- gssint_lib_init__auxinit();
+ gssint_mechglue_init__auxinit();
break;
case DLL_SHUTDOWN:
- gssint_lib_fini();
+ gssint_mechglue_fini();
break;
}
#elif defined COMERR
diff --git a/src/util/profile/Makefile.in b/src/util/profile/Makefile.in
index 33a1321b76..b857d435ce 100644
--- a/src/util/profile/Makefile.in
+++ b/src/util/profile/Makefile.in
@@ -105,8 +105,12 @@ $(OUTPRE)test_profile.exe:
$(CC) $(CFLAGS2) -o test_profile.exe test_profile.c prof_init.c \
prof_file.c prof_parse.c prof_tree.c /link /stack:16384
+##DOS##!if 0
profile.h: prof_err.h profile.hin
cat $(srcdir)/profile.hin prof_err.h > $@
+##DOS##!endif
+##DOS##profile.h: prof_err.h profile.hin
+##DOS## copy /b profile.hin+prof_err.h $@
prof_err.h: $(srcdir)/prof_err.et
diff --git a/src/util/profile/prof_parse.c b/src/util/profile/prof_parse.c
index 85bd91227b..8fab90b290 100644
--- a/src/util/profile/prof_parse.c
+++ b/src/util/profile/prof_parse.c
@@ -9,7 +9,9 @@
#endif
#include <errno.h>
#include <ctype.h>
+#ifndef _WIN32
#include <dirent.h>
+#endif
#define SECTION_SEP_CHAR '/'
@@ -239,6 +241,42 @@ static int valid_name(const char *filename)
*/
static errcode_t parse_include_dir(char *dirname, struct parse_state *state)
{
+#ifdef _WIN32
+ char *wildcard = NULL, *pathname;
+ WIN32_FIND_DATA ffd;
+ HANDLE handle;
+ errcode_t retval = 0;
+
+ if (asprintf(&wildcard, "%s\\*", dirname) < 0)
+ return ENOMEM;
+
+ handle = FindFirstFile(wildcard, &ffd);
+ if (handle == INVALID_HANDLE_VALUE) {
+ retval = PROF_FAIL_INCLUDE_DIR;
+ goto cleanup;
+ }
+
+ do {
+ if (!valid_name(ffd.cFileName))
+ continue;
+ if (asprintf(&pathname, "%s\\%s", dirname, ffd.cFileName) < 0) {
+ retval = ENOMEM;
+ break;
+ }
+ retval = parse_include_file(pathname, state);
+ free(pathname);
+ if (retval)
+ break;
+ } while (FindNextFile(handle, &ffd) != 0);
+
+ FindClose(handle);
+
+cleanup:
+ free(wildcard);
+ return retval;
+
+#else /* not _WIN32 */
+
DIR *dir;
char *pathname;
errcode_t retval = 0;
@@ -261,6 +299,7 @@ static errcode_t parse_include_dir(char *dirname, struct parse_state *state)
}
closedir(dir);
return retval;
+#endif /* not _WIN32 */
}
static errcode_t parse_line(char *line, struct parse_state *state)
diff --git a/src/windows/Makefile.in b/src/windows/Makefile.in
index f1a46c0df2..6447cf4c60 100644
--- a/src/windows/Makefile.in
+++ b/src/windows/Makefile.in
@@ -4,19 +4,15 @@ NO_OUTPRE=1
#
# Makefile that recurses into cns subdirectory.
#
-all-windows:: ntsecapitest
+all-windows::
@echo Making in windows\lib
cd lib
$(MAKE) -$(MFLAGS)
@echo Making in windows\cns
cd ..\cns
$(MAKE) -$(MFLAGS)
- @echo Making in windows\wintel
- cd ..\wintel
- $(MAKE) -$(MFLAGS)
- @echo Making in windows\gss
+ @echo Making in windows\gss
cd ..\gss
- cd
$(MAKE) -$(MFLAGS)
@echo Making in windows\gina
cd ..\gina
@@ -28,22 +24,16 @@ all-windows:: ntsecapitest
@echo Making in windows\kfwlogon
cd ..\kfwlogon
$(MAKE) -$(MFLAGS)
- @echo Making in windows\identity
- cd ..\identity
- $(MAKE) -$(MFLAGS)
!endif
cd ..
-clean-windows:: clean-ntsecapitest
+clean-windows::
@echo Making clean in windows\lib
cd lib
$(MAKE) -$(MFLAGS) clean
@echo Making clean in windows\cns
cd ..\cns
$(MAKE) -$(MFLAGS) clean
- @echo Making clean in windows\wintel
- cd ..\wintel
- $(MAKE) -$(MFLAGS) clean
@echo Making clean in windows\gss
cd ..\gss
$(MAKE) -$(MFLAGS) clean
@@ -57,20 +47,5 @@ clean-windows:: clean-ntsecapitest
@echo Making clean in windows\kfwlogon
cd ..\kfwlogon
$(MAKE) -$(MFLAGS) clean
- @echo Making clean in windows\identity
- cd ..\identity
- $(MAKE) -$(MFLAGS) clean
!endif
cd ..
-
-# If ntsecapi.h contains the string that indicates it came from the Vista SDK,
-# then ntsecapitest.i will be left behind. If the string is not present,
-# ntsecapitest.i will be deleted.
-ntsecapitest:: ntsecapitest.i
- ntsecapitest.pl
-
-clean-ntsecapitest::
- $(RM) ntsecapitest.i
-
-{}.c{}.i:
- @$(C_RULE) -P
diff --git a/src/windows/README b/src/windows/README
index 0276b4350a..47261f7467 100644
--- a/src/windows/README
+++ b/src/windows/README
@@ -1,14 +1,15 @@
Building & Running Kerberos 5 on Windows
----------------------------------------
-Kerberos 5 builds on Windows with MSVC++ 6.0, MSVS.NET, and
-MSVS.NET 2003. You will need the XP SP2 Platform SDK or
-later; this SDK is required to define getaddrinfo. It may or
-may not build with other compilers or make utilities.
+This file documents how to build the standalone source distribution of
+Kerberos 5 on Windows. The MIT Kerberos for Windows distribution
+contains additional components not present in the Kerberos 5 source
+code.
-These build instructions assume that you have the standalone source
-distribution of Kerberos 5 rather than the MIT Kerberos for Windows
-distribution (which includes a working Kerberos 4).
+To build Kerberos 5 on Windows, you will need the Windows SDK (XP SP2
+or later) and a version of Perl installed in the command-line path.
+Current versions of the Windows SDK require the .NET framework to be
+installed.
There are two methods for building a Windows version of Kerberos 5.
The traditional method involves starting on a Unix machine and
@@ -16,24 +17,21 @@ creating a distribution that can be built on Windows. The second
method works from the sources that come from the Unix distribution if
you have certain Unix-type utilities (see below).
+After the Windows SDK is installed, you should be able to invoke an
+SDK command prompt via the start menu (All Programs -> Microsoft
+Windows SDK vX.Y -> Windows SDK X.Y Command Prompt). Within this
+window, you can change the build target using the setenv command; run
+"setenv /?" or see the Windows SDK documentation for details. At the
+current time, Kerberos 5 can only be built for the x64 target if the
+host platform is also 64-bit, because it compiles and runs programs
+during the build.
+
IMPORTANT NOTE: By default, the sources are built with debug
information and linked against the debug version of the Microsoft C
Runtime library, which is not found on most Windows systems unless
they have development tools. To build a release version, you need to
define NODEBUG either in the environment or the nmake command-line.
-To configuring the build environment execute first the compiler
-batch file, vcvars32.bat or vsvars32.bat, followed by the SDK
-batch file, setenv.bat. For example,
-
- "c:\program files\microsoft visual studio .net 2003\common7\tools\vsvars32.bat"
- "c:\program files\microsoft sdk\setenv.bat" /2000 /RETAIL
-
-or
-
- "c:\program files\microsoft visual studio\vc98\bin\vcvars32.bat"
- "c:\program files\microsoft sdk\setenv.bat" /2000 /DEBUG
-
DNS Support: To support DNS lookups, you will need to define
KRB5_DNS_LOOKUP, KRB5_DNS_LOOKUP_KDC, or KRB5_DNS_LOOKUP_REALMS. When
any of the KRB5_DNS_LOOKUP definitions are used, the default build will use
@@ -98,9 +96,11 @@ Running Kerberos 5 Apps:
Make sure you have a valid krb5.ini file. That will look just like a
Unix krb5.conf file. You can place this file in the same directory as
-your krb5_32.dll or in your Windows directory. You should then be
-able to run the applications that are built. Note that Kerberos 5
-will not look for the krb5.ini file in your path.
+your krb5_32.dll (this will be the bin subdirectory of your install
+directory, if you did not move the binaries) or in your Windows
+directory (typically "C:\Windows"). You should then be able to run
+the applications that are built. Note that Kerberos 5 will not look
+for the krb5.ini file in your path.
krb5.ini File:
@@ -290,14 +290,6 @@ with the Platform SDK/Samples/Security/SSPI/GSS/ samples which Microsoft has bee
shipping as of January 2004. Revised versions of these samples are available upon
request to krbdev@mit.edu.
-Kerberos 4 Library Support:
----------------------------
-
-The krb4_32.dll that is built (but not installed) is not supported.
-If you need Kerberos 4, you can use the krbv4w32.dll that MIT
-distributes as part of the MIT Kerberos for Windows distribution.
-
-
More Information:
----------------
diff --git a/src/windows/build/bkw.pl b/src/windows/build/bkw.pl
index c1e33d28f0..24c32a035d 100644
--- a/src/windows/build/bkw.pl
+++ b/src/windows/build/bkw.pl
@@ -687,11 +687,6 @@ sub main {
system("rm -rf $out/a.tmp"); ## Clean up junk.
system("rm -rf $out/ziptemp"); ## Clean up junk.
- print "Now check for ntsecapitest.i.\n";
- $dir = "$wd\\athena\\auth\\krb5\\src\\windows";
- chdir($dir) or die "Fatal -- Couldn't cd to $dir";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
-
# End logging:
if ($odr->{logfile}->{def}) {$l->stop;}
diff --git a/src/windows/ntsecapitest.c b/src/windows/ntsecapitest.c
deleted file mode 100644
index 459e5dbd7f..0000000000
--- a/src/windows/ntsecapitest.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/* Simple program to show what is in ntsecapi.h.
- Compile -P to generate preprocessor output.
- */
-
-#include "ntsecapi.h"
-
-#ifdef TRUST_ATTRIBUTE_TRUST_USES_AES_KEYS
-VISTA_SDK_VERSION
-#else
-NT_SDK_VERSION
-#endif
diff --git a/src/windows/ntsecapitest.pl b/src/windows/ntsecapitest.pl
deleted file mode 100644
index c5306ea8d1..0000000000
--- a/src/windows/ntsecapitest.pl
+++ /dev/null
@@ -1,11 +0,0 @@
-#!perl -w
-
-$filename = "ntsecapitest.i";
-$string = "VISTA_SDK_VERSION";
-
-if (system("grep $string $filename")) {
- print "$string not found; deleting $filename.\n";
- system("rm $filename");
- }
-
-exit(0); \ No newline at end of file