diff options
| author | Sam Hartman <hartmans@mit.edu> | 2006-06-22 18:43:20 +0000 |
|---|---|---|
| committer | Sam Hartman <hartmans@mit.edu> | 2006-06-22 18:43:20 +0000 |
| commit | e1c6f641ea03e411ddfa6af9a66e5e3801554a33 (patch) | |
| tree | 1dce165b527fbe4cb89dd551ce2d740f0d7b3ffa /src/lib/ccapi/windows/client.c | |
| parent | c09f8fec46803bc14c6c3b3560459891ff993bb9 (diff) | |
| parent | 90c9fe974de343ffec87efbed89ddcfefd431d9e (diff) | |
| download | krb5-e1c6f641ea03e411ddfa6af9a66e5e3801554a33.tar.gz krb5-e1c6f641ea03e411ddfa6af9a66e5e3801554a33.tar.xz krb5-e1c6f641ea03e411ddfa6af9a66e5e3801554a33.zip | |
r18022@luminous: jaltman | 2006-05-19 05:18:37 -0400
Updates of portable CCAPI sources. All code compiles.
r18025@luminous: jaltman | 2006-05-20 23:48:39 -0400
Construct an outline of a sample platform specific main.c
Add ccs_serv_cleanup() routine. Currently does nothing.
Correct field names used within the authorization check.
r18026@luminous: jaltman | 2006-05-22 02:25:43 -0400
More byte order conversions in the server operations code.
r18027@luminous: jaltman | 2006-05-22 13:12:49 -0400
Source files containing common routines used by both
the client and the server.
r18028@luminous: jaltman | 2006-05-22 13:17:07 -0400
Move msg.c and marshall.c to common library.
Add dllmain.c which contains the Windows DllMain() entry
point. This must be moved later to a Windows specific
directory.
Cleanup type usage and function name references.
All that is missing now from the client DLL is a definition
of cci_perform_rpc() which is the entry point to the IPC
routine.
r18029@luminous: jaltman | 2006-05-22 13:18:27 -0400
Move generic list functions to common/generic_lists.c
so they can be used by both the client dll and the server.
Fix type utilization in serv_ops.c
r18083@luminous: jaltman | 2006-06-05 13:49:34 -0400
improved error handling
r18094@luminous: jaltman | 2006-06-09 10:42:04 -0400
* corrections to windows rpc layer
* corrections to network byte order conversions
r18095@luminous: lxs | 2006-06-09 17:46:24 -0400
cci_msg_retrieve_blob(): changed argument 4 from void** to char**
to suppress the warnings from gcc.
r18096@luminous: lxs | 2006-06-09 17:55:32 -0400
moved enum cc_list_type to generic_lists.h to avoid "incomplete enum"
warnings when compiling generic_lists.c
r18097@luminous: lxs | 2006-06-09 17:56:15 -0400
Removed ancient Metrowerks tests from public headers.
r18098@luminous: lxs | 2006-06-09 17:57:20 -0400
Include string.h to get memcpy, strlen, etc on BSD OSes.
r18099@luminous: lxs | 2006-06-09 17:59:36 -0400
Added Mac OS X project file and Mach-IPC support code
r18106@luminous: jaltman | 2006-06-12 09:56:31 -0400
remove duplicate header file and obsolete source file
r18193@luminous: jaltman | 2006-06-22 12:57:14 -0400
This commit updates lib/krb5/ccache/ccapi to support CCAPI Version 3
and above. Specify -DUSE_CCAPI_V3=1 when compiling to use CCAPI Version 3
r18194@luminous: jaltman | 2006-06-22 12:58:37 -0400
Fix parameter name in cc_credentials_iterator_t next()
r18195@luminous: jaltman | 2006-06-22 12:59:08 -0400
Add missing header
r18196@luminous: jaltman | 2006-06-22 13:11:37 -0400
Use the old exported names for setup and shutdown
r18197@luminous: jaltman | 2006-06-22 13:18:14 -0400
krb5_stdccv3_setup is ok
=== Please enter your commit message above this line ===
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18200 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/ccapi/windows/client.c')
| -rw-r--r-- | src/lib/ccapi/windows/client.c | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/src/lib/ccapi/windows/client.c b/src/lib/ccapi/windows/client.c new file mode 100644 index 000000000..e30801dab --- /dev/null +++ b/src/lib/ccapi/windows/client.c @@ -0,0 +1,141 @@ +#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <tchar.h>
+#include "ntccrpc.h"
+#include <strsafe.h>
+#include "CredentialsCache.h"
+#include "msg.h"
+
+static RPC_BINDING_HANDLE hRpcBinding;
+
+void * __RPC_USER MIDL_user_allocate(size_t s) {
+ return malloc(s);
+}
+
+void __RPC_USER MIDL_user_free(void * p) {
+ free(p);
+}
+
+int cc_rpc_init(void) {
+ RPC_STATUS status;
+ TCHAR * bindstring = NULL;
+ RPC_SECURITY_QOS sqos;
+
+ status = RpcStringBindingCompose(NULL,
+ _T("ncalrpc"),
+ NULL,
+ NULL,
+ NULL,
+ &bindstring);
+
+ if (status != RPC_S_OK) {
+ fprintf(stderr, "RpcStringBindingCompose failed: %d\n",
+ status);
+ return 1;
+ }
+
+ status = RpcBindingFromStringBinding(bindstring,
+ &hRpcBinding);
+
+ if (status != RPC_S_OK) {
+ fprintf(stderr, "RpcBindingFromStringBinding failed: %d\n",
+ status);
+ return 1;
+ }
+
+ status = RpcStringFree(&bindstring);
+
+ ZeroMemory(&sqos, sizeof(sqos));
+
+ sqos.Version = 1;
+ sqos.Capabilities = RPC_C_QOS_CAPABILITIES_DEFAULT;
+ sqos.IdentityTracking = RPC_C_QOS_IDENTITY_STATIC;
+ sqos.ImpersonationType = RPC_C_IMP_LEVEL_IMPERSONATE;
+
+ status = RpcBindingSetAuthInfoEx(hRpcBinding,
+ NULL,
+ RPC_C_AUTHN_LEVEL_CALL,
+ RPC_C_AUTHN_WINNT,
+ NULL,
+ 0,
+ &sqos);
+ if (status != RPC_S_OK) {
+ fprintf(stderr, "RpcBindingSetAuthInfoEx failed: %d\n",
+ status);
+ return 1;
+ }
+
+ return 0;
+}
+
+int cc_rpc_cleanup(void) {
+ RPC_STATUS status;
+
+ status = RpcBindingFree(&hRpcBinding);
+
+ return 0;
+}
+
+cc_int32 cci_set_thread_session_id(unsigned char * client_name, LUID luid) {
+ return 0;
+}
+
+void cci_get_thread_session_id(unsigned char * client_name, int len, LUID *pluid) {
+ client_name[0] = '\0';
+ pluid->HighPart = 0;
+ pluid->LowPart = 0;
+}
+
+
+/* __int32 ccapi_Message(
+ * [in] handle_t h,
+ * [string][in] unsigned char *client_name,
+ * [in] struct _LUID luid,
+ * [in] __int32 cb_buffer,
+ * [out] __int32 *cb_len,
+ * [size_is][string][out] unsigned char buffer[ ]);
+ */
+
+cc_int32 cci_perform_rpc(cc_msg_t *request, cc_msg_t **response)
+{
+ cc_int32 code;
+ unsigned char client_name[256];
+ LUID luid;
+ struct __LUID __luid;
+ unsigned char out_buf[MAXMSGLEN];
+ __int32 out_len = MAXMSGLEN;
+
+ if (cc_rpc_init())
+ return -1;
+
+ cci_get_thread_session_id(client_name, sizeof(client_name), &luid);
+
+ __luid.HighPart = luid.HighPart;
+ __luid.LowPart = luid.LowPart;
+
+ /* flatten response */
+ code = cci_msg_flatten(request, NULL);
+ if (code)
+ goto cleanup;
+
+ RpcTryExcept {
+ code = ccapi_Message(hRpcBinding, client_name, __luid,
+ request->flat, request->flat_len,
+ out_buf, &out_len);
+ }
+ RpcExcept(1) {
+ code = RpcExceptionCode();
+ }
+ RpcEndExcept;
+ if (code)
+ goto cleanup;
+
+ /* unflatten message */
+ code = cci_msg_unflatten(out_buf, out_len, response);
+ if (code)
+ goto cleanup;
+
+ cleanup:
+ return code;
+}
|
