aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Altman <jaltman@secure-endpoints.com>2006-05-21 03:48:39 +0000
committerJeffrey Altman <jaltman@secure-endpoints.com>2006-05-21 03:48:39 +0000
commitd68adb389e9c1926f4f8c9a0e6132e6dd97ed32b (patch)
treefcf2723965ead9a912557f6edfeb24850e3f7e0b
parent4e824737afa8bb05db07d92a04855149c2fba5d8 (diff)
downloadkrb5-d68adb389e9c1926f4f8c9a0e6132e6dd97ed32b.zip
krb5-d68adb389e9c1926f4f8c9a0e6132e6dd97ed32b.tar.gz
krb5-d68adb389e9c1926f4f8c9a0e6132e6dd97ed32b.tar.bz2
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. git-svn-id: svn://anonsvn.mit.edu/krb5/branches/ccapi@18025 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r--src/lib/ccapi/server/main.c52
-rw-r--r--src/lib/ccapi/server/rpc_auth.c7
-rw-r--r--src/lib/ccapi/server/rpc_auth.h4
-rw-r--r--src/lib/ccapi/server/serv_ops.c13
-rw-r--r--src/lib/ccapi/server/serv_ops.h1
5 files changed, 71 insertions, 6 deletions
diff --git a/src/lib/ccapi/server/main.c b/src/lib/ccapi/server/main.c
index cf69af3..dbd447f 100644
--- a/src/lib/ccapi/server/main.c
+++ b/src/lib/ccapi/server/main.c
@@ -1,12 +1,64 @@
#include <stdarg.h>
#include <stdio.h>
+#include "CredentialsCache.h"
+#include "msg.h"
+#include "rpc_auth.h"
+
+/* This object module is platform dependent. */
int main( int argc, char *argv[] )
{
+ cc_int32 code;
+ int running = 1;
+
/* we need a set of functions we want to support.
* so we can provide an abstract platform independent
* interface.
*/
+ code = ccs_serv_initialize();
+ if (code) {
+ /* ok. we failed to initialize the ccs data structures.
+ * terminate service start. Log the result.
+ */
+ fprintf(stderr, "ccs_serv_initialize failure: %d\n", code);
+ return -1;
+ }
+
+ /* initialize the IPC mechanism for this platform */
+
+ /* implement a message loop that receives in-bound requests
+ * processes them, and sends back responses.
+ */
+ while ( running ) {
+ cc_msg_t * req_msg, *resp_msg;
+ cc_auth_info_t* auth_info;
+ cc_session_info_t* session_info;
+ char * data;
+ int len;
+
+ /* accept IPC request */
+
+ /* unflatten input stream to msg */
+ code = cci_msg_unflatten(data, len, &req_msg);
+
+ /* process request */
+ code = ccs_serv_process_msg(req_msg, auth_info, session_info, &resp_msg);
+
+ code = cci_msg_flatten(resp_msg, NULL);
+
+ /* send response (resp_msg->flat, resp_msg->flat_len) */
+
+ /* cleanup */
+ cci_msg_destroy(req_msg);
+ cci_msg_destroy(resp_msg);
+ }
+
+ /* de-register IPC mechanism */
+
+ /* cleanup ccs resources */
+ ccs_serv_cleanup();
+
+ /* exit */
return 0;
}
diff --git a/src/lib/ccapi/server/rpc_auth.c b/src/lib/ccapi/server/rpc_auth.c
index dd338e0..66bc6ae 100644
--- a/src/lib/ccapi/server/rpc_auth.c
+++ b/src/lib/ccapi/server/rpc_auth.c
@@ -49,10 +49,13 @@
#include "rpc_auth.h"
cc_int32
-cci_rpc_is_authorized( cc_auth_info_t* msg_auth, cc_session_info_t* msg_session, cc_auth_info_t* stored_auth,
+ccs_rpc_is_authorized( cc_auth_info_t* msg_auth, cc_session_info_t* msg_session, cc_auth_info_t* stored_auth,
cc_session_info_t* stored_session, cc_uint32 * authorizedp)
{
- if (msg_auth == stored_auth && msg_session == stored_session)
+ if (msg_auth->len == stored_auth->len &&
+ !memcmp(msg_auth->info, stored_auth->info, msg_auth->len) &&
+ msg_session->len == stored_session->len &&
+ !memcmp(msg_session->info, stored_session->info, msg_session->len))
*authorizedp = 1;
else
*authorizedp = 0;
diff --git a/src/lib/ccapi/server/rpc_auth.h b/src/lib/ccapi/server/rpc_auth.h
index 21d7db5..010a1e2 100644
--- a/src/lib/ccapi/server/rpc_auth.h
+++ b/src/lib/ccapi/server/rpc_auth.h
@@ -1,6 +1,6 @@
/* $Copyright:
*
- * Copyright 2004 by the Massachusetts Institute of Technology.
+ * Copyright 2004-2006 by the Massachusetts Institute of Technology.
*
* All rights reserved.
*
@@ -66,6 +66,6 @@ struct cc_session_info_t {
};
typedef struct cc_session_info_t cc_session_info_t;
-cc_int32 cci_rpc_is_authorized(cc_auth_info_t* msg_auth, cc_session_info_t* msg_session, cc_auth_info_t* stored_auth, cc_session_info_t* stored_session, cc_uint32 *authorizedp);
+cc_int32 ccs_rpc_is_authorized(cc_auth_info_t* msg_auth, cc_session_info_t* msg_session, cc_auth_info_t* stored_auth, cc_session_info_t* stored_session, cc_uint32 *authorizedp);
#endif /*__RPC_AUTH_H__*/
diff --git a/src/lib/ccapi/server/serv_ops.c b/src/lib/ccapi/server/serv_ops.c
index 360536a..fb279e6 100644
--- a/src/lib/ccapi/server/serv_ops.c
+++ b/src/lib/ccapi/server/serv_ops.c
@@ -76,6 +76,9 @@ ccs_serv_initialize(void)
}
#if 0
+ /* These message types are only generated by the server in response
+ * to a request. They are never received.
+ */
TypeToOpMapping->operations[ccmsg_ACK] = ccop_ACK;
TypeToOpMapping->operations[ccmsg_NACK] = ccop_NACK;
#endif
@@ -122,6 +125,12 @@ ccs_serv_initialize(void)
};
cc_int32
+ccs_serv_cleanup(void)
+{
+ return ccNoError;
+}
+
+cc_int32
ccs_serv_process_msg(cc_msg_t * msg, cc_auth_info_t* auth_info, cc_session_info_t* session_info, cc_msg_t** resp_msg)
{
cc_server_context_t* ctx;
@@ -175,7 +184,7 @@ ccs_serv_find_ctx(cc_auth_info_t* auth_info, cc_session_info_t* session_info,
return code;
}
ctx = (cc_server_context_t *)ctx_node->data;
- code = cci_rpc_is_authorized(auth_info, session_info, ctx->auth_info, ctx->session_info, &authorized);
+ code = ccs_rpc_is_authorized(auth_info, session_info, ctx->auth_info, ctx->session_info, &authorized);
if (code != ccNoError) {
ccs_context_free_iterator(ctx_iterator);
return code;
@@ -213,7 +222,7 @@ ccs_serv_find_ctx_by_handle(cc_handle ctx_num, cc_auth_info_t* auth, cc_session_
return code;
}
- code = cci_rpc_is_authorized(auth, session, ctx->auth_info, ctx->session_info, &authorized);
+ code = ccs_rpc_is_authorized(auth, session, ctx->auth_info, ctx->session_info, &authorized);
if (code != ccNoError) {
ccs_context_free_iterator(ctx_iterator);
return code;
diff --git a/src/lib/ccapi/server/serv_ops.h b/src/lib/ccapi/server/serv_ops.h
index 1521886..1433e0f 100644
--- a/src/lib/ccapi/server/serv_ops.h
+++ b/src/lib/ccapi/server/serv_ops.h
@@ -64,6 +64,7 @@ struct type_to_op_mapping_t {
typedef struct type_to_op_mapping_t type_to_op_mapping_t;
cc_int32 ccs_serv_initialize(void);
+cc_int32 ccs_serv_cleanup(void);
cc_int32 ccs_serv_process_msg(cc_msg_t * msg, cc_auth_info_t* auth_info, cc_session_info_t* session_info, cc_msg_t** resp_msg);
cc_int32 ccs_serv_find_ctx(cc_auth_info_t* auth_info, cc_session_info_t* session_info, cc_server_context_t** contextp);
cc_int32 ccs_serv_find_ctx_by_handle(cc_handle ctx_handle, cc_auth_info_t *auth, cc_session_info_t* session, cc_server_context_t** contextp);