Changes to integrate the CCAPI build into the build structure, build the test suite...
authorKevin Koch <kpkoch@mit.edu>
Tue, 19 Feb 2008 15:22:13 +0000 (15:22 +0000)
committerKevin Koch <kpkoch@mit.edu>
Tue, 19 Feb 2008 15:22:13 +0000 (15:22 +0000)
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

22 files changed:
src/Makefile.in
src/ccapi/Makefile.in
src/ccapi/common/win/OldCC/ccutils.c
src/ccapi/common/win/OldCC/util.cxx
src/ccapi/common/win/tls.c
src/ccapi/common/win/tls.h
src/ccapi/common/win/win-utils.c
src/ccapi/lib/win/OldCC/client.cxx
src/ccapi/lib/win/ccapi_os_ipc.cxx
src/ccapi/lib/win/ccs_reply_proc.c
src/ccapi/lib/win/dllmain.cxx
src/ccapi/lib/win/dllmain.h
src/ccapi/server/win/ccs_os_server.cpp
src/ccapi/server/win/ccs_win_pipe.c
src/ccapi/test/Makefile.in
src/ccapi/test/Pingtest.sln [new file with mode: 0644]
src/ccapi/test/pingtest.c
src/ccapi/test/setlib.pl [new file with mode: 0644]
src/ccapi/test/test_ccapi.bat [new file with mode: 0644]
src/ccapi/test/test_ccapi_util.c
src/config/win-pre.in
src/windows/build/bkw.pl

index 055fb5d8b7d61165046a53fd237180bcea2b6790..3fbc95026345fd000bbb9e4b65492e6b3acc9f3c 100644 (file)
@@ -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\."
index ae4232917a0e5c2bbad1bd22c559abf28f835b0d..7cf80805524230ccd898760881816a57c05f0854 100644 (file)
@@ -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 +++
index bfe1389978c269415421f8ed6a77fbc8f2e504c0..d1b39cc383b352a77889f22a4f06bcdaf705bc0e 100644 (file)
@@ -25,6 +25,8 @@
  */
 
 #include <windows.h>
+#include <stdlib.h>
+#include <malloc.h>
 
 #include "cci_debugging.h"
 #include "util.h"
index 8694c373ce9bb4f3c99b22743adf47f26240ebac..dd4a2694ac6ba7e6a930be85d365f3822c682f11 100644 (file)
 
 #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) {
index cf8daa3b264a84cf91b64a743e5a3820fe22f7e7..45020b57075c41010703fb18c7a7d8b518872d89 100644 (file)
@@ -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;}
index 3d988cd6942c9aec529f7700e9bb09a1fe881014..1a6086888b3de2c520dba1819a7bb1d3fbff0120 100644 (file)
 
 #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
index 4cba153a9e196094beedaa23495a8122732ec60e..f60ee3b8f489b7fa95748a7062d22622c094e970 100644 (file)
@@ -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"
index 4928d4c5363814f689c8d75c0417c67a3ae203ff..ed8712339a5b5fdd9246b10ba3d848943861c4b2 100644 (file)
@@ -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);
index 770e75b6a80826488d61082b7eda5672ba4d64fb..7fc57b39257e6ce5f601cd3b889830be9c075d74 100644 (file)
 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);    
     }
index f9eef87fff34e983c96ce7806e6cc85542242866..8d17bfc05399bf3efb6b93032b6732dac8e3d0e0 100644 (file)
@@ -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 */
index dafbab28c1c4a57946afb189be6b6200a53c6612..e37a9ad6bfcde82c657a749de5d2b0ce57c6e62a 100644 (file)
  * 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);
     }
index 8c585721c0dcf637264eacb86ecd7d8b2873c1e7..abf6afd4abaf0c282f1b18cd6cc329ea2c286ad4 100644 (file)
 
 #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
index 0c3f7660eed83540beabf1858dc9c35c4a2a0830..61392e9a3477b9d9ddd818f08be7c5943f4e8d92 100644 (file)
@@ -941,10 +941,10 @@ RPC_STATUS RPC_ENTRY sec_callback(  IN RPC_IF_ID *Interface,
 /*                 MIDL allocate and free                            */\r
 /*********************************************************************/\r
 \r
-void  __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {\r
+extern "C" void  __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) {\r
     return(malloc(len));\r
     }\r
 \r
-void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {\r
+extern "C" void __RPC_USER midl_user_free(void __RPC_FAR * ptr) {\r
     free(ptr);\r
     }\r
index a8fea2f3845fd7a467f35520680a8427f49d087a..7c613712722e515429e8aacb63206cd755b6359c 100644 (file)
@@ -25,6 +25,8 @@
  */
 
 #include "assert.h"
+#include <stdlib.h>
+#include <malloc.h>
 
 #include "ccs_win_pipe.h"
 #include "cci_debugging.h"
index f0c10cb9ca2b9a95b51c0e741a0b4e89f0ec6bcb..7e71dcf63ed01b298ee4ada560fa40bb0cb63e4a 100644 (file)
-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 (file)
index 0000000..cf43a1e
--- /dev/null
@@ -0,0 +1,20 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 9.00\r
+# Visual Studio 2005\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Pingtest", "Pingtest.vcproj", "{04017001-3222-43C4-A03C-8423B5349276}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Win32 = Debug|Win32\r
+               Release|Win32 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {04017001-3222-43C4-A03C-8423B5349276}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {04017001-3222-43C4-A03C-8423B5349276}.Debug|Win32.Build.0 = Debug|Win32\r
+               {04017001-3222-43C4-A03C-8423B5349276}.Release|Win32.ActiveCfg = Release|Win32\r
+               {04017001-3222-43C4-A03C-8423B5349276}.Release|Win32.Build.0 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+EndGlobal\r
index a2499118f65fd22e9c22de9cd89f6c5bcfae62b9..637f8ab183721cd898301611b8c66bf06e3ef220 100644 (file)
@@ -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 (file)
index 0000000..bba2250
--- /dev/null
@@ -0,0 +1,10 @@
+#!perl -w\r
+\r
+$b = "lib\\win\\srctmp";\r
+$a = $ENV{LIB};\r
+if (! ($a =~ /$b/) ) {\r
+    print "$b Not in LIB!\n";\r
+    system("del a.tmp");\r
+    }\r
+else {print "$b in LIB.\n";}\r
+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 (file)
index 0000000..2d5bec5
--- /dev/null
@@ -0,0 +1,43 @@
+# test_ccapi.bat\r
+\r
+@echo "\nBeginning test of CCAPI...\n"\r
+@echo "\nThese tests are based on the CCAPI v3 revision 8 draft documentation.\n"\r
+\r
+#run_test simple_lock_test\r
+\r
+teststest_constants.exe\r
+tests\test_cc_initialize.exe\r
+tests\test_cc_context_get_version.exe\r
+exit 0\r
+\r
+tests\test_cc_context_release.exe\r
+tests\test_cc_context_get_change_time.exe\r
+tests\test_cc_context_get_default_ccache_name.exe\r
+tests\test_cc_context_open_ccache.exe\r
+tests\test_cc_context_open_default_ccache.exe\r
+tests\test_cc_context_create_ccache.exe\r
+tests\test_cc_context_create_default_ccache.exe\r
+tests\test_cc_context_create_new_ccache.exe\r
+tests\test_cc_context_new_ccache_iterator.exe\r
+tests\test_cc_context_compare.exe\r
+tests\test_cc_ccache_release.exe\r
+tests\test_cc_ccache_destroy.exe\r
+tests\test_cc_ccache_set_default.exe\r
+tests\test_cc_ccache_get_credentials_version.exe\r
+tests\test_cc_ccache_get_name.exe\r
+tests\test_cc_ccache_get_principal.exe\r
+tests\test_cc_ccache_set_principal.exe\r
+tests\test_cc_ccache_store_credentials.exe\r
+tests\test_cc_ccache_remove_credentials.exe\r
+tests\test_cc_ccache_new_credentials_iterator.exe\r
+tests\test_cc_ccache_get_change_time.exe\r
+tests\test_cc_ccache_get_last_default_time.exe\r
+tests\test_cc_ccache_move.exe\r
+tests\test_cc_ccache_compare.exe\r
+tests\test_cc_ccache_get_kdc_time_offset.exe\r
+tests\test_cc_ccache_set_kdc_time_offset.exe\r
+tests\test_cc_ccache_clear_kdc_time_offset.exe\r
+tests\test_cc_ccache_iterator_next.exe\r
+tests\test_cc_credentials_iterator_next.exe\r
+\r
+@echo "Finished testing CCAPI."\r
index fde6946fea020cee6cd3c86b12e3995663f77c04..282ec74b56540e1e5c111646deaae7872ce6feaa 100644 (file)
@@ -3,6 +3,8 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include <stdlib.h>
+
+#include "k5-platform.h"
 #include "test_ccapi_util.h"
 
 
index 7393526590239cad1412723939e62088bc321cf0..25dcaa9180c6e197ebce0890a462a1b10dc7b8d7 100644 (file)
@@ -141,7 +141,7 @@ DEBUGOPT=/Zi
 !else
 CCLINKOPTION=
 SCLIB=
-DEBUGOPT=/ZI
+DEBUGOPT=/Zi
 !endif
 
 #if the compiler is vstudio 8, generate manifest
index ee93203bfe69d1b5180f06c262761d7b2d3379c6..24c32a035d53d79ef945670a573d6c8b4d147c9f 100644 (file)
@@ -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());