summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Koch <kpkoch@mit.edu>2008-02-19 15:22:13 +0000
committerKevin Koch <kpkoch@mit.edu>2008-02-19 15:22:13 +0000
commit1ad7c24419422ce0d62c80699eb4cd30b1c3d51b (patch)
treea8d853bff3d5101093ed37a2a9cf8f3fbc8628fb /src
parentc90fb4c40ec4fb78e4d1b2a40c9c5af36225603c (diff)
downloadkrb5-1ad7c24419422ce0d62c80699eb4cd30b1c3d51b.tar.gz
krb5-1ad7c24419422ce0d62c80699eb4cd30b1c3d51b.tar.xz
krb5-1ad7c24419422ce0d62c80699eb4cd30b1c3d51b.zip
Changes to integrate the CCAPI build into the build structure, build the test suite and fixes to random problems discovered along the way
Since no platform other than windows builds CCAPI using the build system, some conditionalizing may be necessary when other platforms use the makefiles. src/Makefile.in: Add CPPFLAGS that seemed to be missing; run wconfig for ccapi/(lib, server, test). config/win-pre.in: DEBUGOPT /ZI doesn't seem to provide enough debugging information under VS2005; /Zi does. windows/build/bkw.pl: Fix -no<switch> so that -nonodebug will work. Otherwise, can't do debug build. Move Get/PutTspData out of dllmain; add tlsindex argument. Comment out some debug messages. TargetVersion: 1.7 Component: krb5-libs Ticket: 5594 Tags: pullup git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20229 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.in36
-rw-r--r--src/ccapi/Makefile.in31
-rw-r--r--src/ccapi/common/win/OldCC/ccutils.c2
-rw-r--r--src/ccapi/common/win/OldCC/util.cxx7
-rw-r--r--src/ccapi/common/win/tls.c47
-rw-r--r--src/ccapi/common/win/tls.h7
-rw-r--r--src/ccapi/common/win/win-utils.c3
-rw-r--r--src/ccapi/lib/win/OldCC/client.cxx4
-rw-r--r--src/ccapi/lib/win/ccapi_os_ipc.cxx23
-rw-r--r--src/ccapi/lib/win/ccs_reply_proc.c3
-rw-r--r--src/ccapi/lib/win/dllmain.cxx77
-rw-r--r--src/ccapi/lib/win/dllmain.h7
-rw-r--r--src/ccapi/server/win/ccs_os_server.cpp4
-rw-r--r--src/ccapi/server/win/ccs_win_pipe.c2
-rw-r--r--src/ccapi/test/Makefile.in145
-rw-r--r--src/ccapi/test/Pingtest.sln20
-rw-r--r--src/ccapi/test/pingtest.c10
-rw-r--r--src/ccapi/test/setlib.pl10
-rw-r--r--src/ccapi/test/test_ccapi.bat43
-rw-r--r--src/ccapi/test/test_ccapi_util.c2
-rw-r--r--src/config/win-pre.in2
-rw-r--r--src/windows/build/bkw.pl25
22 files changed, 367 insertions, 143 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index 055fb5d8b7..3fbc950263 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -15,6 +15,9 @@ LOCALINCLUDES = -I$(srcdir)
SRCS =
HDRS =
+# Why aren't these flags showing up in Windows builds?
+##DOS##CPPFLAGS=$(CPPFLAGS) -D_X86_=1 -DWIN32 -D_WIN32 -W3 -D_WINNT
+
DISTFILES = $(SRCS) $(HDRS) COPYING COPYING.LIB ChangeLog Makefile.in
all-unix:: krb5-config
@@ -36,6 +39,12 @@ all-windows:: maybe-awk Makefile-windows
@echo Making autoconf.h in include
cd include
$(MAKE) -$(MFLAGS) autoconf.h
+
+ @echo Making in ccapi
+ cd ..\ccapi
+ cd
+ $(MAKE) -$(MFLAGS)
+
@echo Making in util
cd ..\util
$(MAKE) -$(MFLAGS)
@@ -171,6 +180,10 @@ config-windows:: Makefile-windows
WINMAKEFILES=Makefile \
appl\gss-sample\Makefile \
appl\gssftp\ftp\Makefile \
+ ccapi\Makefile \
+ ccapi\lib\win\Makefile \
+ ccapi\server\win\Makefile \
+ ccapi\test\Makefile \
clients\Makefile clients\kdestroy\Makefile \
clients\kinit\Makefile clients\klist\Makefile \
clients\kpasswd\Makefile clients\kvno\Makefile \
@@ -215,6 +228,14 @@ WINMAKEFILES=Makefile \
##DOS## $(WCONFIG) config < $@.in > $@
##DOS##appl\gssftp\ftp\Makefile: appl\gssftp\ftp\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##ccapi\Makefile: ccapi\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##ccapi\lib\win\Makefile: ccapi\lib\win\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##ccapi\server\win\Makefile: ccapi\server\win\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
+##DOS##ccapi\test\Makefile: ccapi\test\Makefile.in $(MKFDEP)
+##DOS## $(WCONFIG) config < $@.in > $@
##DOS##clients\Makefile: clients\Makefile.in $(MKFDEP)
##DOS## $(WCONFIG) config < $@.in > $@
##DOS##clients\kdestroy\Makefile: clients\kdestroy\Makefile.in $(MKFDEP)
@@ -344,10 +365,10 @@ clean-windows:: Makefile-windows
@echo Making clean in clients
cd ..\clients
$(MAKE) -$(MFLAGS) clean
- @echo Making in appl\gss-sample
+ @echo Making clean in appl\gss-sample
cd ..\appl\gss-sample
$(MAKE) -$(MFLAGS) clean
- @echo Making in appl\gssftp\ftp
+ @echo Making clean in appl\gssftp\ftp
cd ..\..\appl\gssftp\ftp
$(MAKE) -$(MFLAGS) clean
cd ..\..\..
@@ -365,7 +386,7 @@ ren2long:
#
ZIP=zip
FILES= ./* \
- clients/* clients/kdestroy/* clients/kinit/* clients/klist/* \
+ clients/* clients/kdestroy/* clients/kinit/* clients/klist/* \
clients/kpasswd/* clients/kcpytkt/* clients/kdeltkt/* \
config/* include/* include/kerberosIV/* \
include/krb5/* include/krb5/stock/* include/sys/* krb524/* lib/* \
@@ -383,7 +404,12 @@ FILES= ./* \
lib/krb5/os/* lib/krb5/posix/* lib/krb5/rcache/* \
util/* util/et/* util/profile/*
-WINFILES= util/windows/* windows/* windows/lib/* windows/cns/* \
+WINFILES= \
+ 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\* \
+ util/windows/* windows/* windows/lib/* windows/cns/* \
windows/wintel/* windows/gss/* windows/gina/* windows/ms2mit/* \
windows/kfwlogon/*
@@ -575,6 +601,8 @@ install-windows::
$(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\."
diff --git a/src/ccapi/Makefile.in b/src/ccapi/Makefile.in
index ae4232917a..7cf8080552 100644
--- a/src/ccapi/Makefile.in
+++ b/src/ccapi/Makefile.in
@@ -3,8 +3,35 @@ myfulldir=ccapi
mydir=ccapi
BUILDTOP=$(REL)..
-LOCAL_SUBDIRS= common lib server
+LOCAL_SUBDIRS= lib server test
-all-unix::
+all-windows::
+ @echo Making in ccapi\lib\win
+ @echo buildtop: $(BUILDTOP)
+ cd lib\win
+ cd
+ $(MAKE) -$(MFLAGS)
+ @echo Making in ccapi\server\win
+ cd ..\..\server\win
+ cd
+ $(MAKE) -$(MFLAGS)
+ @echo Making in ccapi\test
+ cd ..\..\test
+ cd
+ $(MAKE) -$(MFLAGS)
+
+clean-windows::
+ @echo Making clean in ccapi\lib\win
+ cd lib\win
+ cd
+ $(MAKE) -$(MFLAGS) clean
+ @echo Making clean in ccapi\server\win
+ cd ..\..\server\win
+ cd
+ $(MAKE) -$(MFLAGS) clean
+ @echo Making clean in ccapi\test
+ cd ..\..\test
+ cd
+ $(MAKE) -$(MFLAGS) clean
# +++ Dependency line eater +++
diff --git a/src/ccapi/common/win/OldCC/ccutils.c b/src/ccapi/common/win/OldCC/ccutils.c
index bfe1389978..d1b39cc383 100644
--- a/src/ccapi/common/win/OldCC/ccutils.c
+++ b/src/ccapi/common/win/OldCC/ccutils.c
@@ -25,6 +25,8 @@
*/
#include <windows.h>
+#include <stdlib.h>
+#include <malloc.h>
#include "cci_debugging.h"
#include "util.h"
diff --git a/src/ccapi/common/win/OldCC/util.cxx b/src/ccapi/common/win/OldCC/util.cxx
index 8694c373ce..dd4a2694ac 100644
--- a/src/ccapi/common/win/OldCC/util.cxx
+++ b/src/ccapi/common/win/OldCC/util.cxx
@@ -26,15 +26,16 @@
#include <windows.h>
#include <stdio.h> // for _snprintf
-
-#include "util.h"
-#include "secure.hxx"
+#include <malloc.h>
+#include <stdlib.h>
extern "C" {
#include "cci_debugging.h"
#include "ccutils.h"
}
+#include "util.h"
+#include "secure.hxx"
void* malloc_alloc_p(size_t size) {
diff --git a/src/ccapi/common/win/tls.c b/src/ccapi/common/win/tls.c
index cf8daa3b26..45020b5707 100644
--- a/src/ccapi/common/win/tls.c
+++ b/src/ccapi/common/win/tls.c
@@ -25,6 +25,8 @@
*/
#include "string.h"
+#include <stdlib.h>
+#include <malloc.h>
#include "tls.h"
@@ -58,14 +60,47 @@ void tspdata_setSST (struct tspdata* p, time_t t) {p->_sst
void tspdata_setStream (struct tspdata* p, cci_stream_t s) {p->_stream = s;}
-BOOL tspdata_getConnected (struct tspdata* p) {return p->_CCAPI_Connected;}
+BOOL tspdata_getConnected (const struct tspdata* p) {return p->_CCAPI_Connected;}
-HANDLE tspdata_getReplyEvent(struct tspdata* p) {return p->_replyEvent;}
+HANDLE tspdata_getReplyEvent(const struct tspdata* p) {return p->_replyEvent;}
-time_t tspdata_getSST (const struct tspdata* p) {return p->_sst;}
+time_t tspdata_getSST (const struct tspdata* p) {return p->_sst;}
-cci_stream_t tspdata_getStream (const struct tspdata* p) {return p->_stream;}
+cci_stream_t tspdata_getStream (const struct tspdata* p) {return p->_stream;}
+
+char* tspdata_getUUID (const struct tspdata* p) {return p->_uuid;}
+
+RPC_ASYNC_STATE* tspdata_getRpcAState (const struct tspdata* p) {return p->_rpcState;}
+
+BOOL WINAPI PutTspData(DWORD dwTlsIndex, struct tspdata* dw) {
+ LPVOID lpvData;
+ struct tspdata** pData; // The stored memory pointer
+
+ // Retrieve a data pointer for the current thread:
+ lpvData = TlsGetValue(dwTlsIndex);
+
+ // If NULL, allocate memory for the TLS slot for this thread:
+ if (lpvData == NULL) {
+ lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct tspdata));
+ if (lpvData == NULL) return FALSE;
+ if (!TlsSetValue(dwTlsIndex, lpvData)) return FALSE;
+ }
+
+ pData = (struct tspdata**) lpvData; // Cast to my data type.
+ // In this example, it is only a pointer to a DWORD
+ // but it can be a structure pointer to contain more complicated data.
+
+ (*pData) = dw;
+ return TRUE;
+ }
+
+BOOL WINAPI GetTspData(DWORD dwTlsIndex, struct tspdata** pdw) {
+ struct tspdata* pData; // The stored memory pointer
+
+ pData = (struct tspdata*)TlsGetValue(dwTlsIndex);
+ if (pData == NULL) return FALSE;
+ (*pdw) = pData;
+ return TRUE;
+ }
-char* tspdata_getUUID (const struct tspdata* p) {return p->_uuid;}
-RPC_ASYNC_STATE* tspdata_getRpcAState (const struct tspdata* p) {return p->_rpcState;}
diff --git a/src/ccapi/common/win/tls.h b/src/ccapi/common/win/tls.h
index 3d988cd694..1a6086888b 100644
--- a/src/ccapi/common/win/tls.h
+++ b/src/ccapi/common/win/tls.h
@@ -31,13 +31,14 @@
#include "windows.h"
#include "time.h"
+#include "rpc.h"
#include "cci_stream.h"
#define UUID_SIZE 128
-/* The client code can be run in any client thread. The thread-specific data
- is defined here.
+/* The client code can be run in any client thread.
+ The thread-specific data is defined here.
*/
struct tspdata {
@@ -66,5 +67,7 @@ time_t tspdata_getSST (const struct tspdata* p);
cci_stream_t tspdata_getStream (const struct tspdata* p);
char* tspdata_getUUID (const struct tspdata* p);
+BOOL WINAPI PutTspData(DWORD tlsIndex, struct tspdata* dw);
+BOOL WINAPI GetTspData(DWORD tlsIndex, struct tspdata** pdw);
#endif _tls_h
diff --git a/src/ccapi/common/win/win-utils.c b/src/ccapi/common/win/win-utils.c
index 4cba153a9e..f60ee3b8f4 100644
--- a/src/ccapi/common/win/win-utils.c
+++ b/src/ccapi/common/win/win-utils.c
@@ -28,6 +28,9 @@
#include <string.h>
#include <time.h>
#include "windows.h"
+#include <stdlib.h>
+#include <malloc.h>
+
#include "win-utils.h"
#include "cci_debugging.h"
diff --git a/src/ccapi/lib/win/OldCC/client.cxx b/src/ccapi/lib/win/OldCC/client.cxx
index 4928d4c536..ed8712339a 100644
--- a/src/ccapi/lib/win/OldCC/client.cxx
+++ b/src/ccapi/lib/win/OldCC/client.cxx
@@ -124,10 +124,10 @@ DWORD find_server(Init::InitInfo& info, LPSTR endpoint) {
psa = isNT() ? &sa : 0;
-// cci_debug_printf("%s Looking for server; ccs_request_IfHandle:0x%X", __FUNCTION__, ccs_request_IfHandle);
+ cci_debug_printf("%s Looking for server; ccs_request_IfHandle:0x%X", __FUNCTION__, ccs_request_IfHandle);
status = cci_check_error(RpcMgmtIsServerListening(ccs_request_IfHandle));
if (status == RPC_S_NOT_LISTENING) {
-// cci_debug_printf(" Server *NOT* found!");
+ cci_debug_printf(" Server *NOT* found!");
si.cb = sizeof(si);
status = alloc_module_dir_name(CCAPI_DLL, &szDir);
diff --git a/src/ccapi/lib/win/ccapi_os_ipc.cxx b/src/ccapi/lib/win/ccapi_os_ipc.cxx
index 770e75b6a8..7fc57b3925 100644
--- a/src/ccapi/lib/win/ccapi_os_ipc.cxx
+++ b/src/ccapi/lib/win/ccapi_os_ipc.cxx
@@ -27,21 +27,22 @@
extern "C" {
#include "k5-thread.h"
#include "ccapi_os_ipc.h"
-#include "tls.h"
-#include "dllmain.h"
+#include "cci_debugging.h"
#include "ccs_reply.h"
#include "ccs_request.h"
-#include "win-utils.h"
#include "ccutils.h"
+#include "tls.h"
#include "util.h"
+#include "win-utils.h"
}
+#include "autolock.hxx"
#include "CredentialsCache.h"
#include "secure.hxx"
#include "opts.hxx"
#include "client.h"
-#include "autolock.hxx"
-#include "cci_debugging.h"
+
+extern "C" DWORD GetTlsIndex();
#define SECONDS_TO_WAIT 10
#define CLIENT_REQUEST_RPC_HANDLE ccs_request_IfHandle
@@ -81,7 +82,7 @@ extern "C" cc_int32 cci_os_ipc_thread_init (void) {
UUID __RPC_FAR uuid;
unsigned char __RPC_FAR* uuidString = NULL;
- if (!GetTspData(&ptspdata)) return ccErrNoMem;
+ if (!GetTspData(GetTlsIndex(), &ptspdata)) return ccErrNoMem;
opts.cMinCalls = 1;
opts.cMaxCalls = 20;
@@ -150,7 +151,7 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32 in_launch_server,
if (!in_request_stream) { err = cci_check_error (ccErrBadParam); }
if (!out_reply_stream ) { err = cci_check_error (ccErrBadParam); }
- if (!GetTspData(&ptspdata)) {return ccErrBadParam;}
+ if (!GetTspData(GetTlsIndex(), &ptspdata)) {return ccErrBadParam;}
bCCAPI_Connected = tspdata_getConnected (ptspdata);
replyEvent = tspdata_getReplyEvent (ptspdata);
sst = tspdata_getSST (ptspdata);
@@ -187,7 +188,7 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32 in_launch_server,
// New code using new RPC procedures for sending the data and receiving a reply:
if (!err) {
RpcTryExcept {
- if (!GetTspData(&ptspdata)) {return ccErrBadParam;}
+ if (!GetTspData(GetTlsIndex(), &ptspdata)) {return ccErrBadParam;}
uuid = tspdata_getUUID(ptspdata);
lenUUID = 1 + strlen(uuid); /* 1+ includes terminating \0. */
cci_debug_printf("%s calling remote ccs_rpc_request tsp*:0x%X", __FUNCTION__, ptspdata);
@@ -216,9 +217,9 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32 in_launch_server,
// Wait for reply handler to set event:
if (!err) {
- cci_debug_printf(" Waiting for request reply.");
+// cci_debug_printf(" Waiting for request reply.");
err = cci_check_error(WaitForSingleObject(replyEvent, INFINITE));//(SECONDS_TO_WAIT)*1000));
- cci_debug_printf(" Request reply received!");
+// cci_debug_printf(" Request reply received!");
}
if (!err) {
@@ -237,8 +238,6 @@ extern "C" cc_int32 cci_os_ipc_msg( cc_int32 in_launch_server,
if (!err) {
*out_reply_stream = tspdata_getStream(ptspdata);
}
-
- cci_debug_printf(" payload:<%s>", cci_stream_data(*out_reply_stream));
return cci_check_error (err);
}
diff --git a/src/ccapi/lib/win/ccs_reply_proc.c b/src/ccapi/lib/win/ccs_reply_proc.c
index f9eef87fff..8d17bfc053 100644
--- a/src/ccapi/lib/win/ccs_reply_proc.c
+++ b/src/ccapi/lib/win/ccs_reply_proc.c
@@ -51,8 +51,7 @@ void ccs_rpc_request_reply(
long status = 0;
cci_debug_printf("%s! msg#:%d SST:%ld uuid:%s", __FUNCTION__, rpcmsg, srvStartTime, uuid);
- cci_debug_printf(" payload:<%s>", chIn);
- cci_debug_printf(" uuid from handle:<%s>", tspdata_getUUID(tsp));
+// cci_debug_printf(" uuid from handle:<%s>", tspdata_getUUID(tsp));
if (!status) {
status = cci_stream_new (&stream); /* Create a stream for the request data */
diff --git a/src/ccapi/lib/win/dllmain.cxx b/src/ccapi/lib/win/dllmain.cxx
index dafbab28c1..e37a9ad6bf 100644
--- a/src/ccapi/lib/win/dllmain.cxx
+++ b/src/ccapi/lib/win/dllmain.cxx
@@ -24,19 +24,20 @@
* or implied warranty.
*/
+extern "C" {
#include <windows.h>
#include <LMCons.h>
-extern "C" {
#include "dllmain.h"
#include "tls.h"
#include "cci_debugging.h"
#include "ccapi_context.h"
#include "client.h"
-//void cci_thread_init__auxinit();
+void cci_thread_init__auxinit();
}
+
#define CCAPI_V2_MUTEX_NAME TEXT("MIT_CCAPI_V4_MUTEX")
// Process-specific data:
@@ -52,6 +53,8 @@ DWORD firstThreadID = 0;
static Init init;
static Client client;
+DWORD GetTlsIndex() {return dwTlsIndex;}
+
// DllMain() is the entry-point function for this DLL.
BOOL WINAPI DllMain(HINSTANCE hinstDLL, // DLL module handle
DWORD fdwReason, // reason called
@@ -196,72 +199,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, // DLL module handle
extern "C" { // we need to export the C interface
#endif
-__declspec(dllexport)
-BOOL WINAPI PutTspData(struct tspdata* dw) {
- LPVOID lpvData;
- struct tspdata** pData; // The stored memory pointer
-
- // Retrieve a data pointer for the current thread:
- lpvData = TlsGetValue(dwTlsIndex);
-
- // If NULL, allocate memory for the TLS slot for this thread:
- if (lpvData == NULL) {
- lpvData = (LPVOID) LocalAlloc(LPTR, sizeof(struct tspdata));
- if (lpvData == NULL) return FALSE;
- if (!TlsSetValue(dwTlsIndex, lpvData)) return FALSE;
- }
-
- pData = (struct tspdata**) lpvData; // Cast to my data type.
- // In this example, it is only a pointer to a DWORD
- // but it can be a structure pointer to contain more complicated data.
-
- (*pData) = dw;
- return TRUE;
- }
-
-__declspec(dllexport)
-BOOL WINAPI GetTspData(struct tspdata** pdw) {
- struct tspdata* pData; // The stored memory pointer
-
- pData = (struct tspdata*)TlsGetValue(dwTlsIndex);
- if (pData == NULL) return FALSE;
- (*pdw) = pData;
- return TRUE;
- }
-
-#if 0 // replaced by clientEndpoint / serverEndpoint.
-__declspec(dllexport)
-char* WINAPI getEndpoint(enum EndpointType ep) {
- // The server endpoint is of the form CCS_<LSID>
- // The client endpoint is of the form CCAPI_<uuid>
- // Each client thread can have its own connection.
- //
- // NB: Caller must free the data the returned char* points to.
- struct tspdata* pData;
- char* s;
- char* uuid;
- unsigned int len;
-
- switch (ep) {
- case EPT_SERVER:
- s = (char*)malloc(32); // Length of CCS_<DWORD>
- sprintf(s, "%s_%ld", ep_prefices[EPT_SERVER], sessionToken);
- break;
- case EPT_CLIENT:
- GetTspData(&pData);
- uuid = tspdata_getUUID(pData);
- len = 4 + strlen(ep_prefices[ep]) + strlen(_user) + strlen(uuid);
- s = (char*)malloc(len);
- sprintf(s, "%s_%s_%s", ep_prefices[EPT_CLIENT], _user, uuid);
- break;
- default:;
- }
- cci_debug_printf("%s(%d) returning %s", __FUNCTION__, ep, s);
-
- return s;
- }
-#endif
-
#ifdef __cplusplus
}
#endif
@@ -270,10 +207,10 @@ char* WINAPI getEndpoint(enum EndpointType ep) {
/* MIDL allocate and free */
/*********************************************************************/
-void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {
+extern "C" void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t len) {
return(malloc(len));
}
-void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {
+extern "C" void __RPC_USER MIDL_user_free(void __RPC_FAR * ptr) {
free(ptr);
}
diff --git a/src/ccapi/lib/win/dllmain.h b/src/ccapi/lib/win/dllmain.h
index 8c585721c0..abf6afd4ab 100644
--- a/src/ccapi/lib/win/dllmain.h
+++ b/src/ccapi/lib/win/dllmain.h
@@ -29,15 +29,12 @@
#include "windows.h"
-enum EndpointType {EPT_SERVER=0, EPT_CLIENT};
-
#ifdef __cplusplus // If used by C++ code,
extern "C" { // we need to export the C interface
#endif
-__declspec(dllexport) BOOL WINAPI PutTspData(struct tspdata* p);
-__declspec(dllexport) BOOL WINAPI GetTspData(struct tspdata** p);
-//__declspec(dllexport) char* WINAPI getEndpoint(enum EndpointType);
+DWORD GetTlsIndex();
+
#ifdef __cplusplus
}
#endif
diff --git a/src/ccapi/server/win/ccs_os_server.cpp b/src/ccapi/server/win/ccs_os_server.cpp
index 0c3f7660ee..61392e9a34 100644
--- a/src/ccapi/server/win/ccs_os_server.cpp
+++ b/src/ccapi/server/win/ccs_os_server.cpp
@@ -941,10 +941,10 @@ RPC_STATUS RPC_ENTRY sec_callback( IN RPC_IF_ID *Interface,
/* MIDL allocate and free */
/*********************************************************************/
-void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {
+extern "C" void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {
return(malloc(len));
}
-void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {
+extern "C" void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {
free(ptr);
}
diff --git a/src/ccapi/server/win/ccs_win_pipe.c b/src/ccapi/server/win/ccs_win_pipe.c
index a8fea2f384..7c61371272 100644
--- a/src/ccapi/server/win/ccs_win_pipe.c
+++ b/src/ccapi/server/win/ccs_win_pipe.c
@@ -25,6 +25,8 @@
*/
#include "assert.h"
+#include <stdlib.h>
+#include <malloc.h>
#include "ccs_win_pipe.h"
#include "cci_debugging.h"
diff --git a/src/ccapi/test/Makefile.in b/src/ccapi/test/Makefile.in
index f0c10cb9ca..7e71dcf63e 100644
--- a/src/ccapi/test/Makefile.in
+++ b/src/ccapi/test/Makefile.in
@@ -1,34 +1,110 @@
-thisconfigdir=../..
-myfulldir=ccapi/test
-mydir=ccapi/test
+thisconfigdir=..$(S)..
+myfulldir=ccapi$(S)test
+mydir=ccapi$(S)test
+BUILDTOP=..$(S)..
+
+!if defined(KRB5_KFW_COMPILE)
+KFWINC= /I$(BUILDTOP)\..\..\krbcc\include
+!endif
+
+# 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.
# run with "make all" to create CCAPI tests in "/tmp/ccapi_test"
# run resulting tests with "sh test_ccapi.sh"
-LIBS = -lkrb5
+##DOS##CPPFLAGS = $(CPPFLAGS) /EHsc -D_CRTAPI1=_cdecl -D_CRTAPI2=_cdecl -DWINVER=0x0501 \
+##DOS## -D_WIN32_WINNT=0x0501 -D_CRT_SECURE_NO_WARNINGS
-SRCDIR = src
-DSTROOT = /tmp
-OBJDIR = $(DSTROOT)/ccapi_intermediates
-DSTDIR = $(DSTROOT)/ccapi_test
-TESTDIR = $(DSTDIR)/tests
-
-SCRIPT_NAME = test_ccapi.sh
+##DOS##WINH = cci_debugging.h \
+##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
-OBJECTS = test_ccapi_ccache.o test_ccapi_check.o test_ccapi_constants.o test_ccapi_context.o test_ccapi_globals.o test_ccapi_iterators.o test_ccapi_log.o test_ccapi_util.o
-_OBJECTS = $(OBJECTS:.o=)
+SRCDIR = .
+DSTROOT = $(SRCDIR)
+OBJDIR = $(DSTROOT)$(S)ccapi_intermediates
+DSTDIR = $(DSTROOT)$(S)ccapi_test
+TESTDIR = $(DSTDIR)$(S)tests
-TEST_OBJECTS = test_constants.o test_cc_initialize.o test_cc_context_get_version.o test_cc_context_release.o test_cc_context_get_change_time.o test_cc_context_get_default_ccache_name.o test_cc_context_open_ccache.o test_cc_context_open_default_ccache.o test_cc_context_create_ccache.o test_cc_context_create_default_ccache.o test_cc_context_create_new_ccache.o test_cc_context_new_ccache_iterator.o test_cc_context_compare.o test_cc_ccache_release.o test_cc_ccache_destroy.o test_cc_ccache_set_default.o test_cc_ccache_get_credentials_version.o test_cc_ccache_get_name.o test_cc_ccache_get_principal.o test_cc_ccache_set_principal.o test_cc_ccache_store_credentials.o test_cc_ccache_remove_credentials.o test_cc_ccache_new_credentials_iterator.o test_cc_ccache_get_change_time.o test_cc_ccache_get_last_default_time.o test_cc_ccache_move.o test_cc_ccache_compare.o test_cc_ccache_get_kdc_time_offset.o test_cc_ccache_set_kdc_time_offset.o test_cc_ccache_clear_kdc_time_offset.o test_cc_ccache_iterator_next.o test_cc_credentials_iterator_next.o
-TEST_NAMES = $(TEST_OBJECTS:.o=)
+SCRIPT_NAME = test_ccapi.sh
-all: setup-test-dir simple_lock_test build-base build-tests link-tests copy-script success-message
+OBJECTS = $(OUTPRE)test_ccapi_ccache.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_check.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_constants.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_context.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_globals.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_iterators.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_log.$(OBJEXT) \
+ $(OUTPRE)test_ccapi_util.$(OBJEXT)
+
+PINGOBJS = $(OUTPRE)ccs_request_c.$(OBJEXT) \
+ $(OUTPRE)pingtest.$(OBJEXT) \
+ $(OBJECTS)
+
+TEST_NAMES = test_constants \
+ test_cc_initialize \
+ test_cc_context_get_version
+
+MORE_TESTS = test_cc_context_release \
+ test_cc_context_get_change_time \
+ test_cc_context_get_default_ccache_name \
+ test_cc_context_open_ccache \
+ test_cc_context_open_default_ccache \
+ test_cc_context_create_ccache \
+ test_cc_context_create_default_ccache \
+ test_cc_context_create_new_ccache \
+ test_cc_context_new_ccache_iterator \
+ test_cc_context_compare \
+ test_cc_ccache_release \
+ test_cc_ccache_destroy \
+ test_cc_ccache_set_default \
+ test_cc_ccache_get_credentials_version \
+ test_cc_ccache_get_name \
+ test_cc_ccache_get_principal \
+ test_cc_ccache_set_principal \
+ test_cc_ccache_store_credentials \
+ test_cc_ccache_remove_credentials \
+ test_cc_ccache_new_credentials_iterator \
+ test_cc_ccache_get_change_time \
+ test_cc_ccache_get_last_default_time \
+ test_cc_ccache_move \
+ test_cc_ccache_compare \
+ test_cc_ccache_get_kdc_time_offset \
+ test_cc_ccache_set_kdc_time_offset \
+ test_cc_ccache_clear_kdc_time_offset \
+ test_cc_ccache_iterator_next \
+ test_cc_credentials_iterator_next
+
+##### Linker
+LINK = link
+LIBS = -lkrb5
+##DOS##LIBS = advapi32.lib rpcrt4.lib user32.lib ws2_32.lib ccapi.lib
+LFLAGS = /nologo $(LOPTS)
+
+all-mac:: setup-test-dir pingtest stop_here simple_lock_test build-base build-tests link-tests copy-script success-message
+all-windows:: setup-windows build-base $(OUTPRE)pingtest.exe build-tests copy-script stop_here success-message
# compile base files used by all tests
-build-base: $(OBJECTS)
+build-base: $(PINGOBJS)
+##++ These two rules build each element of the list:
# compile each test
-build-tests: $(TEST_OBJECTS)
-
+build-tests: $(TEST_NAMES)
+ @echo build-tests complete.
+
+$(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)"
@@ -36,12 +112,35 @@ 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)
+ 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):
+ copy ..\lib\win\srctmp\$@ .
+
+# This rule assumes that nmake in ..\lib\win\ has already run.
+$(OUTPRE)pingtest.exe: $(OBJECTS)
+# 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
+ perl setlib.pl
+ if not exist a.tmp (
+ @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-tests: $(TEST_NAMES)
-$(TEST_NAMES): $(TEST_OBJECTS)
- $(CC) -o $(TESTDIR)/$@ $(OBJDIR)/$@.o $(OBJECTS) $(LIBS)
-
simple_lock_test:
$(CC) -o $(TESTDIR)/simple_lock_test simple_lock_test.c $(LIBS)
@@ -54,5 +153,5 @@ success-message:
.PHONY: clean
-clean:
+clean::
-rm -rf "$(OBJDIR)"
diff --git a/src/ccapi/test/Pingtest.sln b/src/ccapi/test/Pingtest.sln
new file mode 100644
index 0000000000..cf43a1e4f6
--- /dev/null
+++ b/src/ccapi/test/Pingtest.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Pingtest", "Pingtest.vcproj", "{04017001-3222-43C4-A03C-8423B5349276}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {04017001-3222-43C4-A03C-8423B5349276}.Debug|Win32.ActiveCfg = Debug|Win32
+ {04017001-3222-43C4-A03C-8423B5349276}.Debug|Win32.Build.0 = Debug|Win32
+ {04017001-3222-43C4-A03C-8423B5349276}.Release|Win32.ActiveCfg = Release|Win32
+ {04017001-3222-43C4-A03C-8423B5349276}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/ccapi/test/pingtest.c b/src/ccapi/test/pingtest.c
index a2499118f6..637f8ab183 100644
--- a/src/ccapi/test/pingtest.c
+++ b/src/ccapi/test/pingtest.c
@@ -4,6 +4,8 @@
#include <stdio.h>
#include <stdarg.h>
+#include <stdlib.h>
+#include <malloc.h>
#include "cci_debugging.h"
#include "CredentialsCache.h"
@@ -20,11 +22,15 @@ extern cc_int32 cci_os_ipc_msg( cc_int32 in_launch_server,
cc_int32 in_msg,
cci_stream_t* out_reply_stream);
+static DWORD dwTlsIndex;
+
+DWORD GetTlsIndex() {return dwTlsIndex;}
+
RPC_STATUS send_test(char* endpoint) {
unsigned char* pszNetworkAddress = NULL;
unsigned char* pszOptions = NULL;
unsigned char* pszStringBinding = NULL;
- unsigned char* pszUuid = NULL;
+ unsigned char* pszUuid = NULL;
RPC_STATUS status;
status = RpcStringBindingCompose(pszUuid,
@@ -67,6 +73,8 @@ int main( int argc, char *argv[]) {
char* message = "Hello, RPC!";
+ if ((dwTlsIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) return FALSE;
+
// send_test("krbcc.229026.0.ep");
#if 0
diff --git a/src/ccapi/test/setlib.pl b/src/ccapi/test/setlib.pl
new file mode 100644
index 0000000000..bba2250668
--- /dev/null
+++ b/src/ccapi/test/setlib.pl
@@ -0,0 +1,10 @@
+#!perl -w
+
+$b = "lib\\win\\srctmp";
+$a = $ENV{LIB};
+if (! ($a =~ /$b/) ) {
+ print "$b Not in LIB!\n";
+ system("del a.tmp");
+ }
+else {print "$b in LIB.\n";}
+exit(0); \ No newline at end of file
diff --git a/src/ccapi/test/test_ccapi.bat b/src/ccapi/test/test_ccapi.bat
new file mode 100644
index 0000000000..2d5bec53b7
--- /dev/null
+++ b/src/ccapi/test/test_ccapi.bat
@@ -0,0 +1,43 @@
+# test_ccapi.bat
+
+@echo "\nBeginning test of CCAPI...\n"
+@echo "\nThese tests are based on the CCAPI v3 revision 8 draft documentation.\n"
+
+#run_test simple_lock_test
+
+teststest_constants.exe
+tests\test_cc_initialize.exe
+tests\test_cc_context_get_version.exe
+exit 0
+
+tests\test_cc_context_release.exe
+tests\test_cc_context_get_change_time.exe
+tests\test_cc_context_get_default_ccache_name.exe
+tests\test_cc_context_open_ccache.exe
+tests\test_cc_context_open_default_ccache.exe
+tests\test_cc_context_create_ccache.exe
+tests\test_cc_context_create_default_ccache.exe
+tests\test_cc_context_create_new_ccache.exe
+tests\test_cc_context_new_ccache_iterator.exe
+tests\test_cc_context_compare.exe
+tests\test_cc_ccache_release.exe
+tests\test_cc_ccache_destroy.exe
+tests\test_cc_ccache_set_default.exe
+tests\test_cc_ccache_get_credentials_version.exe
+tests\test_cc_ccache_get_name.exe
+tests\test_cc_ccache_get_principal.exe
+tests\test_cc_ccache_set_principal.exe
+tests\test_cc_ccache_store_credentials.exe
+tests\test_cc_ccache_remove_credentials.exe
+tests\test_cc_ccache_new_credentials_iterator.exe
+tests\test_cc_ccache_get_change_time.exe
+tests\test_cc_ccache_get_last_default_time.exe
+tests\test_cc_ccache_move.exe
+tests\test_cc_ccache_compare.exe
+tests\test_cc_ccache_get_kdc_time_offset.exe
+tests\test_cc_ccache_set_kdc_time_offset.exe
+tests\test_cc_ccache_clear_kdc_time_offset.exe
+tests\test_cc_ccache_iterator_next.exe
+tests\test_cc_credentials_iterator_next.exe
+
+@echo "Finished testing CCAPI."
diff --git a/src/ccapi/test/test_ccapi_util.c b/src/ccapi/test/test_ccapi_util.c
index fde6946fea..282ec74b56 100644
--- a/src/ccapi/test/test_ccapi_util.c
+++ b/src/ccapi/test/test_ccapi_util.c
@@ -3,6 +3,8 @@
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
+
+#include "k5-platform.h"
#include "test_ccapi_util.h"
diff --git a/src/config/win-pre.in b/src/config/win-pre.in
index 7393526590..25dcaa9180 100644
--- a/src/config/win-pre.in
+++ b/src/config/win-pre.in
@@ -141,7 +141,7 @@ DEBUGOPT=/Zi
!else
CCLINKOPTION=
SCLIB=
-DEBUGOPT=/ZI
+DEBUGOPT=/Zi
!endif
#if the compiler is vstudio 8, generate manifest
diff --git a/src/windows/build/bkw.pl b/src/windows/build/bkw.pl
index ee93203bfe..24c32a035d 100644
--- a/src/windows/build/bkw.pl
+++ b/src/windows/build/bkw.pl
@@ -164,9 +164,6 @@ sub main {
##++ Assemble configuration from config file and command line:
my $bOutputCleaned = 0;
-
-#while ($v = each %$OPT) {print "$v: $OPT->{$v}\n";}
-
# Scan the configuration for switch definitions:
while (($sw, $val) = each %$odr) {
next if (! exists $val->{def}); ## ?? Should always exist.
@@ -174,7 +171,10 @@ sub main {
# Set/clear environment variables:
if ($val->{env}) {
if ($val->{def}) {$ENV{$sw} = (exists $val->{value}) ? $val->{value} : 1; }
- else {delete $ENV{$sw}; }
+ else {
+ delete $ENV{$sw};
+ undef $sw;
+ }
}
# If the switch is in the command line, override the stored value:
@@ -184,14 +184,20 @@ sub main {
$val->{def} = 1;
}
else {
- $val->{def} = $OPT->{$sw}; ## If no<switch>, value will be zero.
+ $val->{def} = $OPT->{$sw}; ## If -NO<switch>, value will be zero.
}
}
# If the switch can be negated, test that, too:
if ( ! ($val->{def} =~ /A/)) {
local $nosw = "no".$sw;
- if (exists $OPT->{$nosw}) {
- $val->{def} = 0;
+ if (exists $OPT->{$sw}) { ## -NO<environment variable> ?
+ if ($val->{env}) {
+ if (!$val->{def}) {
+ print "Deleting environment variable $sw\n";
+ delete $ENV{$sw};
+ undef $sw;
+ }
+ }
}
}
@@ -315,6 +321,9 @@ sub main {
$l->no_die_handler; ## Needed so XML::Simple won't throw exceptions.
}
+ print "Command line options:\n";
+ while ($v = each %$OPT) {print "$v: $OPT->{$v}\n";}
+
print "Executing $cmdline\n";
local $argvsize = @ARGV;
local $nmakeargs = "";
@@ -687,4 +696,4 @@ sub main {
$SIG{'INT'} = \&handler;
$SIG{'QUIT'} = \&handler;
-exit(main()); \ No newline at end of file
+exit(main());