1c19800e8SDoug Rabson /* 2*ae771770SStanislav Sedov * Copyright (c) 2004 Kungliga Tekniska Högskolan 3c19800e8SDoug Rabson * (Royal Institute of Technology, Stockholm, Sweden). 4c19800e8SDoug Rabson * All rights reserved. 5c19800e8SDoug Rabson * 6c19800e8SDoug Rabson * Redistribution and use in source and binary forms, with or without 7c19800e8SDoug Rabson * modification, are permitted provided that the following conditions 8c19800e8SDoug Rabson * are met: 9c19800e8SDoug Rabson * 10c19800e8SDoug Rabson * 1. Redistributions of source code must retain the above copyright 11c19800e8SDoug Rabson * notice, this list of conditions and the following disclaimer. 12c19800e8SDoug Rabson * 13c19800e8SDoug Rabson * 2. Redistributions in binary form must reproduce the above copyright 14c19800e8SDoug Rabson * notice, this list of conditions and the following disclaimer in the 15c19800e8SDoug Rabson * documentation and/or other materials provided with the distribution. 16c19800e8SDoug Rabson * 17c19800e8SDoug Rabson * 3. Neither the name of the Institute nor the names of its contributors 18c19800e8SDoug Rabson * may be used to endorse or promote products derived from this software 19c19800e8SDoug Rabson * without specific prior written permission. 20c19800e8SDoug Rabson * 21c19800e8SDoug Rabson * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 22c19800e8SDoug Rabson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23c19800e8SDoug Rabson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24c19800e8SDoug Rabson * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 25c19800e8SDoug Rabson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26c19800e8SDoug Rabson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27c19800e8SDoug Rabson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28c19800e8SDoug Rabson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29c19800e8SDoug Rabson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30c19800e8SDoug Rabson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31c19800e8SDoug Rabson * SUCH DAMAGE. 32c19800e8SDoug Rabson */ 33c19800e8SDoug Rabson 34*ae771770SStanislav Sedov /* $Id$ */ 35c19800e8SDoug Rabson 36c19800e8SDoug Rabson #ifndef KRB5_CCAPI_H 37c19800e8SDoug Rabson #define KRB5_CCAPI_H 1 38c19800e8SDoug Rabson 39c19800e8SDoug Rabson #include <krb5-types.h> 40c19800e8SDoug Rabson 41*ae771770SStanislav Sedov #ifdef __APPLE__ 42*ae771770SStanislav Sedov #pragma pack(push,2) 43*ae771770SStanislav Sedov #endif 44*ae771770SStanislav Sedov 45c19800e8SDoug Rabson enum { 46c19800e8SDoug Rabson cc_credentials_v5 = 2 47c19800e8SDoug Rabson }; 48c19800e8SDoug Rabson 49c19800e8SDoug Rabson enum { 50c19800e8SDoug Rabson ccapi_version_3 = 3, 51c19800e8SDoug Rabson ccapi_version_4 = 4 52c19800e8SDoug Rabson }; 53c19800e8SDoug Rabson 54c19800e8SDoug Rabson enum { 55c19800e8SDoug Rabson ccNoError = 0, 56c19800e8SDoug Rabson 57c19800e8SDoug Rabson ccIteratorEnd = 201, 58c19800e8SDoug Rabson ccErrBadParam, 59c19800e8SDoug Rabson ccErrNoMem, 60c19800e8SDoug Rabson ccErrInvalidContext, 61c19800e8SDoug Rabson ccErrInvalidCCache, 62c19800e8SDoug Rabson 63c19800e8SDoug Rabson ccErrInvalidString, /* 206 */ 64c19800e8SDoug Rabson ccErrInvalidCredentials, 65c19800e8SDoug Rabson ccErrInvalidCCacheIterator, 66c19800e8SDoug Rabson ccErrInvalidCredentialsIterator, 67c19800e8SDoug Rabson ccErrInvalidLock, 68c19800e8SDoug Rabson 69c19800e8SDoug Rabson ccErrBadName, /* 211 */ 70c19800e8SDoug Rabson ccErrBadCredentialsVersion, 71c19800e8SDoug Rabson ccErrBadAPIVersion, 72c19800e8SDoug Rabson ccErrContextLocked, 73c19800e8SDoug Rabson ccErrContextUnlocked, 74c19800e8SDoug Rabson 75c19800e8SDoug Rabson ccErrCCacheLocked, /* 216 */ 76c19800e8SDoug Rabson ccErrCCacheUnlocked, 77c19800e8SDoug Rabson ccErrBadLockType, 78c19800e8SDoug Rabson ccErrNeverDefault, 79c19800e8SDoug Rabson ccErrCredentialsNotFound, 80c19800e8SDoug Rabson 81c19800e8SDoug Rabson ccErrCCacheNotFound, /* 221 */ 82c19800e8SDoug Rabson ccErrContextNotFound, 83c19800e8SDoug Rabson ccErrServerUnavailable, 84c19800e8SDoug Rabson ccErrServerInsecure, 85c19800e8SDoug Rabson ccErrServerCantBecomeUID, 86c19800e8SDoug Rabson 87c19800e8SDoug Rabson ccErrTimeOffsetNotSet /* 226 */ 88c19800e8SDoug Rabson }; 89c19800e8SDoug Rabson 90c19800e8SDoug Rabson typedef int32_t cc_int32; 91c19800e8SDoug Rabson typedef uint32_t cc_uint32; 92c19800e8SDoug Rabson typedef struct cc_context_t *cc_context_t; 93c19800e8SDoug Rabson typedef struct cc_ccache_t *cc_ccache_t; 94c19800e8SDoug Rabson typedef struct cc_ccache_iterator_t *cc_ccache_iterator_t; 95c19800e8SDoug Rabson typedef struct cc_credentials_v5_t cc_credentials_v5_t; 96c19800e8SDoug Rabson typedef struct cc_credentials_t *cc_credentials_t; 97c19800e8SDoug Rabson typedef struct cc_credentials_iterator_t *cc_credentials_iterator_t; 98c19800e8SDoug Rabson typedef struct cc_string_t *cc_string_t; 99*ae771770SStanislav Sedov typedef cc_uint32 cc_time_t; 100c19800e8SDoug Rabson 101c19800e8SDoug Rabson typedef struct cc_data { 102c19800e8SDoug Rabson cc_uint32 type; 103c19800e8SDoug Rabson cc_uint32 length; 104c19800e8SDoug Rabson void *data; 105c19800e8SDoug Rabson } cc_data; 106c19800e8SDoug Rabson 107c19800e8SDoug Rabson struct cc_credentials_v5_t { 108c19800e8SDoug Rabson char *client; 109c19800e8SDoug Rabson char *server; 110c19800e8SDoug Rabson cc_data keyblock; 111c19800e8SDoug Rabson cc_time_t authtime; 112c19800e8SDoug Rabson cc_time_t starttime; 113c19800e8SDoug Rabson cc_time_t endtime; 114c19800e8SDoug Rabson cc_time_t renew_till; 115c19800e8SDoug Rabson cc_uint32 is_skey; 116c19800e8SDoug Rabson cc_uint32 ticket_flags; 117c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_FORWARDABLE 0x40000000 118c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_FORWARDED 0x20000000 119c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_PROXIABLE 0x10000000 120c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_PROXY 0x08000000 121c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_MAY_POSTDATE 0x04000000 122c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_POSTDATED 0x02000000 123c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_INVALID 0x01000000 124c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_RENEWABLE 0x00800000 125c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_INITIAL 0x00400000 126c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_PRE_AUTH 0x00200000 127c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_HW_AUTH 0x00100000 128c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_TRANSIT_POLICY_CHECKED 0x00080000 129c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_OK_AS_DELEGATE 0x00040000 130c19800e8SDoug Rabson #define KRB5_CCAPI_TKT_FLG_ANONYMOUS 0x00020000 131c19800e8SDoug Rabson cc_data **addresses; 132c19800e8SDoug Rabson cc_data ticket; 133c19800e8SDoug Rabson cc_data second_ticket; 134c19800e8SDoug Rabson cc_data **authdata; 135c19800e8SDoug Rabson }; 136c19800e8SDoug Rabson 137c19800e8SDoug Rabson 138c19800e8SDoug Rabson typedef struct cc_string_functions { 139c19800e8SDoug Rabson cc_int32 (*release)(cc_string_t); 140c19800e8SDoug Rabson } cc_string_functions; 141c19800e8SDoug Rabson 142c19800e8SDoug Rabson struct cc_string_t { 143c19800e8SDoug Rabson const char *data; 144c19800e8SDoug Rabson const cc_string_functions *func; 145c19800e8SDoug Rabson }; 146c19800e8SDoug Rabson 147c19800e8SDoug Rabson typedef struct cc_credentials_union { 148c19800e8SDoug Rabson cc_int32 version; 149c19800e8SDoug Rabson union { 150c19800e8SDoug Rabson cc_credentials_v5_t* credentials_v5; 151c19800e8SDoug Rabson } credentials; 152c19800e8SDoug Rabson } cc_credentials_union; 153c19800e8SDoug Rabson 154c19800e8SDoug Rabson struct cc_credentials_functions { 155c19800e8SDoug Rabson cc_int32 (*release)(cc_credentials_t); 156c19800e8SDoug Rabson cc_int32 (*compare)(cc_credentials_t, cc_credentials_t, cc_uint32*); 157c19800e8SDoug Rabson }; 158c19800e8SDoug Rabson 159c19800e8SDoug Rabson struct cc_credentials_t { 160c19800e8SDoug Rabson const cc_credentials_union* data; 161c19800e8SDoug Rabson const struct cc_credentials_functions* func; 162c19800e8SDoug Rabson }; 163c19800e8SDoug Rabson 164c19800e8SDoug Rabson struct cc_credentials_iterator_functions { 165c19800e8SDoug Rabson cc_int32 (*release)(cc_credentials_iterator_t); 166c19800e8SDoug Rabson cc_int32 (*next)(cc_credentials_iterator_t, cc_credentials_t*); 167c19800e8SDoug Rabson }; 168c19800e8SDoug Rabson 169c19800e8SDoug Rabson struct cc_credentials_iterator_t { 170c19800e8SDoug Rabson const struct cc_credentials_iterator_functions *func; 171c19800e8SDoug Rabson }; 172c19800e8SDoug Rabson 173c19800e8SDoug Rabson struct cc_ccache_iterator_functions { 174c19800e8SDoug Rabson cc_int32 (*release) (cc_ccache_iterator_t); 175c19800e8SDoug Rabson cc_int32 (*next)(cc_ccache_iterator_t, cc_ccache_t*); 176c19800e8SDoug Rabson }; 177c19800e8SDoug Rabson 178c19800e8SDoug Rabson struct cc_ccache_iterator_t { 179c19800e8SDoug Rabson const struct cc_ccache_iterator_functions* func; 180c19800e8SDoug Rabson }; 181c19800e8SDoug Rabson 182c19800e8SDoug Rabson typedef struct cc_ccache_functions { 183c19800e8SDoug Rabson cc_int32 (*release)(cc_ccache_t); 184c19800e8SDoug Rabson cc_int32 (*destroy)(cc_ccache_t); 185c19800e8SDoug Rabson cc_int32 (*set_default)(cc_ccache_t); 186c19800e8SDoug Rabson cc_int32 (*get_credentials_version)(cc_ccache_t, cc_uint32*); 187c19800e8SDoug Rabson cc_int32 (*get_name)(cc_ccache_t, cc_string_t*); 188c19800e8SDoug Rabson cc_int32 (*get_principal)(cc_ccache_t, cc_uint32, cc_string_t*); 189c19800e8SDoug Rabson cc_int32 (*set_principal)(cc_ccache_t, cc_uint32, const char*); 190c19800e8SDoug Rabson cc_int32 (*store_credentials)(cc_ccache_t, const cc_credentials_union*); 191c19800e8SDoug Rabson cc_int32 (*remove_credentials)(cc_ccache_t, cc_credentials_t); 192c19800e8SDoug Rabson cc_int32 (*new_credentials_iterator)(cc_ccache_t, 193c19800e8SDoug Rabson cc_credentials_iterator_t*); 194c19800e8SDoug Rabson cc_int32 (*move)(cc_ccache_t, cc_ccache_t); 195c19800e8SDoug Rabson cc_int32 (*lock)(cc_ccache_t, cc_uint32, cc_uint32); 196c19800e8SDoug Rabson cc_int32 (*unlock)(cc_ccache_t); 197c19800e8SDoug Rabson cc_int32 (*get_last_default_time)(cc_ccache_t, cc_time_t*); 198c19800e8SDoug Rabson cc_int32 (*get_change_time)(cc_ccache_t, cc_time_t*); 199c19800e8SDoug Rabson cc_int32 (*compare)(cc_ccache_t, cc_ccache_t, cc_uint32*); 200c19800e8SDoug Rabson cc_int32 (*get_kdc_time_offset)(cc_ccache_t, cc_int32, cc_time_t *); 201c19800e8SDoug Rabson cc_int32 (*set_kdc_time_offset)(cc_ccache_t, cc_int32, cc_time_t); 202c19800e8SDoug Rabson cc_int32 (*clear_kdc_time_offset)(cc_ccache_t, cc_int32); 203c19800e8SDoug Rabson } cc_ccache_functions; 204c19800e8SDoug Rabson 205c19800e8SDoug Rabson struct cc_ccache_t { 206c19800e8SDoug Rabson const cc_ccache_functions *func; 207c19800e8SDoug Rabson }; 208c19800e8SDoug Rabson 209c19800e8SDoug Rabson struct cc_context_functions { 210c19800e8SDoug Rabson cc_int32 (*release)(cc_context_t); 211c19800e8SDoug Rabson cc_int32 (*get_change_time)(cc_context_t, cc_time_t *); 212c19800e8SDoug Rabson cc_int32 (*get_default_ccache_name)(cc_context_t, cc_string_t*); 213c19800e8SDoug Rabson cc_int32 (*open_ccache)(cc_context_t, const char*, cc_ccache_t *); 214c19800e8SDoug Rabson cc_int32 (*open_default_ccache)(cc_context_t, cc_ccache_t*); 215c19800e8SDoug Rabson cc_int32 (*create_ccache)(cc_context_t,const char*, cc_uint32, 216c19800e8SDoug Rabson const char*, cc_ccache_t*); 217c19800e8SDoug Rabson cc_int32 (*create_default_ccache)(cc_context_t, cc_uint32, 218c19800e8SDoug Rabson const char*, cc_ccache_t*); 219c19800e8SDoug Rabson cc_int32 (*create_new_ccache)(cc_context_t, cc_uint32, 220c19800e8SDoug Rabson const char*, cc_ccache_t*); 221c19800e8SDoug Rabson cc_int32 (*new_ccache_iterator)(cc_context_t, cc_ccache_iterator_t*); 222c19800e8SDoug Rabson cc_int32 (*lock)(cc_context_t, cc_uint32, cc_uint32); 223c19800e8SDoug Rabson cc_int32 (*unlock)(cc_context_t); 224c19800e8SDoug Rabson cc_int32 (*compare)(cc_context_t, cc_context_t, cc_uint32*); 225c19800e8SDoug Rabson }; 226c19800e8SDoug Rabson 227c19800e8SDoug Rabson struct cc_context_t { 228c19800e8SDoug Rabson const struct cc_context_functions* func; 229c19800e8SDoug Rabson }; 230c19800e8SDoug Rabson 231c19800e8SDoug Rabson typedef cc_int32 232c19800e8SDoug Rabson (*cc_initialize_func)(cc_context_t*, cc_int32, cc_int32 *, char const **); 233c19800e8SDoug Rabson 234*ae771770SStanislav Sedov #ifdef __APPLE__ 235*ae771770SStanislav Sedov #pragma pack(pop) 236*ae771770SStanislav Sedov #endif 237*ae771770SStanislav Sedov 238*ae771770SStanislav Sedov 239c19800e8SDoug Rabson #endif /* KRB5_CCAPI_H */ 240