xref: /freebsd/crypto/heimdal/lib/krb5/krb5_ccapi.h (revision ed549cb0c53f8438c52593ce811f6fcc812248e9)
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