From faa68ad5ae7d1504b8be9e8a7bedb0b6e533d3cd Mon Sep 17 00:00:00 2001 From: Sam Hartman Date: Sat, 21 Oct 2006 20:20:30 +0000 Subject: [PATCH] Delete src/lib/ccapi. The ccapi shipped in 1.6 will not be based off this code and will live in src/ccapi. It will be copied onto the trunk and branch when ready, but this code is being removed before the branch cut. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18731 dc483132-0cff-0310-8789-dd5450dbe970 --- src/lib/ccapi/NTMakefile | 25 - src/lib/ccapi/client/NTMakefile | 18 - src/lib/ccapi/client/cacheapi.c | 149 -- src/lib/ccapi/client/ccache.c | 1316 -------------- src/lib/ccapi/client/ccache.h | 146 -- src/lib/ccapi/client/ccache_iterator.c | 264 --- src/lib/ccapi/client/ccache_iterator.h | 89 - src/lib/ccapi/client/ccapiv2.c | 295 --- src/lib/ccapi/client/ccstring.c | 94 - src/lib/ccapi/client/ccstring.h | 65 - src/lib/ccapi/client/context.c | 996 ----------- src/lib/ccapi/client/context.h | 131 -- src/lib/ccapi/client/credentials.c | 181 -- src/lib/ccapi/client/credentials.h | 94 - src/lib/ccapi/client/credentials_iterator.c | 273 --- src/lib/ccapi/client/credentials_iterator.h | 76 - src/lib/ccapi/common/NTMakefile | 15 - src/lib/ccapi/common/generic_lists.c | 397 ----- src/lib/ccapi/common/mac/mig.defs | 58 - src/lib/ccapi/common/mac/mig_types.h | 48 - src/lib/ccapi/common/marshall.c | 441 ----- src/lib/ccapi/common/msg.c | 622 ------- src/lib/ccapi/doc/implementation-notes.txt | 156 -- src/lib/ccapi/include/CredentialsCache.h | 584 ------ src/lib/ccapi/include/CredentialsCache2.h | 310 ---- src/lib/ccapi/include/cc_rpc.h | 52 - src/lib/ccapi/include/datastore.h | 182 -- src/lib/ccapi/include/generic_lists.h | 102 -- src/lib/ccapi/include/marshall.h | 112 -- src/lib/ccapi/include/msg.h | 166 -- src/lib/ccapi/include/msg_headers.h | 418 ----- src/lib/ccapi/include/rpc_auth.h | 71 - .../ccapi/mac/CCAPI.xcodeproj/project.pbxproj | 549 ------ src/lib/ccapi/server/NTMakefile | 21 - src/lib/ccapi/server/ccs_ccache.c | 703 -------- src/lib/ccapi/server/ccs_context.c | 325 ---- src/lib/ccapi/server/ccs_lists.c | 657 ------- src/lib/ccapi/server/mac/CCacheServer.plist | 12 - .../ccapi/server/mac/CCacheServerInfo.plist | 38 - src/lib/ccapi/server/mac/main.c | 33 - src/lib/ccapi/server/rpc_auth.c | 67 - src/lib/ccapi/server/serv_ops.c | 1586 ----------------- src/lib/ccapi/unit-test/NTMakefile | 53 - src/lib/ccapi/unit-test/t_ccache.c | 115 -- src/lib/ccapi/unit-test/t_context.c | 115 -- src/lib/ccapi/unit-test/t_lists.c | 100 -- src/lib/ccapi/unit-test/t_msg.c | 88 - src/lib/ccapi/unit-test/t_server.c | 185 -- src/lib/ccapi/windows/NTMakefile | 35 - src/lib/ccapi/windows/cacheapi.def | 29 - src/lib/ccapi/windows/client.c | 141 -- src/lib/ccapi/windows/dllmain.c | 15 - src/lib/ccapi/windows/ntccrpc.acf | 8 - src/lib/ccapi/windows/ntccrpc.idl | 30 - src/lib/ccapi/windows/rpcsstest/NTMakefile | 24 - src/lib/ccapi/windows/rpcsstest/client.c | 87 - src/lib/ccapi/windows/rpcsstest/cstest.acf | 8 - src/lib/ccapi/windows/rpcsstest/cstest.idl | 14 - src/lib/ccapi/windows/rpcsstest/server.c | 537 ------ src/lib/ccapi/windows/server.c | 679 ------- 60 files changed, 14200 deletions(-) delete mode 100644 src/lib/ccapi/NTMakefile delete mode 100644 src/lib/ccapi/client/NTMakefile delete mode 100644 src/lib/ccapi/client/cacheapi.c delete mode 100644 src/lib/ccapi/client/ccache.c delete mode 100644 src/lib/ccapi/client/ccache.h delete mode 100644 src/lib/ccapi/client/ccache_iterator.c delete mode 100644 src/lib/ccapi/client/ccache_iterator.h delete mode 100644 src/lib/ccapi/client/ccapiv2.c delete mode 100644 src/lib/ccapi/client/ccstring.c delete mode 100644 src/lib/ccapi/client/ccstring.h delete mode 100644 src/lib/ccapi/client/context.c delete mode 100644 src/lib/ccapi/client/context.h delete mode 100644 src/lib/ccapi/client/credentials.c delete mode 100644 src/lib/ccapi/client/credentials.h delete mode 100644 src/lib/ccapi/client/credentials_iterator.c delete mode 100644 src/lib/ccapi/client/credentials_iterator.h delete mode 100644 src/lib/ccapi/common/NTMakefile delete mode 100644 src/lib/ccapi/common/generic_lists.c delete mode 100755 src/lib/ccapi/common/mac/mig.defs delete mode 100644 src/lib/ccapi/common/mac/mig_types.h delete mode 100644 src/lib/ccapi/common/marshall.c delete mode 100644 src/lib/ccapi/common/msg.c delete mode 100644 src/lib/ccapi/doc/implementation-notes.txt delete mode 100644 src/lib/ccapi/include/CredentialsCache.h delete mode 100644 src/lib/ccapi/include/CredentialsCache2.h delete mode 100644 src/lib/ccapi/include/cc_rpc.h delete mode 100644 src/lib/ccapi/include/datastore.h delete mode 100644 src/lib/ccapi/include/generic_lists.h delete mode 100644 src/lib/ccapi/include/marshall.h delete mode 100644 src/lib/ccapi/include/msg.h delete mode 100644 src/lib/ccapi/include/msg_headers.h delete mode 100644 src/lib/ccapi/include/rpc_auth.h delete mode 100644 src/lib/ccapi/mac/CCAPI.xcodeproj/project.pbxproj delete mode 100644 src/lib/ccapi/server/NTMakefile delete mode 100644 src/lib/ccapi/server/ccs_ccache.c delete mode 100644 src/lib/ccapi/server/ccs_context.c delete mode 100644 src/lib/ccapi/server/ccs_lists.c delete mode 100644 src/lib/ccapi/server/mac/CCacheServer.plist delete mode 100644 src/lib/ccapi/server/mac/CCacheServerInfo.plist delete mode 100644 src/lib/ccapi/server/mac/main.c delete mode 100644 src/lib/ccapi/server/rpc_auth.c delete mode 100644 src/lib/ccapi/server/serv_ops.c delete mode 100644 src/lib/ccapi/unit-test/NTMakefile delete mode 100644 src/lib/ccapi/unit-test/t_ccache.c delete mode 100644 src/lib/ccapi/unit-test/t_context.c delete mode 100644 src/lib/ccapi/unit-test/t_lists.c delete mode 100644 src/lib/ccapi/unit-test/t_msg.c delete mode 100644 src/lib/ccapi/unit-test/t_server.c delete mode 100644 src/lib/ccapi/windows/NTMakefile delete mode 100644 src/lib/ccapi/windows/cacheapi.def delete mode 100644 src/lib/ccapi/windows/client.c delete mode 100644 src/lib/ccapi/windows/dllmain.c delete mode 100644 src/lib/ccapi/windows/ntccrpc.acf delete mode 100644 src/lib/ccapi/windows/ntccrpc.idl delete mode 100644 src/lib/ccapi/windows/rpcsstest/NTMakefile delete mode 100644 src/lib/ccapi/windows/rpcsstest/client.c delete mode 100644 src/lib/ccapi/windows/rpcsstest/cstest.acf delete mode 100644 src/lib/ccapi/windows/rpcsstest/cstest.idl delete mode 100644 src/lib/ccapi/windows/rpcsstest/server.c delete mode 100644 src/lib/ccapi/windows/server.c diff --git a/src/lib/ccapi/NTMakefile b/src/lib/ccapi/NTMakefile deleted file mode 100644 index 57c42e337..000000000 --- a/src/lib/ccapi/NTMakefile +++ /dev/null @@ -1,25 +0,0 @@ -CD = cd - -all: - $(CD) common - $(MAKE) -f NTMakefile all - $(CD) ../client - $(MAKE) -f NTMakefile all - $(CD) ../server - $(MAKE) -f NTMakefile all - $(CD) ../windows - $(MAKE) -f NTMakefile all - $(CD) .. - -clean: - $(CD) common - $(MAKE) -f NTMakefile clean - $(CD) ../client - $(MAKE) -f NTMakefile clean - $(CD) ../server - $(MAKE) -f NTMakefile clean - $(CD) ../windows - $(MAKE) -f NTMakefile clean - $(CD) .. - - diff --git a/src/lib/ccapi/client/NTMakefile b/src/lib/ccapi/client/NTMakefile deleted file mode 100644 index 2ce87c350..000000000 --- a/src/lib/ccapi/client/NTMakefile +++ /dev/null @@ -1,18 +0,0 @@ -!INCLUDE - -CFLAGS = -I../include $(cdebug) $(cflags) $(cvarsmt) - -CC_CLIENT_OBJS = cacheapi.obj context.obj ccache.obj credentials.obj ccache_iterator.obj \ - credentials_iterator.obj ccstring.obj ccapiv2.obj - -CC_CLIENT_LIB = cc_client.lib - -CC_COMMON_LIB = ..\common\cc_common.lib - -$(CC_CLIENT_LIB): $(CC_CLIENT_OBJS) - $(implib) /NOLOGO /OUT:$@ $** - -all: $(CC_CLIENT_LIB) - -clean: - del *.obj *.lib diff --git a/src/lib/ccapi/client/cacheapi.c b/src/lib/ccapi/client/cacheapi.c deleted file mode 100644 index 89c5e63d1..000000000 --- a/src/lib/ccapi/client/cacheapi.c +++ /dev/null @@ -1,149 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -#include -#include -#include -#include -#include "ccache.h" -#include "ccache_iterator.h" -#include "context.h" -#include "cc_rpc.h" -#include "msg.h" -#include "msg_headers.h" - -/*! \fn cc_initialize - * \brief A function that initializes a ccapi context for the caller. - * \param[out] outContext a cc_context_t pointer to which is assigned the newly created context upon success. - * \param[in] inVersion a cc_int32 that specifies the - */ - -CCACHE_API cc_int32 -cc_initialize ( cc_context_t* outContext, - cc_int32 inVersion, - cc_int32* outSupportedVersion, - char const** outVendor) -{ - static char vendor[128] = ""; - cc_msg_t *request = NULL; - ccmsg_init_t *request_header; - cc_msg_t *response = NULL; - cc_uint32 type; - ccmsg_init_resp_t *response_header; - cc_int32 code; - - if ((inVersion != ccapi_version_2) && - (inVersion != ccapi_version_3) && - (inVersion != ccapi_version_4) && - (inVersion != ccapi_version_5) && - (inVersion != ccapi_version_6)) { - - if (outSupportedVersion != NULL) { - *outSupportedVersion = ccapi_version_6; - } - return ccErrBadAPIVersion; - } - - request_header = (ccmsg_init_t*)malloc(sizeof(ccmsg_init_t)); - if (request_header == NULL) - return ccErrNoMem; - - /* If the version number is 2, the caller will be passing - * the structure into the v2 compatibility functions which - * in turn will call the v6 functions. Set the version to - * ccapi_version_max since that is what the compatibility - * functions will be expecting. - */ - if (inVersion == ccapi_version_2) - inVersion = ccapi_version_max; - - /* Construct the request */ - request_header->in_version = htonl(inVersion); - - code = cci_msg_new(ccmsg_INIT, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_init_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_init_resp_t *)response->header; - *outSupportedVersion = ntohl(response_header->out_version); - code = cc_int_context_new(outContext, ntohll(response_header->out_ctx), ntohl(response_header->out_version)); - - if (!vendor[0]) { - char * string; - code = cci_msg_retrieve_blob(response, ntohl(response_header->vendor_offset), ntohl(response_header->vendor_length), &string); - strncpy(vendor, string, sizeof(vendor)-1); - vendor[sizeof(vendor)-1] = '\0'; - free(string); - } - *outVendor = vendor; - - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - diff --git a/src/lib/ccapi/client/ccache.c b/src/lib/ccapi/client/ccache.c deleted file mode 100644 index c442a8827..000000000 --- a/src/lib/ccapi/client/ccache.c +++ /dev/null @@ -1,1316 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - - -/* ccache.c */ - -#include -#include -#include -#include -#include "credentials.h" -#include "credentials_iterator.h" -#include "ccache.h" -#include "cc_rpc.h" -#include "msg.h" -#include "msg_headers.h" -#include "ccstring.h" - -/* - * cc_int_ccache_new - * - * Input parameters in host order. - */ - -cc_int32 -cc_int_ccache_new( cc_ccache_t * pccache, cc_handle hctx, cc_handle hccache ) -{ - cc_int_ccache_t ccache = (cc_int_ccache_t)malloc(sizeof(cc_int_ccache_d)); - if ( ccache == NULL ) - return ccErrNoMem; - - ccache->functions = (cc_ccache_f*)malloc(sizeof(cc_ccache_f)); - if ( ccache->functions == NULL ) { - free(ccache); - return ccErrNoMem; - } - - ccache->functions->release = cc_int_ccache_release; - ccache->functions->destroy = cc_int_ccache_destroy; - ccache->functions->set_default = cc_int_ccache_set_default; - ccache->functions->get_credentials_version = cc_int_ccache_get_credentials_version; - ccache->functions->get_name = cc_int_ccache_get_name; - ccache->functions->get_principal = cc_int_ccache_get_principal; - ccache->functions->set_principal = cc_int_ccache_set_principal; - ccache->functions->store_credentials = cc_int_ccache_store_credentials; - ccache->functions->remove_credentials = cc_int_ccache_remove_credentials; - ccache->functions->new_credentials_iterator = cc_int_ccache_new_credentials_iterator; - ccache->functions->move = cc_int_ccache_move; - ccache->functions->lock = cc_int_ccache_lock; - ccache->functions->unlock = cc_int_ccache_unlock; - ccache->functions->get_last_default_time = cc_int_ccache_get_last_default_time; - ccache->functions->get_change_time = cc_int_ccache_get_change_time; - ccache->functions->compare = cc_int_ccache_compare; - ccache->functions->get_kdc_time_offset = cc_int_ccache_get_kdc_time_offset; - ccache->functions->set_kdc_time_offset = cc_int_ccache_set_kdc_time_offset; - ccache->functions->clear_kdc_time_offset = cc_int_ccache_clear_kdc_time_offset; - - ccache->magic = CC_CCACHE_MAGIC; - ccache->ctx = hctx; - ccache->handle = hccache; - - *pccache = (cc_ccache_t)ccache; - - return ccNoError; -} - -cc_int32 -cc_int_ccache_release( cc_ccache_t ccache ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_release_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_release_t*)malloc(sizeof(ccmsg_ccache_release_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_RELEASE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_release_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - if (int_ccache->functions) - free(int_ccache->functions); - free(int_ccache); - return code; -} - - -cc_int32 -cc_int_ccache_destroy( cc_ccache_t ccache ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_destroy_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_destroy_t*)malloc(sizeof(ccmsg_ccache_destroy_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_DESTROY, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_destroy_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - free(ccache); - return code; -} - - -cc_int32 -cc_int_ccache_set_default( cc_ccache_t ccache ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_set_default_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_set_default_t*)malloc(sizeof(ccmsg_ccache_set_default_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_SET_DEFAULT, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_set_default_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_get_credentials_version( cc_ccache_t ccache, - cc_uint32* credentials_version) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_get_creds_version_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_get_creds_version_t*)malloc(sizeof(ccmsg_ccache_get_creds_version_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_GET_CREDS_VERSION, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_get_creds_version_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_ccache_get_creds_version_resp_t * response_header = (ccmsg_ccache_get_creds_version_resp_t*)response->header; - *credentials_version = ntohl(response_header->version); - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_get_name( cc_ccache_t ccache, cc_string_t* name ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_get_name_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_get_name_t*)malloc(sizeof(ccmsg_ccache_get_name_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_GET_NAME, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_get_name_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - char * string; - ccmsg_ccache_get_name_resp_t * response_header = (ccmsg_ccache_get_name_resp_t*)response->header; - code = cci_msg_retrieve_blob(response, response_header->name_offset, - response_header->name_len, &string); - if (code == ccNoError) { - code = cci_string_new(name, string); - free(string); - } - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_get_principal( cc_ccache_t ccache, - cc_uint32 credentials_version, - cc_string_t* principal ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_get_principal_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_get_principal_t*)malloc(sizeof(ccmsg_ccache_get_principal_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->version = htonl(credentials_version); - - code = cci_msg_new(ccmsg_CCACHE_GET_PRINCIPAL, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_get_principal_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - char * string; - ccmsg_ccache_get_principal_resp_t * response_header = (ccmsg_ccache_get_principal_resp_t*)response->header; - code = cci_msg_retrieve_blob(response, response_header->principal_offset, - response_header->principal_len, &string); - if (code == ccNoError) { - code = cci_string_new(principal, string); - free(string); - } - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_set_principal( cc_ccache_t ccache, - cc_uint32 credentials_version, - const char* principal ) -{ - cc_uint32 blob_pos; - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_set_principal_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_set_principal_t*)malloc(sizeof(ccmsg_ccache_set_principal_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->version = htonl(credentials_version); - - code = cci_msg_new(ccmsg_CCACHE_GET_PRINCIPAL, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_data_blob(request, (void*)principal, strlen(principal) + 1, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->principal_offset = htonl(blob_pos); - request_header->principal_len = htonl(strlen(principal) + 1); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_set_principal_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_new_credentials_iterator( cc_ccache_t ccache, - cc_credentials_iterator_t* iterator ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_creds_iterator_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_creds_iterator_t*)malloc(sizeof(ccmsg_ccache_creds_iterator_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_NEW_CREDS_ITERATOR, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_creds_iterator_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_ccache_creds_iterator_resp_t * response_header = (ccmsg_ccache_creds_iterator_resp_t*)response->header; - code = cc_int_credentials_iterator_new(iterator, int_ccache->ctx, int_ccache->handle, - ntohll(response_header->iterator)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_store_credentials( cc_ccache_t ccache, - const cc_credentials_union* credentials ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_store_creds_t *request_header = NULL; - cc_msg_t *response = NULL; - char *flat_cred = 0; - cc_uint32 flat_cred_len = 0; - cc_uint32 blob_pos; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL || credentials == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_store_creds_t*)malloc(sizeof(ccmsg_ccache_store_creds_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_STORE_CREDS, &request); - if (code != ccNoError) - goto cleanup; - - switch ( credentials->version ) { - case cc_credentials_v4: - code = cci_creds_v4_marshall(credentials->credentials.credentials_v4, &flat_cred, &flat_cred_len); - break; - case cc_credentials_v5: - code = cci_creds_v5_marshall(credentials->credentials.credentials_v5, &flat_cred, &flat_cred_len); - break; - default: - code = ccErrBadCredentialsVersion; - } - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_data_blob(request, (void*)flat_cred, flat_cred_len, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->creds_version = htonl(credentials->version); - request_header->creds_offset = htonl(blob_pos); - request_header->creds_len = htonl(flat_cred_len); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_store_creds_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (flat_cred) - free(flat_cred); - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_remove_credentials( cc_ccache_t ccache, - cc_credentials_t credentials ) -{ - cc_int_ccache_t int_ccache; - cc_int_credentials_t int_creds; - cc_msg_t *request = NULL; - ccmsg_ccache_rem_creds_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL || credentials == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - int_creds = (cc_int_credentials_t)credentials; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - if ( int_creds->magic != CC_CREDS_MAGIC ) - return ccErrInvalidCredentials; - - request_header = (ccmsg_ccache_rem_creds_t*)malloc(sizeof(ccmsg_ccache_rem_creds_t)); - if (request_header == NULL) - return ccErrNoMem; - - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->creds = htonll(int_creds->handle); - - code = cci_msg_new(ccmsg_CCACHE_REM_CREDS, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_rem_creds_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - - -cc_int32 -cc_int_ccache_move( cc_ccache_t source, - cc_ccache_t destination ) -{ - cc_int_ccache_t int_ccache_source; - cc_int_ccache_t int_ccache_dest; - cc_msg_t *request = NULL; - ccmsg_ccache_move_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( source == NULL || destination == NULL ) - return ccErrBadParam; - - int_ccache_source = (cc_int_ccache_t)source; - int_ccache_dest = (cc_int_ccache_t)destination; - - if ( int_ccache_source->magic != CC_CCACHE_MAGIC || - int_ccache_dest->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - if ( int_ccache_source->ctx != int_ccache_dest->ctx ) - return ccErrInvalidContext; - - request_header = (ccmsg_ccache_move_t*)malloc(sizeof(ccmsg_ccache_move_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CCACHE_MOVE, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_ccache_source->ctx); - request_header->ccache_source = htonll(int_ccache_source->handle); - request_header->ccache_dest = htonll(int_ccache_dest->handle); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_move_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_lock( cc_ccache_t ccache, - cc_uint32 lock_type, - cc_uint32 block ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_lock_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL || - (lock_type != cc_lock_read && lock_type != cc_lock_write && - lock_type != cc_lock_upgrade && lock_type != cc_lock_downgrade) || - (block != cc_lock_block && block != cc_lock_noblock) ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_lock_t*)malloc(sizeof(ccmsg_ccache_lock_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CCACHE_LOCK, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->lock_type = htonl(lock_type); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_lock_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - - // TODO: if (block == cc_lock_block) ..... - } else if (response->type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_unlock( cc_ccache_t ccache ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_unlock_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_unlock_t*)malloc(sizeof(ccmsg_ccache_unlock_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CCACHE_UNLOCK, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_unlock_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = htonl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = htonl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - - -cc_int32 -cc_int_ccache_get_last_default_time( cc_ccache_t ccache, - cc_time* time_offset ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_get_last_default_time_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_time64 t64; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_get_last_default_time_t*)malloc(sizeof(ccmsg_ccache_get_last_default_time_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_GET_LAST_DEFAULT_TIME, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_get_last_default_time_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_ccache_get_last_default_time_resp_t * response_header = (ccmsg_ccache_get_last_default_time_resp_t*)response->header; - t64 = ntohll(response_header->last_default_time); - /* TODO: validate that we do not overflow the max value of time_offset */ - *time_offset = t64; - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_get_change_time( cc_ccache_t ccache, cc_time* change_time ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_get_change_time_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_time64 t64; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_get_change_time_t*)malloc(sizeof(ccmsg_ccache_get_change_time_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - - code = cci_msg_new(ccmsg_CCACHE_GET_CHANGE_TIME, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_get_change_time_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_ccache_get_change_time_resp_t * response_header = (ccmsg_ccache_get_change_time_resp_t*)response->header; - t64 = htonll(response_header->time); - /* TODO: validate that we do not overflow 'time' */ - *change_time = t64; - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_compare( cc_ccache_t ccache, - cc_ccache_t compare_to, - cc_uint32* equal ) -{ - cc_int_ccache_t int_ccache; - cc_int_ccache_t int_compare_to; - cc_msg_t *request = NULL; - ccmsg_ccache_compare_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - int_compare_to = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC || - int_compare_to->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_compare_t*)malloc(sizeof(ccmsg_ccache_compare_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache1 = htonll(int_ccache->handle); - request_header->ccache2 = htonll(int_compare_to->handle); - - code = cci_msg_new(ccmsg_CCACHE_COMPARE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_compare_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_ccache_compare_resp_t * response_header = (ccmsg_ccache_compare_resp_t*)response->header; - *equal = ntohl(response_header->is_equal); - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_get_kdc_time_offset( cc_ccache_t ccache, - cc_int32 credentials_version, - cc_time* time_offset ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_get_kdc_time_offset_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_get_kdc_time_offset_t*)malloc(sizeof(ccmsg_ccache_get_kdc_time_offset_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->creds_version = htonl(credentials_version); - - code = cci_msg_new(ccmsg_CCACHE_GET_KDC_TIME_OFFSET, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_get_kdc_time_offset_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (response->type == ccmsg_ACK) { - ccmsg_ccache_get_kdc_time_offset_resp_t * response_header = (ccmsg_ccache_get_kdc_time_offset_resp_t*)response->header; - *time_offset = (cc_time64)ntohll(response_header->offset); - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_set_kdc_time_offset( cc_ccache_t ccache, - cc_int32 credentials_version, - cc_time time_offset ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_set_kdc_time_offset_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_int64 t64; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_set_kdc_time_offset_t*)malloc(sizeof(ccmsg_ccache_set_kdc_time_offset_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->creds_version = htonl(credentials_version); - t64 = time_offset; - request_header->offset = htonll(t64); - - code = cci_msg_new(ccmsg_CCACHE_SET_KDC_TIME_OFFSET, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_set_kdc_time_offset_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_clear_kdc_time_offset( cc_ccache_t ccache, - cc_int32 credentials_version ) -{ - cc_int_ccache_t int_ccache; - cc_msg_t *request = NULL; - ccmsg_ccache_clear_kdc_time_offset_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_ccache = (cc_int_ccache_t)ccache; - - if ( int_ccache->magic != CC_CCACHE_MAGIC ) - return ccErrInvalidCCache; - - request_header = (ccmsg_ccache_clear_kdc_time_offset_t*)malloc(sizeof(ccmsg_ccache_clear_kdc_time_offset_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_ccache->ctx); - request_header->ccache = htonll(int_ccache->handle); - request_header->creds_version = htonl(credentials_version); - - code = cci_msg_new(ccmsg_CCACHE_CLEAR_KDC_TIME_OFFSET, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_clear_kdc_time_offset_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} diff --git a/src/lib/ccapi/client/ccache.h b/src/lib/ccapi/client/ccache.h deleted file mode 100644 index 255cf2a42..000000000 --- a/src/lib/ccapi/client/ccache.h +++ /dev/null @@ -1,146 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* ccache.h */ - -#define CC_CCACHE_MAGIC ('C'<<24 | 'C'<<16 | 'A'<<8 | 'C') - -struct cc_int_ccache_d { - cc_ccache_f* functions; -#if TARGET_OS_MAC - const cc_ccache_f* otherFunctions; -#endif - cc_uint32 magic; - cc_handle handle; - cc_handle ctx; -}; -typedef struct cc_int_ccache_d cc_int_ccache_d; -typedef cc_int_ccache_d* cc_int_ccache_t; - - -cc_int32 -cc_int_ccache_new( cc_ccache_t * pccache, cc_handle hctx, cc_handle hccache ); - -cc_int32 -cc_int_ccache_release( cc_ccache_t ccache ); - -cc_int32 -cc_int_ccache_destroy( cc_ccache_t ccache ); - -cc_int32 -cc_int_ccache_set_default( cc_ccache_t ccache ); - -cc_int32 -cc_int_ccache_get_credentials_version( cc_ccache_t ccache, - cc_uint32* credentials_version); - -cc_int32 -cc_int_ccache_get_name( cc_ccache_t ccache, - cc_string_t* name ); - -cc_int32 -cc_int_ccache_get_principal( cc_ccache_t ccache, - cc_uint32 credentials_version, - cc_string_t* principal ); - -cc_int32 -cc_int_ccache_set_principal( cc_ccache_t ccache, - cc_uint32 credentials_version, - const char* principal ); - -cc_int32 -cc_int_ccache_store_credentials( cc_ccache_t ccache, - const cc_credentials_union* credentials ); - -cc_int32 -cc_int_ccache_remove_credentials( cc_ccache_t ccache, - cc_credentials_t credentials ); - -cc_int32 -cc_int_ccache_new_credentials_iterator( cc_ccache_t ccache, - cc_credentials_iterator_t* iterator ); - -cc_int32 -cc_int_ccache_move( cc_ccache_t source, - cc_ccache_t destination ); - -cc_int32 -cc_int_ccache_lock( cc_ccache_t ccache, - cc_uint32 block, - cc_uint32 lock_type ); - -cc_int32 -cc_int_ccache_unlock( cc_ccache_t ccache ); - -cc_int32 -cc_int_ccache_get_last_default_time( cc_ccache_t ccache, - cc_time* last_default_tim ); - -cc_int32 -cc_int_ccache_get_change_time( cc_ccache_t ccache, - cc_time* change_time ); - -cc_int32 -cc_int_ccache_compare( cc_ccache_t ccache, - cc_ccache_t compare_to, - cc_uint32* equal ); - -cc_int32 -cc_int_ccache_get_kdc_time_offset( cc_ccache_t ccache, - cc_int32 credentials_version, - cc_time* kdc_time_offset ); - -cc_int32 -cc_int_ccache_set_kdc_time_offset( cc_ccache_t ccache, - cc_int32 credentials_version, - cc_time kdc_time_offset ); - -cc_int32 -cc_int_ccache_clear_kdc_time_offset( cc_ccache_t ccache, - cc_int32 credentials_version ); - - -cc_int32 -cc_int_ccache_compat_clone( cc_int_ccache_t ccache, - cc_int_ccache_t *clone ); - diff --git a/src/lib/ccapi/client/ccache_iterator.c b/src/lib/ccapi/client/ccache_iterator.c deleted file mode 100644 index 3da9b3547..000000000 --- a/src/lib/ccapi/client/ccache_iterator.c +++ /dev/null @@ -1,264 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* ccache_iterator.c */ - -#include -#include -#include -#include "ccache.h" -#include "ccache_iterator.h" -#include "cc_rpc.h" -#include "msg.h" -#include "msg_headers.h" - - -cc_int32 -cc_int_ccache_iterator_new( cc_ccache_iterator_t * piter, - cc_handle ctx, - cc_handle handle ) -{ - cc_int_ccache_iterator_t iter = NULL; - - if ( piter == NULL ) - return ccErrBadParam; - - iter = (cc_int_ccache_iterator_t) malloc( sizeof(cc_int_ccache_iterator_d) ); - if ( iter == NULL ) - return ccErrNoMem; - - iter->functions = (cc_ccache_iterator_f*)malloc( sizeof(cc_ccache_iterator_f)); - if ( iter->functions == NULL ) { - free(iter); - return ccErrNoMem; - } - - iter->functions->release = cc_int_ccache_iterator_release; - iter->functions->next = cc_int_ccache_iterator_next; - iter->magic = CC_CCACHE_ITER_MAGIC; - iter->ctx = ctx; - iter->handle = handle; - - *piter = (cc_ccache_iterator_t)iter; - return ccNoError; -} - -cc_int32 -cc_int_ccache_iterator_release( cc_ccache_iterator_t iter ) -{ - cc_int_ccache_iterator_t int_iter; - cc_msg_t *request = NULL; - ccmsg_ccache_iterator_release_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - - if ( iter == NULL ) - return ccErrBadParam; - - int_iter = (cc_int_ccache_iterator_t) iter; - - if ( int_iter->magic != CC_CCACHE_ITER_MAGIC ) - return ccErrInvalidCCacheIterator; - - request_header = (ccmsg_ccache_iterator_release_t*)malloc(sizeof(ccmsg_ccache_iterator_release_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_iter->ctx); - request_header->iterator = htonll(int_iter->handle); - code = cci_msg_new(ccmsg_CCACHE_ITERATOR_RELEASE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_iterator_release_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - - if (int_iter->functions) - free(int_iter->functions); - if (iter) - free(int_iter); - return ccNoError; -} - -cc_int32 -cc_int_ccache_iterator_next( cc_ccache_iterator_t iter, - cc_ccache_t * ccache ) -{ - cc_int_ccache_iterator_t int_iter; - cc_msg_t *request = NULL; - ccmsg_ccache_iterator_next_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( ccache == NULL ) - return ccErrBadParam; - - int_iter = (cc_int_ccache_iterator_t)iter; - - if ( int_iter->magic != CC_CCACHE_ITER_MAGIC ) - return ccErrInvalidCCacheIterator; - - request_header = (ccmsg_ccache_iterator_next_t*)malloc(sizeof(ccmsg_ccache_iterator_next_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_iter->ctx); - request_header->iterator = htonll(int_iter->handle); - - code = cci_msg_new(ccmsg_CCACHE_ITERATOR_NEXT, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_iterator_next_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = nack_header->err_code; - } else if (type == ccmsg_ACK) { - ccmsg_ccache_iterator_next_resp_t * response_header = (ccmsg_ccache_iterator_next_resp_t*)response->header; - code = cc_int_ccache_new(ccache, int_iter->ctx, ntohll(response_header->ccache)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_ccache_iterator_clone( cc_ccache_iterator_t iter, - cc_ccache_iterator_t * new_iter ) -{ - cc_int_ccache_iterator_t int_iter; - cc_msg_t *request = NULL; - ccmsg_ccache_iterator_clone_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( iter == NULL || new_iter == NULL ) - return ccErrBadParam; - - int_iter = (cc_int_ccache_iterator_t)iter; - - if ( int_iter->magic != CC_CCACHE_ITER_MAGIC ) - return ccErrInvalidCCacheIterator; - - request_header = (ccmsg_ccache_iterator_clone_t*)malloc(sizeof(ccmsg_ccache_iterator_clone_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_iter->ctx); - request_header->iterator = htonll(int_iter->handle); - - code = cci_msg_new(ccmsg_CCACHE_ITERATOR_CLONE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_iterator_clone_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_ccache_iterator_clone_resp_t * response_header = (ccmsg_ccache_iterator_clone_resp_t*)response->header; - code = cc_int_ccache_iterator_new(new_iter, int_iter->ctx, ntohll(response_header->iterator)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} diff --git a/src/lib/ccapi/client/ccache_iterator.h b/src/lib/ccapi/client/ccache_iterator.h deleted file mode 100644 index 5a390b82e..000000000 --- a/src/lib/ccapi/client/ccache_iterator.h +++ /dev/null @@ -1,89 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* ccache_iterator.h */ - -#define CC_CCACHE_ITER_MAGIC ('C'<<24 | 'C'<<16 | 'I'<<8 | 'T') - -struct cc_int_ccache_iterator_d { - cc_ccache_iterator_f* functions; -#if TARGET_OS_MAC - cc_ccache_iterator_f* otherFunctions; -#endif - cc_uint32 magic; - cc_handle handle; - cc_handle ctx; - - cc_uint32 repeat_count; - cc_ccache_t compat_copy; -}; -typedef struct cc_int_ccache_iterator_d cc_int_ccache_iterator_d; -typedef cc_int_ccache_iterator_d* cc_int_ccache_iterator_t; - - -cc_int32 -cc_int_ccache_iterator_new( cc_ccache_iterator_t * piter, - cc_handle ctx, - cc_handle handle ); - -cc_int32 -cc_int_ccache_iterator_release( cc_ccache_iterator_t iter ); - -cc_int32 -cc_int_ccache_iterator_next( cc_ccache_iterator_t iter, - cc_ccache_t * ccache ); - -cc_int32 -cc_int_ccache_iterator_clone( cc_ccache_iterator_t iter, - cc_ccache_iterator_t * iter_new ); - -cc_int32 -cc_int_ccache_iterator_set_repeat_count( cc_int_ccache_iterator_t iter, - cc_uint32 count ); - -cc_int32 -cc_int_ccache_iterator_get_repeat_count( cc_int_ccache_iterator_t iter, - cc_uint32 * count ); - - - diff --git a/src/lib/ccapi/client/ccapiv2.c b/src/lib/ccapi/client/ccapiv2.c deleted file mode 100644 index 82b04c2c8..000000000 --- a/src/lib/ccapi/client/ccapiv2.c +++ /dev/null @@ -1,295 +0,0 @@ -/* $Copyright: - * - * Copyright 1998-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ -/* - * This is backwards compatibility for CCache API v2 clients to be able to run - * against the CCache API v3 library - */ - -#include "CredentialsCache2.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -CCACHE_API cc_int32 cc_shutdown ( - apiCB** ioContext) -{ - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_get_NC_info ( - apiCB* inContext, - infoNC*** outInfo) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_get_change_time ( - apiCB* inContext, - cc_time* outTime) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_open ( - apiCB* inContext, - const char* inName, - cc_int32 inVersion, - cc_uint32 inFlags, - ccache_p** outCCache) -{ - if (inVersion != CC_CRED_V4 && inVersion != CC_CRED_V5) - return CC_ERR_CRED_VERSION; - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_create ( - apiCB* inContext, - const char* inName, - const char* inPrincipal, - cc_int32 inVersion, - cc_uint32 inFlags, - ccache_p** outCCache) -{ - if (inVersion != CC_CRED_V4 && inVersion != CC_CRED_V5) - return CC_ERR_CRED_VERSION; - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_close ( - apiCB* inContext, - ccache_p** ioCCache) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_destroy ( - apiCB* inContext, - ccache_p** ioCCache) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_seq_fetch_NCs_begin ( - apiCB* inContext, - ccache_cit** outIterator) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_seq_fetch_NCs_next ( - apiCB* inContext, - ccache_p** outCCache, - ccache_cit* inIterator) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_seq_fetch_NCs_end ( - apiCB* inContext, - ccache_cit** ioIterator) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_get_name ( - apiCB* inContext, - ccache_p* inCCache, - char** outName) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_get_cred_version ( - apiCB* inContext, - ccache_p* inCCache, - cc_int32* outVersion) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_set_principal ( - apiCB* inContext, - ccache_p* inCCache, - cc_int32 inVersion, - char* inPrincipal) -{ - if (inVersion != CC_CRED_V4 && inVersion != CC_CRED_V5) - return CC_ERR_CRED_VERSION; - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_get_principal ( - apiCB* inContext, - ccache_p* inCCache, - char** outPrincipal) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_store ( - apiCB* inContext, - ccache_p* inCCache, - cred_union inCredentials) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_remove_cred ( - apiCB* inContext, - ccache_p* inCCache, - cred_union inCredentials) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_seq_fetch_creds_begin ( - apiCB* inContext, - const ccache_p* inCCache, - ccache_cit** outIterator) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_seq_fetch_creds_next ( - apiCB* inContext, - cred_union** outCreds, - ccache_cit* inIterator) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_seq_fetch_creds_end ( - apiCB* inContext, - ccache_cit** ioIterator) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_free_principal ( - apiCB* inContext, - char** ioPrincipal) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_free_name ( - apiCB* inContext, - char** ioName) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_free_creds ( - apiCB* inContext, - cred_union** creds) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_free_NC_info ( - apiCB* inContext, - infoNC*** ioInfo) -{ - - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - -CCACHE_API cc_int32 cc_lock_request( - apiCB* inContext, - const ccache_p* inCCache, - const cc_int32 lock_type) -{ - /* replace this return value when the function is implemented */ - return CC_NOT_SUPP; -} - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - diff --git a/src/lib/ccapi/client/ccstring.c b/src/lib/ccapi/client/ccstring.c deleted file mode 100644 index 6f3fa2bcb..000000000 --- a/src/lib/ccapi/client/ccstring.c +++ /dev/null @@ -1,94 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* ccstring.c */ - -#include -#include -#include -#include -#include "ccstring.h" - -cc_int32 -cci_string_new( cc_string_t * pstring, char * data ) -{ - cci_string_t string = (cci_string_t)malloc(sizeof(cci_string_d)); - if ( string == NULL ) - return ccErrNoMem; - - string->functions = (cc_string_f *)malloc(sizeof(cc_string_f)); - if ( string->functions == NULL ) { - free(string); - return ccErrNoMem; - } - - string->magic = CC_STRING_MAGIC; - string->functions->release = cci_string_release; - - string->data = strdup(data); - if ( string->data == NULL ) { - free(string->functions); - free(string); - return ccErrNoMem; - } - - *pstring = (cc_string_t)string; - return ccNoError; -} - -cc_int32 -cci_string_release( cc_string_t str ) -{ - cci_string_t int_string; - if ( str == NULL ) - return ccErrBadParam; - - int_string = (cci_string_t)str; - if ( int_string->magic != CC_STRING_MAGIC ) - return ccErrInvalidString; - - free(int_string->functions); - free(int_string->data); - free(int_string); - return ccNoError; -} diff --git a/src/lib/ccapi/client/ccstring.h b/src/lib/ccapi/client/ccstring.h deleted file mode 100644 index 2c973afbb..000000000 --- a/src/lib/ccapi/client/ccstring.h +++ /dev/null @@ -1,65 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* ccstring.h */ - -#define CC_STRING_MAGIC ('S'<<24 | 'T'<<16 | 'R'<<8 | 'I') - -struct cci_string_d { - char* data; - cc_string_f* functions; -#if TARGET_OS_MAC - cc_string_f* otherFunctions; -#endif - cc_uint32 magic; -}; -typedef struct cci_string_d cci_string_d; -typedef cci_string_d* cci_string_t; - -cc_int32 -cci_string_new( cc_string_t * pstring, char * data ); - -cc_int32 -cci_string_release( cc_string_t string ); - - diff --git a/src/lib/ccapi/client/context.c b/src/lib/ccapi/client/context.c deleted file mode 100644 index 4bcfc040c..000000000 --- a/src/lib/ccapi/client/context.c +++ /dev/null @@ -1,996 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* context.c */ - -#include -#include -#include -#include -#include "context.h" -#include "ccache.h" -#include "ccache_iterator.h" -#include "cc_rpc.h" -#include "msg.h" -#include "msg_headers.h" -#include "ccstring.h" - -/* cc_int_context_new - * - * input parameters (handle, version) are in host order - */ - -cc_int32 -cc_int_context_new( cc_context_t * pcontext, cc_handle handle, cc_uint32 version ) -{ - cc_int_context_t context = (cc_int_context_t)malloc(sizeof(cc_int_context_d)); - if (context == NULL) - return ccErrNoMem; - - context->functions = (cc_context_f*)malloc(sizeof(cc_context_f)); - if (context->functions == NULL) { - free(context); - return ccErrNoMem; - } - - context->functions->release = cc_int_context_release; - context->functions->get_change_time = cc_int_context_get_change_time; - context->functions->get_default_ccache_name = cc_int_context_get_default_ccache_name; - context->functions->open_ccache = cc_int_context_open_ccache; - context->functions->open_default_ccache = cc_int_context_open_default_ccache; - context->functions->create_ccache = cc_int_context_create_ccache; - context->functions->create_default_ccache = cc_int_context_create_default_ccache; - context->functions->create_new_ccache = cc_int_context_create_new_ccache; - context->functions->new_ccache_iterator = cc_int_context_new_ccache_iterator; - context->functions->lock = cc_int_context_lock; - context->functions->unlock = cc_int_context_unlock; - context->functions->compare = cc_int_context_compare; - - context->magic = CC_CONTEXT_MAGIC; - context->handle = handle; - context->api_version = version; - - *pcontext = (cc_context_t)context; - return ccNoError; -} - -cc_int32 -cc_int_context_release( cc_context_t context ) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ctx_release_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_release_t*)malloc(sizeof(ccmsg_ctx_release_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_context->handle); - - code = cci_msg_new(ccmsg_CTX_RELEASE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_release_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - request_header = NULL; - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - free(int_context->functions); - free(int_context); - return code; -} - -cc_int32 -cc_int_context_get_change_time( cc_context_t context, - cc_time* change_time) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ctx_get_change_time_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ctx_get_change_time_resp_t *response_header; - cc_time64 t64; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || time == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_get_change_time_t*)malloc(sizeof(ccmsg_ctx_get_change_time_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_context->handle); - - code = cci_msg_new(ccmsg_CTX_GET_CHANGE_TIME, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_get_change_time_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (response->type == ccmsg_ACK) { - response_header = (ccmsg_ctx_get_change_time_resp_t*)response->header; - t64 = ntohll(response_header->time); - /* TODO: validate that value is not greater than can fit in cc_time */ - *change_time = (cc_time)t64; - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_get_default_ccache_name( cc_context_t context, - cc_string_t* name ) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ctx_get_default_ccache_name_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ctx_get_default_ccache_name_resp_t *response_header; - char *string = NULL; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || name == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_get_default_ccache_name_t*)malloc(sizeof(ccmsg_ctx_get_default_ccache_name_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_context->handle); - - code = cci_msg_new(ccmsg_CTX_GET_DEFAULT_CCACHE_NAME, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_get_default_ccache_name_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ctx_get_default_ccache_name_resp_t*)response->header; - code = cci_msg_retrieve_blob(response, response_header->name_offset, - response_header->name_len, &string); - if (code == ccNoError) - code = cci_string_new(name, string); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (string) - free(string); - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_compare( cc_context_t context, - cc_context_t compare_to, - cc_uint32* equal ) -{ - cc_int_context_t int_context, int_compare_to; - cc_msg_t *request = NULL; - ccmsg_ctx_compare_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ctx_compare_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || compare_to == NULL || - equal == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - int_compare_to = (cc_int_context_t)compare_to; - - if ( int_context->magic != CC_CONTEXT_MAGIC || - int_compare_to->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_compare_t*)malloc(sizeof(ccmsg_ctx_compare_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx1 = htonll(int_context->handle); - request_header->ctx2 = htonll(int_compare_to->handle); - - code = cci_msg_new(ccmsg_CTX_COMPARE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_compare_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ctx_compare_resp_t*)response->header; - *equal = ntohl(response_header->is_equal); - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - - -cc_int32 -cc_int_context_new_ccache_iterator( cc_context_t context, - cc_ccache_iterator_t* iterator ) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ctx_new_ccache_iterator_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ctx_new_ccache_iterator_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || iterator == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_new_ccache_iterator_t*)malloc(sizeof(ccmsg_ctx_new_ccache_iterator_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_context->handle); - - code = cci_msg_new(ccmsg_CTX_NEW_CCACHE_ITERATOR, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_new_ccache_iterator_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ctx_new_ccache_iterator_resp_t*)response->header; - code = cc_int_ccache_iterator_new(iterator, int_context->handle, - ntohll(response_header->iterator)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_open_ccache( cc_context_t context, - const char* name, - cc_ccache_t* ccache ) -{ - cc_uint32 blob_pos; - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ccache_open_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ccache_open_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || name == NULL || ccache == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ccache_open_t*)malloc(sizeof(ccmsg_ccache_open_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_CCACHE_OPEN, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_data_blob(request, (void *)name, strlen(name) + 1, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - request_header->name_offset = htonl(blob_pos); - request_header->name_len = htonl(strlen(name) + 1); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_open_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ccache_open_resp_t*)response->header; - code = cc_int_ccache_new(ccache, int_context->handle, ntohll(response_header->ccache)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_open_default_ccache( cc_context_t context, - cc_ccache_t* ccache) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ccache_open_default_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ccache_open_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || ccache == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ccache_open_default_t*)malloc(sizeof(ccmsg_ccache_open_default_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_CCACHE_OPEN_DEFAULT, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_open_default_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ccache_open_resp_t*)response->header; - code = cc_int_ccache_new(ccache, int_context->handle, ntohll(response_header->ccache)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_create_ccache( cc_context_t context, - const char* name, - cc_uint32 cred_vers, - const char* principal, - cc_ccache_t* ccache ) -{ - cc_uint32 blob_pos; - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ccache_create_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ccache_create_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || name == NULL || - cred_vers == 0 || cred_vers > cc_credentials_v4_v5 || - principal == NULL || ccache == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ccache_create_t*)malloc(sizeof(ccmsg_ccache_create_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_CCACHE_CREATE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_data_blob(request, (void *)name, strlen(name) + 1, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - request_header->version = htonl(cred_vers); - request_header->name_offset = htonl(blob_pos); - request_header->name_len = htonl(strlen(name) + 1); - - code = cci_msg_add_data_blob(request, (void *)principal, strlen(principal) + 1, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->principal_offset = htonl(blob_pos); - request_header->principal_len = htonl(strlen(principal) + 1); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_create_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ccache_create_resp_t*)response->header; - code = cc_int_ccache_new(ccache, int_context->handle, ntohll(response_header->ccache)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_create_default_ccache( cc_context_t context, - cc_uint32 cred_vers, - const char* principal, - cc_ccache_t* ccache ) -{ - cc_uint32 blob_pos; - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ccache_create_default_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ccache_create_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || - cred_vers == 0 || cred_vers > cc_credentials_v4_v5 || - principal == NULL || ccache == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ccache_create_default_t*)malloc(sizeof(ccmsg_ccache_create_default_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_CCACHE_CREATE_DEFAULT, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - request_header->version = htonl(cred_vers); - - code = cci_msg_add_data_blob(request, (void *)principal, strlen(principal) + 1, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->principal_offset = htonl(blob_pos); - request_header->principal_len = htonl(strlen(principal) + 1); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_create_default_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ccache_create_resp_t*)response->header; - code = cc_int_ccache_new(ccache, int_context->handle, ntohll(response_header->ccache)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_create_new_ccache( cc_context_t context, - cc_uint32 cred_vers, - const char* principal, - cc_ccache_t* ccache ) -{ - cc_uint32 blob_pos; - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ccache_create_unique_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ccache_create_resp_t *response_header; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || - cred_vers == 0 || cred_vers > cc_credentials_v4_v5 || - principal == NULL || ccache == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ccache_create_unique_t*)malloc(sizeof(ccmsg_ccache_create_unique_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_CCACHE_CREATE_UNIQUE, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - request_header->version = htonl(cred_vers); - - code = cci_msg_add_data_blob(request, (void *)principal, strlen(principal) + 1, &blob_pos); - if (code != ccNoError) - goto cleanup; - - request_header->principal_offset = htonl(blob_pos); - request_header->principal_len = htonl(strlen(principal) + 1); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ccache_create_unique_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = htonl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ccache_create_resp_t*)response-> header; - code = cc_int_ccache_new(ccache, int_context->handle, ntohll(response_header->ccache)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_lock( cc_context_t context, - cc_uint32 lock_type, - cc_uint32 block ) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ctx_lock_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL || - (lock_type != cc_lock_read && lock_type != cc_lock_write && - lock_type != cc_lock_upgrade && lock_type != cc_lock_downgrade) || - (block != cc_lock_block && block != cc_lock_noblock) ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_lock_t*)malloc(sizeof(ccmsg_ctx_lock_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_LOCK, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - request_header->lock_type = htonl(lock_type); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_lock_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - - // TODO: if (block == cc_lock_block) ..... - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_unlock( cc_context_t context ) -{ - cc_int_context_t int_context; - cc_msg_t *request = NULL; - ccmsg_ctx_unlock_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( context == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - request_header = (ccmsg_ctx_unlock_t*)malloc(sizeof(ccmsg_ctx_unlock_t)); - if (request_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_CTX_UNLOCK, &request); - if (code != ccNoError) - goto cleanup; - - request_header->ctx = htonll(int_context->handle); - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_unlock_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_clone( cc_context_t inContext, - cc_context_t* outContext, - cc_int32 requestedVersion, - cc_int32* supportedVersion, - char const** vendor ) -{ - cc_int_context_t int_context; - static char vendor_st[128] = ""; - cc_msg_t *request = NULL; - ccmsg_ctx_clone_t *request_header = NULL; - cc_msg_t *response = NULL; - ccmsg_ctx_clone_resp_t *response_header; - char *string = NULL; - cc_uint32 type; - cc_int32 code; - - if ( inContext == NULL || - outContext == NULL || - supportedVersion == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)inContext; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - if ((requestedVersion != ccapi_version_2) && - (requestedVersion != ccapi_version_3) && - (requestedVersion != ccapi_version_4) && - (requestedVersion != ccapi_version_5) && - (requestedVersion != ccapi_version_6)) { - - if (supportedVersion != NULL) { - *supportedVersion = ccapi_version_max; - } - return ccErrBadAPIVersion; - } - - request_header = (ccmsg_ctx_clone_t*)malloc(sizeof(ccmsg_ctx_clone_t)); - if (request_header == NULL) - return ccErrNoMem; - - request_header->ctx = htonll(int_context->handle); - request_header->in_version = htonl(requestedVersion); - - code = cci_msg_new(ccmsg_INIT, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_ctx_clone_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - response_header = (ccmsg_ctx_clone_resp_t *)response->header; - *supportedVersion = ntohl(response_header->out_version); - code = cc_int_context_new(outContext, ntohll(response_header->out_ctx), ntohl(response_header->out_version)); - - if (!vendor_st[0]) { - code = cci_msg_retrieve_blob(response, ntohl(response_header->vendor_offset), ntohl(response_header->vendor_length), &string); - strncpy(vendor_st, string, sizeof(vendor_st)-1); - vendor_st[sizeof(vendor_st)-1] = '\0'; - } - *vendor = vendor_st; - - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (string) - free(string); - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_context_get_version( cc_context_t context, - cc_int32* version ) -{ - cc_int_context_t int_context; - - if ( context == NULL || - version == NULL ) - return ccErrBadParam; - - int_context = (cc_int_context_t)context; - - if ( int_context->magic != CC_CONTEXT_MAGIC ) - return ccErrInvalidContext; - - *version = int_context->api_version; - return ccNoError; -} - - diff --git a/src/lib/ccapi/client/context.h b/src/lib/ccapi/client/context.h deleted file mode 100644 index eb0ea520e..000000000 --- a/src/lib/ccapi/client/context.h +++ /dev/null @@ -1,131 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* context.h */ - -#define CC_CONTEXT_MAGIC ('C'<<24 | 'C'<<16 | 'T'<<8 | 'X') - -struct cc_int_context { - cc_context_f* functions; - - cc_uint32 magic; -#ifdef CCAPI_V2_COMPAT - cc_uint32 version; -#endif - cc_uint32 api_version; - cc_handle handle; -}; -typedef struct cc_int_context cc_int_context_d; -typedef cc_int_context_d* cc_int_context_t; - -cc_int32 -cc_int_context_new( cc_context_t *pcontext, cc_handle handle, cc_uint32 version ); - -cc_int32 -cc_int_context_release( cc_context_t context ); - -cc_int32 -cc_int_context_get_change_time( cc_context_t context, - cc_time* change_time); - -cc_int32 -cc_int_context_get_default_ccache_name( cc_context_t context, - cc_string_t* name ); - -cc_int32 -cc_int_context_open_ccache( cc_context_t context, - const char* name, - cc_ccache_t* ccache ); - -cc_int32 -cc_int_context_open_default_ccache( cc_context_t context, - cc_ccache_t* ccache ); - -cc_int32 -cc_int_context_create_ccache( cc_context_t context, - const char* name, - cc_uint32 cred_vers, - const char* principal, - cc_ccache_t* ccache ); - -cc_int32 -cc_int_context_create_default_ccache( cc_context_t context, - cc_uint32 cred_vers, - const char* principal, - cc_ccache_t* ccache ); - -cc_int32 -cc_int_context_create_new_ccache( cc_context_t context, - cc_uint32 cred_vers, - const char* principal, - cc_ccache_t* ccache ); - -cc_int32 -cc_int_context_new_ccache_iterator( cc_context_t context, - cc_ccache_iterator_t* iterator ); - -cc_int32 -cc_int_context_lock( cc_context_t context, - cc_uint32 lock_type, - cc_uint32 block ); - -cc_int32 -cc_int_context_unlock( cc_context_t context ); - -cc_int32 -cc_int_context_compare( cc_context_t context, - cc_context_t compare_to, - cc_uint32* equal ); - -cc_int32 -cc_int_context_clone( cc_context_t inContext, - cc_context_t* outContext, - cc_int32 requestedVersion, - cc_int32* supportedVersion, - char const** vendor ); - -cc_int32 -cc_int_context_get_version( cc_context_t context, - cc_int32* version ); - - diff --git a/src/lib/ccapi/client/credentials.c b/src/lib/ccapi/client/credentials.c deleted file mode 100644 index dbdf6345e..000000000 --- a/src/lib/ccapi/client/credentials.c +++ /dev/null @@ -1,181 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* credentials.c */ - -#include -#include -#include -#include "credentials.h" -#include "msg.h" -#include "msg_headers.h" - - -cc_int32 -cc_int_credentials_new( cc_credentials_t *pcredentials, cc_uint32 version, - cc_handle ctx, cc_handle ccache, cc_handle handle, - char * data, cc_uint32 len ) -{ - cc_int_credentials_t credentials; - cc_int32 code; - - if ( pcredentials == NULL ) - return ccErrBadParam; - - credentials = (cc_int_credentials_t)malloc(sizeof(cc_int_credentials_d)); - if ( credentials == NULL ) - return ccErrNoMem; - - credentials->data = (cc_credentials_union *)malloc(sizeof(cc_credentials_union)); - if ( credentials->data == NULL ) { - free(credentials); - return ccErrNoMem; - } - - credentials->functions = (cc_credentials_f *)malloc(sizeof(cc_credentials_f)); - if ( credentials->functions == NULL ) { - free(credentials->data); - free(credentials); - return ccErrNoMem; - } - - credentials->functions->release = cc_int_credentials_release; - credentials->functions->compare = cc_int_credentials_compare; - credentials->magic = CC_CREDS_MAGIC; - credentials->ctx = ctx; - credentials->ccache = ccache; - credentials->handle = handle; - - switch ( version ) { - case cc_credentials_v4: - code = cci_creds_v4_unmarshall(data, len, credentials->data); - break; - case cc_credentials_v5: - code = cci_creds_v5_unmarshall(data, len, credentials->data); - break; - default: - free(credentials); - return ccErrBadCredentialsVersion; - } - - *pcredentials = (cc_credentials_t)credentials; - return ccNoError; -} - - -cc_int32 -cc_int_credentials_release( cc_credentials_t creds ) -{ - cc_int_credentials_t int_creds; - unsigned short i; - - if ( creds == NULL ) - return ccErrBadParam; - - int_creds = (cc_int_credentials_t)creds; - - if ( int_creds->magic != CC_CREDS_MAGIC ) - return ccErrInvalidCredentials; - - switch (int_creds->data->version) { - case cc_credentials_v4: - free(int_creds->data->credentials.credentials_v4); - break; - case cc_credentials_v5: - if ( int_creds->data->credentials.credentials_v5->client ) - free(int_creds->data->credentials.credentials_v5->client); - if ( int_creds->data->credentials.credentials_v5->server ) - free(int_creds->data->credentials.credentials_v5->server ); - if ( int_creds->data->credentials.credentials_v5->keyblock.data ) - free(int_creds->data->credentials.credentials_v5->keyblock.data); - if ( int_creds->data->credentials.credentials_v5->ticket.data ) - free(int_creds->data->credentials.credentials_v5->ticket.data); - if ( int_creds->data->credentials.credentials_v5->second_ticket.data ) - free(int_creds->data->credentials.credentials_v5->second_ticket.data); - if ( int_creds->data->credentials.credentials_v5->addresses ) { - for ( i=0; int_creds->data->credentials.credentials_v5->addresses[i]; i++) { - if (int_creds->data->credentials.credentials_v5->addresses[i]->data) - free(int_creds->data->credentials.credentials_v5->addresses[i]->data); - } - free(int_creds->data->credentials.credentials_v5->addresses); - } - if ( int_creds->data->credentials.credentials_v5->authdata ) { - for ( i=0; int_creds->data->credentials.credentials_v5->authdata[i]; i++) { - if ( int_creds->data->credentials.credentials_v5->authdata[i]->data ) - free(int_creds->data->credentials.credentials_v5->authdata[i]->data); - } - free(int_creds->data->credentials.credentials_v5->authdata); - } - break; - default: - return ccErrBadCredentialsVersion; - } - - free(int_creds->functions); - free(int_creds->data); - free(int_creds); - return ccNoError; -} - -cc_int32 -cc_int_credentials_compare( cc_credentials_t credentials, - cc_credentials_t compare_to, - cc_uint32* equal ) -{ - cc_int_credentials_t int_credentials; - cc_int_credentials_t int_compare_to; - - if ( credentials == NULL || compare_to == NULL || equal == NULL ) - return ccErrBadParam; - - int_credentials = (cc_int_credentials_t)credentials; - int_compare_to = (cc_int_credentials_t)compare_to; - - if ( int_credentials->magic != CC_CREDS_MAGIC || - int_compare_to->magic != CC_CREDS_MAGIC ) - return ccErrInvalidCredentials; - - *equal = (int_credentials->handle == int_compare_to->handle); - - return ccNoError; -} diff --git a/src/lib/ccapi/client/credentials.h b/src/lib/ccapi/client/credentials.h deleted file mode 100644 index dfd589f32..000000000 --- a/src/lib/ccapi/client/credentials.h +++ /dev/null @@ -1,94 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* credentials.h */ - -#define CC_CREDS_MAGIC ('C'<<24 | 'R'<<16 | 'E'<<8 | 'D') - -struct cc_int_credentials_d { - cc_credentials_union* data; - cc_credentials_f* functions; -#if TARGET_OS_MAC - cc_credentials_f* otherFunctions; -#endif - cc_uint32 magic; - cc_handle ctx; - cc_handle ccache; - cc_handle handle; -}; -typedef struct cc_int_credentials_d cc_int_credentials_d; -typedef cc_int_credentials_d* cc_int_credentials_t; - -cc_int32 -cc_int_credentials_new( cc_credentials_t * pcredentials, cc_uint32 version, - cc_handle ctx, cc_handle ccache, cc_handle handle, - char * data, cc_uint32 len); - -cc_int32 -cc_int_credentials_release( cc_credentials_t credentials ); - -cc_int32 -cc_int_credentials_compare( cc_credentials_t credentials, - cc_credentials_t compare_to, - cc_uint32* equal ); - -cc_int32 -cci_creds_v4_marshall( cc_credentials_v4_t * creds, - char ** flat, - cc_uint32 * len); - -cc_int32 -cci_creds_v5_marshall( cc_credentials_v5_t * creds, - char ** flat, - cc_uint32 * len); - -cc_int32 -cci_creds_v4_unmarshall( char * flat, - cc_uint32 len, - cc_credentials_union * creds); - -cc_int32 -cci_creds_v5_unmarshall( char * flat, - cc_uint32 len, - cc_credentials_union * creds); - diff --git a/src/lib/ccapi/client/credentials_iterator.c b/src/lib/ccapi/client/credentials_iterator.c deleted file mode 100644 index 3cdab875a..000000000 --- a/src/lib/ccapi/client/credentials_iterator.c +++ /dev/null @@ -1,273 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* credentials_iterator.c */ - -#include -#include -#include -#include "credentials.h" -#include "credentials_iterator.h" -#include "cc_rpc.h" -#include "msg.h" -#include "msg_headers.h" - - -cc_int32 -cc_int_credentials_iterator_new( cc_credentials_iterator_t * piter, - cc_handle ctx, - cc_handle ccache, - cc_handle handle ) -{ - cc_int_credentials_iterator_t iter; - - if ( piter == NULL ) - return ccErrBadParam; - - iter = (cc_int_credentials_iterator_t) malloc( sizeof(cc_int_credentials_iterator_d) ); - if ( iter == NULL ) - return ccErrNoMem; - - iter->functions = (cc_credentials_iterator_f*)malloc(sizeof(cc_credentials_iterator_f)); - if ( iter->functions == NULL ) { - free(iter); - return ccErrNoMem; - } - - iter->functions->release = cc_int_credentials_iterator_release; - iter->functions->next = cc_int_credentials_iterator_next; - iter->functions->clone = cc_int_credentials_iterator_clone; - iter->magic = CC_CREDS_ITER_MAGIC; - iter->ctx = ctx; - iter->ccache = ccache; - iter->handle = handle; - - *piter = (cc_credentials_iterator_t) iter; - return ccNoError; -} - -cc_int32 -cc_int_credentials_iterator_release( cc_credentials_iterator_t iter ) -{ - cc_int_credentials_iterator_t int_iter; - cc_msg_t *request = NULL; - ccmsg_creds_iterator_release_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( iter == NULL ) - return ccErrBadParam; - - int_iter = (cc_int_credentials_iterator_t) iter; - - if ( int_iter->magic != CC_CREDS_ITER_MAGIC ) - return ccErrInvalidCredentialsIterator; - - request_header = (ccmsg_creds_iterator_release_t*)malloc(sizeof(ccmsg_creds_iterator_release_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_iter->ctx); - request_header->ccache = htonll(int_iter->ccache); - request_header->iterator = htonll(int_iter->handle); - - code = cci_msg_new(ccmsg_CREDS_ITERATOR_RELEASE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_creds_iterator_release_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = htonl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = htonl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - code = ccNoError; - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - - free(int_iter->functions); - free(int_iter); - return ccNoError; -} - -cc_int32 -cc_int_credentials_iterator_next( cc_credentials_iterator_t iter, - cc_credentials_t * credentials ) -{ - cc_int_credentials_iterator_t int_iter; - cc_msg_t *request = NULL; - ccmsg_creds_iterator_next_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( credentials == NULL ) - return ccErrBadParam; - - int_iter = (cc_int_credentials_iterator_t)iter; - - if ( int_iter->magic != CC_CREDS_ITER_MAGIC ) - return ccErrInvalidCredentialsIterator; - - request_header = (ccmsg_creds_iterator_next_t*)malloc(sizeof(ccmsg_creds_iterator_next_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_iter->ctx); - request_header->ccache = htonll(int_iter->ccache); - request_header->iterator = htonll(int_iter->handle); - - code = cci_msg_new(ccmsg_CREDS_ITERATOR_NEXT, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_creds_iterator_next_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - char * blob; - ccmsg_creds_iterator_next_resp_t * response_header = (ccmsg_creds_iterator_next_resp_t*)response->header; - code = cci_msg_retrieve_blob(response, ntohl(response_header->creds_offset), ntohl(response_header->creds_len), &blob); - code = cc_int_credentials_new(credentials, ntohl(response_header->version), - int_iter->ctx, int_iter->ccache, ntohll(response_header->creds_handle), - blob, ntohl(response_header->creds_len)); - free(blob); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - -cc_int32 -cc_int_credentials_iterator_clone( cc_credentials_iterator_t iter, - cc_credentials_iterator_t* new_iter) -{ - cc_int_credentials_iterator_t int_iter; - cc_msg_t *request = NULL; - ccmsg_creds_iterator_clone_t *request_header = NULL; - cc_msg_t *response = NULL; - cc_uint32 type; - cc_int32 code; - - if ( iter == NULL || new_iter == NULL ) - return ccErrBadParam; - - int_iter = (cc_int_credentials_iterator_t)iter; - - if ( int_iter->magic != CC_CREDS_ITER_MAGIC ) - return ccErrInvalidCCacheIterator; - - request_header = (ccmsg_creds_iterator_clone_t*)malloc(sizeof(ccmsg_creds_iterator_clone_t)); - if (request_header == NULL) - return ccErrNoMem; - request_header->ctx = htonll(int_iter->ctx); - request_header->iterator = htonll(int_iter->handle); - - code = cci_msg_new(ccmsg_CREDS_ITERATOR_CLONE, &request); - if (code != ccNoError) - goto cleanup; - - code = cci_msg_add_header(request, request_header, sizeof(ccmsg_creds_iterator_clone_t)); - if (code != ccNoError) - goto cleanup; - request_header = NULL; - - code = cci_perform_rpc(request, &response); - if (code != ccNoError) - goto cleanup; - - type = ntohl(response->type); - if (type == ccmsg_NACK) { - ccmsg_nack_t * nack_header = (ccmsg_nack_t *)response->header; - code = ntohl(nack_header->err_code); - } else if (type == ccmsg_ACK) { - ccmsg_creds_iterator_clone_resp_t * response_header = (ccmsg_creds_iterator_clone_resp_t*)response->header; - code = cc_int_credentials_iterator_new(new_iter, int_iter->ctx, int_iter->ccache, ntohll(response_header->iterator)); - } else { - code = ccErrBadInternalMessage; - } - - cleanup: - if (request_header) - free(request_header); - if (request) - cci_msg_destroy(request); - if (response) - cci_msg_destroy(response); - return code; -} - diff --git a/src/lib/ccapi/client/credentials_iterator.h b/src/lib/ccapi/client/credentials_iterator.h deleted file mode 100644 index 954d2f1af..000000000 --- a/src/lib/ccapi/client/credentials_iterator.h +++ /dev/null @@ -1,76 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* credentials_iterator.h */ - -#define CC_CREDS_ITER_MAGIC ('C'<<24 | 'R'<<16 | 'I'<<8 | 'T') - -struct cc_int_credentials_iterator_d { - cc_credentials_iterator_f* functions; -#if TARGET_OS_MAC - cc_credentials_iterator_f* otherFunctions; -#endif - cc_uint32 magic; - cc_handle handle; - cc_handle ccache; - cc_handle ctx; -}; -typedef struct cc_int_credentials_iterator_d cc_int_credentials_iterator_d; -typedef cc_int_credentials_iterator_d* cc_int_credentials_iterator_t; - - -cc_int32 -cc_int_credentials_iterator_new( cc_credentials_iterator_t * piter, cc_handle ctx, cc_handle ccache, cc_handle iter ); - -cc_int32 -cc_int_credentials_iterator_release( cc_credentials_iterator_t iter ); - -cc_int32 -cc_int_credentials_iterator_next( cc_credentials_iterator_t iter, - cc_credentials_t * credentials ); - -cc_int32 -cc_int_credentials_iterator_clone( cc_credentials_iterator_t iter, - cc_credentials_iterator_t * new_iter ); - - diff --git a/src/lib/ccapi/common/NTMakefile b/src/lib/ccapi/common/NTMakefile deleted file mode 100644 index a43985af3..000000000 --- a/src/lib/ccapi/common/NTMakefile +++ /dev/null @@ -1,15 +0,0 @@ -!INCLUDE - -CFLAGS = -I../include $(cdebug) $(cflags) $(cvarsmt) - -CC_COMMON_OBJS = marshall.obj msg.obj generic_lists.obj - -CC_COMMON_LIB = cc_common.lib - -$(CC_COMMON_LIB): $(CC_COMMON_OBJS) - $(implib) /NOLOGO /OUT:$@ $** - -all: $(CC_COMMON_LIB) - -clean: - del *.obj *.lib diff --git a/src/lib/ccapi/common/generic_lists.c b/src/lib/ccapi/common/generic_lists.c deleted file mode 100644 index 62f8d8de4..000000000 --- a/src/lib/ccapi/common/generic_lists.c +++ /dev/null @@ -1,397 +0,0 @@ -/* $Copyright: -* -* Copyright 2004-2006 by the 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 MIT 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. -* -* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF -* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -* -* Individual source code files are copyright MIT, Cygnus Support, -* OpenVision, Oracle, Sun Soft, FundsXpress, and others. -* -* Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, -* and Zephyr are trademarks of the Massachusetts Institute of Technology -* (MIT). No commercial use of these trademarks may be made without prior -* written permission of MIT. -* -* "Commercial use" means use of a name in a product or other for-profit -* manner. It does NOT prevent a commercial firm from referring to the MIT -* trademarks in order to convey information (although in doing so, -* recognition of their trademark status should be given). -* $ -*/ - - -/* - * Lists implementation. - * - */ - -#include -#include -#include - -#include "CredentialsCache.h" -#include "generic_lists.h" - -/** - * cci_generic_iterate_has_next() - * - * Purpose: Determine if an iterator has a next element - * - * Return: 1 if another element exists - * 0 if no additional elements exist - * - * Errors: None - * - */ -cc_int32 -cci_generic_iterate_has_next(cc_generic_iterate_t *iterate) -{ - return ((iterate == NULL || iterate->next == NULL) ? 0 : 1); -} - -/** - * cci_generic_iterate_next() - * - * Purpose: Retrieve the next element from an iterator and advance - * the iterator - * - * Return: non-NULL, the next element in the iterator - * NULL, the iterator list is empty or iterator is invalid - * - * Errors: ccErrBadParam - * - */ -cc_int32 -cci_generic_iterate_next(cc_generic_iterate_t *iterator, cc_generic_list_node_t** nodepp) -{ - cc_generic_list_node_t* ret; - - if (iterator == NULL || nodepp == NULL) - return ccErrBadParam; - - ret = iterator->next; - if (iterator->next != NULL) - iterator->next = iterator->next->next; - - *nodepp = ret; - return ccNoError; -} - -/** - * cci_generic_list_new() - * - * Purpose: Allocate new generic list - * - * Return: non-NULL, an empty list - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -cci_generic_list_new(cc_generic_list_head_t ** listpp) -{ - cc_generic_list_head_t* ret = (cc_generic_list_head_t *)malloc(sizeof(cc_generic_list_head_t)); - if (ret == NULL) - return ccErrNoMem; - - ret->type = cc_generic_list; - ret->head = ret->tail = NULL; - *listpp = ret; - - return ccNoError; -} - -/** - * cci_generic_list_append() - * - * Purpose: Appends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -cci_generic_list_append(cc_generic_list_head_t *head, void *data, cc_uint32 len, cc_generic_list_node_t** nodepp) -{ - cc_generic_list_node_t* new_node; - - if ( data == NULL || len == 0 ) - return ccErrBadParam; - - new_node = (cc_generic_list_node_t *)malloc(sizeof(cc_generic_list_node_t)); - if (new_node == NULL) - return ccErrNoMem; - - new_node->data = malloc(len); - if ( new_node->data == NULL ) { - free(new_node); - return ccErrNoMem; - } - - memcpy(new_node->data,data,len); - new_node->len = len; - - if (head->head == NULL) { /*empty list*/ - head->head = new_node; - head->tail = new_node; - new_node->next = new_node->prev = NULL; - } else { - new_node->prev = head->tail; - head->tail->next = new_node; - head->tail = new_node; - new_node->next = NULL; - } - if (nodepp != NULL) - *nodepp = new_node; - return ccNoError; -} - -/** - * cci_generic_list_prepend() - * - * Purpose: Prepends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem, ccErrBadParam - * - */ -cc_int32 -cci_generic_list_prepend(cc_generic_list_head_t *head, void *data, cc_uint32 len, cc_generic_list_node_t** nodepp) -{ - cc_generic_list_node_t* new_node; - - if ( data == NULL || len == 0 ) - return ccErrBadParam; - - new_node = (cc_generic_list_node_t *)malloc(sizeof(cc_generic_list_node_t)); - if (new_node == NULL) - return ccErrNoMem; - - new_node->data = malloc(len); - if ( new_node->data == NULL ) { - free(new_node); - return ccErrNoMem; - } - - memcpy(new_node->data,data,len); - new_node->len = len; - - if (head->head == NULL) { /*empty list*/ - head->head = new_node; - head->tail = new_node; - new_node->prev = new_node->next = NULL; - } else { - new_node->next = head->head; - head->head->prev = new_node; - new_node->prev = NULL; - head->head = new_node; - } - - if (nodepp != NULL) - *nodepp = new_node; - - return ccNoError; -} - -/** - * cci_generic_list_remove_element() - * - * Purpose: Remove a node from the list - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -cci_generic_list_remove_element(cc_generic_list_head_t* head, cc_generic_list_node_t* rem) -{ - if (head->head == NULL || rem == NULL) - return ccErrBadParam; - - if (head->head == rem && head->tail == rem) { /*removing only element of list*/ - head->head = head->tail = NULL; - } else if (head->head == rem) { /*removing head*/ - head->head = head->head->next; - } else if (head->tail == rem) { /*removing tail*/ - head->tail = head->tail->prev; - head->tail->next = NULL; - } else { - rem->prev->next = rem->next; - rem->next->prev = rem->prev; - } - free(rem); - return ccNoError; -} - -/** - * cci_generic_free_element() - * - * Purpose: Free the memory associated with a node - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -cci_generic_free_element(cc_generic_list_node_t* node) -{ - if ( node == NULL ) - return ccErrBadParam; - - if ( node->data ) { - free(node->data); - node->data = NULL; - } - node->len = 0; - node->next = node->prev = NULL; - free(node); - return ccNoError; -} - - -/** - * cci_generic_list_destroy() - * - * Purpose: Deallocate a list and all of its contents - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - */ -cc_int32 -cci_generic_list_destroy(cc_generic_list_head_t* head) -{ - cc_generic_list_node_t *cur, *next; - cc_int32 ret = ccNoError; - - if ( head == NULL ) - return ccErrBadParam; - - for (cur = head->head; ret == ccNoError && cur != NULL; cur = next) { - next = cur->next; - ret = cci_generic_free_element(cur); - } - free(head); - return(ret); -} - -/** - * cci_generic_list_copy() - * - * Purpose: Copy a list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrBadParam, ccErrNoMem - * - */ -cc_int32 -cci_generic_list_copy(cc_generic_list_head_t* head, cc_generic_list_head_t** headpp) -{ - cc_generic_list_head_t* copy; - cc_generic_list_node_t *src_node, *dst_node; - cc_int32 code; - - if (head == NULL || headpp == NULL) - return ccErrBadParam; - - code = cci_generic_list_new(©); - if (code != ccNoError) - return code; - - for (src_node = head->head; src_node != NULL; src_node = src_node->next) { - code = cci_generic_list_append(copy, src_node->data, src_node->len, &dst_node); - if (code != ccNoError) { - cci_generic_list_destroy(copy); - return code; - } - } - *headpp = copy; - return ccNoError; -} - -/** - * cci_generic_list_iterator() - * - * Purpose: Allocate an iterator for the specified list - * - * Return: non-NULL, an iterator - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -cci_generic_list_iterator(cc_generic_list_head_t *head, cc_generic_iterate_t** headpp) -{ - cc_generic_iterate_t* iterator; - - if ( head == NULL || headpp == NULL ) - return ccErrBadParam; - - iterator = (cc_generic_iterate_t*)malloc(sizeof(cc_generic_iterate_t)); - if (iterator == NULL) - return ccErrNoMem; - - iterator->next = head->head; - *headpp = iterator; - return ccNoError; -} - -/** - * cci_generic_free_iterator() - * - * Purpose: Deallocate memory associated with an iterator - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -cci_generic_free_iterator(cc_generic_iterate_t* iterator) -{ - if ( iterator == NULL ) - return ccErrBadParam; - - iterator->next = NULL; - free(iterator); - return ccNoError; -} - - - diff --git a/src/lib/ccapi/common/mac/mig.defs b/src/lib/ccapi/common/mac/mig.defs deleted file mode 100755 index dd3ee1b51..000000000 --- a/src/lib/ccapi/common/mac/mig.defs +++ /dev/null @@ -1,58 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -import "mig_types.h"; - -#include -#include - -subsystem ccapi 128; - -type msg_request_t = array [] of char; -type msg_reply_t = array [] of char; -type msg_error_t = int32; - -routine ccapi_msg (in_server_port : mach_port_t; - in_request : msg_request_t; - out out_reply : msg_reply_t; - out out_error : msg_error_t); diff --git a/src/lib/ccapi/common/mac/mig_types.h b/src/lib/ccapi/common/mac/mig_types.h deleted file mode 100644 index 586a01994..000000000 --- a/src/lib/ccapi/common/mac/mig_types.h +++ /dev/null @@ -1,48 +0,0 @@ -/* $Copyright: -* -* Copyright 2004-2006 by the 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 MIT 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. -* -* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED -* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF -* MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. -* -* Individual source code files are copyright MIT, Cygnus Support, -* OpenVision, Oracle, Sun Soft, FundsXpress, and others. -* -* Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, -* and Zephyr are trademarks of the Massachusetts Institute of Technology -* (MIT). No commercial use of these trademarks may be made without prior -* written permission of MIT. -* -* "Commercial use" means use of a name in a product or other for-profit -* manner. It does NOT prevent a commercial firm from referring to the MIT -* trademarks in order to convey information (although in doing so, -* recognition of their trademark status should be given). -* $ -*/ - -#include "CredentialsCache.h" - -typedef const char *msg_request_t; -typedef char *msg_reply_t; -typedef cc_int32 msg_error_t; diff --git a/src/lib/ccapi/common/marshall.c b/src/lib/ccapi/common/marshall.c deleted file mode 100644 index b2433cb1d..000000000 --- a/src/lib/ccapi/common/marshall.c +++ /dev/null @@ -1,441 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* marshall.c */ - -#include -#include -#include -#include -#include "msg.h" -#include "msg_headers.h" -#include "marshall.h" - -cc_int32 -cci_creds_v4_marshall( cc_credentials_v4_t * creds, - char ** pflat, - cc_uint32 * plen) -{ - cc_uint32 len; - char * flat; - cci_flat_creds_v4_t * header; - cc_time64 t64; - - if ( creds == NULL || pflat == NULL || plen == NULL ) - return ccErrBadParam; - - len = sizeof(cci_flat_creds_v4_t); - flat = (char *)malloc(len); - if ( flat == NULL ) - return ccErrNoMem; - memset(flat, 0, len); - - header = (cci_flat_creds_v4_t *)flat; - header->version = htonl(creds->version); - memcpy(header->principal, creds->principal, cc_v4_name_size); - memcpy(header->principal_instance, creds->principal_instance, cc_v4_instance_size); - memcpy(header->service, creds->service, cc_v4_name_size); - memcpy(header->service_instance, creds->service_instance, cc_v4_instance_size); - memcpy(header->realm, creds->realm, cc_v4_realm_size); - memcpy(header->session_key, creds->session_key, cc_v4_key_size); - header->kvno = htonl(creds->kvno); - header->string_to_key_type = htonl(creds->string_to_key_type); - t64 = creds->issue_date; - header->issue_date = htonll(t64); - header->lifetime = htonl(creds->lifetime); - /* TODO: verify that address is stored in host order */ - header->address = htonl(creds->address); - header->ticket_size = htonl(creds->ticket_size); - memcpy(header->ticket, creds->ticket, cc_v4_ticket_size); - - *pflat = flat; - *plen = len; - - return ccNoError; -} - -cc_int32 -cci_creds_v4_unmarshall( char * flat, - cc_uint32 len, - cc_credentials_union * creds_union) -{ - struct cci_flat_creds_v4 * header; - cc_credentials_v4_t * creds; - cc_time64 t64; - - if ( flat == NULL || len == 0 || creds_union == NULL ) - return ccErrBadParam; - - creds_union->version = cc_credentials_v4; - - header = (cci_flat_creds_v4_t *)flat; - - creds = (cc_credentials_v4_t *)malloc(sizeof(cc_credentials_v4_t)); - if ( creds == NULL ) - return ccErrNoMem; - - creds->version = ntohl(header->version); - memcpy(creds->principal, header->principal, cc_v4_name_size); - memcpy(creds->principal_instance, header->principal_instance, cc_v4_instance_size); - memcpy(creds->service, header->service, cc_v4_name_size); - memcpy(creds->service_instance, header->service_instance, cc_v4_instance_size); - memcpy(creds->realm, header->realm, cc_v4_realm_size); - memcpy(creds->session_key, header->session_key, cc_v4_key_size); - creds->kvno = htonl(header->kvno); - creds->string_to_key_type = htonl(header->string_to_key_type); - t64 = header->issue_date; - creds->issue_date = (cc_time64)ntohll(t64); - creds->lifetime = (cc_int32)ntohl(header->lifetime); - /* TODO: verify that address is stored in host order */ - creds->address = ntohl(header->address); - creds->ticket_size = ntohl(header->ticket_size); - memcpy(creds->ticket, header->ticket, cc_v4_ticket_size); - - creds_union->credentials.credentials_v4 = creds; - - return ccNoError; -} - - -static cc_int32 -cci_creds_cc_data_array_count_entries( cc_data ** array, cc_uint32 * pcount) -{ - cc_uint32 count; - - if (array == NULL) { - *pcount = 0; - return ccNoError; - } - - for ( count=0; array[count] != NULL ; count++) ; - - *pcount = count; - return ccNoError; -} - -static cc_int32 -cci_creds_v5_compute_flat_size( cc_credentials_v5_t * creds, cc_uint32 * plen) -{ - cc_uint32 len; - cc_uint32 i, count; - - len = sizeof(struct cci_flat_creds_v5); - - if (creds->client) - len += strlen(creds->client) + 1; - - if (creds->server) - len += strlen(creds->server) + 1; - - len += creds->keyblock.length; - - cci_creds_cc_data_array_count_entries( creds->addresses, &count ); - len += count * sizeof(cc_flat_data); - for ( i=0; iaddresses[i]->length; - } - - len += creds->ticket.length; - len += creds->second_ticket.length; - - cci_creds_cc_data_array_count_entries( creds->authdata, &count ); - len += count * sizeof(cc_flat_data); - for ( i=0; iauthdata[i]->length; - } - - *plen = len; - return ccNoError; -} - -cc_int32 -cci_creds_v5_marshall( cc_credentials_v5_t * creds, - char ** pflat, - cc_uint32 * plen) -{ - cc_uint32 len; - char * flat; - struct cci_flat_creds_v5 * header; - cc_uint32 length; - cc_uint32 offset; - cc_time64 t64; - cc_uint32 count; - cc_uint32 i; - - if ( creds == NULL || pflat == NULL || plen == NULL ) - return ccErrBadParam; - - cci_creds_v5_compute_flat_size(creds, &len); - - flat = (char *)malloc(len); - if ( flat == NULL ) - return ccErrNoMem; - memset(flat, 0, len); - - offset = sizeof(struct cci_flat_creds_v5); - header = (struct cci_flat_creds_v5 *)flat; - header->version = htonl(FLAT_CREDS_V5_VERSION); - if (creds->client) { - length = strlen(creds->client) + 1; - header->client.length = htonl(length); - header->client.data = htonl(offset); - memcpy(flat + offset, creds->client, length); - offset += length; - } - - if (creds->server) { - length = strlen(creds->server) + 1; - header->server.length = htonl(length); - header->server.data = htonl(offset); - memcpy(flat + offset, creds->server, length); - offset += length; - } - - header->keyblock.type = htonl(creds->keyblock.type); - if (creds->keyblock.length) { - length = creds->keyblock.length; - header->keyblock.length = htonl(length); - header->keyblock.data = htonl(offset); - memcpy(flat + offset, creds->keyblock.data, length); - offset += length; - } - - t64 = creds->authtime; - header->authtime = htonll(t64); - t64 = creds->starttime; - header->starttime = htonll(t64); - t64 = creds->endtime; - header->endtime = htonll(t64); - t64 = creds->renew_till; - header->renew_till = htonll(t64); - - header->is_skey = htonl(creds->is_skey); - header->ticket_flags = htonl(creds->ticket_flags); - - cci_creds_cc_data_array_count_entries( creds->addresses, &count ); - if ( count ) { - cc_flat_data * addresses = (cc_flat_data *)flat + offset; - header->address_count = htonl(count); - header->addresses = htonl(offset); - offset += count * sizeof(cc_flat_data); - - for ( i=0; i < count; i++ ) { - addresses[i].type = htonl(creds->addresses[i]->type); - if (creds->addresses[i]->length) { - length = creds->addresses[i]->length; - addresses[i].length = htonl(length); - addresses[i].data = htonl(offset); - /* TODO: verify that addresses are stored in network order */ - memcpy(flat + offset, creds->addresses[i]->data, length); - offset += length; - } - } - } - - header->ticket.type = htonl(creds->ticket.type); - if (creds->ticket.length) { - length = creds->ticket.length; - header->ticket.length = htonl(length); - header->ticket.data = htonl(offset); - memcpy(flat + offset, creds->ticket.data, length); - offset += length; - } - - header->second_ticket.type = htonl(creds->second_ticket.type); - if (creds->second_ticket.length) { - length = creds->second_ticket.length; - header->second_ticket.length = htonl(length); - header->second_ticket.data = htonl(offset); - memcpy(flat + offset, creds->second_ticket.data, length); - offset += length; - } - - cci_creds_cc_data_array_count_entries( creds->authdata, &count ); - if ( count ) { - cc_flat_data * authdata = (cc_flat_data *)flat + offset; - - header->authdata_count = htonl(count); - header->authdata = (offset); - offset += count * sizeof(cc_flat_data); - - for ( i=0; i < count; i++ ) { - authdata[i].type = htonl(creds->authdata[i]->type); - if (creds->authdata[i]->length) { - length = creds->authdata[i]->length; - authdata[i].length = htonl(length); - authdata[i].data = htonl(offset); - memcpy(flat + offset, creds->authdata[i]->data, length); - offset += length; - } - } - } - - *pflat = flat; - *plen = len; - return ccNoError; -} - - -// TODO: a much better job of checking for out of memory errors -// and validating that we do not read beyond the flat input -// data buffer - -cc_int32 -cci_creds_v5_unmarshall( char * flat, - cc_uint32 len, - cc_credentials_union * creds_union) -{ - struct cci_flat_creds_v5 * header; - cc_credentials_v5_t * creds; - cc_flat_data * flat_data; - cc_time64 t64; - cc_uint32 length; - cc_uint32 count; - cc_uint32 i; - - if ( flat == NULL || len == 0 || creds_union == NULL ) - return ccErrBadParam; - - creds_union->version = cc_credentials_v5; - - header = (struct cci_flat_creds_v5 *)flat; - - if ( ntohl(header->version) != FLAT_CREDS_V5_VERSION ) - return ccErrBadParam; - - creds = (cc_credentials_v5_t *)malloc(sizeof(cc_credentials_v5_t)); - if ( creds == NULL ) - return ccErrNoMem; - memset(creds, 0, sizeof(cc_credentials_v5_t)); - - if ( header->client.length ) { - length = ntohl(header->client.length); - creds->client = (char *)malloc(length); - memcpy(creds->client, flat + header->client.data, length); - } - - if ( header->server.length ) { - length = ntohl(header->server.length); - creds->server = (char *)malloc(length); - memcpy(creds->server, flat + header->server.data, length); - } - - creds->keyblock.type = ntohl(header->keyblock.type); - if ( header->keyblock.length ) { - length = ntohl(header->keyblock.length); - creds->keyblock.length = length; - creds->keyblock.data = malloc(length); - memcpy(creds->keyblock.data, flat + header->keyblock.data, length); - } - - /* TODO: need to perform overflow validation checks to ensure - * that we do not attempt to store too large a value into cc_time_t - * when it is a 32-bit field. - */ - t64 = ntohll(header->authtime); - creds->authtime = (cc_time)t64; - t64 = ntohll(header->starttime); - creds->starttime = (cc_time)t64; - t64 = ntohll(header->endtime); - creds->endtime = (cc_time)t64; - t64 = ntohll(header->renew_till); - creds->renew_till = (cc_time)t64; - - creds->is_skey = ntohl(header->is_skey); - creds->ticket_flags = ntohl(header->ticket_flags); - - count = ntohl(header->address_count); - creds->addresses = (cc_data **) malloc((count + 1) * sizeof(cc_data *)); - flat_data = (cc_flat_data *)flat + header->addresses; - for ( i=0 ; i < count ; i++ ) { - creds->addresses[i] = (cc_data *)malloc(sizeof(cc_data)); - creds->addresses[i]->type = ntohl(flat_data[i].type); - length = ntohl(flat_data[i].length); - creds->addresses[i]->length = length; - if ( length ) { - creds->addresses[i]->data = malloc(length); - /* TODO: verify that addresses are stored in network order */ - memcpy(creds->addresses[i]->data, flat + flat_data[i].data, length); - } else { - creds->addresses[i]->data = NULL; - } - } - creds->addresses[i] = NULL; - - creds->ticket.type = ntohl(header->ticket.type); - length = ntohl(header->ticket.length); - if ( length ) { - creds->ticket.length = length; - creds->ticket.data = malloc(length); - memcpy(creds->ticket.data, flat + header->ticket.data, length); - } - - creds->second_ticket.type = header->second_ticket.type; - if ( header->second_ticket.length ) { - creds->second_ticket.length = header->second_ticket.length; - creds->second_ticket.data = malloc(creds->second_ticket.length); - memcpy(creds->second_ticket.data, flat + header->second_ticket.data, creds->second_ticket.length); - } - - count = ntohl(header->authdata_count); - creds->authdata = (cc_data **) malloc((count + 1) * sizeof(cc_data *)); - flat_data = (cc_flat_data *)flat + header->authdata; - for ( i=0 ; i < count ; i++ ) { - creds->authdata[i] = (cc_data *)malloc(sizeof(cc_data)); - creds->authdata[i]->type = ntohl(flat_data[i].type); - length = ntohl(flat_data[i].length); - creds->authdata[i]->length = length; - if ( length ) { - creds->authdata[i]->data = malloc(length); - memcpy(creds->authdata[i]->data, flat + flat_data[i].data, length); - } else { - creds->authdata[i]->data = NULL; - } - } - creds->authdata[i] = NULL; - - creds_union->credentials.credentials_v5 = creds; - - return ccNoError; -} - diff --git a/src/lib/ccapi/common/msg.c b/src/lib/ccapi/common/msg.c deleted file mode 100644 index fa051e95a..000000000 --- a/src/lib/ccapi/common/msg.c +++ /dev/null @@ -1,622 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Verifiable, extensible message format. - * - * Format: - * - * - * - * - * - * - * - * - * - * ... - * - * - * If the header has variable length data it is included in the data blobs. - * The header field has the offset from the beginning of the message of the 1st - * byte of the data and the length of the data. - */ - -#include "CredentialsCache.h" -#include "msg.h" -#include "generic_lists.h" - -#include -#include -#include -#include - -/** - * cci_msg_new() - * - * Purpose: Allocate and initialize a new cc_msg_t structure - * - * Input parameter (type) in host order - * - * Return: non-NULL, the msg - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -cci_msg_new(cc_uint32 type, cc_msg_t** msgpp) -{ - // type should be validated. If invalid set error to ccErrBadParam - cc_msg_t* msg; - - if ( type > CC_MSG_MAX_TYPE || msgpp == NULL ) - return ccErrBadParam; - - msg = (cc_msg_t*)malloc(sizeof(cc_msg_t)); - if (msg == NULL) - return ccErrNoMem; - - msg->type = type; - msg->flat = NULL; - msg->header = NULL; - msg->flat_len = 0; - msg->header_len = 0; - msg->magic = 0; - cci_generic_list_new(&msg->data_blobs); - if (msg->data_blobs == NULL) { - // pass on error from previous call - free(msg); - return ccErrNoMem; - } - - *msgpp = msg; - return ccNoError; -} - -/** - * cci_msg_calc_header_size() - * - * Purpose: Calculates the size of the header - * - * Return: the size in bytes - * - * Errors: ccErrBadParam - * - */ -cc_int32 -cci_msg_calc_header_size(cc_msg_t* msg, cc_uint32 * lenp) -{ - int header_len = 12; /* header size, entire size, type */ - - if ( msg == NULL || lenp == NULL ) - return ccErrBadParam; - - header_len += msg->header_len; - *lenp = header_len; - return ccNoError; -} - -/** - * cci_msg_calc_size() - * - * Purpose: Calculates the size of the message - * (does not include the magic bytes) - * - * Return: the size in bytes - * - * Errors: ccErrBadParam - * - */ -cc_int32 -cci_msg_calc_size(cc_msg_t* msg, cc_uint32 * lenp) -{ - cc_uint32 flat_len; - cc_generic_list_node_t* gen_node; - cc_generic_iterate_t* gen_iterator; - cc_int32 code; - - if ( msg == NULL || lenp == NULL ) - return ccErrBadParam; - - code = cci_msg_calc_header_size(msg, &flat_len); - if (code != ccNoError) - goto bad; - - code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator); - if ( code != ccNoError ) - goto bad; - - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - if (code != ccNoError) - break; - flat_len += gen_node->len + BLOB_LEN; - } - cci_generic_free_iterator(gen_iterator); - if (code != ccNoError) - goto bad; - - flat_len += MAGIC_HEAD_LEN + MAGIC_DATA_LEN; - *lenp = flat_len; - - bad: - return code; -} - -/** - * cci_msg_add_data_blob() - * - * Purpose: Adds 'len' bytes of data to the msg - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_add_data_blob(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 *lenp) -{ - cc_int32 code; - - if (msg == NULL || data == NULL || len <= 0 || lenp == NULL) - return ccErrBadParam; - - code = cci_generic_list_append(msg->data_blobs, data, len, NULL); - if ( code != ccNoError ) - return code; - return cci_msg_calc_blob_pos(msg, data, len, lenp); -} - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_calc_blob_pos(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 * posp) -{ - cc_uint32 pos; - cc_generic_list_node_t* gen_node; - cc_generic_iterate_t* gen_iterator; - cc_int32 code; - - code = cci_msg_calc_header_size(msg, &pos); - pos += sizeof(cc_uint32); /*+ sizeof(cc_uint32) for magic*/ - - code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator); - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - if (gen_node->len != len && gen_node->data != data) { - pos += gen_node->len + sizeof(cc_uint32); - } else { - cci_generic_free_iterator(gen_iterator); - *posp = pos + sizeof(cc_uint32); - return ccNoError; - } - } - - cci_generic_free_iterator(gen_iterator); - return ccIteratorEnd; -} - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_add_header(cc_msg_t* msg, void *header, cc_uint32 header_len) -{ - if ( msg == NULL || header == NULL ) - return ccErrBadParam; - - msg->header = header; - msg->header_len = header_len; - return ccNoError; -} - - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_flatten(cc_msg_t* msg, void **flatpp) -{ - cc_generic_list_node_t* gen_node; - cc_generic_iterate_t* gen_iterator; - unsigned char *cur_pos; - cc_uint32 zero = 0; - cc_uint32 magic = 0; - cc_uint32 msg_len; - cc_uint32 u32; - cc_int32 code; - - if (msg == NULL) - return ccErrBadParam; - - code = cci_msg_calc_size(msg,&msg->flat_len); - if ( code != ccNoError ) - return code; - - if (msg->flat_len > CC_MSG_MAX_SIZE) - return ccErrBadParam; - - msg->flat = (void *)malloc(msg->flat_len); - if (msg->flat == NULL) - return ccErrNoMem; - - cur_pos = msg->flat; - - u32 = htonl(msg->header_len); - memcpy(cur_pos,&u32,sizeof(cc_uint32)); - cur_pos+=sizeof(cc_uint32); - - u32 = htonl(msg->flat_len); - memcpy(cur_pos,&u32,sizeof(cc_uint32)); - cur_pos+=sizeof(cc_uint32); - - u32 = htonl(msg->type); - memcpy(cur_pos,&u32,sizeof(cc_uint32)); - cur_pos+=sizeof(cc_uint32); - - /* header data is already in network order */ - memcpy(cur_pos, msg->header, msg->header_len); - cur_pos += msg->header_len; - - u32 = htonl(zero); - memcpy(cur_pos, &u32, sizeof(cc_uint32)); /*will be magic number later*/ - cur_pos += sizeof(cc_uint32); - - code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator); - if ( code != ccNoError ) { - free(msg->flat); - return code; - } - - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - if (code != ccNoError) { - free(gen_iterator); - free(msg->flat); - return code; - } - u32 = htonl(gen_node->len); - memcpy(cur_pos, &u32, sizeof(cc_uint32)); - cur_pos+=sizeof(cc_uint32); - - /* data already in network order */ - memcpy(cur_pos, gen_node->data, gen_node->len); - cur_pos += gen_node->len; - } - free(gen_iterator); - - u32 = htonl(zero); - memcpy(cur_pos, &u32, sizeof(cc_uint32)); /*magic number will go here later*/ - cur_pos += sizeof(cc_uint32); - - if (cur_pos - (unsigned char *)msg->flat != msg->flat_len) { - fprintf(stderr, "ERROR cur_pos - msg->flat = %d\n",msg->flat_len); - } - - cci_msg_calc_magic(msg->flat, msg->flat_len, &magic); - printf("magic = %d\n",magic); - - cci_msg_calc_header_size(msg, &msg_len); - memcpy((char *)msg->flat + msg_len, &magic, sizeof(cc_uint32)); - memcpy((char *)msg->flat + msg->flat_len - sizeof(cc_uint32), &magic, sizeof(cc_uint32)); - - if ( flatpp != NULL ) - *flatpp = msg->flat; - - return ccNoError; -} - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_calc_magic(void *flat, cc_uint32 flat_len, cc_uint32 * magicp) -{ - cc_uint32 magic = 0; - cc_uint32 i; - - for (i = 0; i < flat_len; i += sizeof(cc_uint32)) { - magic = magic ^ *(int *)((char *)flat + i); - } - *magicp = htonl(magic); - return ccNoError; -} - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_verify(void *flat, cc_uint32 flat_len, cc_uint32 * validp) -{ - cc_uint32 *magic1, *magic2; - cc_uint32 *pheader_len; - cc_uint32 header_len; - cc_uint32 *ptotal_len; - cc_uint32 total_len; - cc_uint32 *pblob_len; - cc_uint32 blob_len; - cc_uint32 *ptype; - cc_uint32 type; - cc_uint32 num_blobs = 0; - cc_uint32 zero = 0; - cc_uint32 msg_magic, msg_magic2; - - if (flat == NULL || flat_len <= 0 || validp == NULL) - return ccErrBadParam; - - pheader_len = flat; - ptotal_len = (cc_uint32 *)((char *)pheader_len + sizeof(cc_uint32)); - ptype = (cc_uint32 *)((char *)ptotal_len + sizeof(cc_uint32)); - - header_len = ntohl(*pheader_len); - total_len = ntohl(*ptotal_len); - type = ntohl(*ptype); - - if (total_len != flat_len) { - *validp = 0; - return ccNoError; - } - - if (header_len > flat_len) { - /*too weak. We could verify header_len against type spec header.*/ - *validp = 0; - return ccNoError; - } - if (type > CC_MSG_MAX_TYPE) { - *validp = 0; - return ccNoError; - } - - magic1 = (cc_uint32 *)((char *)ptype + sizeof(cc_uint32) + header_len); - if ((char *)magic1 - (char *)flat == (flat_len - 8)) { - /*There are no data blobs*/ - magic2 = (cc_uint32 *)((char *)magic1 + sizeof(cc_uint32)); - num_blobs = 0; - } else { - pblob_len = (cc_uint32 *)((char *)magic1 + sizeof(cc_uint32)); - num_blobs = 1; - blob_len = ntohl(*pblob_len); - - while (blob_len + sizeof(cc_uint32) + ((char *)pblob_len - (char *)flat) < (flat_len - sizeof(cc_uint32))) { - pblob_len = (cc_uint32 *)((char *)pblob_len + blob_len + sizeof(cc_uint32)); - num_blobs++; - blob_len = ntohl(*pblob_len); - } - - if (blob_len + sizeof(cc_uint32) + ((char *)pblob_len - (char *)flat) != (flat_len - sizeof(cc_uint32))) { - /*blobs didn't line up*/ - *validp = 0; - return ccNoError; - } - magic2 = (cc_uint32 *)((char *)pblob_len + blob_len + sizeof(cc_uint32)); /*2nd magic should be directly after the last blob*/ - } - - if (*magic1 != *magic2) { - *validp = 0; - return ccNoError; - } - msg_magic = *magic1; - - printf("%d %d\n", (char *)magic1 - (char *)flat, (char *)magic2 - (char *)flat); - - memcpy(magic1, &zero, sizeof(cc_uint32)); - memcpy(magic2, &zero, sizeof(cc_uint32)); - cci_msg_calc_magic(flat, flat_len, &msg_magic2); - /* both msg_magic and msg_magic2 are in network order */ - if (msg_magic != msg_magic2) { - *validp = 0; - return ccNoError; - } - memcpy(magic1, &msg_magic, sizeof(cc_uint32)); - memcpy(magic2, &msg_magic, sizeof(cc_uint32)); - - *validp = 1; - return ccNoError; -} - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_unflatten(void *flat, cc_uint32 flat_len, cc_msg_t** msgpp) -{ - cc_msg_t* msg; - char *cur_pos; - cc_uint32 blob_len; - char *blob; - cc_uint32 valid; - cc_int32 code; - - if ( flat == NULL || flat_len <= 0 || msgpp == NULL ) - return ccErrBadParam; - - code = cci_msg_new(0, &msg); - if (code) - return code; - - cci_msg_verify(flat, flat_len, &valid); - if (valid != 1) { - cci_msg_destroy(msg); - return ccErrBadParam; - } - - cur_pos = flat; - msg->flat = flat; - - msg->header_len = ntohl(*(cc_uint32 *)cur_pos); - cur_pos += sizeof(cc_uint32); - - msg->flat_len = ntohl(*(cc_uint32 *)cur_pos); - cur_pos += sizeof(cc_uint32); - - msg->type = ntohl(*(cc_uint32 *)cur_pos); - cur_pos += sizeof(cc_uint32); - - msg->header = (void *)malloc(msg->header_len); - if (msg->header == NULL) { - cci_msg_destroy(msg); - return ccErrNoMem; - } - memcpy(msg->header, cur_pos, msg->header_len); - cur_pos += msg->header_len; - - msg->magic = ntohl(*(cc_uint32 *)cur_pos); - cur_pos += sizeof(cc_uint32); - - if (cur_pos - (char *)flat != flat_len - 8) { /*at least 1 blob*/ - blob_len = ntohl(*(cc_uint32 *)cur_pos); - while (blob_len + (cur_pos - (char *)flat) + sizeof(cc_uint32) <= flat_len - sizeof(cc_uint32)) { - blob = (void *)malloc(blob_len); - if (blob == NULL) { - cci_msg_destroy(msg); - return ccErrNoMem; - } - memcpy(blob, cur_pos + sizeof(cc_uint32), blob_len); - cci_generic_list_append(msg->data_blobs, blob, blob_len, NULL); - - cur_pos += sizeof(cc_uint32) + blob_len; - blob_len = ntohl(*(int *)cur_pos); - } - } - *msgpp = msg; - return ccNoError; -} - -cc_int32 -cci_msg_retrieve_blob(cc_msg_t* msg, cc_uint32 blob_offset, cc_uint32 blob_len, char **blobp) -{ - cc_generic_iterate_t* gen_iterator; - cc_generic_list_node_t* gen_node; - void *ret; - cc_uint32 blob_pos; - cc_int32 code; - - /*Ensure that the message has been unflattened*/ - if ( msg == NULL || msg->flat == NULL || blob_offset > msg->flat_len || - blob_len > msg->flat_len - blob_offset || blobp == NULL) - return ccErrBadParam; - - code = cci_generic_list_iterator(msg->data_blobs, &gen_iterator); - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - code = cci_msg_calc_blob_pos(msg, gen_node->data, gen_node->len, &blob_pos); - if (blob_pos == blob_offset && gen_node->len == blob_len) { - free(gen_iterator); - ret = (void *)malloc(blob_len); - if (ret == NULL) - return ccErrNoMem; - memcpy(ret,(char *)msg->flat + blob_offset, blob_len); - *blobp = ret; - return ccNoError; - } - } - free(gen_iterator); - return ccIteratorEnd; -} - -/** - * cc_msg_ - * - * Purpose: - * - * Return: - * - * Errors: - * - */ -cc_int32 -cci_msg_destroy(cc_msg_t* msg) -{ - if (msg->flat != NULL) - free(msg->flat); - if (msg->header != NULL) - free(msg->header); - cci_generic_list_destroy(msg->data_blobs); - free(msg); - return ccNoError; -} - diff --git a/src/lib/ccapi/doc/implementation-notes.txt b/src/lib/ccapi/doc/implementation-notes.txt deleted file mode 100644 index e6150fb23..000000000 --- a/src/lib/ccapi/doc/implementation-notes.txt +++ /dev/null @@ -1,156 +0,0 @@ -The following are notes describing the requirements of the Platform -Specific code necessary for constructing a Portable CCAPI. - -Directory structure: - - lib/ccapi/client - platform independent client library - lib/ccapi/common - platform independent common library - lib/ccapi/include - platform independent header files - lib/ccapi/mac - macosx specific headers, libraries, executables - lib/ccapi/server - platform independent server library - lib/ccapi/windows - windows specific headers, libraries, executables - - -Platform Independent Design: - -The functionality of the Portable CCAPI is implemented in the platform -independent libraries. The common library encapsulates the functions -for managing generic lists, iterators, and messages as well as routines -formarshalling and unmarshalling. The client library provides the -client side routines for issuing requests to the ccapi server minus the -platform dependent glue required for shared library initialization, -cleanup, and interprocess communications. The server library provides -server side functionality for managing credential cache collections, -caches, credentials, iterators, and their handles minus the platform -dependent glue for process initialization, interprocess communication, -session security, and critical section enforcement. - - -Platform Dependent Design Requirements: - -The platform dependent code is responsible for producing a shared -client library: - - + the shared library is built from cc_client.lib and cc_common.lib plus - platform dependent glue - - - [windows] link cc_client.lib and cc_common.lib with platform - dependent routines and export list (.def) to produce - krbcc32.{lib,dll} - - + initialization and cleanup - - - [windows] provide DllMain entry point providing Process and Thread - attachment and detachment routines - - + implement cci_perform_rpc() function used by cc_client.lib - cc_int32 cci_perform_rpc(cc_msg_t *request, cc_msg_t **response) - - - cci_perform_rpc() takes an input request cc_msg_t object, flattens - it with cci_msg_flatten() and sends the contents of unsigned char - buffer request->flat of length request->flat_len to the server - utilizing a platform specific interprocess communication method. - - - upon IPC success, cci_perform_rpc() unflattens the response buffer - with cci_msg_unflatten() and returns the new cc_msg_t response - object to the caller. - - - cci_perform_rpc() is responsible for performing any necessary - session security management. For example, on Windows the Logon - Provider executes under the local machine's "SYSTEM" account within - session 0 and not under the account of the user that is logging in - nor within the session the user's desktop and applications will be - running within. It is the responsibility of cci_perform_rpc() and - the platform dependent IPC mechanism to communicate the user's - security identifiers to the server. - - For Windows, this means that the platform specific IPC messaging - allows a username and session identifier to be sent separate from - the username and session identifier that will be obtained via the - use of Local RPC. If the Local RPC authenticates the user as - "SYSTEM" and session 0, then the communicated values (if provided) - will be used instead. - - + implement client side of IPC routine. - - - [windows] the client side IPC routine is produced by compiling a - IDL file. The IDL defines an interface with a single function: - - __int32 ccapi_Message ( - [in] handle_t h, - [in, string] unsigned char * client_name, - [in] struct _LUID luid, - [in] __int32 in_len, - [in, string, size_is(in_len)] unsigned char * in_buf, - [in] __int32 out_size, - [out] __int32 * out_len, - [out, string, size_is(out_size)] unsigned char - out_buf[*]); - - The handle is a Local RPC specific handle used to identify the - request. The client_name and luid are the override values for the - username and session identifier for use during Windows login. The - rest of the parameters provide the input and output buffers as well - as allow communication of the actual length of the message data - that is required by cci_msg_unflatten(). - - + if the CCAPI server is per-session, the shared client library is - responsible for ensuring that an instance of the server is running in - the current session. If not, the library must initiate an instance - of the CCAPI server prior to performing any IPC requests. - -The platform dependent code is responsible for producing a server -executable: - - + The server executable is built from cc_server.lib and cc_common.lib - plus platform dependent glue. - - - [windows] The Windows CCAPI Server is being built using the - per-system model. The platform specific code is responsible for - providing NT Service Management routines for installation and - removal as well as the NT Service Entry Points used when the - process is started as an NT Service. - - link cc_server.lib and cc_common.lib with platform dependent - routines to produce krbcc32s.exe. - - + Based upon the platform requirements, the server may be constructed - to be per-session or per-system. The selected IPC mechanism must - enforce the appropriate scoping. - - + The platform dependent startup routines will perform platform - specific initialization including the IPC engine and call the - platform independent initialization routine ccs_serv_initialize() - - + The platform dependent shutdown routines will perform platform - specific cleanup including the IPC engine and call the platform - independent function ccs_serv_cleanup() prior to process termination. - - + For each inbound CCAPI request, the server will unmarshall the - request using cci_msg_unflatten() to produce a cc_msg_t object, - construct cc_auth_info_t and cc_session_info_t objects to represent - the platform dependent authentication and session data, call - ccs_serv_process_msg() to process the request, call cci_msg_flatten() - to marhall the response, transmit the response to the caller, and - then cleanup the request and response cc_msg_t objects with - cci_msg_destroy(). - - + The cc_auth_info_t and cc_session_info_t objects are structures - storing opaque binary (data, length) representations of the - authentication and session data. These are stored as part of ccache - collection and ccaches. ccs_serv_process_msg() will perform a binary - comparison of the stored data with the data provided in the current - request. If they do not match, the request will be denied. It is - necessary that the data generated data always be the same. If - username strings are not case-sensitive, they should be normalized - before being passed to ccs_serv_process_msg(). - - + The current cc_server.lib routines assume that one request at a time - is being processed. If the IPC engine allows for more than one - request to be simultaneously received in separate threads, then the - call to ccs_serv_process_msg() must be wrapped by a critical section. - Future enhancements to cc_server.lib will allow for per-object - mutexes. When available the platform specific glue must provide - functions to create, obtain, release, and destroy mutex objects. - - diff --git a/src/lib/ccapi/include/CredentialsCache.h b/src/lib/ccapi/include/CredentialsCache.h deleted file mode 100644 index aa800bd2f..000000000 --- a/src/lib/ccapi/include/CredentialsCache.h +++ /dev/null @@ -1,584 +0,0 @@ -/* $Copyright: - * - * Copyright 1998-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* $Header$ */ - -/* - * Declarations for Credentials Cache API Library - * - * API specification: - * - * Revision 1: Frank Dabek, 6/4/1998 - * Revision 2: meeroh, 2/24/1999 - * Revision 3: meeroh, 11/12/1999 - * Revision 6: jaltman, 10/27/2004 - * - */ - -#ifndef __CREDENTIALSCACHE__ -#define __CREDENTIALSCACHE__ - -#if defined(macintosh) || (defined(__MACH__) && defined(__APPLE__)) -#include -#endif - -#if defined(_WIN32) -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#if TARGET_OS_MAC -#pragma pack(push,2) -#endif - -#if defined(_WIN32) -#define CCACHE_API __declspec(dllexport) - -#if _INTEGRAL_MAX_BITS >= 64 && _MSC_VER >= 1400 && !defined(_WIN64) && !defined(_USE_32BIT_TIME_T) -#if defined(_TIME_T_DEFINED) || defined(_INC_IO) || defined(_INC_TIME) || defined(_INC_WCHAR) -#error time_t has been defined as a 64-bit integer which is incompatible with Kerberos on this platform. -#endif /* _TIME_T_DEFINED */ -#define _USE_32BIT_TIME_T -#endif -#else -#define CCACHE_API -#endif - -#include - -/* - * Constants - */ - -/* API versions */ -enum { - ccapi_version_2 = 2, - ccapi_version_3 = 3, - ccapi_version_4 = 4, - ccapi_version_5 = 5, - ccapi_version_6 = 6, - ccapi_version_max = ccapi_version_6 -}; - -/* Errors */ -enum { - ccNoError = 0, - - ccIteratorEnd = 201, - ccErrBadParam, - ccErrNoMem, - ccErrInvalidContext, - ccErrInvalidCCache, - - ccErrInvalidString, /* 206 */ - ccErrInvalidCredentials, - ccErrInvalidCCacheIterator, - ccErrInvalidCredentialsIterator, - ccErrInvalidLock, - - ccErrBadName, /* 211 */ - ccErrBadCredentialsVersion, - ccErrBadAPIVersion, - ccErrContextLocked, - ccErrContextUnlocked, - - ccErrCCacheLocked, /* 216 */ - ccErrCCacheUnlocked, - ccErrBadLockType, - ccErrNeverDefault, - ccErrCredentialsNotFound, - - ccErrCCacheNotFound, /* 221 */ - ccErrContextNotFound, - ccErrServerUnavailable, - ccErrServerInsecure, - ccErrServerCantBecomeUID, - - ccErrTimeOffsetNotSet, /* 226 */ - ccErrBadInternalMessage, - ccErrNotImplemented -}; - -/* Credentials versions */ -enum cc_credential_versions { - cc_credentials_v4 = 1, - cc_credentials_v5 = 2, - cc_credentials_v4_v5 = 3 -}; - -/* Lock types */ -enum cc_lock_types { - cc_lock_read = 0, - cc_lock_write = 1, - cc_lock_upgrade = 2, - cc_lock_downgrade = 3 -}; - -/* Locking Modes */ -enum cc_lock_modes { - cc_lock_noblock = 0, - cc_lock_block = 1 -}; - -/* - * Basic types - */ - -typedef char cc_int8; -typedef unsigned char cc_uint8; -typedef int cc_int32; -typedef unsigned int cc_uint32; -#if defined (WIN32) -typedef __int64 cc_int64; -typedef unsigned __int64 cc_uint64; -#else -typedef long long cc_int64; -typedef unsigned long long cc_uint64; -#endif -typedef time_t cc_time; -typedef cc_int64 cc_time64; -typedef cc_uint64 cc_handle; - -/* - * API types - */ - -/* Forward declarations */ -struct cc_context_f; -typedef struct cc_context_f cc_context_f; - -struct cc_ccache_f; -typedef struct cc_ccache_f cc_ccache_f; - -struct cc_ccache_iterator_f; -typedef struct cc_ccache_iterator_f cc_ccache_iterator_f; - -struct cc_ccache_iterator_f; -typedef struct cc_credentials_iterator_f cc_credentials_iterator_f; - -struct cc_string_f; -typedef struct cc_string_f cc_string_f; - -struct cc_credentials_f; -typedef struct cc_credentials_f cc_credentials_f; - -/* Credentials types */ - -enum { /* Make sure all of these are multiples of four (for alignment sanity) */ - cc_v4_name_size = 40, - cc_v4_instance_size = 40, - cc_v4_realm_size = 40, - cc_v4_ticket_size = 1254, - cc_v4_key_size = 8 -}; - -enum cc_string_to_key_type { - cc_v4_stk_afs = 0, - cc_v4_stk_des = 1, - cc_v4_stk_columbia_special = 2, - cc_v4_stk_krb5 = 3, - cc_v4_stk_unknown = 4 -}; - -struct cc_credentials_v4_t { - cc_uint32 version; - char principal [cc_v4_name_size]; - char principal_instance [cc_v4_instance_size]; - char service [cc_v4_name_size]; - char service_instance [cc_v4_instance_size]; - char realm [cc_v4_realm_size]; - unsigned char session_key [cc_v4_key_size]; - cc_int32 kvno; - cc_int32 string_to_key_type; - cc_time issue_date; - cc_int32 lifetime; - cc_uint32 address; - cc_int32 ticket_size; - unsigned char ticket [cc_v4_ticket_size]; -}; -typedef struct cc_credentials_v4_t cc_credentials_v4_t; - -struct cc_data { - cc_uint32 type; - cc_uint32 length; - void* data; -}; -typedef struct cc_data cc_data; - -struct cc_credentials_v5_t { - char* client; - char* server; - cc_data keyblock; - cc_time authtime; - cc_time starttime; - cc_time endtime; - cc_time renew_till; - cc_uint32 is_skey; - cc_uint32 ticket_flags; - cc_data** addresses; - cc_data ticket; - cc_data second_ticket; - cc_data** authdata; -}; -typedef struct cc_credentials_v5_t cc_credentials_v5_t; - -struct cc_credentials_union { - cc_int32 version; - union { - cc_credentials_v4_t* credentials_v4; - cc_credentials_v5_t* credentials_v5; - } credentials; -}; -typedef struct cc_credentials_union cc_credentials_union; - -/* Exposed parts */ - -struct cc_context_d { - const cc_context_f *functions; -#if TARGET_OS_MAC - const cc_context_f *otherFunctions; -#endif -}; -typedef struct cc_context_d cc_context_d; -typedef cc_context_d *cc_context_t; - -struct cc_ccache_d { - const cc_ccache_f *functions; -#if TARGET_OS_MAC - const cc_ccache_f *otherFunctions; -#endif -}; -typedef struct cc_ccache_d cc_ccache_d; -typedef cc_ccache_d *cc_ccache_t; - -struct cc_ccache_iterator_d { - const cc_ccache_iterator_f *functions; -#if TARGET_OS_MAC - const cc_ccache_iterator_f *otherFunctions; -#endif -}; -typedef struct cc_ccache_iterator_d cc_ccache_iterator_d; -typedef cc_ccache_iterator_d *cc_ccache_iterator_t; - -struct cc_credentials_iterator_d { - const cc_credentials_iterator_f *functions; -#if TARGET_OS_MAC - const cc_credentials_iterator_f *otherFunctions; -#endif -}; -typedef struct cc_credentials_iterator_d cc_credentials_iterator_d; -typedef cc_credentials_iterator_d *cc_credentials_iterator_t; - -struct cc_string_d { - const char *data; - const cc_string_f *functions; -#if TARGET_OS_MAC - const cc_string_f *otherFunctions; -#endif -}; -typedef struct cc_string_d cc_string_d; -typedef cc_string_d *cc_string_t; - -struct cc_credentials_d { - const cc_credentials_union *data; - const cc_credentials_f *functions; -#if TARGET_OS_MAC - const cc_credentials_f *otherFunctions; -#endif -}; -typedef struct cc_credentials_d cc_credentials_d; -typedef cc_credentials_d *cc_credentials_t; - -/* Function pointer structs */ - -struct cc_context_f { - cc_int32 (*release) (cc_context_t in_context); - - cc_int32 (*get_change_time) (cc_context_t in_context, - cc_time *out_time); - - cc_int32 (*get_default_ccache_name) (cc_context_t in_context, - cc_string_t *out_name); - - cc_int32 (*open_ccache) (cc_context_t in_context, - const char *in_name, - cc_ccache_t *out_ccache); - - cc_int32 (*open_default_ccache) (cc_context_t in_context, - cc_ccache_t *out_ccache); - - cc_int32 (*create_ccache) (cc_context_t in_context, - const char *in_name, - cc_uint32 in_cred_vers, - const char *in_principal, - cc_ccache_t *out_ccache); - - cc_int32 (*create_default_ccache) (cc_context_t in_context, - cc_uint32 in_cred_vers, - const char *in_principal, - cc_ccache_t *out_ccache); - - cc_int32 (*create_new_ccache) (cc_context_t in_context, - cc_uint32 in_cred_vers, - const char *in_principal, - cc_ccache_t *out_ccache); - - cc_int32 (*new_ccache_iterator) (cc_context_t in_context, - cc_ccache_iterator_t *out_iterator); - - cc_int32 (*lock) (cc_context_t in_context, - cc_uint32 in_lock_type, - cc_uint32 in_block); - - cc_int32 (*unlock) (cc_context_t in_cc_context); - - cc_int32 (*compare) (cc_context_t in_cc_context, - cc_context_t in_compare_to_context, - cc_uint32 *out_equal); -}; - -struct cc_ccache_f { - cc_int32 (*release) (cc_ccache_t io_ccache); - - cc_int32 (*destroy) (cc_ccache_t io_ccache); - - cc_int32 (*set_default) (cc_ccache_t io_ccache); - - cc_int32 (*get_credentials_version) (cc_ccache_t in_ccache, - cc_uint32 *in_credentials_version); - - cc_int32 (*get_name) (cc_ccache_t in_ccache, - cc_string_t *out_name); - - cc_int32 (*get_principal) (cc_ccache_t in_ccache, - cc_uint32 in_credentials_version, - cc_string_t *out_principal); - - cc_int32 (*set_principal) (cc_ccache_t io_ccache, - cc_uint32 in_credentials_version, - const char *in_principal); - - cc_int32 (*store_credentials) (cc_ccache_t io_ccache, - const cc_credentials_union *in_credentials_union); - - cc_int32 (*remove_credentials) (cc_ccache_t io_ccache, - cc_credentials_t in_credentials); - - cc_int32 (*new_credentials_iterator) (cc_ccache_t in_ccache, - cc_credentials_iterator_t *out_credentials_iterator); - - cc_int32 (*move) (cc_ccache_t io_source_ccache, - cc_ccache_t io_destination_ccache); - - cc_int32 (*lock) (cc_ccache_t io_ccache, - cc_uint32 in_lock_type, - cc_uint32 in_block); - - cc_int32 (*unlock) (cc_ccache_t io_ccache); - - cc_int32 (*get_last_default_time) (cc_ccache_t in_ccache, - cc_time *out_last_default_time); - - cc_int32 (*get_change_time) (cc_ccache_t in_ccache, - cc_time *out_change_time); - - cc_int32 (*compare) (cc_ccache_t in_ccache, - cc_ccache_t in_compare_to_ccache, - cc_uint32 *out_equal); - - cc_int32 (*get_kdc_time_offset) (cc_ccache_t in_ccache, - cc_int32 in_credentials_version, - cc_time *out_time_offset); - - cc_int32 (*set_kdc_time_offset) (cc_ccache_t io_ccache, - cc_int32 in_credentials_version, - cc_time in_time_offset); - - cc_int32 (*clear_kdc_time_offset) (cc_ccache_t in_ccache, - cc_int32 in_credentials_version); -}; - -struct cc_string_f { - cc_int32 (*release) (cc_string_t in_string); -}; - -struct cc_credentials_f { - cc_int32 (*release) (cc_credentials_t io_credentials); - - cc_int32 (*compare) (cc_credentials_t in_credentials, - cc_credentials_t in_compare_to_credentials, - cc_uint32 *out_equal); -}; - - -struct cc_ccache_iterator_f { - cc_int32 (*release) (cc_ccache_iterator_t io_ccache_iterator); - - cc_int32 (*next) (cc_ccache_iterator_t in_ccache_iterator, - cc_ccache_t *out_ccache); - - cc_int32 (*clone) (cc_ccache_iterator_t in_ccache_iterator, - cc_ccache_iterator_t *out_ccache_iterator); -}; - -struct cc_credentials_iterator_f { - cc_int32 (*release) (cc_credentials_iterator_t io_credentials_iterator); - - cc_int32 (*next) (cc_credentials_iterator_t in_credentials_iterator, - cc_credentials_t *out_credentials); - - cc_int32 (*clone) (cc_credentials_iterator_t in_credentials_iterator, - cc_credentials_iterator_t *out_credentials_iterator); -}; - -/* - * API functions - */ - -CCACHE_API cc_int32 cc_initialize (cc_context_t *out_context, - cc_int32 in_version, - cc_int32 *out_supported_version, - char const **out_vendor); - -/* - * Convenience macros - */ - -#define cc_context_release(context) \ - ((context) -> functions -> release (context)) -#define cc_context_get_change_time(context, time) \ - ((context) -> functions -> get_change_time (context, time)) -#define cc_context_get_default_ccache_name(context, name) \ - ((context) -> functions -> get_default_ccache_name (context, name)) -#define cc_context_open_ccache(context, name, ccache) \ - ((context) -> functions -> open_ccache (context, name, ccache)) -#define cc_context_open_default_ccache(context, ccache) \ - ((context) -> functions -> open_default_ccache (context, ccache)) -#define cc_context_create_ccache(context, name, version, principal, ccache) \ - ((context) -> functions -> create_ccache (context, name, version, principal, ccache)) -#define cc_context_create_default_ccache(context, version, principal, ccache) \ - ((context) -> functions -> create_default_ccache (context, version, principal, ccache)) -#define cc_context_create_new_ccache(context, version, principal, ccache) \ - ((context) -> functions -> create_new_ccache (context, version, principal, ccache)) -#define cc_context_new_ccache_iterator(context, iterator) \ - ((context) -> functions -> new_ccache_iterator (context, iterator)) -#define cc_context_lock(context, type, block) \ - ((context) -> functions -> lock (context, type, block)) -#define cc_context_unlock(context) \ - ((context) -> functions -> unlock (context)) -#define cc_context_compare(context, compare_to, equal) \ - ((context) -> functions -> compare (context, compare_to, equal)) - -#define cc_ccache_release(ccache) \ - ((ccache) -> functions -> release (ccache)) -#define cc_ccache_destroy(ccache) \ - ((ccache) -> functions -> destroy (ccache)) -#define cc_ccache_set_default(ccache) \ - ((ccache) -> functions -> set_default (ccache)) -#define cc_ccache_get_credentials_version(ccache, version) \ - ((ccache) -> functions -> get_credentials_version (ccache, version)) -#define cc_ccache_get_name(ccache, name) \ - ((ccache) -> functions -> get_name (ccache, name)) -#define cc_ccache_get_principal(ccache, version, principal) \ - ((ccache) -> functions -> get_principal (ccache, version, principal)) -#define cc_ccache_set_principal(ccache, version, principal) \ - ((ccache) -> functions -> set_principal (ccache, version, principal)) -#define cc_ccache_store_credentials(ccache, credentials) \ - ((ccache) -> functions -> store_credentials (ccache, credentials)) -#define cc_ccache_remove_credentials(ccache, credentials) \ - ((ccache) -> functions -> remove_credentials (ccache, credentials)) -#define cc_ccache_new_credentials_iterator(ccache, iterator) \ - ((ccache) -> functions -> new_credentials_iterator (ccache, iterator)) -#define cc_ccache_lock(ccache, type, block) \ - ((ccache) -> functions -> lock (ccache, type, block)) -#define cc_ccache_unlock(ccache, unlock) \ - ((ccache) -> functions -> unlock (ccache, unlock)) -#define cc_ccache_get_last_default_time(ccache, time) \ - ((ccache) -> functions -> get_last_default_time (ccache, time)) -#define cc_ccache_get_change_time(ccache, time) \ - ((ccache) -> functions -> get_change_time (ccache, time)) -#define cc_ccache_move(source, destination) \ - ((source) -> functions -> move (source, destination)) -#define cc_ccache_compare(ccache, compare_to, equal) \ - ((ccache) -> functions -> compare (ccache, compare_to, equal)) -#define cc_ccache_get_kdc_time_offset(ccache, version, time) \ - ((ccache) -> functions -> get_kdc_time_offset (version, time)) -#define cc_ccache_set_kdc_time_offset(ccache, version, time) \ - ((ccache) -> functions -> set_kdc_time_offset (version, time)) -#define cc_ccache_clear_kdc_time_offset(ccache, version) \ - ((ccache) -> functions -> clear_kdc_time_offset (version)) - -#define cc_string_release(string) \ - ((string) -> functions -> release (string)) - -#define cc_credentials_release(credentials) \ - ((credentials) -> functions -> release (credentials)) -#define cc_credentials_compare(credentials, compare_to, equal) \ - ((credentials) -> functions -> compare (credentials, compare_to, equal)) - -#define cc_ccache_iterator_release(iterator) \ - ((iterator) -> functions -> release (iterator)) -#define cc_ccache_iterator_next(iterator, ccache) \ - ((iterator) -> functions -> next (iterator, ccache)) -#define cc_ccache_iterator_clone(iterator, new_iter) \ - ((iterator) -> functions -> clone (iterator, new_iter)) - -#define cc_credentials_iterator_release(iterator) \ - ((iterator) -> functions -> release (iterator)) -#define cc_credentials_iterator_next(iterator, credentials) \ - ((iterator) -> functions -> next (iterator, credentials)) -#define cc_credentials_iterator_clone(iterator, new_iter) \ - ((iterator) -> functions -> clone (iterator, new_iter)) - -#if TARGET_OS_MAC -#pragma pack(pop) -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __CREDENTIALSCACHE__ */ diff --git a/src/lib/ccapi/include/CredentialsCache2.h b/src/lib/ccapi/include/CredentialsCache2.h deleted file mode 100644 index 04b9396c7..000000000 --- a/src/lib/ccapi/include/CredentialsCache2.h +++ /dev/null @@ -1,310 +0,0 @@ -/* $Copyright: - * - * Copyright 1998-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ -/* - * This is backwards compatibility for CCache API v2 clients to be able to run - * against the CCache API v3 library - */ - -#ifndef __CREDENTIALSCACHE2__ -#define __CREDENTIALSCACHE2__ - -#include "CredentialsCache.h" - -#if defined(macintosh) || (defined(__MACH__) && defined(__APPLE__)) -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#if TARGET_OS_MAC -#pragma pack(push,2) -#endif - -/* Some old types get directly mapped to new types */ - -typedef cc_context_d apiCB; -typedef cc_ccache_d ccache_p; -typedef cc_credentials_iterator_d ccache_cit_creds; -typedef cc_ccache_iterator_d ccache_cit_ccache; -typedef cc_data cc_data_compat; -typedef cc_int32 cc_cred_vers; -typedef cc_int32 cc_result; - -/* This doesn't exist in API v3 */ -typedef cc_uint32 cc_flags; - -/* Credentials types are visible to the caller so we have to keep binary compatibility */ - -typedef struct cc_credentials_v5_compat { - char* client; - char* server; - cc_data_compat keyblock; - cc_time authtime; - cc_time starttime; - cc_time endtime; - cc_time renew_till; - cc_uint32 is_skey; - cc_uint32 ticket_flags; - cc_data_compat** addresses; - cc_data_compat ticket; - cc_data_compat second_ticket; - cc_data_compat** authdata; -} cc_credentials_v5_compat; - -enum { - MAX_V4_CRED_LEN = 1250 -}; - -enum { - KRB_NAME_SZ = 40, - KRB_INSTANCE_SZ = 40, - KRB_REALM_SZ = 40 -}; - -typedef struct cc_credentials_v4_compat { - unsigned char kversion; - char principal[KRB_NAME_SZ+1]; - char principal_instance[KRB_INSTANCE_SZ+1]; - char service[KRB_NAME_SZ+1]; - char service_instance[KRB_INSTANCE_SZ+1]; - char realm[KRB_REALM_SZ+1]; - unsigned char session_key[8]; - cc_int32 kvno; - cc_int32 str_to_key; - long issue_date; - cc_int32 lifetime; - cc_uint32 address; - cc_int32 ticket_sz; - unsigned char ticket[MAX_V4_CRED_LEN]; - unsigned long oops; -} cc_credentials_v4_compat; - -typedef union cred_ptr_union_compat { - cc_credentials_v4_compat* pV4Cred; - cc_credentials_v5_compat* pV5Cred; -} cred_ptr_union_compat; - -typedef struct cred_union { - cc_int32 cred_type; // cc_cred_vers - cred_ptr_union_compat cred; -} cred_union; - -/* NC info structure is gone in v3 */ - -struct infoNC { - char* name; - char* principal; - cc_int32 vers; -}; - -typedef struct infoNC infoNC; - -/* Some old type names */ - -typedef cc_credentials_v4_compat V4Cred_type; -typedef cc_credentials_v5_compat cc_creds; -struct ccache_cit; -typedef struct ccache_cit ccache_cit; - -enum { - CC_API_VER_2 = ccapi_version_2 -}; - -enum { - CC_NOERROR, - CC_BADNAME, - CC_NOTFOUND, - CC_END, - CC_IO, - CC_WRITE, - CC_NOMEM, - CC_FORMAT, - CC_LOCKED, - CC_BAD_API_VERSION, - CC_NO_EXIST, - CC_NOT_SUPP, - CC_BAD_PARM, - CC_ERR_CACHE_ATTACH, - CC_ERR_CACHE_RELEASE, - CC_ERR_CACHE_FULL, - CC_ERR_CRED_VERSION -}; - -enum { - CC_CRED_UNKNOWN, - CC_CRED_V4, - CC_CRED_V5, - CC_CRED_MAX -}; - -enum { - CC_LOCK_UNLOCK = 1, - CC_LOCK_READER = 2, - CC_LOCK_WRITER = 3, - CC_LOCK_NOBLOCK = 16 -}; - -CCACHE_API cc_int32 cc_shutdown ( - apiCB** ioContext); - -CCACHE_API cc_int32 cc_get_NC_info ( - apiCB* inContext, - infoNC*** outInfo); - -CCACHE_API cc_int32 cc_get_change_time ( - apiCB* inContext, - cc_time* outTime); - -CCACHE_API cc_int32 cc_open ( - apiCB* inContext, - const char* inName, - cc_int32 inVersion, - cc_uint32 inFlags, - ccache_p** outCCache); - -CCACHE_API cc_int32 cc_create ( - apiCB* inContext, - const char* inName, - const char* inPrincipal, - cc_int32 inVersion, - cc_uint32 inFlags, - ccache_p** outCCache); - -CCACHE_API cc_int32 cc_close ( - apiCB* inContext, - ccache_p** ioCCache); - -CCACHE_API cc_int32 cc_destroy ( - apiCB* inContext, - ccache_p** ioCCache); - -CCACHE_API cc_int32 cc_seq_fetch_NCs_begin ( - apiCB* inContext, - ccache_cit** outIterator); - -CCACHE_API cc_int32 cc_seq_fetch_NCs_next ( - apiCB* inContext, - ccache_p** outCCache, - ccache_cit* inIterator); - -CCACHE_API cc_int32 cc_seq_fetch_NCs_end ( - apiCB* inContext, - ccache_cit** ioIterator); - -CCACHE_API cc_int32 cc_get_name ( - apiCB* inContext, - ccache_p* inCCache, - char** outName); - -CCACHE_API cc_int32 cc_get_cred_version ( - apiCB* inContext, - ccache_p* inCCache, - cc_int32* outVersion); - -CCACHE_API cc_int32 cc_set_principal ( - apiCB* inContext, - ccache_p* inCCache, - cc_int32 inVersion, - char* inPrincipal); - -CCACHE_API cc_int32 cc_get_principal ( - apiCB* inContext, - ccache_p* inCCache, - char** outPrincipal); - -CCACHE_API cc_int32 cc_store ( - apiCB* inContext, - ccache_p* inCCache, - cred_union inCredentials); - -CCACHE_API cc_int32 cc_remove_cred ( - apiCB* inContext, - ccache_p* inCCache, - cred_union inCredentials); - -CCACHE_API cc_int32 cc_seq_fetch_creds_begin ( - apiCB* inContext, - const ccache_p* inCCache, - ccache_cit** outIterator); - -CCACHE_API cc_int32 cc_seq_fetch_creds_next ( - apiCB* inContext, - cred_union** outCreds, - ccache_cit* inIterator); - -CCACHE_API cc_int32 cc_seq_fetch_creds_end ( - apiCB* inContext, - ccache_cit** ioIterator); - -CCACHE_API cc_int32 cc_free_principal ( - apiCB* inContext, - char** ioPrincipal); - -CCACHE_API cc_int32 cc_free_name ( - apiCB* inContext, - char** ioName); - -CCACHE_API cc_int32 cc_free_creds ( - apiCB* inContext, - cred_union** creds); - -CCACHE_API cc_int32 cc_free_NC_info ( - apiCB* inContext, - infoNC*** ioInfo); - -CCACHE_API cc_int32 cc_lock_request( - apiCB* inContext, - const ccache_p* inCCache, - const cc_int32 lock_type); - -#if TARGET_OS_MAC -#pragma pack(pop) -#endif - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* __CREDENTIALSCACHE2__ */ diff --git a/src/lib/ccapi/include/cc_rpc.h b/src/lib/ccapi/include/cc_rpc.h deleted file mode 100644 index 0f14724b9..000000000 --- a/src/lib/ccapi/include/cc_rpc.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - - -#ifndef __CC_RPC_H__ -#define __CC_RPC_H__ - -#include "msg.h" - -cc_int32 cci_perform_rpc(cc_msg_t *request, cc_msg_t **response); - -#endif /* __CC_RPC_H__ */ diff --git a/src/lib/ccapi/include/datastore.h b/src/lib/ccapi/include/datastore.h deleted file mode 100644 index 7bb8b093d..000000000 --- a/src/lib/ccapi/include/datastore.h +++ /dev/null @@ -1,182 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ -/* - * Prototypes and data structures for datastore. - * - */ - - -#ifndef __CCDATASTOREH__ -#define __CCDATASTOREH__ - -#include "CredentialsCache.h" -#include "rpc_auth.h" -#include "generic_lists.h" - -struct cc_context_iterate_t { - cc_context_list_node_t* next; -}; -typedef struct cc_context_iterate_t cc_context_iterate_t; - -struct cc_ccache_iterate_t { - cc_ccache_list_node_t* next; -}; -typedef struct cc_ccache_iterate_t cc_ccache_iterate_t; - -struct cc_credentials_iterate_t { - cc_credentials_list_node_t* next; -}; -typedef struct cc_credentials_iterate_t cc_credentials_iterate_t; - -struct cc_lock { - cc_uint32 read_locks; /* count of read locks (>= 0) */ - cc_uint32 write_locks; /* count of write locks (0 or 1) */ - void * platform_data; /* platform specific implementation data */ -}; -typedef struct cc_lock cc_lock_t; - - -struct cc_server_context_t { - cc_ccache_list_head_t* ccaches; /*our ccaches*/ - cc_generic_list_head_t* active_iterators; /*active ccache iterators*/ - cc_int32 api_version; /*Version our client passed in on init (ccapi_version_X) */ - cc_auth_info_t* auth_info; /*auth info passed in from RPC*/ - cc_session_info_t* session_info; /*session info passed in from RPC*/ - cc_time64 changed; /*date of last change to this context*/ - cc_int32 error; /*last error code*/ - cc_lock_t locks; /*are we locked?*/ -}; -typedef struct cc_server_context_t cc_server_context_t; - -struct cc_server_ccache_t { - char* name; /*name of this ccache*/ - char* principal_v4; /*v4 principal associated with this cache*/ - char* principal_v5; /*v5 principal associated with this cache*/ - cc_uint32 versions; /*versions of creds supported (from cc_credentials enum in CredentialsCache.h)*/ - cc_time64 changed; /*date of last change to ccache*/ - cc_int32 kdc_set; /*is the KDC time offset initialized?*/ - cc_time64 kdc_offset; /*offset of our clock relative kdc*/ - cc_time64 last_default; /*the last date when we were default*/ - cc_int32 is_default; /*is this the default cred on this ccache?*/ - cc_generic_list_head_t* active_iterators; /*iterators which clients have opened on this cache*/ - cc_credentials_list_head_t* creds; /*list of creds stored in this ccache*/ - cc_server_context_t* mycontext; /*context to which I belong*/ - cc_lock_t locks; /*are we locked?*/ -}; -typedef struct cc_server_ccache_t cc_server_ccache_t; - -struct cc_server_credentials_t { - cc_int32 is_default; /*Are we the default cred? (first in list)*/ - cc_credentials_union creds; -}; -typedef struct cc_server_credentials_t cc_server_credentials_t; - - -/*Note: cci means Credential Cache Internal, to differentiate from exported API macros*/ - -cc_int32 ccs_context_iterate_has_next(struct cc_context_iterate_t *iterate); -cc_int32 ccs_context_iterate_next(struct cc_context_iterate_t *iterate, cc_context_list_node_t**); - -cc_int32 ccs_ccache_iterate_has_next(struct cc_ccache_iterate_t *iterate); -cc_int32 ccs_ccache_iterate_next(struct cc_ccache_iterate_t *iterate, cc_ccache_list_node_t**); - -cc_int32 ccs_credentials_iterate_has_next(cc_credentials_iterate_t *iterate); -cc_int32 ccs_credentials_iterate_next(cc_credentials_iterate_t *iterate, cc_credentials_list_node_t **); - -cc_int32 ccs_context_list_new(cc_context_list_head_t**); -cc_int32 ccs_context_list_append(cc_context_list_head_t *head, cc_server_context_t *data, cc_context_list_node_t**); -cc_int32 ccs_context_list_prepend(cc_context_list_head_t *head, cc_server_context_t *data, cc_context_list_node_t**); -cc_int32 ccs_context_list_remove_element(cc_context_list_head_t* head, cc_context_list_node_t* rem); -cc_int32 ccs_context_list_iterator(cc_context_list_head_t *head, struct cc_context_iterate_t**); -cc_int32 ccs_context_free_iterator(struct cc_context_iterate_t *iterator); -cc_int32 ccs_context_list_destroy(cc_context_list_head_t* head) ; -cc_int32 ccs_context_list_copy(cc_context_list_head_t* head, cc_context_list_head_t**); - -cc_int32 ccs_ccache_list_new(cc_ccache_list_head_t**); -cc_int32 ccs_ccache_list_append(cc_ccache_list_head_t *head, cc_server_ccache_t *data, cc_ccache_list_node_t**); -cc_int32 ccs_ccache_list_prepend(cc_ccache_list_head_t *head, cc_server_ccache_t *data, cc_ccache_list_node_t**); -cc_int32 ccs_ccache_list_remove_element(cc_ccache_list_head_t* head, cc_ccache_list_node_t* rem); -cc_int32 ccs_ccache_list_iterator(cc_ccache_list_head_t *head, struct cc_ccache_iterate_t**); -cc_int32 ccs_ccache_free_iterator(struct cc_ccache_iterate_t *iterator); -cc_int32 ccs_ccache_list_destroy(cc_ccache_list_head_t* head) ; -cc_int32 ccs_ccache_list_copy(cc_ccache_list_head_t* head, cc_ccache_list_head_t**); - - -cc_int32 ccs_credentials_list_new(cc_credentials_list_head_t**); -cc_int32 ccs_credentials_list_append(cc_credentials_list_head_t *head, cc_server_credentials_t *data, cc_credentials_list_node_t**); -cc_int32 ccs_credentials_list_prepend(cc_credentials_list_head_t *head, cc_server_credentials_t *data, cc_credentials_list_node_t**); -cc_int32 ccs_credentials_list_remove_element(cc_credentials_list_head_t* head, cc_credentials_list_node_t* rem); -cc_int32 ccs_credentials_list_iterator(cc_credentials_list_head_t *head, cc_credentials_iterate_t**); -cc_int32 ccs_credentials_free_iterator(cc_credentials_iterate_t* iterator); -cc_int32 ccs_credentials_list_destroy(cc_credentials_list_head_t* head) ; -cc_int32 ccs_credentials_list_copy(cc_credentials_list_head_t* head, cc_credentials_list_head_t**) ; - - -cc_int32 ccs_context_new(int api_version, cc_auth_info_t* auth_info, cc_session_info_t* session_info, cc_server_context_t** ) ; -cc_int32 ccs_context_get_default_ccache_name(cc_server_context_t* ctx, char **); -cc_int32 ccs_context_find_ccache(cc_server_context_t* ctx, char *name, cc_server_ccache_t**); -cc_int32 ccs_context_open_ccache(cc_server_context_t* ctx, char *name, cc_server_ccache_t** ); -cc_int32 ccs_context_create_ccache(cc_server_context_t* ctx, char *name, int creds_version, char *principal, cc_server_ccache_t**); -cc_int32 ccs_context_create_default_ccache(cc_server_context_t* ctx, int creds_version, char *principal, cc_server_ccache_t**); -cc_int32 ccs_context_ccache_iterator(cc_server_context_t* ctx, cc_ccache_iterate_t**); -cc_int32 ccs_context_compare(cc_server_context_t* a, cc_server_context_t* b); -cc_int32 ccs_context_destroy(cc_server_context_t* ctx); -cc_int32 ccs_context_rem_ccache(cc_server_context_t* ctx, cc_server_ccache_t* ccache); - -cc_int32 ccs_ccache_new(char *name, char *principal, int cred_vers, cc_server_ccache_t**); -cc_int32 ccs_ccache_check_version(const cc_server_ccache_t *ccache, const cc_credentials_union* creds, cc_uint32* compat); -cc_int32 ccs_ccache_check_principal(const cc_server_ccache_t *ccache, const cc_credentials_union* creds, cc_uint32* compat); -cc_int32 ccs_ccache_store_creds(cc_server_ccache_t *ccache, const cc_credentials_union* credentials); -cc_int32 ccs_ccache_rem_creds(cc_server_ccache_t *ccache, const cc_credentials_union* credentials); -cc_int32 ccs_ccache_move(cc_server_ccache_t *source, cc_server_ccache_t* destination); -cc_int32 ccs_ccache_get_kdc_time_offset(cc_server_ccache_t* ccache, cc_time64* offset); -cc_int32 ccs_ccache_set_kdc_time_offset(cc_server_ccache_t* ccache, cc_time64 offset); -cc_int32 ccs_ccache_clear_kdc_time_offset(cc_server_ccache_t* ccache); -cc_int32 ccs_ccache_new_iterator(cc_server_ccache_t* ccache, cc_credentials_iterate_t** iterator); -cc_int32 ccs_ccache_get_principal(cc_server_ccache_t* ccache, cc_int32 version, char ** principal); -cc_int32 ccs_ccache_set_principal(cc_server_ccache_t* ccache, cc_int32 version, char * principal); -cc_int32 ccs_ccache_free_principal(char * principal); -cc_int32 ccs_ccache_destroy(cc_server_ccache_t* ccache); -void ccs_ccache_changed(cc_server_ccache_t* ccache); -cc_int32 ccs_ccache_compare(cc_server_ccache_t* ccache1, cc_server_ccache_t* ccache2, cc_uint32 *result); -#endif /*__CCDATASTOREH__*/ diff --git a/src/lib/ccapi/include/generic_lists.h b/src/lib/ccapi/include/generic_lists.h deleted file mode 100644 index 93636da38..000000000 --- a/src/lib/ccapi/include/generic_lists.h +++ /dev/null @@ -1,102 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ -/* - * Prototypes and data structures for datastore. - * - */ - - -#ifndef __CC_GENERIC_LISTS_H_ -#define __CC_GENERIC_LISTS_H_ - -enum cc_list_type { - cc_generic_list = 0, - cc_context_list, - cc_cache_list, - cc_credentials_list -}; - -struct cc_generic_list_node_t { - cc_uint8* data; - cc_uint32 len; - struct cc_generic_list_node_t* next; - struct cc_generic_list_node_t* prev; -}; -typedef struct cc_generic_list_node_t cc_generic_list_node_t; - -struct cc_generic_list_head_t { - enum cc_list_type type; - cc_generic_list_node_t* head; - cc_generic_list_node_t* tail; -}; -typedef struct cc_generic_list_head_t cc_generic_list_head_t; - - -struct cc_generic_iterate_t { - cc_generic_list_node_t* next; -}; -typedef struct cc_generic_iterate_t cc_generic_iterate_t; - -typedef cc_generic_list_head_t cc_context_list_head_t; -typedef cc_generic_list_node_t cc_context_list_node_t; - -typedef cc_generic_list_head_t cc_ccache_list_head_t; -typedef cc_generic_list_node_t cc_ccache_list_node_t; - -typedef cc_generic_list_head_t cc_credentials_list_head_t; -typedef cc_generic_list_node_t cc_credentials_list_node_t; - -cc_int32 cci_generic_iterate_has_next(cc_generic_iterate_t *iterate); -cc_int32 cci_generic_iterate_next(cc_generic_iterate_t *iterate, cc_generic_list_node_t**); - -cc_int32 cci_generic_list_new(cc_generic_list_head_t **); -cc_int32 cci_generic_list_append(cc_generic_list_head_t *head, void *data, cc_uint32 len, cc_generic_list_node_t**); -cc_int32 cci_generic_list_prepend(cc_generic_list_head_t *head, void *data, cc_uint32 len, cc_generic_list_node_t**); -cc_int32 cci_generic_list_remove_element(cc_generic_list_head_t* head, cc_generic_list_node_t* rem); -cc_int32 cci_generic_free_element(cc_generic_list_node_t* node); -cc_int32 cci_generic_list_destroy(cc_generic_list_head_t* head); -cc_int32 cci_generic_list_copy(cc_generic_list_head_t* head, cc_generic_list_head_t**); -cc_int32 cci_generic_list_iterator(cc_generic_list_head_t *head, cc_generic_iterate_t**); -cc_int32 cci_generic_free_iterator(cc_generic_iterate_t* iterator); - -#endif /* __CC_GENERIC_LISTS_H_ */ diff --git a/src/lib/ccapi/include/marshall.h b/src/lib/ccapi/include/marshall.h deleted file mode 100644 index ca6b12e96..000000000 --- a/src/lib/ccapi/include/marshall.h +++ /dev/null @@ -1,112 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -struct cc_flat_data { - cc_uint32 type; - cc_uint32 length; - cc_uint32 data; -}; -typedef struct cc_flat_data cc_flat_data; - -#define FLAT_CREDS_V5_VERSION 1 -struct cci_flat_creds_v5 { - cc_uint32 version; /* version of this structure */ - cc_flat_data client; - cc_flat_data server; - cc_flat_data keyblock; - cc_time64 authtime; - cc_time64 starttime; - cc_time64 endtime; - cc_time64 renew_till; - cc_uint32 is_skey; - cc_uint32 ticket_flags; - cc_uint32 address_count; - cc_uint32 addresses; /* offset to array */ - cc_flat_data ticket; - cc_flat_data second_ticket; - cc_uint32 authdata_count; - cc_uint32 authdata; /* offset to array */ -}; -typedef struct cci_flat_creds_v5 cci_flat_creds_v5_t; - -struct cci_flat_creds_v4 { - cc_uint32 version; - char principal [cc_v4_name_size]; - char principal_instance [cc_v4_instance_size]; - char service [cc_v4_name_size]; - char service_instance [cc_v4_instance_size]; - char realm [cc_v4_realm_size]; - unsigned char session_key [cc_v4_key_size]; - cc_int32 kvno; - cc_int32 string_to_key_type; - cc_time64 issue_date; - cc_int32 lifetime; - cc_uint32 address; - cc_int32 ticket_size; - unsigned char ticket [cc_v4_ticket_size]; -}; -typedef struct cci_flat_creds_v4 cci_flat_creds_v4_t; - -cc_int32 -cci_creds_v4_marshall( cc_credentials_v4_t * creds, - char ** flat, - cc_uint32 * len); - -cc_int32 -cci_creds_v4_unmarshall( char * flat, - cc_uint32 len, - cc_credentials_union * creds); - -cc_int32 -cci_creds_v5_marshall( cc_credentials_v5_t * creds, - char ** pflat, - cc_uint32 * plen); - -cc_int32 -cci_creds_v5_unmarshall( char * flat, - cc_uint32 len, - cc_credentials_union * creds_union); - - - - diff --git a/src/lib/ccapi/include/msg.h b/src/lib/ccapi/include/msg.h deleted file mode 100644 index 1682811c0..000000000 --- a/src/lib/ccapi/include/msg.h +++ /dev/null @@ -1,166 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Verifiable, extensible message format. - * - * Format: - * - * - * - * - * - * - * - * - * - * ... - * - * - * If the header has variable length data it is included in the data blobs. - * The header field has the offset from the beginning of the message of the 1st - * byte of the data and the length of the data. - */ - -#ifndef __CC_MSG_H__ -#define __CC_MSG_H__ - -#include "CredentialsCache.h" -#include "generic_lists.h" - -#if TARGET_OS_MAC -#define htonll(x) OSSwapHostToBigInt64(x) -#define ntohll(x) OSSwapBigToHostInt64(x) -#endif - -struct cc_msg_t { - cc_uint32 type; /*type of message*/ - cc_uint8 *flat; /*flattened representation of this message*/ - cc_uint8 *header; /*fixed length header determined by message type*/ - cc_uint32 flat_len; /*length of flat rep*/ - cc_uint32 header_len; /*length of header*/ - cc_uint32 magic; /*magic number for verification purposes*/ - cc_generic_list_head_t* data_blobs; /*variable length data*/ -}; -typedef struct cc_msg_t cc_msg_t; - -/*Types of messages*/ -enum { - ccmsg_ACK, - ccmsg_NACK, - ccmsg_INIT, - ccmsg_CTX_RELEASE, - ccmsg_CTX_GET_CHANGE_TIME, - ccmsg_CTX_GET_DEFAULT_CCACHE_NAME, - ccmsg_CTX_CCACHE_OPEN, - ccmsg_CTX_CCACHE_OPEN_DEFAULT, - ccmsg_CTX_CCACHE_CREATE, - ccmsg_CTX_CCACHE_CREATE_DEFAULT, - ccmsg_CTX_CCACHE_CREATE_UNIQUE, - ccmsg_CTX_NEW_CCACHE_ITERATOR, - ccmsg_CTX_LOCK, - ccmsg_CTX_UNLOCK, - ccmsg_CTX_COMPARE, - ccmsg_CCACHE_RELEASE, - ccmsg_CCACHE_DESTROY, - ccmsg_CCACHE_SET_DEFAULT, - ccmsg_CCACHE_GET_CREDS_VERSION, - ccmsg_CCACHE_GET_NAME, - ccmsg_CCACHE_GET_PRINCIPAL, - ccmsg_CCACHE_SET_PRINCIPAL, - ccmsg_CCACHE_NEW_CREDS_ITERATOR, - ccmsg_CCACHE_STORE_CREDS, - ccmsg_CCACHE_REM_CREDS, - ccmsg_CCACHE_MOVE, - ccmsg_CCACHE_LOCK, - ccmsg_CCACHE_UNLOCK, - ccmsg_CCACHE_GET_LAST_DEFAULT_TIME, - ccmsg_CCACHE_GET_CHANGE_TIME, - ccmsg_CCACHE_COMPARE, - ccmsg_CCACHE_GET_KDC_TIME_OFFSET, - ccmsg_CCACHE_SET_KDC_TIME_OFFSET, - ccmsg_CCACHE_CLEAR_KDC_TIME_OFFSET, - ccmsg_CCACHE_ITERATOR_RELEASE, - ccmsg_CCACHE_ITERATOR_NEXT, - ccmsg_CCACHE_ITERATOR_CLONE, - ccmsg_CREDS_ITERATOR_RELEASE, - ccmsg_CREDS_ITERATOR_NEXT, - ccmsg_CREDS_ITERATOR_CLONE -}; - -#define CC_MSG_MAX_SIZE 1073741824 /*2^30*/ -#define CC_MSG_MAX_TYPE ccmsg_CREDS_ITERATOR_CLONE -#define BLOB_LEN (sizeof(cc_uint32)) -#define MAGIC_DATA_LEN (sizeof(cc_uint32)) -#define MAGIC_HEAD_LEN (sizeof(cc_uint32)) - -cc_int32 cci_msg_new(cc_uint32 type, cc_msg_t** msgpp); -cc_int32 cci_msg_calc_size(cc_msg_t* msg, cc_uint32 * sizep); -cc_int32 cci_msg_calc_header_size(cc_msg_t* msg, cc_uint32 * sizep); -cc_int32 cci_msg_add_data_blob(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 * sizep); -cc_int32 cci_msg_add_header(cc_msg_t* msg, void *header, cc_uint32 header_len); -cc_int32 cci_msg_calc_blob_pos(cc_msg_t* msg, void *data, cc_uint32 len, cc_uint32 * sizep); -cc_int32 cci_msg_flatten(cc_msg_t* msg, void **); -cc_int32 cci_msg_calc_magic(void *flat, cc_uint32 flat_len, cc_uint32 * sizep); -cc_int32 cci_msg_verify(void* flat, cc_uint32 flat_len, cc_uint32 * sizep); -cc_int32 cci_msg_unflatten(void *flat, cc_uint32 flat_len, cc_msg_t** msgpp); -cc_int32 cci_msg_retrieve_blob(cc_msg_t* msg, cc_uint32 blob_offset, cc_uint32 blob_len, char **); -cc_int32 cci_msg_destroy(cc_msg_t* msg); - -/* Add missing byte swapping macros for 64-bit values */ -#ifdef MAC -#define htonll(x) OSSwapHostToBigInt64(x) -#define ntohll(x) OSSwapBigToHostInt64(x) -#else -#ifdef _WIN32 -#ifdef _M_IX86 -#define htonll(x) _byteswap_uint64(x) -#define ntohll(x) _byteswap_uint64(x) -#else -#define htonll(x) (x) -#define ntohll(x) (x) -#endif -#endif -#endif - -#endif /*__CC_MSG_H__*/ diff --git a/src/lib/ccapi/include/msg_headers.h b/src/lib/ccapi/include/msg_headers.h deleted file mode 100644 index b5a9acd6d..000000000 --- a/src/lib/ccapi/include/msg_headers.h +++ /dev/null @@ -1,418 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Message type specific header structures. - * - */ - -#ifndef __MSG_HEADERS_H__ -#define __MSG_HEADERS_H__ - -#include "CredentialsCache.h" - -/* - * All header structs must have sizes divisible by 4, and - * all individual fields within the structs must also have - * size divisible by 4. This is to ensure correct alignment - * and stop different compilers from inserting padding bytes in - * different places. - * - * All values are stored in network byte order. - */ - -struct ccmsg_ctx_only_t { - cc_handle ctx; -}; -typedef struct ccmsg_ctx_only_t ccmsg_ctx_only_t; - -struct ccmsg_nack_t { - cc_uint32 err_code; /*error code that caused failure*/ -}; -typedef struct ccmsg_nack_t ccmsg_nack_t; - -struct ccmsg_init_t { - cc_uint32 in_version; /*client API version*/ -}; -struct ccmsg_init_resp_t { - cc_handle out_ctx; /*handle on this ctx*/ - cc_uint32 out_version; /*server API version*/ - cc_uint32 vendor_offset; /*offset of vendor blob*/ - cc_uint32 vendor_length; /*length of vendor blob*/ -}; -typedef struct ccmsg_init_t ccmsg_init_t; -typedef struct ccmsg_init_resp_t ccmsg_init_resp_t; - -struct ccmsg_ctx_clone_t { - cc_handle ctx; - cc_uint32 in_version; /*client API version*/ -}; -struct ccmsg_ctx_clone_resp_t { - cc_handle out_ctx; /*handle on this ctx*/ - cc_uint32 out_version; /*server API version*/ - cc_uint32 vendor_offset; /*offset of vendor blob*/ - cc_uint32 vendor_length; /*length of vendor blob*/ -}; -typedef struct ccmsg_ctx_clone_t ccmsg_ctx_clone_t; -typedef struct ccmsg_ctx_clone_resp_t ccmsg_ctx_clone_resp_t; - -struct ccmsg_ctx_release_t { - cc_handle ctx; /*# of ctx to release*/ -}; -typedef struct ccmsg_ctx_release_t ccmsg_ctx_release_t; - -struct ccmsg_ctx_get_change_time_t { - cc_handle ctx; -}; -struct ccmsg_ctx_get_change_time_resp_t { - cc_time64 time; -}; -typedef struct ccmsg_ctx_get_change_time_t ccmsg_ctx_get_change_time_t; -typedef struct ccmsg_ctx_get_change_time_resp_t ccmsg_ctx_get_change_time_resp_t; - -struct ccmsg_ctx_get_default_ccache_name_t { - cc_handle ctx; -}; -struct ccmsg_ctx_get_default_ccache_name_resp_t { - cc_uint32 name_offset; - cc_uint32 name_len; -}; -typedef struct ccmsg_ctx_get_default_ccache_name_t ccmsg_ctx_get_default_ccache_name_t; -typedef struct ccmsg_ctx_get_default_ccache_name_resp_t ccmsg_ctx_get_default_ccache_name_resp_t; - -struct ccmsg_ctx_compare_t { - cc_handle ctx1; - cc_handle ctx2; -}; -struct ccmsg_ctx_compare_resp_t { - cc_uint32 is_equal; -}; -typedef struct ccmsg_ctx_compare_t ccmsg_ctx_compare_t; -typedef struct ccmsg_ctx_compare_resp_t ccmsg_ctx_compare_resp_t; - -struct ccmsg_ctx_new_ccache_iterator_t { - cc_handle ctx; -}; -struct ccmsg_ctx_new_ccache_iterator_resp_t { - cc_handle iterator; -}; -typedef struct ccmsg_ctx_new_ccache_iterator_t ccmsg_ctx_new_ccache_iterator_t; -typedef struct ccmsg_ctx_new_ccache_iterator_resp_t ccmsg_ctx_new_ccache_iterator_resp_t; - -struct ccmsg_ctx_lock_t { - cc_handle ctx; - cc_uint32 lock_type; -}; -typedef struct ccmsg_ctx_lock_t ccmsg_ctx_lock_t; - -struct ccmsg_ctx_unlock_t { - cc_handle ctx; -}; -typedef struct ccmsg_ctx_unlock_t ccmsg_ctx_unlock_t; - -struct ccmsg_ccache_open_t { - cc_handle ctx; - cc_uint32 name_offset; - cc_uint32 name_len; -}; -struct ccmsg_ccache_open_resp_t { - cc_handle ccache; -}; -typedef struct ccmsg_ccache_open_t ccmsg_ccache_open_t; -typedef struct ccmsg_ccache_open_resp_t ccmsg_ccache_open_resp_t; - -struct ccmsg_ccache_open_default_t { - cc_handle ctx; -}; -typedef struct ccmsg_ccache_open_default_t ccmsg_ccache_open_default_t; - -struct ccmsg_ccache_create_t { - cc_handle ctx; - cc_uint32 version; - cc_uint32 principal_offset; - cc_uint32 principal_len; - cc_uint32 name_offset; - cc_uint32 name_len; -}; -struct ccmsg_ccache_create_default_t { - cc_handle ctx; - cc_uint32 version; - cc_uint32 principal_offset; - cc_uint32 principal_len; -}; -struct ccmsg_ccache_create_unique_t { - cc_handle ctx; - cc_uint32 version; - cc_uint32 principal_offset; - cc_uint32 principal_len; -}; - -struct ccmsg_ccache_create_resp_t { - cc_handle ccache; -}; -typedef struct ccmsg_ccache_create_t ccmsg_ccache_create_t; -typedef struct ccmsg_ccache_create_default_t ccmsg_ccache_create_default_t; -typedef struct ccmsg_ccache_create_unique_t ccmsg_ccache_create_unique_t; -typedef struct ccmsg_ccache_create_resp_t ccmsg_ccache_create_resp_t; - -struct ccmsg_ccache_release_t { - cc_handle ctx; - cc_handle ccache; -}; -typedef struct ccmsg_ccache_release_t ccmsg_ccache_release_t; - -struct ccmsg_ccache_destroy_t { - cc_handle ctx; - cc_handle ccache; -}; -typedef struct ccmsg_ccache_destroy_t ccmsg_ccache_destroy_t; - -struct ccmsg_ccache_set_default_t { - cc_handle ctx; - cc_handle ccache; -}; -typedef struct ccmsg_ccache_set_default_t ccmsg_ccache_set_default_t; - -struct ccmsg_ccache_get_creds_version_t { - cc_handle ctx; - cc_handle ccache; -}; -struct ccmsg_ccache_get_creds_version_resp_t { - cc_uint32 version; -}; -typedef struct ccmsg_ccache_get_creds_version_t ccmsg_ccache_get_creds_version_t; -typedef struct ccmsg_ccache_get_creds_version_resp_t ccmsg_ccache_get_creds_version_resp_t; - -struct ccmsg_ccache_get_name_t { - cc_handle ctx; - cc_handle ccache; -}; -struct ccmsg_ccache_get_name_resp_t { - cc_uint32 name_offset; - cc_uint32 name_len; -}; -typedef struct ccmsg_ccache_get_name_t ccmsg_ccache_get_name_t; -typedef struct ccmsg_ccache_get_name_resp_t ccmsg_ccache_get_name_resp_t; - -struct ccmsg_ccache_get_principal_t { - cc_handle ctx; - cc_handle ccache; - cc_uint32 version; -}; -struct ccmsg_ccache_get_principal_resp_t { - cc_uint32 principal_offset; - cc_uint32 principal_len; -}; -typedef struct ccmsg_ccache_get_principal_t ccmsg_ccache_get_principal_t; -typedef struct ccmsg_ccache_get_principal_resp_t ccmsg_ccache_get_principal_resp_t; - -struct ccmsg_ccache_set_principal_t { - cc_handle ctx; - cc_handle ccache; - cc_uint32 version; - cc_uint32 principal_offset; - cc_uint32 principal_len; -}; -typedef struct ccmsg_ccache_set_principal_t ccmsg_ccache_set_principal_t; - -struct ccmsg_ccache_creds_iterator_t { - cc_handle ctx; - cc_handle ccache; -}; -struct ccmsg_ccache_creds_iterator_resp_t { - cc_handle iterator; -}; -typedef struct ccmsg_ccache_creds_iterator_t ccmsg_ccache_creds_iterator_t; -typedef struct ccmsg_ccache_creds_iterator_resp_t ccmsg_ccache_creds_iterator_resp_t; - -struct ccmsg_ccache_store_creds_t { - cc_handle ctx; - cc_handle ccache; - cc_uint32 creds_version; - cc_uint32 creds_offset; - cc_uint32 creds_len; -}; -typedef struct ccmsg_ccache_store_creds_t ccmsg_ccache_store_creds_t; - -struct ccmsg_ccache_rem_creds_t { - cc_handle ctx; - cc_handle ccache; - cc_handle creds; -}; -typedef struct ccmsg_ccache_rem_creds_t ccmsg_ccache_rem_creds_t; - -struct ccmsg_ccache_lock_t { - cc_handle ctx; - cc_handle ccache; - cc_uint32 lock_type; -}; -typedef struct ccmsg_ccache_lock_t ccmsg_ccache_lock_t; - -struct ccmsg_ccache_unlock_t { - cc_handle ctx; - cc_handle ccache; -}; -typedef struct ccmsg_ccache_unlock_t ccmsg_ccache_unlock_t; - -struct ccmsg_ccache_move_t { - cc_handle ctx; - cc_handle ccache_source; - cc_handle ccache_dest; -}; -typedef struct ccmsg_ccache_move_t ccmsg_ccache_move_t; - -struct ccmsg_ccache_get_last_default_time_t { - cc_handle ctx; - cc_handle ccache; -}; -struct ccmsg_ccache_get_last_default_time_resp_t { - cc_time64 last_default_time; -}; -typedef struct ccmsg_ccache_get_last_default_time_t ccmsg_ccache_get_last_default_time_t; -typedef struct ccmsg_ccache_get_last_default_time_resp_t ccmsg_ccache_get_last_default_time_resp_t; - -struct ccmsg_ccache_get_change_time_t { - cc_handle ctx; - cc_handle ccache; -}; -struct ccmsg_ccache_get_change_time_resp_t { - cc_time64 time; -}; -typedef struct ccmsg_ccache_get_change_time_t ccmsg_ccache_get_change_time_t; -typedef struct ccmsg_ccache_get_change_time_resp_t ccmsg_ccache_get_change_time_resp_t; - -struct ccmsg_ccache_compare_t { - cc_handle ctx; - cc_handle ccache1; - cc_handle ccache2; -}; -struct ccmsg_ccache_compare_resp_t { - cc_uint32 is_equal; -}; -typedef struct ccmsg_ccache_compare_t ccmsg_ccache_compare_t; -typedef struct ccmsg_ccache_compare_resp_t ccmsg_ccache_compare_resp_t; - -struct ccmsg_ccache_get_kdc_time_offset_t { - cc_handle ctx; - cc_handle ccache; - cc_int32 creds_version; -}; -struct ccmsg_ccache_get_kdc_time_offset_resp_t { - cc_time64 offset; -}; -typedef struct ccmsg_ccache_get_kdc_time_offset_t ccmsg_ccache_get_kdc_time_offset_t; -typedef struct ccmsg_ccache_get_kdc_time_offset_resp_t ccmsg_ccache_get_kdc_time_offset_resp_t; - -struct ccmsg_ccache_set_kdc_time_offset_t { - cc_handle ctx; - cc_handle ccache; - cc_time64 offset; - cc_int32 creds_version; -}; -typedef struct ccmsg_ccache_set_kdc_time_offset_t ccmsg_ccache_set_kdc_time_offset_t; - -struct ccmsg_ccache_clear_kdc_time_offset_t { - cc_handle ctx; - cc_handle ccache; - cc_int32 creds_version; -}; -typedef struct ccmsg_ccache_clear_kdc_time_offset_t ccmsg_ccache_clear_kdc_time_offset_t; - -struct ccmsg_ccache_iterator_release_t { - cc_handle ctx; - cc_handle iterator; -}; -typedef struct ccmsg_ccache_iterator_release_t ccmsg_ccache_iterator_release_t; - -struct ccmsg_ccache_iterator_next_t { - cc_handle ctx; - cc_handle iterator; -}; -struct ccmsg_ccache_iterator_next_resp_t { - cc_handle ccache; -}; -typedef struct ccmsg_ccache_iterator_next_t ccmsg_ccache_iterator_next_t; -typedef struct ccmsg_ccache_iterator_next_resp_t ccmsg_ccache_iterator_next_resp_t; - -struct ccmsg_ccache_iterator_clone_t { - cc_handle ctx; - cc_handle iterator; -}; -struct ccmsg_ccache_iterator_clone_resp_t { - cc_handle iterator; -}; -typedef struct ccmsg_ccache_iterator_clone_t ccmsg_ccache_iterator_clone_t; -typedef struct ccmsg_ccache_iterator_clone_resp_t ccmsg_ccache_iterator_clone_resp_t; - -struct ccmsg_creds_iterator_release_t { - cc_handle ctx; - cc_handle ccache; - cc_handle iterator; -}; -typedef struct ccmsg_creds_iterator_release_t ccmsg_creds_iterator_release_t; - -struct ccmsg_creds_iterator_next_t { - cc_handle ctx; - cc_handle ccache; - cc_handle iterator; -}; -struct ccmsg_creds_iterator_next_resp_t { - cc_uint32 version; - cc_handle creds_handle; - cc_uint32 creds_offset; - cc_uint32 creds_len; -}; -typedef struct ccmsg_creds_iterator_next_t ccmsg_creds_iterator_next_t; -typedef struct ccmsg_creds_iterator_next_resp_t ccmsg_creds_iterator_next_resp_t; - -struct ccmsg_creds_iterator_clone_t { - cc_handle ctx; - cc_handle iterator; -}; -struct ccmsg_creds_iterator_clone_resp_t { - cc_handle iterator; -}; -typedef struct ccmsg_creds_iterator_clone_t ccmsg_creds_iterator_clone_t; -typedef struct ccmsg_creds_iterator_clone_resp_t ccmsg_creds_iterator_clone_resp_t; - -#endif /*__MSG_HEADERS_H__*/ diff --git a/src/lib/ccapi/include/rpc_auth.h b/src/lib/ccapi/include/rpc_auth.h deleted file mode 100644 index 010a1e2a5..000000000 --- a/src/lib/ccapi/include/rpc_auth.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - - -/* - * Types for RPC auth + session info - * - */ - -#ifndef __RPC_AUTH_H__ -#define __RPC_AUTH_H__ - -#include "CredentialsCache.h" - -/*preliminary*/ -struct cc_auth_info_t { - cc_uint8 *info; - cc_uint32 len; -}; -typedef struct cc_auth_info_t cc_auth_info_t; - -/*preliminary*/ -struct cc_session_info_t { - cc_uint8 *info; - cc_uint32 len; -}; -typedef struct cc_session_info_t cc_session_info_t; - -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/mac/CCAPI.xcodeproj/project.pbxproj b/src/lib/ccapi/mac/CCAPI.xcodeproj/project.pbxproj deleted file mode 100644 index 1de8c569c..000000000 --- a/src/lib/ccapi/mac/CCAPI.xcodeproj/project.pbxproj +++ /dev/null @@ -1,549 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 42; - objects = { - -/* Begin PBXBuildFile section */ - A1E70D480A38B5D5007BE3E3 /* cacheapi.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D000A38B5BB007BE3E3 /* cacheapi.c */; }; - A1E70D490A38B5D5007BE3E3 /* ccache.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D010A38B5BB007BE3E3 /* ccache.c */; }; - A1E70D4A0A38B5D5007BE3E3 /* ccache_iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D030A38B5BB007BE3E3 /* ccache_iterator.c */; }; - A1E70D4B0A38B5D5007BE3E3 /* ccapiv2.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D050A38B5BB007BE3E3 /* ccapiv2.c */; }; - A1E70D4C0A38B5D5007BE3E3 /* ccstring.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D060A38B5BB007BE3E3 /* ccstring.c */; }; - A1E70D4D0A38B5D5007BE3E3 /* context.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D080A38B5BB007BE3E3 /* context.c */; }; - A1E70D4E0A38B5D5007BE3E3 /* credentials.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D0A0A38B5BB007BE3E3 /* credentials.c */; }; - A1E70D4F0A38B5D5007BE3E3 /* credentials_iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D0C0A38B5BB007BE3E3 /* credentials_iterator.c */; }; - A1E70D510A38B60C007BE3E3 /* generic_lists.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */; }; - A1E70D520A38B60C007BE3E3 /* marshall.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D130A38B5BB007BE3E3 /* marshall.c */; }; - A1E70D530A38B60C007BE3E3 /* msg.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D140A38B5BB007BE3E3 /* msg.c */; }; - A1E70D890A38BB47007BE3E3 /* ccs_ccache.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */; }; - A1E70D8A0A38BB47007BE3E3 /* ccs_context.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D290A38B5BB007BE3E3 /* ccs_context.c */; }; - A1E70D8B0A38BB47007BE3E3 /* ccs_lists.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D2A0A38B5BB007BE3E3 /* ccs_lists.c */; }; - A1E70D8C0A38BB47007BE3E3 /* rpc_auth.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D2E0A38B5BB007BE3E3 /* rpc_auth.c */; }; - A1E70D8D0A38BB47007BE3E3 /* serv_ops.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */; }; - A1E70D8E0A38BB4F007BE3E3 /* generic_lists.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D120A38B5BB007BE3E3 /* generic_lists.c */; }; - A1E70D8F0A38BB4F007BE3E3 /* marshall.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D130A38B5BB007BE3E3 /* marshall.c */; }; - A1E70D900A38BB4F007BE3E3 /* msg.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D140A38B5BB007BE3E3 /* msg.c */; }; - A1E70D9B0A38BBE2007BE3E3 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D930A38BB67007BE3E3 /* main.c */; }; - A1E70D9F0A38BCAD007BE3E3 /* mig.defs in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D9E0A38BCAD007BE3E3 /* mig.defs */; }; - A1E70DA00A38BCAD007BE3E3 /* mig.defs in Sources */ = {isa = PBXBuildFile; fileRef = A1E70D9E0A38BCAD007BE3E3 /* mig.defs */; settings = {ATTRIBUTES = (Server, ); }; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - A1E70D000A38B5BB007BE3E3 /* cacheapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cacheapi.c; sourceTree = ""; }; - A1E70D010A38B5BB007BE3E3 /* ccache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccache.c; sourceTree = ""; }; - A1E70D020A38B5BB007BE3E3 /* ccache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccache.h; sourceTree = ""; }; - A1E70D030A38B5BB007BE3E3 /* ccache_iterator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccache_iterator.c; sourceTree = ""; }; - A1E70D040A38B5BB007BE3E3 /* ccache_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccache_iterator.h; sourceTree = ""; }; - A1E70D050A38B5BB007BE3E3 /* ccapiv2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccapiv2.c; sourceTree = ""; }; - A1E70D060A38B5BB007BE3E3 /* ccstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccstring.c; sourceTree = ""; }; - A1E70D070A38B5BB007BE3E3 /* ccstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ccstring.h; sourceTree = ""; }; - A1E70D080A38B5BB007BE3E3 /* context.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = context.c; sourceTree = ""; }; - A1E70D090A38B5BB007BE3E3 /* context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = context.h; sourceTree = ""; }; - A1E70D0A0A38B5BB007BE3E3 /* credentials.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = credentials.c; sourceTree = ""; }; - A1E70D0B0A38B5BB007BE3E3 /* credentials.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = credentials.h; sourceTree = ""; }; - A1E70D0C0A38B5BB007BE3E3 /* credentials_iterator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = credentials_iterator.c; sourceTree = ""; }; - A1E70D0D0A38B5BB007BE3E3 /* credentials_iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = credentials_iterator.h; sourceTree = ""; }; - A1E70D0F0A38B5BB007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = ""; }; - A1E70D120A38B5BB007BE3E3 /* generic_lists.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = generic_lists.c; sourceTree = ""; }; - A1E70D130A38B5BB007BE3E3 /* marshall.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = marshall.c; sourceTree = ""; }; - A1E70D140A38B5BB007BE3E3 /* msg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = msg.c; sourceTree = ""; }; - A1E70D150A38B5BB007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = ""; }; - A1E70D170A38B5BB007BE3E3 /* implementation-notes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "implementation-notes.txt"; sourceTree = ""; }; - A1E70D190A38B5BB007BE3E3 /* cc_rpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cc_rpc.h; sourceTree = ""; }; - A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CredentialsCache.h; sourceTree = ""; }; - A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CredentialsCache2.h; sourceTree = ""; }; - A1E70D1C0A38B5BB007BE3E3 /* datastore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = datastore.h; sourceTree = ""; }; - A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = generic_lists.h; sourceTree = ""; }; - A1E70D1E0A38B5BB007BE3E3 /* marshall.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = marshall.h; sourceTree = ""; }; - A1E70D1F0A38B5BB007BE3E3 /* msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msg.h; sourceTree = ""; }; - A1E70D200A38B5BB007BE3E3 /* msg_headers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msg_headers.h; sourceTree = ""; }; - A1E70D210A38B5BB007BE3E3 /* rpc_auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rpc_auth.h; sourceTree = ""; }; - A1E70D260A38B5BB007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = NTMakefile; path = ../NTMakefile; sourceTree = SOURCE_ROOT; }; - A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccs_ccache.c; sourceTree = ""; }; - A1E70D290A38B5BB007BE3E3 /* ccs_context.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccs_context.c; sourceTree = ""; }; - A1E70D2A0A38B5BB007BE3E3 /* ccs_lists.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ccs_lists.c; sourceTree = ""; }; - A1E70D2C0A38B5BB007BE3E3 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; - A1E70D2D0A38B5BB007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = ""; }; - A1E70D2E0A38B5BB007BE3E3 /* rpc_auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rpc_auth.c; sourceTree = ""; }; - A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = serv_ops.c; sourceTree = ""; }; - A1E70D300A38B5BB007BE3E3 /* serv_ops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = serv_ops.h; sourceTree = ""; }; - A1E70D330A38B5BB007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = ""; }; - A1E70D340A38B5BB007BE3E3 /* t_ccache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = t_ccache.c; sourceTree = ""; }; - A1E70D350A38B5BB007BE3E3 /* t_context.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = t_context.c; sourceTree = ""; }; - A1E70D360A38B5BB007BE3E3 /* t_lists.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = t_lists.c; sourceTree = ""; }; - A1E70D370A38B5BB007BE3E3 /* t_msg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = t_msg.c; sourceTree = ""; }; - A1E70D380A38B5BB007BE3E3 /* t_server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = t_server.c; sourceTree = ""; }; - A1E70D3A0A38B5BB007BE3E3 /* cacheapi.def */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cacheapi.def; sourceTree = ""; }; - A1E70D3B0A38B5BB007BE3E3 /* client.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = client.c; sourceTree = ""; }; - A1E70D3C0A38B5BB007BE3E3 /* dllmain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dllmain.c; sourceTree = ""; }; - A1E70D3D0A38B5BC007BE3E3 /* ntccrpc.acf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ntccrpc.acf; sourceTree = ""; }; - A1E70D3E0A38B5BC007BE3E3 /* ntccrpc.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ntccrpc.idl; sourceTree = ""; }; - A1E70D3F0A38B5BC007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = ""; }; - A1E70D410A38B5BC007BE3E3 /* client.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = client.c; sourceTree = ""; }; - A1E70D420A38B5BC007BE3E3 /* cstest.acf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cstest.acf; sourceTree = ""; }; - A1E70D430A38B5BC007BE3E3 /* cstest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cstest.idl; sourceTree = ""; }; - A1E70D440A38B5BC007BE3E3 /* NTMakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NTMakefile; sourceTree = ""; }; - A1E70D450A38B5BC007BE3E3 /* server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = server.c; sourceTree = ""; }; - A1E70D460A38B5BC007BE3E3 /* server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = server.c; sourceTree = ""; }; - A1E70D5D0A38B796007BE3E3 /* CCacheServer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CCacheServer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - A1E70D910A38BB67007BE3E3 /* CCacheServer.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CCacheServer.plist; sourceTree = ""; }; - A1E70D920A38BB67007BE3E3 /* CCacheServerInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = CCacheServerInfo.plist; sourceTree = ""; }; - A1E70D930A38BB67007BE3E3 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; - A1E70D9E0A38BCAD007BE3E3 /* mig.defs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.mig; path = mig.defs; sourceTree = ""; }; - A1E70DB10A38C01E007BE3E3 /* mig_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mig_types.h; sourceTree = ""; }; - D2AAC046055464E500DB518D /* libCCAPI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCCAPI.a; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - A1E70D5B0A38B796007BE3E3 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D289987405E68DCB004EDB86 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 08FB7794FE84155DC02AAC07 /* CCAPI */ = { - isa = PBXGroup; - children = ( - A1E70CFF0A38B5BB007BE3E3 /* client */, - A1E70D110A38B5BB007BE3E3 /* common */, - A1E70D160A38B5BB007BE3E3 /* doc */, - A1E70D180A38B5BB007BE3E3 /* include */, - A1E70D260A38B5BB007BE3E3 /* NTMakefile */, - A1E70D270A38B5BB007BE3E3 /* server */, - A1E70D320A38B5BB007BE3E3 /* unit-test */, - A1E70D390A38B5BB007BE3E3 /* windows */, - 1AB674ADFE9D54B511CA2CBB /* Products */, - ); - name = CCAPI; - sourceTree = ""; - }; - 1AB674ADFE9D54B511CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - D2AAC046055464E500DB518D /* libCCAPI.a */, - A1E70D5D0A38B796007BE3E3 /* CCacheServer.app */, - ); - name = Products; - sourceTree = ""; - }; - A1E70CFF0A38B5BB007BE3E3 /* client */ = { - isa = PBXGroup; - children = ( - A1E70D000A38B5BB007BE3E3 /* cacheapi.c */, - A1E70D010A38B5BB007BE3E3 /* ccache.c */, - A1E70D020A38B5BB007BE3E3 /* ccache.h */, - A1E70D030A38B5BB007BE3E3 /* ccache_iterator.c */, - A1E70D040A38B5BB007BE3E3 /* ccache_iterator.h */, - A1E70D050A38B5BB007BE3E3 /* ccapiv2.c */, - A1E70D060A38B5BB007BE3E3 /* ccstring.c */, - A1E70D070A38B5BB007BE3E3 /* ccstring.h */, - A1E70D080A38B5BB007BE3E3 /* context.c */, - A1E70D090A38B5BB007BE3E3 /* context.h */, - A1E70D0A0A38B5BB007BE3E3 /* credentials.c */, - A1E70D0B0A38B5BB007BE3E3 /* credentials.h */, - A1E70D0C0A38B5BB007BE3E3 /* credentials_iterator.c */, - A1E70D0D0A38B5BB007BE3E3 /* credentials_iterator.h */, - A1E70D0E0A38B5BB007BE3E3 /* mac */, - A1E70D0F0A38B5BB007BE3E3 /* NTMakefile */, - A1E70D100A38B5BB007BE3E3 /* windows */, - ); - name = client; - path = ../client; - sourceTree = SOURCE_ROOT; - }; - A1E70D0E0A38B5BB007BE3E3 /* mac */ = { - isa = PBXGroup; - children = ( - ); - path = mac; - sourceTree = ""; - }; - A1E70D100A38B5BB007BE3E3 /* windows */ = { - isa = PBXGroup; - children = ( - ); - path = windows; - sourceTree = ""; - }; - A1E70D110A38B5BB007BE3E3 /* common */ = { - isa = PBXGroup; - children = ( - A1E70D7E0A38BAC5007BE3E3 /* mac */, - A1E70D120A38B5BB007BE3E3 /* generic_lists.c */, - A1E70D130A38B5BB007BE3E3 /* marshall.c */, - A1E70D140A38B5BB007BE3E3 /* msg.c */, - A1E70D150A38B5BB007BE3E3 /* NTMakefile */, - ); - name = common; - path = ../common; - sourceTree = SOURCE_ROOT; - }; - A1E70D160A38B5BB007BE3E3 /* doc */ = { - isa = PBXGroup; - children = ( - A1E70D170A38B5BB007BE3E3 /* implementation-notes.txt */, - ); - name = doc; - path = ../doc; - sourceTree = SOURCE_ROOT; - }; - A1E70D180A38B5BB007BE3E3 /* include */ = { - isa = PBXGroup; - children = ( - A1E70D190A38B5BB007BE3E3 /* cc_rpc.h */, - A1E70D1A0A38B5BB007BE3E3 /* CredentialsCache.h */, - A1E70D1B0A38B5BB007BE3E3 /* CredentialsCache2.h */, - A1E70D1C0A38B5BB007BE3E3 /* datastore.h */, - A1E70D1D0A38B5BB007BE3E3 /* generic_lists.h */, - A1E70D1E0A38B5BB007BE3E3 /* marshall.h */, - A1E70D1F0A38B5BB007BE3E3 /* msg.h */, - A1E70D200A38B5BB007BE3E3 /* msg_headers.h */, - A1E70D210A38B5BB007BE3E3 /* rpc_auth.h */, - ); - name = include; - path = ../include; - sourceTree = SOURCE_ROOT; - }; - A1E70D270A38B5BB007BE3E3 /* server */ = { - isa = PBXGroup; - children = ( - A1E70D280A38B5BB007BE3E3 /* ccs_ccache.c */, - A1E70D290A38B5BB007BE3E3 /* ccs_context.c */, - A1E70D2A0A38B5BB007BE3E3 /* ccs_lists.c */, - A1E70D2B0A38B5BB007BE3E3 /* mac */, - A1E70D2C0A38B5BB007BE3E3 /* main.c */, - A1E70D2D0A38B5BB007BE3E3 /* NTMakefile */, - A1E70D2E0A38B5BB007BE3E3 /* rpc_auth.c */, - A1E70D2F0A38B5BB007BE3E3 /* serv_ops.c */, - A1E70D300A38B5BB007BE3E3 /* serv_ops.h */, - A1E70D310A38B5BB007BE3E3 /* windows */, - ); - name = server; - path = ../server; - sourceTree = SOURCE_ROOT; - }; - A1E70D2B0A38B5BB007BE3E3 /* mac */ = { - isa = PBXGroup; - children = ( - A1E70D910A38BB67007BE3E3 /* CCacheServer.plist */, - A1E70D920A38BB67007BE3E3 /* CCacheServerInfo.plist */, - A1E70D930A38BB67007BE3E3 /* main.c */, - ); - path = mac; - sourceTree = ""; - }; - A1E70D310A38B5BB007BE3E3 /* windows */ = { - isa = PBXGroup; - children = ( - ); - path = windows; - sourceTree = ""; - }; - A1E70D320A38B5BB007BE3E3 /* unit-test */ = { - isa = PBXGroup; - children = ( - A1E70D330A38B5BB007BE3E3 /* NTMakefile */, - A1E70D340A38B5BB007BE3E3 /* t_ccache.c */, - A1E70D350A38B5BB007BE3E3 /* t_context.c */, - A1E70D360A38B5BB007BE3E3 /* t_lists.c */, - A1E70D370A38B5BB007BE3E3 /* t_msg.c */, - A1E70D380A38B5BB007BE3E3 /* t_server.c */, - ); - name = "unit-test"; - path = "../unit-test"; - sourceTree = SOURCE_ROOT; - }; - A1E70D390A38B5BB007BE3E3 /* windows */ = { - isa = PBXGroup; - children = ( - A1E70D3A0A38B5BB007BE3E3 /* cacheapi.def */, - A1E70D3B0A38B5BB007BE3E3 /* client.c */, - A1E70D3C0A38B5BB007BE3E3 /* dllmain.c */, - A1E70D3D0A38B5BC007BE3E3 /* ntccrpc.acf */, - A1E70D3E0A38B5BC007BE3E3 /* ntccrpc.idl */, - A1E70D3F0A38B5BC007BE3E3 /* NTMakefile */, - A1E70D400A38B5BC007BE3E3 /* rpcsstest */, - A1E70D460A38B5BC007BE3E3 /* server.c */, - ); - name = windows; - path = ../windows; - sourceTree = SOURCE_ROOT; - }; - A1E70D400A38B5BC007BE3E3 /* rpcsstest */ = { - isa = PBXGroup; - children = ( - A1E70D410A38B5BC007BE3E3 /* client.c */, - A1E70D420A38B5BC007BE3E3 /* cstest.acf */, - A1E70D430A38B5BC007BE3E3 /* cstest.idl */, - A1E70D440A38B5BC007BE3E3 /* NTMakefile */, - A1E70D450A38B5BC007BE3E3 /* server.c */, - ); - path = rpcsstest; - sourceTree = ""; - }; - A1E70D7E0A38BAC5007BE3E3 /* mac */ = { - isa = PBXGroup; - children = ( - A1E70D9E0A38BCAD007BE3E3 /* mig.defs */, - A1E70DB10A38C01E007BE3E3 /* mig_types.h */, - ); - path = mac; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - D2AAC043055464E500DB518D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - A1E70D5C0A38B796007BE3E3 /* CCacheServer */ = { - isa = PBXNativeTarget; - buildConfigurationList = A1E70D600A38B797007BE3E3 /* Build configuration list for PBXNativeTarget "CCacheServer" */; - buildPhases = ( - A1E70D590A38B796007BE3E3 /* Resources */, - A1E70D5A0A38B796007BE3E3 /* Sources */, - A1E70D5B0A38B796007BE3E3 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CCacheServer; - productName = CCacheServer; - productReference = A1E70D5D0A38B796007BE3E3 /* CCacheServer.app */; - productType = "com.apple.product-type.application"; - }; - D2AAC045055464E500DB518D /* CCAPI */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB91EB08733DB70010E9CD /* Build configuration list for PBXNativeTarget "CCAPI" */; - buildPhases = ( - D2AAC043055464E500DB518D /* Headers */, - D2AAC044055464E500DB518D /* Sources */, - D289987405E68DCB004EDB86 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CCAPI; - productName = CCAPI; - productReference = D2AAC046055464E500DB518D /* libCCAPI.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "CCAPI" */; - hasScannedForEncodings = 1; - mainGroup = 08FB7794FE84155DC02AAC07 /* CCAPI */; - projectDirPath = ""; - targets = ( - D2AAC045055464E500DB518D /* CCAPI */, - A1E70D5C0A38B796007BE3E3 /* CCacheServer */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - A1E70D590A38B796007BE3E3 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - A1E70D5A0A38B796007BE3E3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A1E70DA00A38BCAD007BE3E3 /* mig.defs in Sources */, - A1E70D9B0A38BBE2007BE3E3 /* main.c in Sources */, - A1E70D890A38BB47007BE3E3 /* ccs_ccache.c in Sources */, - A1E70D8A0A38BB47007BE3E3 /* ccs_context.c in Sources */, - A1E70D8B0A38BB47007BE3E3 /* ccs_lists.c in Sources */, - A1E70D8C0A38BB47007BE3E3 /* rpc_auth.c in Sources */, - A1E70D8D0A38BB47007BE3E3 /* serv_ops.c in Sources */, - A1E70D8E0A38BB4F007BE3E3 /* generic_lists.c in Sources */, - A1E70D8F0A38BB4F007BE3E3 /* marshall.c in Sources */, - A1E70D900A38BB4F007BE3E3 /* msg.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D2AAC044055464E500DB518D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A1E70D9F0A38BCAD007BE3E3 /* mig.defs in Sources */, - A1E70D480A38B5D5007BE3E3 /* cacheapi.c in Sources */, - A1E70D490A38B5D5007BE3E3 /* ccache.c in Sources */, - A1E70D4A0A38B5D5007BE3E3 /* ccache_iterator.c in Sources */, - A1E70D4B0A38B5D5007BE3E3 /* ccapiv2.c in Sources */, - A1E70D4C0A38B5D5007BE3E3 /* ccstring.c in Sources */, - A1E70D4D0A38B5D5007BE3E3 /* context.c in Sources */, - A1E70D4E0A38B5D5007BE3E3 /* credentials.c in Sources */, - A1E70D4F0A38B5D5007BE3E3 /* credentials_iterator.c in Sources */, - A1E70D510A38B60C007BE3E3 /* generic_lists.c in Sources */, - A1E70D520A38B60C007BE3E3 /* marshall.c in Sources */, - A1E70D530A38B60C007BE3E3 /* msg.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1DEB91EC08733DB70010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - HEADER_SEARCH_PATHS = ( - "$(inherited)", - ../client, - ../client/mac, - ../common, - ../common/mac, - ../common/mac/KerberosIPC, - ); - PRODUCT_NAME = CCAPI; - }; - name = Debug; - }; - 1DEB91ED08733DB70010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - ../client, - ../client/mac, - ../common, - ../common/mac, - ../common/mac/KerberosIPC, - ); - PRODUCT_NAME = CCAPI; - }; - name = Release; - }; - 1DEB91F008733DB70010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - i386, - ppc, - ); - COPY_PHASE_STRIP = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - PREBINDING = NO; - ZERO_LINK = YES; - }; - name = Debug; - }; - 1DEB91F108733DB70010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(NATIVE_ARCH)"; - COPY_PHASE_STRIP = YES; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 3; - PREBINDING = NO; - ZERO_LINK = NO; - }; - name = Release; - }; - A1E70D610A38B797007BE3E3 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - ../server, - ../server/mac, - ../common, - ../common/mac, - ../common/mac/KerberosIPC, - ); - INFOPLIST_FILE = ../server/mac/CCacheServerInfo.plist; - INSTALL_PATH = /System/Library/CoreServices; - PRODUCT_NAME = CCacheServer; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - A1E70D620A38B797007BE3E3 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = ( - "$(inherited)", - ../server, - ../server/mac, - ../common, - ../common/mac, - ../common/mac/KerberosIPC, - ); - INFOPLIST_FILE = ../server/mac/CCacheServerInfo.plist; - INSTALL_PATH = /System/Library/CoreServices; - PRODUCT_NAME = CCacheServer; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB91EB08733DB70010E9CD /* Build configuration list for PBXNativeTarget "CCAPI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB91EC08733DB70010E9CD /* Debug */, - 1DEB91ED08733DB70010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB91EF08733DB70010E9CD /* Build configuration list for PBXProject "CCAPI" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB91F008733DB70010E9CD /* Debug */, - 1DEB91F108733DB70010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - A1E70D600A38B797007BE3E3 /* Build configuration list for PBXNativeTarget "CCacheServer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - A1E70D610A38B797007BE3E3 /* Debug */, - A1E70D620A38B797007BE3E3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; -} diff --git a/src/lib/ccapi/server/NTMakefile b/src/lib/ccapi/server/NTMakefile deleted file mode 100644 index 564097c53..000000000 --- a/src/lib/ccapi/server/NTMakefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for the CCAPI Server Library - -!INCLUDE - -CFLAGS = -I../include $(cdebug) $(cflags) $(cvarsmt) - -CC_SERVER_OBJS = ccs_context.obj ccs_ccache.obj ccs_lists.obj rpc_auth.obj serv_ops.obj - -CC_SERVER_LIB = cc_server.lib - -CC_COMMON_LIB = ../common/cc_common.lib - -$(CC_SERVER_LIB): $(CC_SERVER_OBJS) - $(implib) /NOLOGO /OUT:$@ $** - -all: $(CC_SERVER_LIB) - -clean: - del *.obj *.lib - - \ No newline at end of file diff --git a/src/lib/ccapi/server/ccs_ccache.c b/src/lib/ccapi/server/ccs_ccache.c deleted file mode 100644 index d632ee349..000000000 --- a/src/lib/ccapi/server/ccs_ccache.c +++ /dev/null @@ -1,703 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Manages ccache objects. - * - */ - -#include -#include -#include -#include -#include "CredentialsCache.h" -#include "datastore.h" - -/** - * ccache_new() - * - * Purpose: Allocate and initialize new credentials cache for the specified principal - * and version - * - * Return: ccNoError - success - * ccErrInvalidString - name or principal is NULL - * ccErrBadCredentialsVersion - unsupported creds type - * ccErrBadParam - outCcachepp is NULL - * ccErrNoMem - malloc failed - */ -cc_int32 -ccs_ccache_new( char *name, char *principal, int cred_vers, - cc_server_ccache_t** outCCachepp) -{ - cc_server_ccache_t* ccache; - - if (name == NULL || principal == NULL) - return ccErrInvalidString; - - if (cred_vers != cc_credentials_v4 && cred_vers != cc_credentials_v5 && - cred_vers != cc_credentials_v4_v5) - return ccErrBadCredentialsVersion; - - if (outCCachepp == NULL) - return ccErrBadParam; - - ccache = (cc_server_ccache_t*)malloc(sizeof(cc_server_ccache_t)); - if (ccache == NULL) - return ccErrNoMem; - - ccache->name = name; - ccache->principal_v4 = NULL; - ccache->principal_v5 = NULL; - ccache->changed = time(NULL); - ccache->kdc_offset = 0; - ccache->last_default = 0; - cci_generic_list_new(&ccache->active_iterators); - ccs_credentials_list_new(&ccache->creds); - ccache->is_default = 0; - ccache->kdc_set = 0; - ccache->versions = cred_vers; - ccache->mycontext = NULL; - - ccs_ccache_set_principal(ccache, cred_vers, principal); - *outCCachepp = ccache; - return ccNoError; -} - -/** - * ccs_ccache_check_version() - * - * Purpose: Check to see if the ccache and the creds have compatible versions. - * - * Return: ccNoError and compat = 1 if they are compatible - * ccNoError and compat = 0 if they are not compatible - * - * Errors: ccErrInvalidCCache - ccache is NULL - * ccErrBadParam - either creds or compat are NULL - */ -cc_int32 -ccs_ccache_check_version( const cc_server_ccache_t *ccache, - const cc_credentials_union* creds, - cc_uint32* compat) -{ - if (ccache == NULL) - return ccErrInvalidCCache; - - if (creds == NULL || compat == NULL) - return ccErrBadParam; - - if (ccache->versions == cc_credentials_v4_v5) - *compat = 1; - else if (ccache->versions == creds->version) - *compat = 1; - else - *compat = 0; - - return ccNoError; -} - -/** -ccs_ccache_check_principal() - -Check to see if the client principal from the credentials matches -the principal associated with the cache. - -* Return: ccNoError and compat = 1 if they are compatible -* ccNoError and compat = 0 if they are not compatible -* -* Errors: ccErrInvalidCCache - ccache is NULL -* ccErrBadParam - either creds or compat are NULL -* ccErrBadCredentialVersion - unsupported credential type -*/ -cc_int32 -ccs_ccache_check_principal( const cc_server_ccache_t *ccache, - const cc_credentials_union* creds, - cc_uint32* compat) -{ - if (ccache == NULL) - return ccErrInvalidCCache; - - if (creds == NULL || compat == NULL) - return ccErrBadParam; - - if (creds->version == cc_credentials_v4) { - if (strcmp(creds->credentials.credentials_v4->principal, ccache->principal_v4) == 0) - *compat = 1; - else - *compat = 0; - } else if (creds->version == cc_credentials_v5) { - if (strcmp(creds->credentials.credentials_v5->client, ccache->principal_v5) == 0) - *compat = 1; - else - *compat = 0; - } else { - return ccErrBadCredentialsVersion; - } - return ccNoError; -} - - -/** - * ccs_ccache_store_creds() - * - * Purpose: Stores the provided credentials into the provided cache. Validates the - * ability of the cache to store credentials of the given version and client - * principal. - * - * Return: 0 on success - * -1 on error - * - * Errors: ccErrNoMem - * ccErrBadCredentialsVersion - * ccErrBadInvalidCredentials - * ccErrInvalidCache - * ccErrBadParam - */ -cc_int32 -ccs_ccache_store_creds(cc_server_ccache_t *ccache, const cc_credentials_union* credentials) -{ - cc_server_credentials_t* stored_cred=NULL; - cc_uint32 valid_version, valid_principal; - cc_int32 code; - - if (ccache == NULL) - return ccErrInvalidCCache; - - if (credentials == NULL) - return ccErrBadParam; - - code = ccs_ccache_check_version(ccache, credentials, &valid_version); - if (code != ccNoError) { - /* pass error on to caller */ - goto bad; - } - code = ccs_ccache_check_principal(ccache, credentials, &valid_principal); - if (code != ccNoError) { - /* pass error on to caller */ - goto bad; - } - if (valid_version && valid_principal) { - stored_cred = (cc_server_credentials_t*)malloc(sizeof(cc_server_credentials_t)); - if (stored_cred == NULL) { - code = ccErrNoMem; - goto bad; - } - memcpy(&stored_cred->creds, credentials, sizeof(cc_credentials_union)); - - if (credentials->version == cc_credentials_v4) { - stored_cred->creds.credentials.credentials_v4 = (cc_credentials_v4_t*)malloc(sizeof(cc_credentials_v4_t)); - if (stored_cred->creds.credentials.credentials_v4 == NULL) { - code = ccErrNoMem; - goto bad; - } - - memcpy(stored_cred->creds.credentials.credentials_v4, credentials->credentials.credentials_v4, sizeof(cc_credentials_v4_t)); - } else if (credentials->version == cc_credentials_v5) { - stored_cred->creds.credentials.credentials_v5 = (cc_credentials_v5_t*)malloc(sizeof(cc_credentials_v5_t)); - if (stored_cred->creds.credentials.credentials_v5 == NULL) { - code = ccErrNoMem; - goto bad; - } - - memcpy(stored_cred->creds.credentials.credentials_v5, credentials->credentials.credentials_v5, sizeof(cc_credentials_v5_t)); - } else { - code = ccErrBadCredentialsVersion; - goto bad; - } - - code = ccs_credentials_list_append(ccache->creds, stored_cred, NULL); - if ( code != ccNoError ) { - /* pass error on to caller */ - goto bad; - } - if (ccache->creds->head->data == (cc_uint8 *)stored_cred) - stored_cred->is_default = 1; /*we're first on the list, so we're default*/ - - ccs_ccache_changed(ccache); - return ccNoError; - } else { -#ifdef DEBUG - printf("vers: %d\tprincipal: %d\n", - valid_version, valid_principal); -#endif /* DEBUG */ - code = ccErrInvalidCredentials; - goto bad; - } - - bad: - if (stored_cred) - free(stored_cred); - return code; /* error */ -} - -/** - * ccs_ccache_changed() - * - * Purpose: Updates the last update time for the ccache and its associated context. - * Provides a location from which interested parties should be notified - * of cache updates. - * - * Return: none - * - * Errors: none - */ -void -ccs_ccache_changed(cc_server_ccache_t* ccache) -{ - ccache->changed = time(NULL); - if (ccache->mycontext != NULL) - ccache->mycontext->changed = time(NULL); - - /* XXX - notify registered listeners when implemented */ -} - -/** - * ccs_ccache_rem_creds() - * - * Purpose: Removes the specified credential object from the specified cache if - * it exists - * - * Return: 0 on success (credential is not in the cache) - * -1 on error - * - * Errors: ccErrBadParam, ccErrNoMem (from cc_credentials_list_iterator) - * - * Verify: does the memory associated with stored_cred->creds need to be freed? - * - */ -cc_int32 -ccs_ccache_rem_creds(cc_server_ccache_t *ccache, const cc_credentials_union* credentials) -{ - cc_credentials_iterate_t* credentials_iterator=NULL, *active; - cc_generic_iterate_t* generic_iterator=NULL; - cc_credentials_list_node_t* credentials_node; - cc_generic_list_node_t* generic_node; - cc_server_credentials_t* stored_cred; - cc_int8 changed = 0; - cc_int32 code = 0; - - if (ccache == NULL) - return ccErrInvalidCCache; - - if (credentials == NULL) - return ccErrBadParam; - - code = ccs_credentials_list_iterator(ccache->creds, &credentials_iterator); - if (code != ccNoError) { - /* pass error to caller */ - goto cleanup; - } - - while (ccs_credentials_iterate_has_next(credentials_iterator)) { - code = ccs_credentials_iterate_next(credentials_iterator, &credentials_node); - stored_cred = (cc_server_credentials_t*)credentials_node->data; - if (memcmp(&stored_cred->creds,credentials,sizeof(cc_credentials_union)) == 0) { - /* XXX - do we need to free(stored_cred->creds) ? */ - free(credentials_node->data); - changed = 1; - - /*If any iterator's next points to the deleted node, make it point to the next node*/ - code = cci_generic_list_iterator(ccache->active_iterators, &generic_iterator); - while (cci_generic_iterate_has_next(generic_iterator)) { - code = cci_generic_iterate_next(generic_iterator, &generic_node); - active = (cc_credentials_iterate_t*)generic_node->data; - if (active->next == credentials_node) - active->next = active->next->next; - } - code = cci_generic_free_iterator(generic_iterator); - generic_iterator = NULL; - - if (credentials_node == ccache->creds->head) { /*removing the default, must make next cred default*/ - code = ccs_credentials_list_remove_element(ccache->creds, credentials_node); - - if (ccache->creds->head != NULL) - ((cc_server_credentials_t*)ccache->creds->head->data)->is_default = 1; - } else { - code = ccs_credentials_list_remove_element(ccache->creds, credentials_node); - } - break; - } - } - - cleanup: - if (changed) - ccs_ccache_changed(ccache); - if (credentials_iterator) - ccs_credentials_free_iterator(credentials_iterator); - if (generic_iterator) - cci_generic_free_iterator(generic_iterator); - return code; -} - -/** - * ccs_ccache_move() - * - * Purpose: Destroys the existing contents of the destination and copies - * all credentials from the source to the destination - * - * Return: 0 on success - * -1 on error - * - * Errors: ccBadNoMem - * - */ - -cc_int32 -ccs_ccache_move(cc_server_ccache_t *source, cc_server_ccache_t* destination) -{ - cc_generic_list_node_t* node; - cc_generic_iterate_t* iterator; - cc_credentials_iterate_t* cur; - cc_int32 code; - - if (source == NULL || destination == NULL) - return ccErrBadParam; - - code = ccs_credentials_list_destroy(destination->creds); - if ( code != ccNoError ) - return code; - - code = ccs_credentials_list_copy(source->creds, &destination->creds); - if ( code != ccNoError ) - return code; - - destination->versions = source->versions; - destination->kdc_offset = source->kdc_offset; - destination->last_default = 0; - - /*reset all active iterators to point to the head of the new creds list*/ - if (destination->active_iterators->head != NULL) { - code = cci_generic_list_iterator(destination->active_iterators, &iterator); - while (cci_generic_iterate_has_next(iterator)) { - code = cci_generic_iterate_next(iterator, &node); - cur = (cc_credentials_iterate_t*)node->data; - cur->next = destination->creds->head; - } - code = cci_generic_free_iterator(iterator); - } - - ccs_ccache_changed(destination); - return code; -} - -/** - * ccs_ccache_get_kdc_time_offset() - * - * Purpose: Retrieves the kdc_time_offset from the ccache if set - * - * Return: 0 on success - * -1 on error - * - * Errors: ccErrBadParam, ccErrTimeOffsetNotSet - * - */ -cc_int32 -ccs_ccache_get_kdc_time_offset(cc_server_ccache_t* ccache, cc_time64* offset) -{ - if (ccache == NULL) - return ccErrInvalidCCache; - - if (offset == NULL) - return ccErrBadParam; - - if (!ccache->kdc_set) - return ccErrTimeOffsetNotSet; - - *offset = ccache->kdc_offset; - return ccNoError; -} - -/** - * ccs_ccache_set_kdc_time_offset() - * - * Purpose: Sets the kdc time offset in the designated ccache - * - * Return: 0 on success - * -1 on error - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_ccache_set_kdc_time_offset(cc_server_ccache_t* ccache, cc_time64 offset) -{ - if (ccache == NULL) - return ccErrInvalidCCache; - - ccache->kdc_offset = offset; - ccache->kdc_set = 1; - ccs_ccache_changed(ccache); - - return ccNoError; -} - -/** - * ccs_ccache_clear_kdc_time_offset() - * - * Purpose: Clear the kdc time offset in the designated ccache - * - * Return: 0 on success - * -1 on error - * - * Errors: ccErrBadParam - */ -cc_int32 -ccs_ccache_clear_kdc_time_offset(cc_server_ccache_t* ccache) -{ - if (ccache == NULL) - return ccErrInvalidCCache; - - ccache->kdc_offset = 0; - ccache->kdc_set = 0; - ccs_ccache_changed(ccache); - - return ccNoError; -} - -/** - * ccs_ccache_new_iterator() - * - * Purpose: Retrieve an iterator for the designated cache - * - * Return: 0 on success - * -1 on error - * - * Errors: ccErrBadParam, ccBadNoMem - */ -cc_int32 -ccs_ccache_new_iterator(cc_server_ccache_t* ccache, cc_credentials_iterate_t** iterator) -{ - cc_int32 code; - - if (ccache == NULL) - return ccErrInvalidCCache; - - if (iterator == NULL) - return ccErrBadParam; - - code = ccs_credentials_list_iterator(ccache->creds, iterator); - if (code != ccNoError) - return code; - - code = cci_generic_list_prepend(ccache->active_iterators, *iterator, sizeof(cc_credentials_iterate_t), NULL); - if (code != ccNoError) - return code; - - return ccNoError; -} - -/** - * ccs_ccache_get_principal() - * - * Purpose: Retrieves the client principal associated with the designated cache. - * The value is returned - * Return: - * - * Errors: - */ -cc_int32 -ccs_ccache_get_principal(cc_server_ccache_t* ccache, cc_int32 version, char ** principal) -{ - char *p = NULL; - - switch ( version ) { - case cc_credentials_v4: - p = ccache->principal_v4; - break; - case cc_credentials_v5: - p = ccache->principal_v5; - break; - default: - return ccErrBadCredentialsVersion; - } - - *principal = (char *)malloc(strlen(p)+1); - if ( *principal == NULL ) - return ccErrNoMem; - - strcpy(*principal, p); - return ccNoError; -} - -/** - * Purpose: Releases the memory associated with a ccache principal - * - * Return: - * - * Errors: - * - */ -cc_int32 -ccs_ccache_free_principal(char * principal) -{ - if ( principal == NULL ) - return ccErrBadParam; - - free(principal); - return ccNoError; -} - -/** - * ccache_set_principal() - * - * Purpose: Assigns a principal to the designated ccache and credential version. - * If the api version is 2, the cache is cleared of all existing - * credentials. - * - * Return: 0 on success - * -1 on error - * - * Errors: ccErrNoMem, ccErrBadCredentialsVersion - */ -cc_int32 -ccs_ccache_set_principal( cc_server_ccache_t* ccache, cc_int32 cred_version, - char* principal) -{ - cc_generic_iterate_t* generic_iterator; - cc_generic_list_node_t* generic_node; - cc_ccache_iterate_t* ccache_iterator; - cc_int32 code = ccNoError; - - if (ccache == NULL) - return ccErrInvalidCCache; - - if (principal == NULL) - return ccErrInvalidString; - - switch (cred_version) { - case cc_credentials_v4: - case cc_credentials_v4_v5: - ccache->principal_v4 = (char *)malloc(strlen(principal) + 1); - if (ccache->principal_v4 == NULL) - return ccErrNoMem; - strcpy(ccache->principal_v4, principal); - if (cred_version != cc_credentials_v4_v5) - break; - /* fall-through if we are v4_v5 */ - case cc_credentials_v5: - ccache->principal_v5 = (char *)malloc(strlen(principal) + 1); - if (ccache->principal_v5 == NULL) { - if (cred_version == cc_credentials_v4_v5) { - free(ccache->principal_v4); - ccache->principal_v4 = NULL; - } - return ccErrNoMem; - } - strcpy(ccache->principal_v5, principal); - break; - default: - return ccErrBadCredentialsVersion; - } - - /*For API version 2 clients set_principal implies a flush of all creds*/ - if (ccache->mycontext != NULL && ccache->mycontext->api_version == ccapi_version_2) { - ccs_credentials_list_destroy(ccache->creds); - ccs_credentials_list_new(&ccache->creds); - - /*clean up active_iterators*/ - code = cci_generic_list_iterator(ccache->active_iterators, &generic_iterator); - if (code == ccNoError) { - while (cci_generic_iterate_has_next(generic_iterator)) { - code = cci_generic_iterate_next(generic_iterator, &generic_node); - ccache_iterator = (cc_ccache_iterate_t*)generic_node->data; - ccache_iterator->next = NULL; - } - } - } - - ccs_ccache_changed(ccache); - - return code; -} - -/** - * ccs_ccache_destroy() - * - * Purpose: Destroys an existing ccache - * - * Return: 0 on success - * -1 on errors - * - * Errors: ccErrBadParam - */ -cc_int32 -ccs_ccache_destroy(cc_server_ccache_t* ccache) -{ - cc_int32 code; - - if ( ccache == NULL ) - return ccErrInvalidCCache; - - code = cci_generic_list_destroy(ccache->active_iterators); - code = ccs_credentials_list_destroy(ccache->creds); - - if (ccache->mycontext != NULL) - code = ccs_context_rem_ccache(ccache->mycontext, ccache); - - return code; -} - -/** - * ccs_ccache_compare() - * - * Purpose: Returns a boolean value indicating if two caches are identical - * Implemented as pointer equivalence. - * - * Return: 1 if TRUE - * 0 if FALSE - * - * Errors: No errors - */ -cc_int32 -ccs_ccache_compare(cc_server_ccache_t* ccache1, cc_server_ccache_t* ccache2, cc_uint32 *result) -{ - if ( ccache1 == NULL || ccache2 == NULL ) - return ccErrInvalidCCache; - - if (ccache1 == ccache2) - *result = 1; - else - *result = 0; - - return ccNoError; -} - diff --git a/src/lib/ccapi/server/ccs_context.c b/src/lib/ccapi/server/ccs_context.c deleted file mode 100644 index a16814794..000000000 --- a/src/lib/ccapi/server/ccs_context.c +++ /dev/null @@ -1,325 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Functions to manipulate datastore layer contexts. - * - */ - -#include -#include -#include -#include - -#include "CredentialsCache.h" -#include "datastore.h" - -int cc_myversion = 5; -char cc_vendor[] = "MIT C lang CCache V5"; -char cc_default_ccache_name[] = "krb5cc"; - - -cc_int32 -ccs_context_new( int api_version, cc_auth_info_t* auth_info, - cc_session_info_t* session_info, cc_server_context_t** outContextpp ) -{ - cc_server_context_t* ctx; - - if ( outContextpp == NULL ) - return ccErrBadParam; - - ctx = (cc_server_context_t*)malloc(sizeof(cc_server_context_t)); - if (ctx == NULL) - return ccErrNoMem; - - ccs_ccache_list_new(&ctx->ccaches); - cci_generic_list_new(&ctx->active_iterators); - ctx->api_version = api_version; - ctx->auth_info = auth_info; - ctx->session_info = session_info; - ctx->changed = time(NULL); - - *outContextpp = ctx; - return ccNoError; -} - -cc_int32 -ccs_context_get_default_ccache_name(cc_server_context_t* ctx, char ** outNamepp) -{ - cc_server_ccache_t* default_ccache; - - if (outNamepp == NULL) - return ccErrBadParam; - - if (ctx == NULL) - return ccErrInvalidContext; - - if (ctx->ccaches->head != NULL) { - default_ccache = (cc_server_ccache_t*)ctx->ccaches->head->data; - *outNamepp = default_ccache->name; - } else { - *outNamepp = cc_default_ccache_name; - } - return ccNoError; -} - - -cc_int32 -ccs_context_find_ccache( cc_server_context_t* ctx, char *name, - cc_server_ccache_t** outCcachepp ) -{ - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_list_node_t* ccache_node; - cc_server_ccache_t* ccache; - cc_int32 code; - - if (ctx == NULL) - return ccErrInvalidContext; - - if (name == NULL) - return ccErrInvalidString; - - if (outCcachepp == NULL) - return ccErrBadParam; - - code = ccs_ccache_list_iterator(ctx->ccaches, &ccache_iterator); - while (ccs_ccache_iterate_has_next(ccache_iterator)) { - code = ccs_ccache_iterate_next(ccache_iterator, &ccache_node); - ccache = (cc_server_ccache_t *)ccache_node->data; - if (strcmp(ccache->name, name) == 0) { - free(ccache_iterator); - *outCcachepp = ccache; - return ccNoError; - } - } - free(ccache_iterator); - return ccErrCCacheNotFound; -} - -cc_int32 -ccs_context_open_ccache( cc_server_context_t* ctx, char *name, - cc_server_ccache_t** outCcachepp ) -{ - return ccs_context_find_ccache(ctx, name, outCcachepp); -} - - -cc_int32 -ccs_context_create_ccache( cc_server_context_t* ctx, char *name, int creds_version, - char *principal, cc_server_ccache_t** outCcachepp ) -{ - cc_server_ccache_t* ccache; - cc_int32 code; - - if (ctx == NULL) - return ccErrInvalidContext; - - if (outCcachepp == NULL) - return ccErrBadParam; - - if (name == NULL || principal == NULL) - return ccErrInvalidString; - - if (creds_version != cc_credentials_v4 && creds_version != cc_credentials_v5 && - creds_version != cc_credentials_v4_v5) - return ccErrBadCredentialsVersion; - - code = ccs_context_find_ccache(ctx, name, &ccache); - if (code == ccNoError) { - code = ccs_ccache_set_principal(ccache, creds_version, principal); - } else { - code = ccs_ccache_new(name, principal, creds_version, &ccache); - if (code != ccNoError) - return code; /*let caller deal with error*/ - - ccache->mycontext = ctx; - ctx->changed = time(NULL); - ccs_ccache_list_append(ctx->ccaches, ccache, NULL); - - if (ctx->ccaches->head->data == (cc_uint8 *)ccache) { - ccache->is_default = 1; - } - } - *outCcachepp = ccache; - return ccNoError; -} - -cc_int32 -ccs_context_create_default_ccache( cc_server_context_t* ctx, int creds_version, - char *principal, cc_server_ccache_t** outCcachepp ) -{ - cc_server_ccache_t* ccache, *old_default; - cc_int32 code; - - if (ctx == NULL) - return ccErrInvalidContext; - - if (outCcachepp == NULL) - return ccErrBadParam; - - if (principal == NULL) - return ccErrInvalidString; - - if (creds_version != cc_credentials_v4 && creds_version != cc_credentials_v5 && - creds_version != cc_credentials_v4_v5) - return ccErrBadCredentialsVersion; - - code = ccs_context_find_ccache(ctx, cc_default_ccache_name, &ccache); - if (code == ccNoError) { - ccs_ccache_set_principal(ccache, creds_version, principal); - } else { - code = ccs_ccache_new(cc_default_ccache_name, principal, creds_version, &ccache); - if (code != ccNoError) - return code; /*let caller deal with error*/ - - ccache->mycontext = ctx; - ccache->is_default = 1; - ctx->changed = time(NULL); - - if (ctx->ccaches->head != NULL) { - old_default = (cc_server_ccache_t *)ctx->ccaches->head->data; - old_default->is_default = 0; - old_default->last_default = time(NULL); - } - - ccs_ccache_list_prepend(ctx->ccaches, ccache, NULL); - } - *outCcachepp = ccache; - return ccNoError; -} - -cc_int32 -ccs_context_ccache_iterator(cc_server_context_t* ctx, cc_ccache_iterate_t** iterpp) -{ - cc_ccache_iterate_t* ccache_iterator; - cc_int32 code; - - if (ctx == NULL) - return ccErrInvalidContext; - - if (iterpp == NULL) - return ccErrBadParam; - - code = ccs_ccache_list_iterator(ctx->ccaches, &ccache_iterator); - if (code != ccNoError) - return code; - cci_generic_list_prepend(ctx->active_iterators, ccache_iterator, sizeof(cc_ccache_iterate_t), NULL); - - *iterpp = ccache_iterator; - return ccNoError; -} - -cc_int32 -ccs_context_compare(cc_server_context_t* a, cc_server_context_t* b) -{ - if (a == b) - return 1; - else - return 0; -} - -cc_int32 -ccs_context_destroy(cc_server_context_t* ctx) -{ - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_list_node_t* ccache_node; - cc_server_ccache_t* ccache; - cc_int32 code; - - if (ctx == NULL) - return ccErrInvalidContext; - - cci_generic_list_destroy(ctx->active_iterators); - - code = ccs_ccache_list_iterator(ctx->ccaches, &ccache_iterator); - while (ccs_ccache_iterate_has_next(ccache_iterator)) { - code = ccs_ccache_iterate_next(ccache_iterator, &ccache_node); - ccache = (cc_server_ccache_t *)ccache_node->data; - ccache_node->data = NULL; - ccs_ccache_destroy(ccache); - } - ccs_ccache_list_destroy(ctx->ccaches); - - return ccNoError; -} - -cc_int32 -ccs_context_rem_ccache(cc_server_context_t* ctx, cc_server_ccache_t* ccache) -{ - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_iterate_t* active_ccache_iterator; - cc_ccache_list_node_t* ccache_node; - cc_server_ccache_t* list_ccache; - cc_generic_list_node_t* gen_node; - cc_generic_iterate_t* gen_iterator; - cc_int32 code; - - if (ctx == NULL) - return ccErrInvalidContext; - - if (ccache == NULL) - return ccErrInvalidCCache; - - code = ccs_ccache_list_iterator(ctx->ccaches, &ccache_iterator); - while (ccs_ccache_iterate_has_next(ccache_iterator)) { - code = ccs_ccache_iterate_next(ccache_iterator, &ccache_node); - list_ccache = (cc_server_ccache_t *)ccache_node->data; - - if (list_ccache == ccache) { - code = cci_generic_list_iterator(ctx->active_iterators, &gen_iterator); - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - active_ccache_iterator = (cc_ccache_iterate_t *)gen_node->data; - if (active_ccache_iterator->next == ccache_node) { - active_ccache_iterator->next = active_ccache_iterator->next->next; - } - } - free(gen_iterator); - code = ccs_ccache_list_remove_element(ctx->ccaches, ccache_node); - break; - } - } - free(ccache_iterator); - return ccNoError; -} - diff --git a/src/lib/ccapi/server/ccs_lists.c b/src/lib/ccapi/server/ccs_lists.c deleted file mode 100644 index 5a20c10ab..000000000 --- a/src/lib/ccapi/server/ccs_lists.c +++ /dev/null @@ -1,657 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - - -/* - * Lists implementation. - * - */ - -#include -#include -#include - -#include "CredentialsCache.h" -#include "datastore.h" - -/** - * ccs_context_iterate_has_next() - * - * Purpose: Determine if a context iterator has a next element - * - * Return: 1 if another element exists - * 0 if no additional elements exist - */ -cc_int32 -ccs_context_iterate_has_next(cc_context_iterate_t *iterate) -{ - if ( iterate == NULL ) - return 0; - - return cci_generic_iterate_has_next((cc_generic_iterate_t*)iterate); -} - -/** - * ccs_context_iterate_next() - * - * Purpose: Retrieve the next element from a context iterator and advance - * the iterator - * - * Return: non-NULL, the next element in the iterator - * NULL, the iterator list is empty or iterator is invalid - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_context_iterate_next(cc_context_iterate_t *iterate, cc_context_list_node_t ** nodepp) -{ - if ( iterate == NULL || nodepp == NULL) - return ccErrBadParam; - - return cci_generic_iterate_next((cc_generic_iterate_t*)iterate,(cc_context_list_node_t**)nodepp); -} - -/** - * ccs_ccache_iterate_has_next() - * - * Purpose: Determine if a cache iterator has a next element - * - * Return: 1 if another element exists - * 0 if no additional elements exist - * -1 if error - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_ccache_iterate_has_next(cc_ccache_iterate_t *iterate) -{ - if ( iterate == NULL ) - return 0; - return cci_generic_iterate_has_next((cc_generic_iterate_t*)iterate); -} - -/** - * ccs_ccache_iterate_next() - * - * Purpose: Retrieve the next element from a ccache iterator and advance - * the iterator - * - * Return: non-NULL, the next element in the iterator - * NULL, the iterator list is empty or iterator is invalid - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_ccache_iterate_next(cc_ccache_iterate_t *iterate, cc_ccache_list_node_t ** nodepp) -{ - if ( iterate == NULL || nodepp == NULL) - return ccErrBadParam; - - return cci_generic_iterate_next((cc_generic_iterate_t*)iterate, (cc_ccache_list_node_t**)nodepp); -} - -/** - * ccs_credentials_iterate_has_next() - * - * Purpose: Determine if a credentials iterator has a next element - * - * Return: 1 if another element exists - * 0 if no additional elements exist - * -1 if error - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_credentials_iterate_has_next(cc_credentials_iterate_t *iterate) -{ - if ( iterate == NULL ) - return 0; - - return cci_generic_iterate_has_next((cc_generic_iterate_t*)iterate); -} - -/** - * ccs_credentials_iterate_next() - * - * Purpose: Retrieve the next element from a credentials iterator and advance - * the iterator - * - * Return: non-NULL, the next element in the iterator - * NULL, the iterator list is empty or iterator is invalid - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_credentials_iterate_next(cc_credentials_iterate_t *iterate, cc_credentials_list_node_t** nodepp) -{ - if ( iterate == NULL || nodepp == NULL ) - return ccErrBadParam; - return cci_generic_iterate_next((cc_generic_iterate_t*)iterate, (cc_credentials_list_node_t**)nodepp); -} - -/** - * ccs_context_list_destroy() - * - * Purpose: Deallocate a list and all of its contents - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - */ -cc_int32 -ccs_context_list_destroy(cc_context_list_head_t* head) -{ - return cci_generic_list_destroy((cc_generic_list_head_t*)head); -} - -/** - * ccs_ccache_list_destroy() - * - * Purpose: Deallocate a list and all of its contents - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - */ -cc_int32 -ccs_ccache_list_destroy(cc_ccache_list_head_t* head) -{ - return cci_generic_list_destroy((cc_generic_list_head_t*)head); -} - -/** - * ccs_credentials_list_destroy() - * - * Purpose: Deallocate a list and all of its contents - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - */ -cc_int32 -ccs_credentials_list_destroy(cc_credentials_list_head_t* head) -{ - return cci_generic_list_destroy((cc_generic_list_head_t*)head); -} - -/** - * ccs_context_list_copy() - * - * Purpose: Copy a list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrBadParam, ccErrNoMem - * - */ -cc_int32 -ccs_context_list_copy(cc_context_list_head_t* head, cc_context_list_head_t** headpp ) -{ - return cci_generic_list_copy((cc_generic_list_head_t*)head, (cc_context_list_head_t **)headpp); -} - -/** - * ccs_ccache_list_copy() - * - * Purpose: Copy a list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrBadParam, ccErrNoMem - */ -cc_int32 -ccs_ccache_list_copy(cc_ccache_list_head_t* head, cc_ccache_list_head_t** headpp) -{ - return cci_generic_list_copy((cc_generic_list_head_t*)head, (cc_ccache_list_head_t **)headpp); -} - -/** - * ccs_credentials_list_copy() - * - * Purpose: Copy a list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrBadParam, ccErrNoMem - * - */ -cc_int32 -ccs_credentials_list_copy(cc_credentials_list_head_t* head, cc_credentials_list_head_t** headpp) -{ - return cci_generic_list_copy((cc_generic_list_head_t*)head, (cc_credentials_list_head_t **)headpp); -} - - -/** - * ccs_context_list_new() - * - * Purpose: Allocate a new context list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -ccs_context_list_new(cc_context_list_head_t ** headpp) -{ - cc_context_list_head_t *ret; - - if ( headpp == NULL ) - return ccErrBadParam; - - ret = (cc_context_list_head_t *)malloc(sizeof(cc_context_list_head_t)); - if (ret == NULL) - return ccErrNoMem; - ret->head = ret->tail = NULL; - ret->type = cc_context_list; - *headpp = ret; - return ccNoError; -} - -/** - * ccs_context_list_append() - * - * Purpose: Appends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -ccs_context_list_append(cc_context_list_head_t *head, cc_server_context_t *data, cc_context_list_node_t** nodepp) -{ - return cci_generic_list_append((cc_generic_list_head_t *)head, (void *)data, sizeof(cc_server_context_t), (cc_context_list_node_t**)nodepp); -} - -/** - * ccs_context_list_prepend() - * - * Purpose: Prepends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -ccs_context_list_prepend(cc_context_list_head_t *head, cc_server_context_t *data, cc_context_list_node_t** nodepp ) -{ - return cci_generic_list_prepend((cc_generic_list_head_t *)head, (void *)data, sizeof(cc_server_context_t), (cc_context_list_node_t**)nodepp); -} - -/** - * ccs_context_list_remove_element - * - * Purpose: Remove a node from the list - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - */ -cc_int32 -ccs_context_list_remove_element(cc_context_list_head_t* head, cc_context_list_node_t* rem) -{ - return cci_generic_list_remove_element((cc_generic_list_head_t*)head, (cc_generic_list_node_t*)rem); -} - -/** - * ccs_context_list_iterator() - * - * Purpose: Allocate an iterator for the specified list - * - * Return: non-NULL, an iterator - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -ccs_context_list_iterator(cc_context_list_head_t *head, cc_context_iterate_t** iterpp) -{ - cc_context_iterate_t* iterator; - - if ( head == NULL || iterpp == NULL ) - return ccErrBadParam; - - iterator = (cc_context_iterate_t*)malloc(sizeof(cc_context_iterate_t)); - if (iterator == NULL) - return ccErrNoMem; - - iterator->next = head->head; - *iterpp = iterator; - return ccNoError; -} - -/** - * ccs_context_free_iterator() - * - * Purpose: Deallocate memory associated with an iterator - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_context_free_iterator(cc_context_iterate_t* iterator) -{ - if ( iterator == NULL ) - return ccErrBadParam; - - iterator->next = NULL; - free(iterator); - return ccNoError; -} - -/** - * ccs_ccache_list_new() - * - * Purpose: Allocate a new ccache list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrNoMem - */ -cc_int32 -ccs_ccache_list_new(cc_ccache_list_head_t ** listpp) -{ - cc_ccache_list_head_t *ret; - - if ( listpp == NULL ) - return ccErrBadParam; - - ret = (cc_ccache_list_head_t *)malloc(sizeof(cc_ccache_list_head_t)); - if (ret == NULL) - return ccErrNoMem; - - ret->head = ret->tail = NULL; - *listpp = ret; - return ccNoError; -} - -/** - * ccs_ccache_list_append() - * - * Purpose: Appends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -ccs_ccache_list_append(cc_ccache_list_head_t *head, cc_server_ccache_t *data, cc_ccache_list_node_t** nodepp) -{ - return cci_generic_list_append((cc_generic_list_head_t *)head, (void *)data, sizeof(cc_server_ccache_t), (cc_ccache_list_node_t**)nodepp); -} - -/** - * ccs_ccache_list_prepend() - * - * Purpose: Prepends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -ccs_ccache_list_prepend(cc_ccache_list_head_t *head, cc_server_ccache_t *data, cc_ccache_list_node_t** nodepp) -{ - return cci_generic_list_prepend((cc_generic_list_head_t *)head, (void *)data, sizeof(cc_server_ccache_t), (cc_ccache_list_node_t**)nodepp); -} - -/** - * ccs_ccache_list_remove_element() - * - * Purpose: Remove a node from the list - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_ccache_list_remove_element(cc_ccache_list_head_t* head, cc_ccache_list_node_t* rem) -{ - return cci_generic_list_remove_element((cc_generic_list_head_t*)head, (cc_generic_list_node_t*)rem); -} - -/** - * ccs_ccache_list_iterator() - * - * Purpose: Allocate an iterator for the specified list - * - * Return: non-NULL, an iterator - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -ccs_ccache_list_iterator(cc_ccache_list_head_t *head, cc_ccache_iterate_t** iterpp) -{ - cc_ccache_iterate_t* iterator; - - if ( head == NULL || iterpp == NULL ) - return ccErrBadParam; - - iterator = (cc_ccache_iterate_t*)malloc(sizeof(cc_ccache_iterate_t)); - if (iterator == NULL) - return ccErrNoMem; - - iterator->next = head->head; - *iterpp = iterator; - return ccNoError; -} - -/** - * ccs_ccache_free_iterator() - * - * Purpose: Deallocate memory associated with an iterator - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_ccache_free_iterator(cc_ccache_iterate_t* iterator) -{ - if ( iterator == NULL ) - return ccErrBadParam; - - iterator->next = NULL; - free(iterator); - return ccNoError; -} - -/** - * ccs_credentials_list_new() - * - * Purpose: Allocate a new ccache list - * - * Return: non-NULL, a new list - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -ccs_credentials_list_new(cc_credentials_list_head_t ** list) -{ - if ( list == NULL ) - return ccErrBadParam; - - *list = (cc_credentials_list_head_t *)malloc(sizeof(cc_credentials_list_head_t)); - if (*list == NULL) - return ccErrNoMem; - - (*list)->head = (*list)->tail = NULL; - return ccNoError; -} - -/** - * ccs_credentials_list_append() - * - * Purpose: Appends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -ccs_credentials_list_append(cc_credentials_list_head_t *head, cc_server_credentials_t *data, cc_credentials_list_node_t** nodepp ) -{ - return cci_generic_list_append((cc_generic_list_head_t *)head, (void *)data, sizeof(cc_server_credentials_t), (cc_credentials_list_node_t**)nodepp); -} - -/** - * ccs_credentials_list_prepend() - * - * Purpose: Prepends a new node containing a copy of 'len' bytes of 'data' - * - * Return: non-NULL, a pointer to the newly allocated node - * NULL, failure - * - * Errors: ccErrNoMem,ccErrBadParam - * - */ -cc_int32 -ccs_credentials_list_prepend(cc_credentials_list_head_t *head, cc_server_credentials_t *data, cc_credentials_list_node_t** nodepp) -{ - return cci_generic_list_prepend((cc_generic_list_head_t *)head, (void *)data, sizeof(cc_server_credentials_t), (cc_credentials_list_node_t**)nodepp); -} - -/** - * ccs_credentials_list_remove_element() - * - * Purpose: Remove a node from the list - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_credentials_list_remove_element(cc_credentials_list_head_t* head, cc_credentials_list_node_t* rem) -{ - return cci_generic_list_remove_element((cc_generic_list_head_t*)head, (cc_generic_list_node_t*)rem); -} - -/** - * ccs_credentials_list_iterator() - * - * Purpose: Allocate an iterator for the specified list - * - * Return: non-NULL, an iterator - * NULL, failure - * - * Errors: ccErrNoMem - * - */ -cc_int32 -ccs_credentials_list_iterator(cc_credentials_list_head_t *head, cc_credentials_iterate_t** iterpp) -{ - cc_credentials_iterate_t* iterator; - - if ( head == NULL || iterpp == NULL ) - return ccErrBadParam; - - iterator = (cc_credentials_iterate_t*)malloc(sizeof(cc_credentials_iterate_t)); - if (iterator == NULL) - return ccErrNoMem; - - iterator->next = head->head; - *iterpp = iterator; - return ccNoError; -} - -/** - * ccs_credentials_free_iterator() - * - * Purpose: Deallocate memory associated with an iterator - * - * Return: 0, success - * -1, failure - * - * Errors: ccErrBadParam - * - */ -cc_int32 -ccs_credentials_free_iterator(cc_credentials_iterate_t* iterator) -{ - if ( iterator == NULL ) - return ccErrBadParam; - - iterator->next = NULL; - free(iterator); - return ccNoError; -} - diff --git a/src/lib/ccapi/server/mac/CCacheServer.plist b/src/lib/ccapi/server/mac/CCacheServer.plist deleted file mode 100644 index 987cf7110..000000000 --- a/src/lib/ccapi/server/mac/CCacheServer.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - ServiceName - edu.mit.Kerberos.CCacheServer.ipcService - Command - /System/Library/CoreServices/CCacheServer.app/Contents/MacOS/CCacheServer - OnDemand - - - diff --git a/src/lib/ccapi/server/mac/CCacheServerInfo.plist b/src/lib/ccapi/server/mac/CCacheServerInfo.plist deleted file mode 100644 index e03d5f3ff..000000000 --- a/src/lib/ccapi/server/mac/CCacheServerInfo.plist +++ /dev/null @@ -1,38 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleExecutable - CCacheServer - CFBundleGetInfoString - 4.1 - CFBundleIconFile - - CFBundleIdentifier - edu.mit.Kerberos.CCacheServer - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - Kerberos Credentials Cache Server - CFBundlePackageType - APPL - CFBundleSignature - CCSa - CFBundleVersion - 0.0.1d1 - CFBundleShortVersionString - 5.5 - CFBundleGetInfoString - 5.5 Copyright MIT - KfMDisplayVersion - 5.5 Copyright MIT - KfMDisplayCopyright - Copyright MIT - NSHumanReadableCopyright - 5.5 Copyright MIT - LSBackgroundOnly - 1 - - diff --git a/src/lib/ccapi/server/mac/main.c b/src/lib/ccapi/server/mac/main.c deleted file mode 100644 index 004e36095..000000000 --- a/src/lib/ccapi/server/mac/main.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include "CredentialsCache.h" -#include "msg.h" -#include "migServer.h" -#include "serv_ops.h" - -#include - -int main (int argc, const char *argv[]) -{ - cc_int32 code = 0; - - openlog (argv[0], LOG_CONS | LOG_PID, LOG_AUTH); - syslog (LOG_INFO, "Starting up."); - - if (!code) { - code = ccs_serv_initialize(); - } - - if (!code) { - code = kipc_server_run_server (ccapi_server); - } - - /* cleanup ccs resources */ - ccs_serv_cleanup(); - - syslog (LOG_NOTICE, "Exiting: %s (%d)", kipc_error_string (code), code); - - /* exit */ - return code ? 1 : 0; -} diff --git a/src/lib/ccapi/server/rpc_auth.c b/src/lib/ccapi/server/rpc_auth.c deleted file mode 100644 index a0af4254f..000000000 --- a/src/lib/ccapi/server/rpc_auth.c +++ /dev/null @@ -1,67 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Stubs for rpc_auth. - */ - -#include "CredentialsCache.h" -#include "rpc_auth.h" -#include - -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) -{ - 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; - - return ccNoError; -} - - diff --git a/src/lib/ccapi/server/serv_ops.c b/src/lib/ccapi/server/serv_ops.c deleted file mode 100644 index 52c62f45c..000000000 --- a/src/lib/ccapi/server/serv_ops.c +++ /dev/null @@ -1,1586 +0,0 @@ -/* $Copyright: - * - * Copyright 2004-2006 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -/* - * Server side implementation of each API function. - */ - -#include "CredentialsCache.h" -#include "serv_ops.h" -#include "datastore.h" -#include "rpc_auth.h" -#include "msg_headers.h" -#include "marshall.h" - -#include -#include - -cc_context_list_head_t* AllContexts = NULL; -type_to_op_mapping_t* TypeToOpMapping = NULL; - -extern int cc_err_code; -extern int cc_myversion; -extern char cc_vendor[]; - -cc_int32 -ccs_serv_initialize(void) -{ - cc_int32 code; - - code = ccs_context_list_new(&AllContexts); - if ( code != ccNoError ) - return code; - TypeToOpMapping = (type_to_op_mapping_t*)malloc(sizeof(type_to_op_mapping_t)); - if (TypeToOpMapping == NULL) { - ccs_context_list_destroy(AllContexts); - return ccErrNoMem; - } - -#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 - TypeToOpMapping->operations[ccmsg_INIT] = ccop_INIT; - TypeToOpMapping->operations[ccmsg_CTX_RELEASE] = ccop_CTX_RELEASE; - TypeToOpMapping->operations[ccmsg_CTX_GET_CHANGE_TIME] = ccop_CTX_GET_CHANGE_TIME; - TypeToOpMapping->operations[ccmsg_CTX_GET_DEFAULT_CCACHE_NAME] = ccop_CTX_GET_DEFAULT_CCACHE_NAME; - TypeToOpMapping->operations[ccmsg_CTX_CCACHE_OPEN] = ccop_CTX_CCACHE_OPEN; - TypeToOpMapping->operations[ccmsg_CTX_CCACHE_OPEN_DEFAULT] = ccop_CTX_CCACHE_OPEN_DEFAULT; - TypeToOpMapping->operations[ccmsg_CTX_CCACHE_CREATE] = ccop_CTX_CCACHE_CREATE; - TypeToOpMapping->operations[ccmsg_CTX_CCACHE_CREATE_DEFAULT] = ccop_CTX_CCACHE_CREATE_DEFAULT; - TypeToOpMapping->operations[ccmsg_CTX_CCACHE_CREATE_UNIQUE] = ccop_CTX_CCACHE_CREATE_UNIQUE; - TypeToOpMapping->operations[ccmsg_CTX_NEW_CCACHE_ITERATOR] = ccop_CTX_NEW_CCACHE_ITERATOR; - TypeToOpMapping->operations[ccmsg_CTX_LOCK] = ccop_CTX_LOCK; - TypeToOpMapping->operations[ccmsg_CTX_UNLOCK] = ccop_CTX_UNLOCK; - TypeToOpMapping->operations[ccmsg_CTX_COMPARE] = ccop_CTX_COMPARE; - TypeToOpMapping->operations[ccmsg_CCACHE_RELEASE] = ccop_CCACHE_RELEASE; - TypeToOpMapping->operations[ccmsg_CCACHE_DESTROY] = ccop_CCACHE_DESTROY; - TypeToOpMapping->operations[ccmsg_CCACHE_SET_DEFAULT] = ccop_CCACHE_SET_DEFAULT; - TypeToOpMapping->operations[ccmsg_CCACHE_GET_CREDS_VERSION] = ccop_CCACHE_GET_CREDS_VERSION; - TypeToOpMapping->operations[ccmsg_CCACHE_GET_NAME] = ccop_CCACHE_GET_NAME; - TypeToOpMapping->operations[ccmsg_CCACHE_GET_PRINCIPAL] = ccop_CCACHE_GET_PRINCIPAL; - TypeToOpMapping->operations[ccmsg_CCACHE_SET_PRINCIPAL] = ccop_CCACHE_SET_PRINCIPAL; - TypeToOpMapping->operations[ccmsg_CCACHE_NEW_CREDS_ITERATOR] = ccop_CCACHE_NEW_CREDS_ITERATOR; - TypeToOpMapping->operations[ccmsg_CCACHE_STORE_CREDS] = ccop_CCACHE_STORE_CREDS; - TypeToOpMapping->operations[ccmsg_CCACHE_REM_CREDS] = ccop_CCACHE_REM_CREDS; - TypeToOpMapping->operations[ccmsg_CCACHE_MOVE] = ccop_CCACHE_MOVE; - TypeToOpMapping->operations[ccmsg_CCACHE_LOCK] = ccop_CCACHE_LOCK; - TypeToOpMapping->operations[ccmsg_CCACHE_UNLOCK] = ccop_CCACHE_UNLOCK; - TypeToOpMapping->operations[ccmsg_CCACHE_GET_LAST_DEFAULT_TIME] = ccop_CCACHE_GET_LAST_DEFAULT_TIME; - TypeToOpMapping->operations[ccmsg_CCACHE_GET_CHANGE_TIME] = ccop_CCACHE_GET_CHANGE_TIME; - TypeToOpMapping->operations[ccmsg_CCACHE_COMPARE] = ccop_CCACHE_COMPARE; - TypeToOpMapping->operations[ccmsg_CCACHE_GET_KDC_TIME_OFFSET] = ccop_CCACHE_GET_KDC_TIME_OFFSET; - TypeToOpMapping->operations[ccmsg_CCACHE_SET_KDC_TIME_OFFSET] = ccop_CCACHE_SET_KDC_TIME_OFFSET; - TypeToOpMapping->operations[ccmsg_CCACHE_CLEAR_KDC_TIME_OFFSET] = ccop_CCACHE_CLEAR_KDC_TIME_OFFSET; - TypeToOpMapping->operations[ccmsg_CCACHE_ITERATOR_RELEASE] = ccop_CCACHE_ITERATOR_RELEASE; - TypeToOpMapping->operations[ccmsg_CCACHE_ITERATOR_NEXT] = ccop_CCACHE_ITERATOR_NEXT; - TypeToOpMapping->operations[ccmsg_CCACHE_ITERATOR_CLONE] = ccop_CCACHE_ITERATOR_CLONE; - TypeToOpMapping->operations[ccmsg_CREDS_ITERATOR_RELEASE] = ccop_CREDS_ITERATOR_RELEASE; - TypeToOpMapping->operations[ccmsg_CREDS_ITERATOR_NEXT] = ccop_CREDS_ITERATOR_NEXT; - TypeToOpMapping->operations[ccmsg_CREDS_ITERATOR_CLONE] = ccop_CREDS_ITERATOR_CLONE; - - return ccNoError; -}; - -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; - ccmsg_ctx_only_t* header = (ccmsg_ctx_only_t *)msg->header; - cc_uint32 type; - cc_uint32 header_len; - cc_handle handle; - cc_int32 code; - - if (msg == NULL || msg->header == NULL || auth_info == NULL || session_info == NULL) - return ccErrBadParam; - - if (AllContexts == NULL) { - code = ccs_serv_initialize(); - if ( code != ccNoError ) - return code; - } - - type = msg->type; - if (type == ccmsg_INIT) { - return TypeToOpMapping->operations[type] (NULL, auth_info, session_info, msg, resp_msg); - } else { - header_len = msg->header_len; - if (header_len < sizeof(ccmsg_ctx_only_t)) { - return ccErrBadParam; - } - - handle = ntohll(header->ctx); - code = ccs_serv_find_ctx_by_handle(handle, auth_info, session_info, &ctx); - if (code != ccNoError) { - ccs_serv_make_nack(ccErrContextNotFound, auth_info, session_info, resp_msg); - return code; - } - return TypeToOpMapping->operations[type] (ctx, auth_info, session_info, msg, resp_msg); - } -} - -/*deprecated*/ -cc_int32 -ccs_serv_find_ctx(cc_auth_info_t* auth_info, cc_session_info_t* session_info, - cc_server_context_t** ctxpp) -{ - cc_context_iterate_t* ctx_iterator; - cc_context_list_node_t* ctx_node; - cc_server_context_t* ctx; - cc_int32 code; - cc_uint32 authorized; - - code = ccs_context_list_iterator(AllContexts, &ctx_iterator); - if (code != ccNoError) - return code; - - while (ccs_context_iterate_has_next(ctx_iterator)) { - code = ccs_context_iterate_next(ctx_iterator, &ctx_node); - if (code != ccNoError) { - ccs_context_free_iterator(ctx_iterator); - return code; - } - ctx = (cc_server_context_t *)ctx_node->data; - 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; - } - - if (authorized) { - ccs_context_free_iterator(ctx_iterator); - *ctxpp = ctx; - return ccNoError; - } - } - ccs_context_free_iterator(ctx_iterator); - return ccIteratorEnd; -} - -cc_int32 -ccs_serv_find_ctx_by_handle(cc_handle ctx_num, cc_auth_info_t* auth, cc_session_info_t* session, cc_server_context_t** ctxpp) -{ - cc_server_context_t* input_ctx = (cc_server_context_t*)ctx_num; - cc_context_iterate_t* ctx_iterator; - cc_context_list_node_t* ctx_node; - cc_server_context_t* ctx; - cc_uint32 authorized; - cc_int32 code; - - code = ccs_context_list_iterator(AllContexts, &ctx_iterator); - if (code != ccNoError) - return code; - - while (ccs_context_iterate_has_next(ctx_iterator)) { - code = ccs_context_iterate_next(ctx_iterator, &ctx_node); - ctx = (cc_server_context_t *)ctx_node->data; - if (code != ccNoError) { - ccs_context_free_iterator(ctx_iterator); - return code; - } - - 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; - } - - if (ctx == input_ctx && authorized) { - ccs_context_free_iterator(ctx_iterator); - *ctxpp = ctx; - return ccNoError; - } - } - ccs_context_free_iterator(ctx_iterator); - return ccIteratorEnd; -} - -cc_int32 -ccs_serv_find_ccache_by_handle(cc_server_context_t* ctx, cc_handle ccache, cc_server_ccache_t** ccachepp ) -{ - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_list_node_t* ccache_node; - cc_server_ccache_t* stored_ccache; - cc_server_ccache_t* target_ccache = (cc_server_ccache_t*)ccache; - cc_int32 code; - - code = ccs_ccache_list_iterator(ctx->ccaches, &ccache_iterator); - if (code != ccNoError) - return code; - - while (ccs_ccache_iterate_has_next(ccache_iterator)) { - code = ccs_ccache_iterate_next(ccache_iterator, &ccache_node); - if (code != ccNoError) { - ccs_ccache_free_iterator(ccache_iterator); - return code; - } - - stored_ccache = (cc_server_ccache_t *)ccache_node->data; - - if (stored_ccache == target_ccache) { - ccs_ccache_free_iterator(ccache_iterator); - *ccachepp = stored_ccache; - return ccNoError; - } - } - ccs_ccache_free_iterator(ccache_iterator); - return ccIteratorEnd; -} - -cc_int32 -ccs_serv_find_ccache_iterator_by_handle(cc_server_context_t* ctx, cc_handle iterator, cc_generic_list_node_t** nodepp ) -{ - cc_generic_iterate_t* gen_iterator; - cc_generic_list_node_t* gen_node; - cc_ccache_iterate_t* stored_iterator; - cc_ccache_iterate_t* target_iterator = (cc_ccache_iterate_t*)iterator; - cc_int32 code; - - code = cci_generic_list_iterator(ctx->active_iterators, &gen_iterator); - if (code != ccNoError) - return code; - - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - if (code != ccNoError) { - cci_generic_free_iterator(gen_iterator); - return code; - } - - stored_iterator = (cc_ccache_iterate_t *)gen_node->data; - if (stored_iterator == target_iterator) { - cci_generic_free_iterator(gen_iterator); - *nodepp = gen_node; - return ccNoError; - } - } - cci_generic_free_iterator(gen_iterator); - return ccIteratorEnd; -} - -cc_int32 -ccs_serv_find_creds_iterator_by_handle(cc_server_ccache_t* ccache, cc_handle iterator, cc_generic_list_node_t** nodepp) -{ - cc_generic_iterate_t* gen_iterator; - cc_generic_list_node_t* gen_node; - cc_ccache_iterate_t* stored_iterator; - cc_ccache_iterate_t* target_iterator = (cc_ccache_iterate_t*)iterator; - cc_int32 code; - - code = cci_generic_list_iterator(ccache->active_iterators, &gen_iterator); - if (code != ccNoError) - return code; - - while (cci_generic_iterate_has_next(gen_iterator)) { - code = cci_generic_iterate_next(gen_iterator, &gen_node); - if (code != ccNoError) { - cci_generic_free_iterator(gen_iterator); - return code; - } - - stored_iterator = (cc_ccache_iterate_t *)gen_node->data; - if (stored_iterator == target_iterator) { - cci_generic_free_iterator(gen_iterator); - *nodepp = gen_node; - return ccNoError; - } - } - cci_generic_free_iterator(gen_iterator); - return ccIteratorEnd; -} - -cc_int32 -ccs_serv_make_nack(cc_int32 err_code, cc_auth_info_t* auth_info, cc_session_info_t* session_info, cc_msg_t** resp_msg) -{ - ccmsg_nack_t* nack_header; - cc_int32 code; - - code = cci_msg_new(ccmsg_NACK, resp_msg); - if (code != ccNoError) - return code; - - nack_header = (ccmsg_nack_t*)malloc(sizeof(ccmsg_nack_t)); - if (nack_header == NULL) { - cci_msg_destroy(*resp_msg); - *resp_msg = 0; - return ccErrNoMem; - } - - nack_header->err_code = htonl(err_code); - code = cci_msg_add_header(*resp_msg, nack_header, sizeof(ccmsg_nack_t)); - if (code != ccNoError) { - cci_msg_destroy(*resp_msg); - *resp_msg = 0; - return code; - } - - return ccNoError; -} - -cc_int32 -ccs_serv_make_ack(void * header, cc_int32 header_len, cc_auth_info_t* auth_info, cc_session_info_t* session_info, cc_msg_t** resp_msg) -{ - cc_int32 code; - - code = cci_msg_new(ccmsg_ACK, resp_msg); - if (code != ccNoError) - return code; - - if (header != NULL) { - code = cci_msg_add_header(*resp_msg, header, header_len); - if (code != ccNoError) { - cci_msg_destroy(*resp_msg); - resp_msg = 0; - return code; - } - } - return ccNoError; -} - -cc_int32 -ccop_INIT( cc_server_context_t* ctx, /* not used */ - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_uint32 blob_pos; - cc_server_context_t *new_ctx; - ccmsg_init_resp_t *resp_header; - ccmsg_init_t *header = (ccmsg_init_t *)msg->header; - cc_context_list_node_t* ctx_node; - cc_uint32 header_len, in_version; - - cc_int32 code; - - *resp_msg = 0; - - header_len = msg->header_len; - if (ctx != NULL || header_len != sizeof(ccmsg_init_t)) { - return ccErrBadParam; - } - - in_version = ntohl(header->in_version); - code = ccs_context_new(in_version, auth_info, session_info, &new_ctx); - if (code != ccNoError) { - return code; - } - - code = ccs_context_list_append(AllContexts, new_ctx, &ctx_node); - if (code != ccNoError) { - ccs_context_destroy(new_ctx); - return code; - } - - resp_header = (ccmsg_init_resp_t*)malloc(sizeof(ccmsg_init_resp_t)); - if (resp_header == NULL) { - ccs_context_destroy(new_ctx); - return ccErrNoMem; - } - - code = cci_msg_new(ccmsg_ACK, resp_msg); - if (code != ccNoError) { - free(resp_header); - ccs_context_destroy(new_ctx); - return code; - } - code = cci_msg_add_data_blob(*resp_msg, cc_vendor, strlen(cc_vendor) + 1, &blob_pos); - if (code != ccNoError) { - free(resp_header); - ccs_context_destroy(new_ctx); - cci_msg_destroy(*resp_msg); - *resp_msg = 0; - return code; - } - - resp_header->out_ctx = htonll((cc_handle) new_ctx); - resp_header->out_version = htonl(cc_myversion); - resp_header->vendor_offset = htonl(blob_pos); - resp_header->vendor_length = htonl(strlen(cc_vendor) + 1); - code = cci_msg_add_header(*resp_msg, resp_header, sizeof(ccmsg_init_resp_t)); - if (code != ccNoError) { - free(resp_header); - ccs_context_destroy(new_ctx); - cci_msg_destroy(*resp_msg); - *resp_msg = 0; - return code; - } - - return ccNoError; -} - -cc_int32 -ccop_CTX_RELEASE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ctx_release_t* header = (ccmsg_ctx_release_t *)msg->header; - cc_uint32 header_len = msg->header_len; - cc_handle handle = ntohll(header->ctx); - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ctx_release_t)) { - return ccErrBadParam; - } - - code = ccs_context_destroy((cc_server_context_t *)handle); - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_GET_CHANGE_TIME( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ctx_get_change_time_resp_t* resp_header; - ccmsg_ctx_get_change_time_t *header = (ccmsg_ctx_get_change_time_t *)msg->header; - cc_uint32 header_len = msg->header_len; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ctx_get_change_time_t)) { - return ccErrBadParam; - } - - resp_header = (ccmsg_ctx_get_change_time_resp_t*)malloc(sizeof(ccmsg_ctx_get_change_time_resp_t)); - if (resp_header == NULL) { - return ccErrNoMem; - } - - resp_header->time = htonll(ctx->changed); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ctx_get_change_time_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_GET_DEFAULT_CCACHE_NAME( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - char * name; - ccmsg_ctx_get_default_ccache_name_resp_t* resp_header; - ccmsg_ctx_get_default_ccache_name_t* header = (ccmsg_ctx_get_default_ccache_name_t *)msg->header; - cc_uint32 header_len = htonl(msg->header_len); - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ctx_get_default_ccache_name_t)) { - return ccErrBadParam; - } - - code = ccs_context_get_default_ccache_name(ctx, &name); - if (code != ccNoError) - return code; - - code = cci_msg_new(ccmsg_ACK, resp_msg); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_ctx_get_default_ccache_name_resp_t*)malloc(sizeof(ccmsg_ctx_get_default_ccache_name_resp_t)); - if (resp_header == NULL) { - cci_msg_destroy(*resp_msg); - *resp_msg = 0; - return ccErrNoMem; - } - - code = cci_msg_add_data_blob(*resp_msg, name, strlen(name) + 1, &resp_header->name_offset); - resp_header->name_len = htonl(strlen(name) + 1); - return ccNoError; -} - -cc_int32 -ccop_CTX_COMPARE(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_server_context_t *ctx2; - ccmsg_ctx_compare_resp_t* resp_header; - ccmsg_ctx_compare_t* header = (ccmsg_ctx_compare_t *)msg->header; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ctx_compare_t)) - return ccErrBadParam; - - code = ccs_serv_find_ctx_by_handle(header->ctx2, auth_info, session_info, &ctx2); - - resp_header = (ccmsg_ctx_compare_resp_t*)malloc(sizeof(ccmsg_ctx_compare_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->is_equal = htonl(ccs_context_compare(ctx, ctx2)); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ctx_compare_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_NEW_CCACHE_ITERATOR(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_ccache_iterate_t* ccache_iterator; - ccmsg_ctx_new_ccache_iterator_resp_t* resp_header; - ccmsg_ctx_new_ccache_iterator_t* header = (ccmsg_ctx_new_ccache_iterator_t*)msg->header; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ctx_new_ccache_iterator_t)) - return ccErrBadParam; - - code = ccs_context_ccache_iterator(ctx, &ccache_iterator); - - resp_header = (ccmsg_ctx_new_ccache_iterator_resp_t*)malloc(sizeof(ccmsg_ctx_new_ccache_iterator_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->iterator = htonll((cc_handle) ccache_iterator); - - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ctx_new_ccache_iterator_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_LOCK( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_UNLOCK( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_CLONE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_CCACHE_OPEN(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - char *name; - cc_server_ccache_t* ccache; - ccmsg_ccache_open_resp_t* resp_header; - ccmsg_ccache_open_t* header = (ccmsg_ccache_open_t*)msg->header; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_open_t)) - return ccErrBadParam; - - code = cci_msg_retrieve_blob(msg, ntohl(header->name_offset), ntohl(header->name_len), &name); - code = ccs_context_find_ccache(ctx, name, &ccache); - - free(name); - - if (ccache == NULL) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - resp_header = (ccmsg_ccache_open_resp_t*)malloc(sizeof(ccmsg_ccache_open_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->ccache = htonll((cc_handle) ccache); - ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_open_resp_t), auth_info, session_info, resp_msg); - return ccNoError; -} - -cc_int32 -ccop_CTX_CCACHE_OPEN_DEFAULT(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_open_default_t* header = (ccmsg_ccache_open_default_t*)msg->header; - ccmsg_ccache_open_resp_t* resp_header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_open_default_t)) - return ccErrBadParam; - - if (ctx->ccaches->head->data == NULL) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - ccache = (cc_server_ccache_t*) ctx->ccaches->head->data; - - resp_header = (ccmsg_ccache_open_resp_t*)malloc(sizeof(ccmsg_ccache_open_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->ccache = htonll((cc_handle) ccache); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_open_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_CCACHE_CREATE(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_create_resp_t* resp_header; - ccmsg_ccache_create_t* header = (ccmsg_ccache_create_t*)msg->header; - cc_server_ccache_t* ccache; - char* principal; - char* name; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_create_t)) - return ccErrBadParam; - - code = cci_msg_retrieve_blob(msg, ntohl(header->principal_offset), ntohl(header->principal_len), &principal); - if (code != ccNoError) - return code; - principal[ntohl(header->principal_len)] = '\0'; /*Ensure null termination*/ - - code = cci_msg_retrieve_blob(msg, ntohl(header->name_offset), ntohl(header->name_len), &name); - if (code != ccNoError) - return code; - name[ntohl(header->name_len)] = '\0'; /*Ensure null termination*/ - - code = ccs_context_create_ccache(ctx, name, ntohl(header->version), principal, &ccache); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_ccache_create_resp_t*)malloc(sizeof(ccmsg_ccache_create_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->ccache = htonll((cc_handle) ccache); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_create_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_CCACHE_CREATE_DEFAULT( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_create_resp_t* resp_header; - ccmsg_ccache_create_t* header = (ccmsg_ccache_create_t*)msg->header; - cc_server_ccache_t* ccache; - char* principal; - char* name; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_create_t)) - return ccErrBadParam; - - code = cci_msg_retrieve_blob(msg, ntohl(header->principal_offset), ntohl(header->principal_len), &principal); - if (code != ccNoError) - return code; - principal[ntohl(header->principal_len)] = '\0'; /*Ensure null termination*/ - - code = ccs_context_get_default_ccache_name(ctx, &name); - if (code != ccNoError) - return code; - - code = ccs_context_create_ccache(ctx, name, ntohl(header->version), principal, &ccache); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_ccache_create_resp_t*)malloc(sizeof(ccmsg_ccache_create_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->ccache = htonll((cc_handle) ccache); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_create_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CTX_CCACHE_CREATE_UNIQUE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_create_resp_t* resp_header; - ccmsg_ccache_create_t* header = (ccmsg_ccache_create_t*)msg->header; - cc_server_ccache_t* ccache; - char* principal; - char* name; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_create_t)) - return ccErrBadParam; - - code = cci_msg_retrieve_blob(msg, ntohl(header->principal_offset), htonl(header->principal_len), &principal); - if (code != ccNoError) - return code; - principal[ntohl(header->principal_len)] = '\0'; /*Ensure null termination*/ - - // TODO: Generate a unique ccache name - name = "unique"; - - code = ccs_context_create_ccache(ctx, name, ntohl(header->version), principal, &ccache); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_ccache_create_resp_t*)malloc(sizeof(ccmsg_ccache_create_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->ccache = htonll((cc_handle) ccache); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_create_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_RELEASE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO: This is probably wrong. - return ccop_CCACHE_DESTROY(ctx, auth_info, session_info, msg, resp_msg); -} - -cc_int32 -ccop_CCACHE_DESTROY( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_release_t* header = (ccmsg_ccache_release_t*)msg->header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_release_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - ccs_ccache_destroy(ccache); - - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_SET_DEFAULT(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_server_ccache_t* ccache, *stored_ccache, *old_default; - ccmsg_ccache_set_default_t* header = (ccmsg_ccache_set_default_t*)msg->header; - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_list_node_t* ccache_node; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_set_default_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - if (ccache == (cc_server_ccache_t*)ctx->ccaches->head->data) /*already default*/ - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); - - old_default = (cc_server_ccache_t*)ctx->ccaches->head->data; - old_default->last_default = time(NULL); - - code = ccs_ccache_list_iterator(ctx->ccaches, &ccache_iterator); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - while (ccs_ccache_iterate_has_next(ccache_iterator)) { - code = ccs_ccache_iterate_next(ccache_iterator,&ccache_node); - stored_ccache = (cc_server_ccache_t*)ccache_node->data; - - if (stored_ccache == ccache) { - ccache_node->data = NULL; /*don't want list removal code free()ing ccache*/ - ccs_ccache_list_remove_element(ctx->ccaches, ccache_node); - ccs_ccache_list_prepend(ctx->ccaches, ccache, NULL); - break; - } - } - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_GET_CREDS_VERSION(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_get_creds_version_t* header = (ccmsg_ccache_get_creds_version_t*)msg->header; - ccmsg_ccache_get_creds_version_resp_t* resp_header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_get_creds_version_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - resp_header = (ccmsg_ccache_get_creds_version_resp_t*)malloc(sizeof(ccmsg_ccache_get_creds_version_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->version = htonl(ccache->versions); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_get_creds_version_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_GET_NAME(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_get_name_t* header = (ccmsg_ccache_get_name_t*)msg->header; - ccmsg_ccache_get_name_resp_t* resp_header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - cc_uint32 name_offset; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_get_name_resp_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (ccache == NULL) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - resp_header = (ccmsg_ccache_get_name_resp_t*)malloc(sizeof(ccmsg_ccache_get_name_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - code = cci_msg_new(ccmsg_ACK, resp_msg); - if (code != ccNoError) - return code; - - code = cci_msg_add_data_blob(*resp_msg, ccache->name, strlen(ccache->name) + 1, &name_offset); - if (code == 0) { - resp_header->name_len = htonl(strlen(ccache->name) + 1); - resp_header->name_offset = htonl(name_offset); - } - cci_msg_add_header(*resp_msg, resp_header, sizeof(ccmsg_ccache_get_name_resp_t)); - - return ccNoError; -} - -cc_int32 -ccop_CCACHE_GET_PRINCIPAL(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_get_principal_t* header = (ccmsg_ccache_get_principal_t*)msg->header; - ccmsg_ccache_get_principal_resp_t* resp_header; - cc_server_ccache_t* ccache; - char * principal; - cc_uint32 header_len = msg->header_len; - cc_uint32 principal_offset; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_get_principal_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = ccs_ccache_get_principal(ccache, ntohl(header->version), &principal); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - code = cci_msg_new(ccmsg_ACK, resp_msg); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_ccache_get_principal_resp_t*)malloc(sizeof(ccmsg_ccache_get_principal_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - code = cci_msg_add_data_blob(*resp_msg, principal, strlen(principal) + 1, &principal_offset); - if (code == 0) { - resp_header->principal_len = htonl(strlen(principal) + 1); - resp_header->principal_offset = htonl(principal_offset); - } - cci_msg_add_header(*resp_msg, resp_header, sizeof(ccmsg_ccache_get_principal_resp_t)); - - return ccNoError; -} - -cc_int32 -ccop_CCACHE_SET_PRINCIPAL(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_set_principal_t* header = (ccmsg_ccache_set_principal_t*)msg->header; - cc_server_ccache_t* ccache; - char *principal; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_set_principal_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = cci_msg_retrieve_blob(msg, ntohl(header->principal_offset), ntohl(header->principal_len), &principal); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrBadParam, auth_info, session_info, resp_msg); - - code = ccs_ccache_set_principal(ccache, ntohl(header->version), principal); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_NEW_CREDS_ITERATOR( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_server_ccache_t* ccache; - cc_credentials_iterate_t* creds_iterator; - ccmsg_ccache_creds_iterator_t* header = (ccmsg_ccache_creds_iterator_t*)msg->header; - ccmsg_ccache_creds_iterator_resp_t* resp_header; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_creds_iterator_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = ccs_ccache_new_iterator(ccache, &creds_iterator); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_ccache_creds_iterator_resp_t*)malloc(sizeof(ccmsg_ccache_creds_iterator_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->iterator = htonll((cc_handle) creds_iterator); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_creds_iterator_resp_t), auth_info, session_info, resp_msg); -} - - -static cc_int32 -ccs_credentials_union_release( cc_credentials_union * creds ) -{ - int i; - - switch (creds->version) { - case cc_credentials_v4: - free(creds->credentials.credentials_v4); - break; - case cc_credentials_v5: - if ( creds->credentials.credentials_v5->client ) - free(creds->credentials.credentials_v5->client); - if ( creds->credentials.credentials_v5->server ) - free(creds->credentials.credentials_v5->server ); - if ( creds->credentials.credentials_v5->keyblock.data ) - free(creds->credentials.credentials_v5->keyblock.data); - if ( creds->credentials.credentials_v5->ticket.data ) - free(creds->credentials.credentials_v5->ticket.data); - if ( creds->credentials.credentials_v5->second_ticket.data ) - free(creds->credentials.credentials_v5->second_ticket.data); - if ( creds->credentials.credentials_v5->addresses ) { - for ( i=0; creds->credentials.credentials_v5->addresses[i]; i++) { - if (creds->credentials.credentials_v5->addresses[i]->data) - free(creds->credentials.credentials_v5->addresses[i]->data); - } - free(creds->credentials.credentials_v5->addresses); - } - if ( creds->credentials.credentials_v5->authdata ) { - for ( i=0; creds->credentials.credentials_v5->authdata[i]; i++) { - if ( creds->credentials.credentials_v5->authdata[i]->data ) - free(creds->credentials.credentials_v5->authdata[i]->data); - } - free(creds->credentials.credentials_v5->authdata); - } - break; - default: - return ccErrBadCredentialsVersion; - } - return ccNoError; -} - -cc_int32 -ccop_CCACHE_STORE_CREDS(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_store_creds_t* header = (ccmsg_ccache_store_creds_t*)msg->header; - cc_server_ccache_t* ccache; - char *flat_creds; - cc_credentials_union *creds; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_store_creds_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = cci_msg_retrieve_blob(msg, ntohl(header->creds_offset), ntohl(header->creds_len), &flat_creds); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - creds = (cc_credentials_union *)malloc(sizeof(cc_credentials_union)); - if ( creds == NULL ) - return ccErrNoMem; - - switch ( creds->version ) { - case cc_credentials_v4: - code = cci_creds_v4_unmarshall(flat_creds, ntohl(header->creds_len), creds); - break; - case cc_credentials_v5: - code = cci_creds_v5_unmarshall(flat_creds, ntohl(header->creds_len), creds); - break; - default: - return ccs_serv_make_nack(ccErrBadCredentialsVersion, auth_info, session_info, resp_msg); - } - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - code = ccs_ccache_store_creds(ccache, creds); - ccs_credentials_union_release(creds); - if (code != ccNoError) { - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - } - - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_REM_CREDS(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_rem_creds_t* header = (ccmsg_ccache_rem_creds_t*)msg->header; - cc_server_ccache_t* ccache; - cc_credentials_union *creds; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - if (header_len != sizeof(ccmsg_ccache_rem_creds_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = ccs_ccache_rem_creds(ccache, (const cc_credentials_union *)(ntohll(header->creds))); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_LOCK( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_UNLOCK( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_MOVE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - - -cc_int32 -ccop_CCACHE_GET_LAST_DEFAULT_TIME(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_get_last_default_time_t* header = (ccmsg_ccache_get_last_default_time_t*)msg->header; - ccmsg_ccache_get_last_default_time_resp_t* resp_header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_get_last_default_time_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - resp_header = (ccmsg_ccache_get_last_default_time_resp_t*)malloc(sizeof(ccmsg_ccache_get_last_default_time_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->last_default_time = htonll(ccache->last_default); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_get_last_default_time_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_GET_CHANGE_TIME( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_get_change_time_resp_t* resp_header; - ccmsg_ccache_get_change_time_t *header = (ccmsg_ccache_get_change_time_t *)msg->header; - cc_server_ccache_t* ccache = (cc_server_ccache_t *)header->ccache; - cc_uint32 header_len = msg->header_len; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_get_change_time_t)) { - return ccErrBadParam; - } - - resp_header = (ccmsg_ccache_get_change_time_resp_t*)malloc(sizeof(ccmsg_ccache_get_change_time_resp_t)); - if (resp_header == NULL) { - return ccErrNoMem; - } - - resp_header->time = htonll(ccache->changed); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_get_change_time_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_COMPARE(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_compare_t* header = (ccmsg_ccache_compare_t*)msg->header; - ccmsg_ccache_compare_resp_t* resp_header; - cc_server_ccache_t* ccache1, *ccache2; - cc_uint32 header_len = msg->header_len; - cc_uint32 is_equal; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_compare_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache1), &ccache1); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache2), &ccache2); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - resp_header = (ccmsg_ccache_compare_resp_t*)malloc(sizeof(ccmsg_ccache_compare_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - ccs_ccache_compare(ccache1, ccache2, &is_equal); - resp_header->is_equal = htonl(is_equal); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_compare_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_GET_KDC_TIME_OFFSET(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_get_kdc_time_offset_t* header = (ccmsg_ccache_get_kdc_time_offset_t*)msg->header; - ccmsg_ccache_get_kdc_time_offset_resp_t* resp_header; - cc_server_ccache_t* ccache; - cc_time64 offset; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_get_kdc_time_offset_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - // TODO How is the header->creds_version supposed to be used? - - code = ccs_ccache_get_kdc_time_offset(ccache, &offset); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - resp_header = (ccmsg_ccache_get_kdc_time_offset_resp_t*)malloc(sizeof(ccmsg_ccache_get_kdc_time_offset_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - resp_header->offset = htonll(offset); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_get_kdc_time_offset_resp_t), auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_SET_KDC_TIME_OFFSET(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_set_kdc_time_offset_t* header = (ccmsg_ccache_set_kdc_time_offset_t*)msg->header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_set_kdc_time_offset_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - // TODO How is the header->creds_version supposed to be used? - - ccs_ccache_set_kdc_time_offset(ccache, htonll(header->offset)); - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_CLEAR_KDC_TIME_OFFSET(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_clear_kdc_time_offset_t* header = (ccmsg_ccache_clear_kdc_time_offset_t*)msg->header; - cc_server_ccache_t* ccache; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_clear_kdc_time_offset_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - // TODO How is the header->creds_version supposed to be used? - - ccs_ccache_clear_kdc_time_offset(ccache); - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_ITERATOR_RELEASE(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_generic_list_node_t* gen_node; - ccmsg_ccache_iterator_release_t* header = (ccmsg_ccache_iterator_release_t*)msg->header; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_iterator_release_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_iterator_by_handle(ctx, ntohll(header->iterator), &gen_node); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrBadParam, auth_info, session_info, resp_msg); - - code = cci_generic_list_remove_element(ctx->active_iterators, gen_node); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_ITERATOR_CLONE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CCACHE_ITERATOR_NEXT(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_ccache_iterator_release_t* header = (ccmsg_ccache_iterator_release_t*)msg->header; - ccmsg_ccache_iterator_next_resp_t* resp_header; - cc_generic_list_node_t* gen_node; - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_list_node_t *ccache_node; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_ccache_iterator_next_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_iterator_by_handle(ctx, ntohll(header->iterator), &gen_node); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrBadParam, auth_info, session_info, resp_msg); - - ccache_iterator = (cc_ccache_iterate_t*)gen_node->data; - if (ccs_ccache_iterate_has_next(ccache_iterator)) { - resp_header = (ccmsg_ccache_iterator_next_resp_t*)malloc(sizeof(ccmsg_ccache_iterator_next_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - code = ccs_ccache_iterate_next(ccache_iterator, &ccache_node); - if (code != ccNoError) - return ccs_serv_make_nack(code, auth_info, session_info, resp_msg); - - resp_header->ccache = htonll((cc_handle) ccache_node); - return ccs_serv_make_ack(resp_header, sizeof(ccmsg_ccache_iterator_next_resp_t), auth_info, session_info, resp_msg); - } else { - return ccs_serv_make_nack(ccIteratorEnd, auth_info, session_info, resp_msg); - } -} - -cc_int32 -ccop_CREDS_ITERATOR_RELEASE(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - cc_generic_list_node_t* gen_node; - cc_server_ccache_t* ccache; - ccmsg_creds_iterator_release_t* header = (ccmsg_creds_iterator_release_t*)msg->header; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_creds_iterator_release_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = ccs_serv_find_creds_iterator_by_handle(ccache, ntohll(header->iterator), &gen_node); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrBadParam, auth_info, session_info, resp_msg); - - code = cci_generic_list_remove_element(ccache->active_iterators, gen_node); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrBadParam, auth_info, session_info, resp_msg); - - return ccs_serv_make_ack(NULL, 0, auth_info, session_info, resp_msg); -} - -cc_int32 -ccop_CREDS_ITERATOR_CLONE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - // TODO - return ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); -} - - -cc_int32 -ccop_CREDS_ITERATOR_NEXT(cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - ccmsg_creds_iterator_next_t* header = (ccmsg_creds_iterator_next_t*)msg->header; - ccmsg_creds_iterator_next_resp_t* resp_header; - cc_credentials_iterate_t* creds_iterator; - cc_generic_list_node_t* gen_node; - cc_credentials_list_node_t* creds_node; - cc_server_ccache_t* ccache; - cc_server_credentials_t* stored_creds; - cc_credentials_union *creds_union; - cc_uint32 header_len = msg->header_len; - cc_int32 code; - - *resp_msg = 0; - - if (header_len != sizeof(ccmsg_creds_iterator_next_t)) - return ccErrBadParam; - - code = ccs_serv_find_ccache_by_handle(ctx, ntohll(header->ccache), &ccache); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrCCacheNotFound, auth_info, session_info, resp_msg); - - code = ccs_serv_find_creds_iterator_by_handle(ccache, ntohll(header->iterator), &gen_node); - if (code != ccNoError) - return ccs_serv_make_nack(ccErrBadParam, auth_info, session_info, resp_msg); - - creds_iterator = (cc_credentials_iterate_t*)gen_node->data; - if (ccs_credentials_iterate_has_next(creds_iterator)) { - code = cci_msg_new(ccmsg_ACK, resp_msg); - if (code != ccNoError) - return code; - - resp_header = (ccmsg_creds_iterator_next_resp_t*)malloc(sizeof(ccmsg_creds_iterator_next_resp_t)); - if (resp_header == NULL) - return ccErrNoMem; - - code = ccs_credentials_iterate_next(creds_iterator, &creds_node); - stored_creds = (cc_server_credentials_t*)creds_node->data; - creds_union = &stored_creds->creds; - - code = cci_msg_add_data_blob(*resp_msg, creds_union, sizeof(cc_credentials_union), &resp_header->creds_offset); - code = cci_msg_add_header(*resp_msg, resp_header, sizeof(ccmsg_creds_iterator_next_resp_t)); - } else { - ccs_serv_make_nack(ccIteratorEnd, auth_info, session_info, resp_msg); - } - return ccNoError; -} - -cc_int32 -ccop_CREDS_RELEASE( cc_server_context_t* ctx, - cc_auth_info_t* auth_info, - cc_session_info_t* session_info, - cc_msg_t *msg, cc_msg_t **resp_msg) -{ - - ccs_serv_make_nack(ccErrNotImplemented, auth_info, session_info, resp_msg); - return ccNoError; -} diff --git a/src/lib/ccapi/unit-test/NTMakefile b/src/lib/ccapi/unit-test/NTMakefile deleted file mode 100644 index 73f53f2e4..000000000 --- a/src/lib/ccapi/unit-test/NTMakefile +++ /dev/null @@ -1,53 +0,0 @@ -!include - -CFLAGS = -I../include $(cdebug) $(cflags) $(cvarsmt) - -WINLIBS = ws2_32.lib rpcrt4.lib $(guilibsdll) - -T_CCACHE = t_ccache.exe - -T_CONTEXT = t_context.exe - -T_LISTS = t_lists.exe - -T_MSG = t_msg.exe - -T_SERVER = t_server.exe - -T_CCAPI = t_ccapi.exe - -all: $(T_CCAPI) $(T_CCACHE) $(T_CONTEXT) $(T_LISTS) $(T_MSG) $(T_SERVER) - -ntccrpc_c.c ntccrpc_s.c ntccrpc.h: ntccrpc.idl ntccrpc.acf - midl ntccrpc.idl /acf ntccrpc.acf - -CC_CLIENT_LIB = ..\client\cc_client.lib - -CC_COMMON_LIB = ..\common\cc_common.lib - -CC_SERVER_LIB = ..\server\cc_server.lib - -CC_API_LIB = ..\windows\krbcc32.lib - -$(T_CCACHE): t_ccache.obj $(CC_SERVER_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -$(T_CONTEXT): t_context.obj $(CC_SERVER_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -$(T_LISTS): t_lists.obj $(CC_SERVER_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -$(T_MSG): t_msg.obj $(CC_SERVER_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -$(T_SERVER): t_server.obj $(CC_SERVER_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -$(T_CCAPI): t_ccapi.obj $(CC_API_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -clean: - del *.exe *.dll *.lib *.exp *.obj ntccrpc_c.c ntccrpc_s.c ntccrpc.h - - diff --git a/src/lib/ccapi/unit-test/t_ccache.c b/src/lib/ccapi/unit-test/t_ccache.c deleted file mode 100644 index 175764e79..000000000 --- a/src/lib/ccapi/unit-test/t_ccache.c +++ /dev/null @@ -1,115 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -#include -#include -#include -#include -#include "CredentialsCache.h" -#include "datastore.h" - -int main() { - cc_server_credentials_t *cred1, *cred2, *cred3; - cc_credentials_iterate_t* iterator; - cc_server_credentials_t* stored_cred; - cc_credentials_list_node_t *node; - cc_server_ccache_t *c1, *c2; - char p1[] = "Spike"; - char p2[] = "Jeff"; - int i; - cc_int32 code; - - code = ccs_ccache_new("The first", p1, cc_credentials_v4_v5, &c1); - code = ccs_ccache_new("The 2nd", p2, cc_credentials_v4_v5, &c2); - - cred1 = (cc_server_credentials_t*)malloc(sizeof(cc_server_credentials_t)); - memset(cred1,0,sizeof(cc_server_credentials_t)); - cred2 = (cc_server_credentials_t*)malloc(sizeof(cc_server_credentials_t)); - memset(cred2,0,sizeof(cc_server_credentials_t)); - cred3 = (cc_server_credentials_t*)malloc(sizeof(cc_server_credentials_t)); - memset(cred3,0,sizeof(cc_server_credentials_t)); - - cred1->creds.version = cred2->creds.version = cc_credentials_v4; - cred3->creds.version = cc_credentials_v5; - - cred1->creds.credentials.credentials_v4 = (cc_credentials_v4_t*)malloc(sizeof(cc_credentials_v4_t)); - memset(cred1->creds.credentials.credentials_v4,0,sizeof(cc_credentials_v4_t)); - cred2->creds.credentials.credentials_v4 = (cc_credentials_v4_t*)malloc(sizeof(cc_credentials_v4_t)); - memset(cred2->creds.credentials.credentials_v4,0,sizeof(cc_credentials_v4_t)); - cred3->creds.credentials.credentials_v5 = (cc_credentials_v5_t*)malloc(sizeof(cc_credentials_v5_t)); - memset(cred3->creds.credentials.credentials_v5,0,sizeof(cc_credentials_v5_t)); - - strncpy(cred1->creds.credentials.credentials_v4->principal, p1, strlen(p1)); - strncpy(cred2->creds.credentials.credentials_v4->principal, p1, strlen(p1)); - cred3->creds.credentials.credentials_v5->client = p1; - - code = ccs_ccache_store_creds(c1, &cred1->creds); - printf("(c1, cred1) -> %d\n",code); - - code = ccs_ccache_store_creds(c1, &cred2->creds); - printf("(c1, cred2) -> %d\n",code); - - code = ccs_ccache_store_creds(c2, &cred3->creds); - printf("(c2, cred3) -> %d\n",code); - - code = ccs_ccache_store_creds(c1, &cred3->creds); - printf("(c1, cred3) -> %d\n",code); - - i = 0; - code = ccs_ccache_move(c1, c2); - code = ccs_ccache_destroy(c1); - code = ccs_ccache_new_iterator(c2, &iterator); - while (ccs_credentials_iterate_has_next(iterator)) { - i++; - code = ccs_credentials_iterate_next(iterator, &node); - stored_cred = (cc_server_credentials_t *)node->data; - printf("%d %d %s\n", stored_cred->is_default, stored_cred->creds.version, stored_cred->creds.credentials.credentials_v4->principal); - - if (i == 1) { - code = ccs_ccache_rem_creds(c2,&cred2->creds); - printf("(c2 rem cred2) -> %d\n",code); - } - } - return 0; -} - diff --git a/src/lib/ccapi/unit-test/t_context.c b/src/lib/ccapi/unit-test/t_context.c deleted file mode 100644 index d76ff78d9..000000000 --- a/src/lib/ccapi/unit-test/t_context.c +++ /dev/null @@ -1,115 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -#include -#include -#include -#include - -#include "CredentialsCache.h" -#include "datastore.h" - - -/*testing code*/ -int main() { - int uid = 1; - int session = 1; - cc_server_ccache_t *ccache; - cc_credentials_union* creds; - cc_ccache_iterate_t* ccache_iterator; - cc_ccache_list_node_t* ccache_node; - cc_credentials_iterate_t* creds_iterator; - cc_credentials_list_node_t* creds_node; - cc_server_credentials_t* server_creds; - cc_auth_info_t* auth_info = NULL; - cc_session_info_t* session_info = NULL; - cc_server_context_t* ctx = NULL; - char *name; - int i; - cc_int32 code; - - code = ccs_context_new(5, auth_info, session_info, &ctx); - code = ccs_context_create_default_ccache(ctx, cc_credentials_v4, "Spike", &ccache); - code = ccs_context_get_default_ccache_name(ctx, &name); - code = ccs_context_open_ccache(ctx, name, &ccache); - - for (i = 0; i < 5; i++) { - creds = (cc_credentials_union*)malloc(sizeof(cc_credentials_union)); - creds->version = cc_credentials_v4; - creds->credentials.credentials_v4 = (cc_credentials_v4_t*)malloc(sizeof(cc_credentials_v4_t)); - strcpy(creds->credentials.credentials_v4->principal, "Spike"); - - code = ccs_ccache_store_creds(ccache, creds); - } - - code = ccs_context_create_ccache(ctx, "ccache 2", cc_credentials_v4_v5, "Jeff", &ccache); - code = ccs_context_open_ccache(ctx, "ccache 2", &ccache); - - for (i = 0; i < 5; i++) { - creds = (cc_credentials_union*)malloc(sizeof(cc_credentials_union)); - creds->version = cc_credentials_v5; - creds->credentials.credentials_v5 = (cc_credentials_v5_t*)malloc(sizeof(cc_credentials_v5_t)); - strcpy(creds->credentials.credentials_v5->principal, "Jeff"); - - ccs_ccache_store_creds(ccache, creds); - } - - code = ccs_context_ccache_iterator(ctx, &ccache_iterator); - while (ccs_ccache_iterate_has_next(ccache_iterator)) { - code = ccs_ccache_iterate_next(ccache_iterator, &ccache_node); - ccache = (cc_server_ccache_t *)ccache_node->data; - printf("%x for %s %s default = %d v %d\n", - ccache, ccache->principal_v4, ccache->principal_v5, - ccache->is_default, ccache->versions); - - code = ccs_ccache_new_iterator(ccache, &creds_iterator); - while (ccs_credentials_iterate_has_next(creds_iterator)) { - code = ccs_credentials_iterate_next(creds_iterator, &creds_node); - server_creds = (cc_server_credentials_t *)creds_node->data; - printf("\t%s %d\n", - server_creds->creds.credentials.credentials_v4->principal, - creds->version); - } - } - return 0; -} diff --git a/src/lib/ccapi/unit-test/t_lists.c b/src/lib/ccapi/unit-test/t_lists.c deleted file mode 100644 index 4c8450bb7..000000000 --- a/src/lib/ccapi/unit-test/t_lists.c +++ /dev/null @@ -1,100 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -#include -#include -#include - -#include "CredentialsCache.h" -#include "datastore.h" - - -int main() { - cc_generic_list_head_t* head; - cc_generic_list_head_t* copy;// = cc_generic_list_copy(head); - cc_generic_list_node_t *head_node,*tail,*middle, *node; - cc_generic_iterate_t* iterate; - int x1 = 1; - int x2 = 2; - int x3 = 3; - int x4 = 4; - int x5 = 5; - int x6 = 6; - cc_int32 code; - - code = cci_generic_list_new(&head); - code = cci_generic_list_append(head,&x4,sizeof(x4),NULL); - code = cci_generic_list_append(head,&x5,sizeof(x5),NULL); - code = cci_generic_list_append(head,&x6,sizeof(x6),&tail); - - code = cci_generic_list_prepend(head,&x3,sizeof(x3),&middle); - code = cci_generic_list_prepend(head,&x2,sizeof(x2),NULL); - code = cci_generic_list_prepend(head,&x1,sizeof(x1), &head_node); - - code = cci_generic_list_iterator(head, &iterate); - while (cci_generic_iterate_has_next(iterate)) { - code = cci_generic_iterate_next(iterate, &node); - printf("%d\n",*((int *)(node->data))); - } - printf("----------\n"); - cci_generic_list_remove_element(head,head_node); - cci_generic_list_remove_element(head,middle); - cci_generic_list_remove_element(head,tail); - - code = cci_generic_list_iterator(head, &iterate); - while (cci_generic_iterate_has_next(iterate)) { - code = cci_generic_iterate_next(iterate, &node); - printf("%d\n",*((int *)(node->data))); - } - - printf("----------\n"); - code = cci_generic_list_copy(head, ©); - code = cci_generic_list_iterator(copy, &iterate); - while (cci_generic_iterate_has_next(iterate)) { - code = cci_generic_iterate_next(iterate, &node); - printf("%d\n",*((int *)(node->data))); - } - - cci_generic_list_destroy(copy); - return 0; -} diff --git a/src/lib/ccapi/unit-test/t_msg.c b/src/lib/ccapi/unit-test/t_msg.c deleted file mode 100644 index b3a31a871..000000000 --- a/src/lib/ccapi/unit-test/t_msg.c +++ /dev/null @@ -1,88 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - -#include "CredentialsCache.h" -#include "msg.h" -#include "datastore.h" - -#include -#include -#include -#include - -/*testing code*/ -int main() -{ - cc_msg_t* msg; - double header = 4.05; - char blob1[] = "This is blob one.1234"; - int blob2 = 2; - char blob3[] = "This is blob 3."; - int pos1,pos2,pos3; - void *flat; - char *p; - cc_uint32 valid = 0; - cc_int32 code; - - code = cci_msg_new(ccmsg_INIT, &msg); - code = cci_msg_add_header(msg, &header, sizeof(double)); - //cc_msg_add_header(msg, NULL, 0); - code = cci_msg_add_data_blob(msg, blob1, strlen(blob1) + 1,&pos1); - code = cci_msg_add_data_blob(msg, &blob2, sizeof(int),&pos2); - code = cci_msg_add_data_blob(msg, blob3, strlen(blob3) + 1,&pos3); - - cci_msg_flatten(msg,&flat); - - printf("%s\n",(char *)((char *)msg->flat + pos1)); - printf("%d\n",*(int *)((char *)msg->flat + pos2)); - printf("%s\n",(char *)((char *)msg->flat + pos3)); - - cci_msg_verify(msg->flat, msg->flat_len, &valid); - printf("%d\n",valid); - - code = cci_msg_unflatten(msg->flat, msg->flat_len, &msg); - - code = cci_msg_retrieve_blob(msg, pos3, strlen(blob3) + 1, &p); - printf("%s PPP\n",p); - return 0; -} diff --git a/src/lib/ccapi/unit-test/t_server.c b/src/lib/ccapi/unit-test/t_server.c deleted file mode 100644 index d6093941e..000000000 --- a/src/lib/ccapi/unit-test/t_server.c +++ /dev/null @@ -1,185 +0,0 @@ -/* $Copyright: - * - * Copyright 2004 by the 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 MIT 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. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Individual source code files are copyright MIT, Cygnus Support, - * OpenVision, Oracle, Sun Soft, FundsXpress, and others. - * - * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira, - * and Zephyr are trademarks of the Massachusetts Institute of Technology - * (MIT). No commercial use of these trademarks may be made without prior - * written permission of MIT. - * - * "Commercial use" means use of a name in a product or other for-profit - * manner. It does NOT prevent a commercial firm from referring to the MIT - * trademarks in order to convey information (although in doing so, - * recognition of their trademark status should be given). - * $ - */ - - -#include "CredentialsCache.h" -#include "serv_ops.h" -#include "datastore.h" -#include "rpc_auth.h" -#include "msg_headers.h" - -#include - -static int -read_flat_msg(char ** flat_msg, cc_uint32 * flat_len) -{ - - /* TODO - read length of message */ - *flat_len = 999; - - *flat_msg = (char *)malloc(*flat_len); - - /* TODO - read message into buffer */ - - return 0; -} - -static int -send_flat_msg(char * flag_msg, cc_uint32 flat_len) -{ - - return 0; -} - -static int -obtain_auth_info(cc_auth_info_t ** auth) -{ - if (auth == NULL) - return ccErrBadParam; - - *auth = malloc(sizeof(cc_auth_info_t)); - if (auth == NULL) - return ccErrNoMem; - - memset(*auth,0,sizeof(cc_auth_info_t)); - - /* TODO: obtain real auth data from connection */ - - return ccNoError; -} - -static int -destroy_auth_info(cc_auth_info_t * auth) -{ - if (auth == NULL) - return ccErrBadParam; - - if (auth->info) - free(auth->info); - - free(auth); - - return ccNoError; -} - -static int -obtain_session_info(cc_session_info_t ** session) -{ - if (session == NULL) - return ccErrBadParam; - - *session = malloc(sizeof(cc_session_info_t)); - if (session == NULL) - return ccErrNoMem; - - memset(*session,0,sizeof(cc_session_info_t)); - - /* TODO: obtain real session data from connection */ - - return ccNoError; -} - -static int -destroy_session_info(cc_session_info_t * session) -{ - if (session == NULL) - return ccErrBadParam; - - if (session->info) - free(session->info); - - free(session); - - return ccNoError; -} - - -int -main(void) -{ - cc_msg_t * msg; - cc_msg_t * resp; - cc_auth_info_t * auth_info; - cc_session_info_t * session_info; - cc_int32 code; - - if ( ccs_serv_initialize() != ccNoError ) - return 1; - - while ( 1 ) { - msg = (cc_msg_t *)malloc(sizeof(cc_msg_t)); - - /* read message */ - if (read_flat_msg(&msg->flat, &msg->flat_len)) - continue; - - /* unflatten message */ - code = cci_msg_unflatten(msg->flat, msg->flat_len, &msg); - - /* obtain auth info */ - code = obtain_auth_info(&auth_info); - - /* obtain session info */ - code = obtain_session_info(&session_info); - - /* process message */ - code = ccs_serv_process_msg(msg, auth_info, session_info, &resp); - - /* flatten response */ - code = cci_msg_flatten(resp, NULL); - - /* send response */ - code = send_flat_msg(resp->flat, resp->flat_len); - - code = destroy_auth_info(auth_info); - - code = destroy_session_info(session_info); - - /* free message */ - code = cci_msg_destroy(msg); - - /* free response */ - code = cci_msg_destroy(resp); - } - return 0; -} diff --git a/src/lib/ccapi/windows/NTMakefile b/src/lib/ccapi/windows/NTMakefile deleted file mode 100644 index f6fee6f68..000000000 --- a/src/lib/ccapi/windows/NTMakefile +++ /dev/null @@ -1,35 +0,0 @@ -!include - -CFLAGS = -I../include $(cdebug) $(cflags) $(cvarsmt) - -CCAPI_SERVER = ccapi_server.exe - -CCAPI_DLLFILE = krbcc32.dll - -WINLIBS = ws2_32.lib rpcrt4.lib $(guilibsdll) - -all: $(CCAPI_DLLFILE) $(CCAPI_SERVER) - -ntccrpc_c.c ntccrpc_s.c ntccrpc.h: ntccrpc.idl ntccrpc.acf - midl ntccrpc.idl /acf ntccrpc.acf - -CLIENT_OBJS = ntccrpc_c.obj client.obj dllmain.obj - -SERVER_OBJS = ntccrpc_s.obj server.obj - -CC_CLIENT_LIB = ..\client\cc_client.lib - -CC_COMMON_LIB = ..\common\cc_common.lib - -CC_SERVER_LIB = ..\server\cc_server.lib - -$(CCAPI_DLLFILE): $(CLIENT_OBJS) $(CC_CLIENT_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO /OUT:$@ $(ldebug) $(dlllflags) $(guilibsmt) -def:cacheapi.def $** $(WINLIBS) - -$(CCAPI_SERVER): $(SERVER_OBJS) $(CC_SERVER_LIB) $(CC_COMMON_LIB) - $(link) /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** $(WINLIBS) - -clean: - del *.exe *.dll *.lib *.exp *.obj ntccrpc_c.c ntccrpc_s.c ntccrpc.h - - diff --git a/src/lib/ccapi/windows/cacheapi.def b/src/lib/ccapi/windows/cacheapi.def deleted file mode 100644 index c54cc1106..000000000 --- a/src/lib/ccapi/windows/cacheapi.def +++ /dev/null @@ -1,29 +0,0 @@ -EXPORTS - ; ccapi v3 only exports one function - cc_initialize @14 - - ; ccapi v2 compatibility functions - cc_close @2 - cc_create @3 - cc_destroy @4 - cc_free_NC_info @5 - cc_free_creds @6 - cc_free_name @7 - cc_free_principal @8 - cc_get_NC_info @9 - cc_get_change_time @10 - cc_get_cred_version @11 - cc_get_name @12 - cc_get_principal @13 - cc_lock_request @15 - cc_open @16 - cc_remove_cred @17 - cc_seq_fetch_NCs_begin @18 - cc_seq_fetch_NCs_end @19 - cc_seq_fetch_NCs_next @20 - cc_seq_fetch_creds_begin @21 - cc_seq_fetch_creds_end @22 - cc_seq_fetch_creds_next @23 - cc_set_principal @24 - cc_shutdown @25 - cc_store @26 diff --git a/src/lib/ccapi/windows/client.c b/src/lib/ccapi/windows/client.c deleted file mode 100644 index e30801dab..000000000 --- a/src/lib/ccapi/windows/client.c +++ /dev/null @@ -1,141 +0,0 @@ -#include -#include -#include -#include -#include "ntccrpc.h" -#include -#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; -} diff --git a/src/lib/ccapi/windows/dllmain.c b/src/lib/ccapi/windows/dllmain.c deleted file mode 100644 index 6b4d6bfdd..000000000 --- a/src/lib/ccapi/windows/dllmain.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, - LPVOID lpvReserved) -{ - switch (fdwReason) { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - default: - return TRUE; - } -} - diff --git a/src/lib/ccapi/windows/ntccrpc.acf b/src/lib/ccapi/windows/ntccrpc.acf deleted file mode 100644 index 77216a9ea..000000000 --- a/src/lib/ccapi/windows/ntccrpc.acf +++ /dev/null @@ -1,8 +0,0 @@ -[ - explicit_handle -] - -interface portable_ccapi -{ - -} \ No newline at end of file diff --git a/src/lib/ccapi/windows/ntccrpc.idl b/src/lib/ccapi/windows/ntccrpc.idl deleted file mode 100644 index 51ff898d9..000000000 --- a/src/lib/ccapi/windows/ntccrpc.idl +++ /dev/null @@ -1,30 +0,0 @@ -[ - uuid(0012a1de-f7ad-44b0-b597-8ba53159c6fa), - version(1.0), - pointer_default(unique) -] - -interface portable_ccapi -{ - const short MAXMSGLEN = 65536; - - // Locally Unique Identifier - // - - struct __LUID { - __int32 LowPart; - long HighPart; - }; - - - // The Generic CCAPI Message RPC - - __int32 ccapi_Message ( - [in] handle_t h, - [in, string] unsigned char * client_name, - [in] struct __LUID luid, - [in, length_is(in_len), size_is(MAXMSGLEN)] unsigned char in_buf[], - [in] __int32 in_len, - [out, length_is(*out_len), size_is(MAXMSGLEN)] unsigned char out_buf[], - [out] __int32 * out_len); -} diff --git a/src/lib/ccapi/windows/rpcsstest/NTMakefile b/src/lib/ccapi/windows/rpcsstest/NTMakefile deleted file mode 100644 index 0e2330707..000000000 --- a/src/lib/ccapi/windows/rpcsstest/NTMakefile +++ /dev/null @@ -1,24 +0,0 @@ - -!include - -{}.c{}.obj: - $(CC) $(cdebug) $(cflags) /Fo"$@" /c $** - -EXECONLINK=link /NOLOGO $(conlibsmt) $(ldebug) $(conlflags) /OUT:$@ $** - -CLIENTEXE=csclient.exe - -SERVEREXE=csserver.exe - -SDKLIBS=rpcrt4.lib - -cstest_c.c cstest_s.c cstest.h: cstest.idl cstest.acf - midl cstest.idl /acf cstest.acf - -$(CLIENTEXE): client.obj cstest_c.obj - $(EXECONLINK) $(SDKLIBS) - -$(SERVEREXE): server.obj cstest_s.obj - $(EXECONLINK) $(SDKLIBS) - -all: $(SERVEREXE) $(CLIENTEXE) diff --git a/src/lib/ccapi/windows/rpcsstest/client.c b/src/lib/ccapi/windows/rpcsstest/client.c deleted file mode 100644 index a25e8d1ad..000000000 --- a/src/lib/ccapi/windows/rpcsstest/client.c +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#include -#include -#include"cstest.h" -#include - -void * __RPC_USER MIDL_user_allocate(size_t s) { - return malloc(s); -} - -void __RPC_USER MIDL_user_free(void * p) { - free(p); -} - -int main(int argc, char ** argv) { - RPC_STATUS status; - RPC_BINDING_HANDLE h; - TCHAR * bindstring = NULL; - RPC_SECURITY_QOS sqos; - char inbuf[256]; - char outbuf[256]; - long cb_out; - - 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, - &h); - - if (status != RPC_S_OK) { - fprintf(stderr, "RpcBindingFromStringBinding failed: %d\n", - status); - return 1; - } - - 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(h, - 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; - } - - StringCbCopyA(inbuf, sizeof(inbuf), "Echo Test 1"); - StringCbCopyA(outbuf, sizeof(outbuf), "Blank blank blank"); - - printf("Before call: in[%s], out[%s]\n", inbuf, outbuf); - cb_out = 0; - - status = EchoString(h, inbuf, sizeof(outbuf), &cb_out, outbuf); - - if (status) { - printf("Call failed: status = %d\n", status); - } else { - printf("After call: out[%s], outlen[%d]\n", outbuf, cb_out); - } - - status = RpcBindingFree(&h); - - status = RpcStringFree(&bindstring); - - return 0; -} diff --git a/src/lib/ccapi/windows/rpcsstest/cstest.acf b/src/lib/ccapi/windows/rpcsstest/cstest.acf deleted file mode 100644 index 3c2ae73ab..000000000 --- a/src/lib/ccapi/windows/rpcsstest/cstest.acf +++ /dev/null @@ -1,8 +0,0 @@ -[ - explicit_handle -] - -interface ccapi_cstest -{ - -} \ No newline at end of file diff --git a/src/lib/ccapi/windows/rpcsstest/cstest.idl b/src/lib/ccapi/windows/rpcsstest/cstest.idl deleted file mode 100644 index c51b8ee82..000000000 --- a/src/lib/ccapi/windows/rpcsstest/cstest.idl +++ /dev/null @@ -1,14 +0,0 @@ -[ -uuid(c8b4a635-e9e4-4650-a073-b25610324950), - version(1.0), - pointer_default(unique) -] - -interface ccapi_cstest -{ - long EchoString([in] handle_t h, - [in, string] unsigned char * in_str, - [in] long cb_buffer, - [out] long * cb_len, - [out, string, size_is(cb_buffer)] unsigned char buffer[*]); -} diff --git a/src/lib/ccapi/windows/rpcsstest/server.c b/src/lib/ccapi/windows/rpcsstest/server.c deleted file mode 100644 index f127434b5..000000000 --- a/src/lib/ccapi/windows/rpcsstest/server.c +++ /dev/null @@ -1,537 +0,0 @@ -#include -#include -#include -#include -#include -#include"cstest.h" -#include - -#define SVCNAME "CCAPICSTest" - -SERVICE_STATUS_HANDLE h_service_status = NULL; -SERVICE_STATUS service_status; -FILE * logfile = NULL; - -void begin_log(void) { - char temppath[512]; - - temppath[0] = L'\0'; - - GetTempPathA(sizeof(temppath), temppath); - StringCbCatA(temppath, sizeof(temppath), "csserverconn.log"); - logfile = fopen(temppath, "w"); -} - -void end_log(void) { - if (logfile) { - fclose(logfile); - logfile = NULL; - } -} - -BOOL report_status(DWORD state, - DWORD exit_code, - DWORD wait_hint) { - static DWORD checkpoint = 1; - BOOL rv = TRUE; - - if (state == SERVICE_START_PENDING) - service_status.dwControlsAccepted = 0; - else - service_status.dwControlsAccepted = SERVICE_ACCEPT_STOP; - - service_status.dwCurrentState = state; - service_status.dwWin32ExitCode = exit_code; - service_status.dwWaitHint = wait_hint; - - if (state == SERVICE_RUNNING || - state == SERVICE_STOPPED) - service_status.dwCheckPoint = 0; - else - service_status.dwCheckPoint = checkpoint++; - - rv = SetServiceStatus(h_service_status, &service_status); - - return rv; -} - -void service_start(DWORD argc, LPTSTR * argv) { - RPC_STATUS status; - RPC_BINDING_VECTOR * bv; - - status = RpcServerUseProtseq("ncalrpc", - RPC_C_PROTSEQ_MAX_REQS_DEFAULT, - NULL); - - if (status != RPC_S_OK) { - return; - } - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerRegisterIf(ccapi_cstest_v1_0_s_ifspec, - 0, 0); - - if (status != RPC_S_OK) - return; - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerInqBindings(&bv); - - if (status != RPC_S_OK) - return; - - status = RpcEpRegister(ccapi_cstest_v1_0_s_ifspec, - bv, 0, 0); - - if (status != RPC_S_OK) - return; - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerRegisterAuthInfo(NULL, - RPC_C_AUTHN_WINNT, - 0, 0); - - if (status != RPC_S_OK) - return; - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerListen(1, - RPC_C_LISTEN_MAX_CALLS_DEFAULT, - TRUE); - - if (status != RPC_S_OK) - return; - - report_status(SERVICE_RUNNING, NO_ERROR, 0); - - begin_log(); - - status = RpcMgmtWaitServerListen(); - - end_log(); - - RpcEpUnregister(ccapi_cstest_v1_0_s_ifspec, bv, 0); - - RpcBindingVectorFree(&bv); -} - -void service_stop(void) { - RpcMgmtStopServerListening(0); -} - -void * __RPC_USER MIDL_user_allocate(size_t s) { - return malloc(s); -} - -void __RPC_USER MIDL_user_free(void * p) { - free(p); -} - -typedef struct tag_client_info { - char client_name[512]; - LUID luid; -} client_info_t; - -RPC_STATUS check_auth(handle_t h, client_info_t * client_info) { - RPC_BINDING_HANDLE bh = (RPC_BINDING_HANDLE) h; - RPC_STATUS status; - HANDLE htoken = NULL; - char name[256]; - char domain[256]; - DWORD name_len; - DWORD domain_len; - SID_NAME_USE snu = 0; - - struct { - TOKEN_ORIGIN origin; - char pad[512]; - } torigin; - - struct { - TOKEN_OWNER owner; - char pad[4096]; - } towner; - - DWORD len; - - status = RpcImpersonateClient(bh); - - if (status != RPC_S_OK) - return status; - - if (!OpenThreadToken(GetCurrentThread(), - TOKEN_READ | TOKEN_QUERY_SOURCE, - FALSE, - &htoken)) { - status = GetLastError(); - goto _cleanup; - } - - len = 0; - - if (!GetTokenInformation(htoken, - TokenOrigin, - &torigin.origin, - sizeof(torigin), - &len)) { - status = GetLastError(); - goto _cleanup; - } - - if (!GetTokenInformation(htoken, - TokenOwner, - &towner.owner, - sizeof(towner), - &len)) { - status = GetLastError(); - goto _cleanup; - } - - - name_len = sizeof(name)/sizeof(name[0]); - domain_len = sizeof(domain)/sizeof(domain[0]); - - if (!LookupAccountSidA(NULL, - towner.owner.Owner, - name, - &name_len, - domain, - &domain_len, - &snu)) { - status = GetLastError(); - goto _cleanup; - } - - client_info->luid = torigin.origin.OriginatingLogonSession; - StringCbPrintfA(client_info->client_name, - sizeof(client_info->client_name), - "%s\\%s", domain, name); - - status = 0; - - _cleanup: - - RpcRevertToSelf(); - - return status; -} - -long EchoString( - /* [in] */ handle_t h, - /* [string][in] */ unsigned char *in_str, - /* [in] */ long cb_buffer, - /* [out] */ long *cb_len, - /* [size_is][string][out] */ unsigned char buffer[ ]) { - - size_t cb; - long rv = 0; - client_info_t client_info; - - rv = check_auth(h, &client_info); - - if (rv == 0 && logfile) { - fprintf(logfile, - "Client name [%s], LUID [%x:%x]\n", - client_info.client_name, - (client_info.luid.HighPart), - (client_info.luid.LowPart)); - fflush(logfile); - } - - if (!in_str) { - rv = 1; - if (cb_len) - *cb_len = 0; - if (buffer) - buffer[0] = '\0'; - } else { - if (FAILED(StringCbLengthA(in_str, 256, &cb))) { - rv = 2; - goto _exit_f; - } - - cb += sizeof(char); - - if (((long)cb) > cb_buffer) { - rv = 3; - goto _exit_f; - } - - *cb_len = cb; - - if (buffer) - StringCbCopyA(buffer, cb_buffer, in_str); - - rv = 0; - } - - _exit_f: - - return rv; -} - -void WINAPI service_control(DWORD ctrl_code) { - switch(ctrl_code) { - case SERVICE_CONTROL_STOP: - report_status(SERVICE_STOP_PENDING, NO_ERROR, 0); - service_stop(); - return; - - /* everything else falls through */ - } - - report_status(service_status.dwCurrentState, NO_ERROR, 0); -} - -void WINAPI service_main(DWORD argc, LPTSTR * argv) { - - h_service_status = RegisterServiceCtrlHandler( _T(SVCNAME), service_control); - - if (!h_service_status) - goto cleanup; - - ZeroMemory(&service_status, sizeof(service_status)); - - service_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS; - service_status.dwServiceSpecificExitCode = 0; - - if (!report_status(SERVICE_START_PENDING, - NO_ERROR, - 3000)) - goto cleanup; - - service_start(argc, argv); - - cleanup: - - if (h_service_status) { - report_status(SERVICE_STOPPED, NO_ERROR, 0); - } -} - - -BOOL -IsInstalled() -{ - BOOL bResult = FALSE; - SC_HANDLE hSCM; - SC_HANDLE hService; - - // Open the Service Control Manager - hSCM = OpenSCManager( NULL, // local machine - NULL, // ServicesActive database - SC_MANAGER_ALL_ACCESS); // full access - if (hSCM) { - - // Try to open the service - hService = OpenService( hSCM, - SVCNAME, - SERVICE_QUERY_CONFIG); - if (hService) { - bResult = TRUE; - CloseServiceHandle(hService); - } - - CloseServiceHandle(hSCM); - } - - return bResult; -} - -BOOL -Install() -{ - char szFilePath[_MAX_PATH]; - SC_HANDLE hSCM; - SC_HANDLE hService; - TCHAR szKey[256]; - HKEY hKey = NULL; - DWORD dwData; - - // Open the Service Control Manager - hSCM = OpenSCManager( NULL, // local machine - NULL, // ServicesActive database - SC_MANAGER_ALL_ACCESS); // full access - if (!hSCM) - return FALSE; - - // Get the executable file path - GetModuleFileName(NULL, szFilePath, sizeof(szFilePath)); - - // Create the service - hService = CreateService( hSCM, - SVCNAME, - SVCNAME, - SERVICE_ALL_ACCESS, - SERVICE_WIN32_OWN_PROCESS, - SERVICE_AUTO_START, // start condition - SERVICE_ERROR_NORMAL, - szFilePath, - NULL, - NULL, - NULL, - NULL, - NULL); - if (!hService) { - CloseServiceHandle(hSCM); - return FALSE; - } - - // make registry entries to support logging messages - // Add the source name as a subkey under the Application - // key in the EventLog service portion of the registry. - StringCbCopyA(szKey, 256, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\IKSD"); - if (RegCreateKey(HKEY_LOCAL_MACHINE, szKey, &hKey) != ERROR_SUCCESS) { - CloseServiceHandle(hService); - CloseServiceHandle(hSCM); - return FALSE; - } - - // Add the Event ID message-file name to the 'EventMessageFile' subkey. - RegSetValueEx( hKey, - "EventMessageFile", - 0, - REG_EXPAND_SZ, - (CONST BYTE*)szFilePath, - strlen(szFilePath) + 1); - - // Set the supported types flags. - dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; - RegSetValueEx( hKey, - "TypesSupported", - 0, - REG_DWORD, - (CONST BYTE*)&dwData, - sizeof(DWORD)); - RegCloseKey(hKey); - - // LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_INSTALLED, SVCNAME); - - // tidy up - CloseServiceHandle(hService); - CloseServiceHandle(hSCM); - return TRUE; -} - -BOOL -Uninstall() -{ - BOOL bResult = FALSE; - SC_HANDLE hService; - SC_HANDLE hSCM; - - // Open the Service Control Manager - hSCM = OpenSCManager( NULL, // local machine - NULL, // ServicesActive database - SC_MANAGER_ALL_ACCESS); // full access - if (!hSCM) - return FALSE; - - hService = OpenService( hSCM, - SVCNAME, - DELETE); - if (hService) { - if (DeleteService(hService)) { - // LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_REMOVED, SVCNAME); - bResult = TRUE; - } else { - // LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_NOTREMOVED, SVCNAME); - } - CloseServiceHandle(hService); - } - - CloseServiceHandle(hSCM); - return bResult; -} - - -// Returns TRUE if it found an arg it recognised, FALSE if not -// Note: processing some arguments causes output to stdout to be generated. -BOOL -ParseStandardArgs(int argc, char* argv[]) -{ - char szFilePath[_MAX_PATH]; - - // See if we have any command line args we recognize - if (argc <= 1) - return FALSE; - - if ( _stricmp(argv[1], "-h") == 0 || - _stricmp(argv[1], "-?") == 0 || - _stricmp(argv[1], "/h") == 0 || - _stricmp(argv[1], "/?") == 0) { - - // - GetModuleFileName(NULL, szFilePath, sizeof(szFilePath)); - fprintf(stderr, "usage: %s [-v | -i | -u | -h]\r\n",szFilePath); - return TRUE; - } else if (_stricmp(argv[1], "-v") == 0 || - _stricmp(argv[1], "/v") == 0 ) { - - // Spit out version info - fprintf(stderr, "%s Version 0.1\n",_T(SVCNAME)); - fprintf(stderr, "The service is %s installed\n", - IsInstalled() ? "currently" : "not"); - return TRUE; // say we processed the argument - - } else if (_stricmp(argv[1], "-i") == 0 || - _stricmp(argv[1], "/i") == 0) { - - // Request to install. - if (IsInstalled()) { - fprintf(stderr, "%s is already installed\n", _T(SVCNAME)); - } else { - // Try and install the copy that's running - if (Install()) { - fprintf(stderr, "%s installed\n", _T(SVCNAME)); - } else { - fprintf(stderr, "%s failed to install. Error %d\n", _T(SVCNAME), GetLastError()); - } - } - return TRUE; // say we processed the argument - - } else if (_stricmp(argv[1], "-u") == 0 || - _stricmp(argv[1], "/u") == 0) { - - // Request to uninstall. - if (!IsInstalled()) { - fprintf(stderr, "%s is not installed\n", _T(SVCNAME)); - } else { - // Try and remove the copy that's installed - if (Uninstall()) { - // Get the executable file path - GetModuleFileName(NULL, szFilePath, sizeof(szFilePath)); - fprintf(stderr, "%s removed. (You must delete the file (%s) yourself.)\n" - _T(SVCNAME), szFilePath); - } else { - fprintf(stderr, "Could not remove %s. Error %d\n", _T(SVCNAME), GetLastError()); - } - } - return TRUE; // say we processed the argument - - } - - // Don't recognise the args - return FALSE; -} - -int main(int argc, char ** argv) { - - SERVICE_TABLE_ENTRY dispatch_table[] = { - { _T(SVCNAME), (LPSERVICE_MAIN_FUNCTION) service_main }, - { NULL, NULL } - }; - - if ( ParseStandardArgs(argc, argv) ) - return 0; - - if (!StartServiceCtrlDispatcher(dispatch_table)) { - fprintf(stderr, "Can't start service control dispatcher\n"); - } - - return 0; -} diff --git a/src/lib/ccapi/windows/server.c b/src/lib/ccapi/windows/server.c deleted file mode 100644 index ac4ab70ab..000000000 --- a/src/lib/ccapi/windows/server.c +++ /dev/null @@ -1,679 +0,0 @@ - -#include -#include "msg.h" -#include "marshall.h" -#include "serv_ops.h" -#include "datastore.h" -#include -#include -#include -#include -#include -#include "ntccrpc.h" -#include - -#define SVCNAME "MIT_CCAPI_NT_Service" - -HANDLE hMainThread = 0; -HANDLE WaitToTerminate = 0; - -SERVICE_STATUS_HANDLE h_service_status = NULL; -SERVICE_STATUS service_status; -FILE * logfile = NULL; - -/* Log File */ -void begin_log(void) { - char temppath[512]; - - temppath[0] = L'\0'; - - GetTempPathA(sizeof(temppath), temppath); - StringCbCatA(temppath, sizeof(temppath), "mit_nt_ccapi.log"); - logfile = fopen(temppath, "w"); -} - -void end_log(void) { - if (logfile) { - fclose(logfile); - logfile = NULL; - } -} - -BOOL report_status(DWORD state, - DWORD exit_code, - DWORD wait_hint) { - static DWORD checkpoint = 1; - BOOL rv = TRUE; - - if (state == SERVICE_START_PENDING) - service_status.dwControlsAccepted = 0; - else - service_status.dwControlsAccepted = SERVICE_ACCEPT_STOP; - - service_status.dwCurrentState = state; - service_status.dwWin32ExitCode = exit_code; - service_status.dwWaitHint = wait_hint; - - if (state == SERVICE_RUNNING || - state == SERVICE_STOPPED) - service_status.dwCheckPoint = 0; - else - service_status.dwCheckPoint = checkpoint++; - - rv = SetServiceStatus(h_service_status, &service_status); - - return rv; -} - -void service_start(DWORD argc, LPTSTR * argv) { - RPC_STATUS status; - RPC_BINDING_VECTOR * bv; - - status = RpcServerUseProtseq("ncalrpc", - RPC_C_PROTSEQ_MAX_REQS_DEFAULT, - NULL); - - if (status != RPC_S_OK) { - if (logfile) fprintf(logfile, "service_start RpcServerUseProtseq = 0x%x\n", status); - goto cleanup; - } - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerRegisterIf(portable_ccapi_v1_0_s_ifspec, - 0, 0); - - if (status != RPC_S_OK) { - if (logfile) fprintf(logfile, "service_start RpcServerRegisterIf = 0x%x\n", status); - goto cleanup; - } - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerInqBindings(&bv); - - if (status != RPC_S_OK) { - if (logfile) fprintf(logfile, "service_start RpcServerInqBindings = 0x%x\n", status); - goto cleanup; - } - - status = RpcEpRegister(portable_ccapi_v1_0_s_ifspec, - bv, 0, 0); - - if (status != RPC_S_OK) { - if (logfile) fprintf(logfile, "service_start RpcEpRegister = 0x%x\n", status); - goto cleanup; - } - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerRegisterAuthInfo(NULL, - RPC_C_AUTHN_WINNT, - 0, 0); - - if (status != RPC_S_OK) { - if (logfile) fprintf(logfile, "service_start RpcServerRegisterAuthInfo = 0x%x\n", status); - goto cleanup; - } - - report_status(SERVICE_START_PENDING, NO_ERROR, 3000); - - status = RpcServerListen(2, - RPC_C_LISTEN_MAX_CALLS_DEFAULT, - TRUE); - - if (status != RPC_S_OK) { - if (logfile) fprintf(logfile, "service_start RpcServerListen = 0x%x\n", status); - goto cleanup; - } - - report_status(SERVICE_RUNNING, NO_ERROR, 0); - - - if (logfile) fprintf(logfile, "service_start calling RpcMgmtWaitServerListen\n"); - status = RpcMgmtWaitServerListen(); - if (logfile) fprintf(logfile, "service_start RpcMgmtWaitServerListen = 0x%x\n", status); - - cleanup: - RpcEpUnregister(portable_ccapi_v1_0_s_ifspec, bv, 0); - - RpcBindingVectorFree(&bv); -} - -void service_stop(void) { - if (logfile) fprintf(logfile, "service_stop\n"); - RpcMgmtStopServerListening(0); -} - -void * __RPC_USER MIDL_user_allocate(size_t s) { - return malloc(s); -} - -void __RPC_USER MIDL_user_free(void * p) { - free(p); -} - -typedef struct tag_client_info { - char client_name[512]; - LUID luid; -} client_info_t; - -int obtain_auth_info(client_info_t * client_info, cc_auth_info_t ** pauth_info) -{ - *pauth_info = (cc_auth_info_t *)malloc(sizeof(cc_auth_info_t)); - if ( !*pauth_info ) - return ccErrNoMem; - - (*pauth_info)->len = strlen(client_info->client_name) + 1; - (*pauth_info)->info = malloc((*pauth_info)->len); - if ( !(*pauth_info)->info ) { - free(*pauth_info); - return ccErrNoMem; - } - - memcpy((*pauth_info)->info, client_info->client_name, (*pauth_info)->len); - - return 0; -} - -void destroy_auth_info(cc_auth_info_t *auth_info) -{ - free(auth_info->info); - free(auth_info); -} - -int obtain_session_info(client_info_t * client_info, cc_session_info_t ** psession_info) -{ - *psession_info = (cc_session_info_t *)malloc(sizeof(cc_session_info_t)); - if ( !*psession_info ) - return ccErrNoMem; - - (*psession_info)->len = sizeof(LUID); - (*psession_info)->info = malloc((*psession_info)->len); - if ( !(*psession_info)->info ) { - free(*psession_info); - return ccErrNoMem; - } - - memcpy((*psession_info)->info, &client_info->luid, (*psession_info)->len); - - return 0; -} - -void destroy_session_info(cc_session_info_t *session_info) -{ - free(session_info->info); - free(session_info); -} - -RPC_STATUS check_auth(handle_t h, client_info_t * client_info) { - RPC_BINDING_HANDLE bh = (RPC_BINDING_HANDLE) h; - RPC_STATUS status; - HANDLE htoken = NULL; - char name[256]; - char domain[256]; - DWORD name_len; - DWORD domain_len; - SID_NAME_USE snu = 0; - - struct { - TOKEN_ORIGIN origin; - char pad[512]; - } torigin; - - struct { - TOKEN_OWNER owner; - char pad[4096]; - } towner; - - DWORD len; - - status = RpcImpersonateClient(bh); - - if (status != RPC_S_OK) - return status; - - if (!OpenThreadToken(GetCurrentThread(), - TOKEN_READ | TOKEN_QUERY_SOURCE, - FALSE, - &htoken)) { - status = GetLastError(); - goto _cleanup; - } - - len = 0; - - if (!GetTokenInformation(htoken, - TokenOrigin, - &torigin.origin, - sizeof(torigin), - &len)) { - status = GetLastError(); - goto _cleanup; - } - - if (!GetTokenInformation(htoken, - TokenOwner, - &towner.owner, - sizeof(towner), - &len)) { - status = GetLastError(); - goto _cleanup; - } - - - name_len = sizeof(name)/sizeof(name[0]); - domain_len = sizeof(domain)/sizeof(domain[0]); - - if (!LookupAccountSidA(NULL, - towner.owner.Owner, - name, - &name_len, - domain, - &domain_len, - &snu)) { - status = GetLastError(); - goto _cleanup; - } - - client_info->luid = torigin.origin.OriginatingLogonSession; - StringCbPrintfA(client_info->client_name, - sizeof(client_info->client_name), - "%s\\%s", domain, name); - - status = 0; - - _cleanup: - - RpcRevertToSelf(); - - return status; -} - -__int32 ccapi_Message( - /* [in] */ handle_t h, - /* [string][in] */ unsigned char *client_name, - /* [in] */ struct __LUID luid, - /* [size_is][length_is][in] */ unsigned char in_buf[], - /* [in] */ __int32 in_len, - /* [size_is][length_is][out] */ unsigned char out_buf[], - /* [out] */ __int32 *out_len) -{ - client_info_t client_info; - cc_msg_t * msg = NULL; - cc_msg_t * resp = NULL; - cc_auth_info_t * auth_info = NULL; - cc_session_info_t * session_info = NULL; - cc_int32 code; - - if (logfile) fprintf(logfile, "ccapi_Message\n"); - - if ( ccs_serv_initialize() != ccNoError ) { - code = ccErrServerUnavailable; - goto done; - } - - code = check_auth(h, &client_info); - if (code == 0) { - if (!strcmp("SYSTEM",client_info.client_name) && - client_info.luid.HighPart == 0 && - client_info.luid.LowPart == 0 && - client_name != NULL && - client_name[0] != '\0') { - StringCbPrintfA(client_info.client_name, - sizeof(client_info.client_name), - "%s", client_name); - client_info.luid.HighPart = luid.HighPart; - client_info.luid.LowPart = luid.LowPart; - } - } else { - code = ccErrServerCantBecomeUID; - goto done; - } - - /* allocate message */ - msg = (cc_msg_t *)malloc(sizeof(cc_msg_t)); - if (!msg) { - code = ccErrNoMem; - goto done; - } - - /* unflatten message */ - code = cci_msg_unflatten(in_buf, in_len, &msg); - if (code) - goto cleanup; - - /* obtain auth info */ - code = obtain_auth_info(&client_info, &auth_info); - if (code) - goto cleanup; - - /* obtain session info */ - code = obtain_session_info(&client_info, &session_info); - if (code) - goto cleanup; - - /* process message */ - code = ccs_serv_process_msg(msg, auth_info, session_info, &resp); - if (code) - goto cleanup; - - /* flatten response */ - code = cci_msg_flatten(resp, NULL); - if (code) - goto cleanup; - - /* send response */ - if (resp->flat_len > MAXMSGLEN) { - code = ccErrBadInternalMessage; - goto cleanup; - } - memcpy(out_buf, resp->flat, resp->flat_len); - *out_len = resp->flat_len; - code = ccNoError; - - cleanup: - if (auth_info) - destroy_auth_info(auth_info); - - if (session_info) - destroy_session_info(session_info); - - /* free message */ - if (msg) - cci_msg_destroy(msg); - - /* free response */ - if (resp) - cci_msg_destroy(resp); - - done: - return code ? -1 : 0; -} - -void WINAPI service_control(DWORD ctrl_code) { - switch(ctrl_code) { - case SERVICE_CONTROL_STOP: - report_status(SERVICE_STOP_PENDING, NO_ERROR, 0); - service_stop(); - return; - - /* everything else falls through */ - } - - report_status(service_status.dwCurrentState, NO_ERROR, 0); -} - -void WINAPI service_main(DWORD argc, LPTSTR * argv) { - - begin_log(); - - h_service_status = RegisterServiceCtrlHandler( _T(SVCNAME), service_control); - - if (!h_service_status) - goto cleanup; - - ZeroMemory(&service_status, sizeof(service_status)); - - service_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS; - service_status.dwServiceSpecificExitCode = 0; - - if (!report_status(SERVICE_START_PENDING, - NO_ERROR, - 3000)) - goto cleanup; - - service_start(argc, argv); - - cleanup: - - if (h_service_status) { - report_status(SERVICE_STOPPED, NO_ERROR, 0); - } - - end_log(); -} - - -BOOL -IsInstalled() -{ - BOOL bResult = FALSE; - SC_HANDLE hSCM; - SC_HANDLE hService; - - // Open the Service Control Manager - hSCM = OpenSCManager( NULL, // local machine - NULL, // ServicesActive database - SC_MANAGER_ALL_ACCESS); // full access - if (hSCM) { - - // Try to open the service - hService = OpenService( hSCM, - SVCNAME, - SERVICE_QUERY_CONFIG); - if (hService) { - bResult = TRUE; - CloseServiceHandle(hService); - } - - CloseServiceHandle(hSCM); - } - - return bResult; -} - -BOOL -Install() -{ - char szFilePath[_MAX_PATH]; - SC_HANDLE hSCM; - SC_HANDLE hService; - TCHAR szKey[256]; - HKEY hKey = NULL; - DWORD dwData; - - // Open the Service Control Manager - hSCM = OpenSCManager( NULL, // local machine - NULL, // ServicesActive database - SC_MANAGER_ALL_ACCESS); // full access - if (!hSCM) - return FALSE; - - // Get the executable file path - GetModuleFileName(NULL, szFilePath, sizeof(szFilePath)); - - // Create the service - hService = CreateService( hSCM, - SVCNAME, - SVCNAME, - SERVICE_ALL_ACCESS, - SERVICE_WIN32_OWN_PROCESS, - SERVICE_AUTO_START, // start condition - SERVICE_ERROR_NORMAL, - szFilePath, - NULL, - NULL, - NULL, - NULL, - NULL); - if (!hService) { - CloseServiceHandle(hSCM); - return FALSE; - } - - // make registry entries to support logging messages - // Add the source name as a subkey under the Application - // key in the EventLog service portion of the registry. - StringCbCopyA(szKey, 256, "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\IKSD"); - if (RegCreateKey(HKEY_LOCAL_MACHINE, szKey, &hKey) != ERROR_SUCCESS) { - CloseServiceHandle(hService); - CloseServiceHandle(hSCM); - return FALSE; - } - - // Add the Event ID message-file name to the 'EventMessageFile' subkey. - RegSetValueEx( hKey, - "EventMessageFile", - 0, - REG_EXPAND_SZ, - (CONST BYTE*)szFilePath, - strlen(szFilePath) + 1); - - // Set the supported types flags. - dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE; - RegSetValueEx( hKey, - "TypesSupported", - 0, - REG_DWORD, - (CONST BYTE*)&dwData, - sizeof(DWORD)); - RegCloseKey(hKey); - - // LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_INSTALLED, SVCNAME); - - // tidy up - CloseServiceHandle(hService); - CloseServiceHandle(hSCM); - return TRUE; -} - -BOOL -Uninstall() -{ - BOOL bResult = FALSE; - SC_HANDLE hService; - SC_HANDLE hSCM; - - // Open the Service Control Manager - hSCM = OpenSCManager( NULL, // local machine - NULL, // ServicesActive database - SC_MANAGER_ALL_ACCESS); // full access - if (!hSCM) - return FALSE; - - hService = OpenService( hSCM, - _T(SVCNAME), - DELETE); - if (hService) { - if (DeleteService(hService)) { - // LogEvent(EVENTLOG_INFORMATION_TYPE, EVMSG_REMOVED, SVCNAME); - bResult = TRUE; - } else { - // LogEvent(EVENTLOG_ERROR_TYPE, EVMSG_NOTREMOVED, SVCNAME); - } - CloseServiceHandle(hService); - } - - CloseServiceHandle(hSCM); - return bResult; -} - - -// Returns TRUE if it found an arg it recognised, FALSE if not -// Note: processing some arguments causes output to stdout to be generated. -BOOL -ParseStandardArgs(int argc, char* argv[]) -{ - char szFilePath[_MAX_PATH]="not a file name"; - - // See if we have any command line args we recognize - if (argc <= 1) - return FALSE; - - if ( _stricmp(argv[1], "-h") == 0 || - _stricmp(argv[1], "-?") == 0 || - _stricmp(argv[1], "/h") == 0 || - _stricmp(argv[1], "/?") == 0) { - - // - GetModuleFileNameA(NULL, szFilePath, sizeof(szFilePath)); - fprintf(stderr, "usage: %s [-v | -i | -u | -h]\r\n",szFilePath); - return TRUE; - } else if (_stricmp(argv[1], "-v") == 0 || - _stricmp(argv[1], "/v") == 0 ) { - - // Spit out version info - fprintf(stderr, "%s Version 0.1\n",_T(SVCNAME)); - fprintf(stderr, "The service is %s installed\n", - IsInstalled() ? "currently" : "not"); - return TRUE; // say we processed the argument - - } else if (_stricmp(argv[1], "-i") == 0 || - _stricmp(argv[1], "/i") == 0) { - - // Request to install. - if (IsInstalled()) { - fprintf(stderr, "%s is already installed\n", _T(SVCNAME)); - } else { - // Try and install the copy that's running - if (Install()) { - fprintf(stderr, "%s installed\n", _T(SVCNAME)); - } else { - fprintf(stderr, "%s failed to install. Error %d\n", _T(SVCNAME), GetLastError()); - } - } - return TRUE; // say we processed the argument - - } else if (_stricmp(argv[1], "-u") == 0 || - _stricmp(argv[1], "/u") == 0) { - - // Request to uninstall. - if (!IsInstalled()) { - fprintf(stderr, "%s is not installed\n", _T(SVCNAME)); - } else { - // Try and remove the copy that's installed - if (Uninstall()) { - // Get the executable file path - GetModuleFileNameA(NULL, szFilePath, sizeof(szFilePath)); - fprintf(stderr, "%s removed. (You must delete the file (%s) yourself.)\n", - _T(SVCNAME), szFilePath); - } else { - fprintf(stderr, "Could not remove %s. Error %d\n", _T(SVCNAME), GetLastError()); - } - } - return TRUE; // say we processed the argument - - } - - // Don't recognise the args - return FALSE; -} - -DWORD __stdcall Main_thread(void* notUsed) -{ - char * argv[2] = {SVCNAME, NULL}; - begin_log(); - service_start(1, (LPTSTR*)argv); - end_log(); - return(0); -} - -int main(int argc, char ** argv) { - SERVICE_TABLE_ENTRY dispatch_table[] = { - { _T(SVCNAME), (LPSERVICE_MAIN_FUNCTION) service_main }, - { NULL, NULL } - }; - - if ( ParseStandardArgs(argc, argv) ) - return 0; - - if (!StartServiceCtrlDispatcher(dispatch_table)) { - LONG status = GetLastError(); - if (status == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) - { - DWORD tid; - hMainThread = CreateThread(NULL, 0, Main_thread, 0, 0, &tid); - - printf("Hit to terminate MIT CCAPI Server\n"); - getchar(); - service_stop(); - } - } - - if ( hMainThread ) { - WaitForSingleObject( hMainThread, INFINITE ); - CloseHandle( hMainThread ); - } - return 0; -} -- 2.26.2