/* $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 #if TARGET_RT_MAC_CFM #error "Use KfM 4.0 SDK headers for CFM compilation." #endif #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if TARGET_OS_MAC #if defined(__MWERKS__) #pragma import on #pragma enumsalwaysint on #endif #pragma options align=mac68k #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 #if defined(__MWERKS__) #pragma enumsalwaysint reset #pragma import reset #endif #pragma options align=reset #endif #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __CREDENTIALSCACHE2__ */