1*0a6a1f1dSLionel Sambuc /* $NetBSD: test_cc.c,v 1.1.1.2 2014/04/24 12:45:51 pettai Exp $ */
2ebfedea0SLionel Sambuc
3ebfedea0SLionel Sambuc /*
4ebfedea0SLionel Sambuc * Copyright (c) 2003 - 2007 Kungliga Tekniska Högskolan
5ebfedea0SLionel Sambuc * (Royal Institute of Technology, Stockholm, Sweden).
6ebfedea0SLionel Sambuc * All rights reserved.
7ebfedea0SLionel Sambuc *
8ebfedea0SLionel Sambuc * Redistribution and use in source and binary forms, with or without
9ebfedea0SLionel Sambuc * modification, are permitted provided that the following conditions
10ebfedea0SLionel Sambuc * are met:
11ebfedea0SLionel Sambuc *
12ebfedea0SLionel Sambuc * 1. Redistributions of source code must retain the above copyright
13ebfedea0SLionel Sambuc * notice, this list of conditions and the following disclaimer.
14ebfedea0SLionel Sambuc *
15ebfedea0SLionel Sambuc * 2. Redistributions in binary form must reproduce the above copyright
16ebfedea0SLionel Sambuc * notice, this list of conditions and the following disclaimer in the
17ebfedea0SLionel Sambuc * documentation and/or other materials provided with the distribution.
18ebfedea0SLionel Sambuc *
19ebfedea0SLionel Sambuc * 3. Neither the name of KTH nor the names of its contributors may be
20ebfedea0SLionel Sambuc * used to endorse or promote products derived from this software without
21ebfedea0SLionel Sambuc * specific prior written permission.
22ebfedea0SLionel Sambuc *
23ebfedea0SLionel Sambuc * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
24ebfedea0SLionel Sambuc * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25ebfedea0SLionel Sambuc * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26ebfedea0SLionel Sambuc * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
27ebfedea0SLionel Sambuc * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28ebfedea0SLionel Sambuc * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29ebfedea0SLionel Sambuc * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30ebfedea0SLionel Sambuc * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31ebfedea0SLionel Sambuc * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32ebfedea0SLionel Sambuc * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33ebfedea0SLionel Sambuc * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
34ebfedea0SLionel Sambuc
35ebfedea0SLionel Sambuc #include "krb5_locl.h"
36ebfedea0SLionel Sambuc #include <krb5/getarg.h>
37ebfedea0SLionel Sambuc #include <err.h>
38ebfedea0SLionel Sambuc
39ebfedea0SLionel Sambuc static int debug_flag = 0;
40ebfedea0SLionel Sambuc static int version_flag = 0;
41ebfedea0SLionel Sambuc static int help_flag = 0;
42ebfedea0SLionel Sambuc
43ebfedea0SLionel Sambuc #ifdef KRB5_USE_PATH_TOKENS
44ebfedea0SLionel Sambuc #define TEST_CC_NAME "%{TEMP}/krb5-cc-test-foo"
45ebfedea0SLionel Sambuc #else
46ebfedea0SLionel Sambuc #define TEST_CC_NAME "/tmp/krb5-cc-test-foo"
47ebfedea0SLionel Sambuc #endif
48ebfedea0SLionel Sambuc
49ebfedea0SLionel Sambuc static void
test_default_name(krb5_context context)50ebfedea0SLionel Sambuc test_default_name(krb5_context context)
51ebfedea0SLionel Sambuc {
52ebfedea0SLionel Sambuc krb5_error_code ret;
53ebfedea0SLionel Sambuc const char *p, *test_cc_name = TEST_CC_NAME;
54ebfedea0SLionel Sambuc char *p1, *p2, *p3;
55ebfedea0SLionel Sambuc
56ebfedea0SLionel Sambuc p = krb5_cc_default_name(context);
57ebfedea0SLionel Sambuc if (p == NULL)
58ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_default_name 1 failed");
59ebfedea0SLionel Sambuc p1 = estrdup(p);
60ebfedea0SLionel Sambuc
61ebfedea0SLionel Sambuc ret = krb5_cc_set_default_name(context, NULL);
62ebfedea0SLionel Sambuc if (p == NULL)
63ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_set_default_name failed");
64ebfedea0SLionel Sambuc
65ebfedea0SLionel Sambuc p = krb5_cc_default_name(context);
66ebfedea0SLionel Sambuc if (p == NULL)
67ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_default_name 2 failed");
68ebfedea0SLionel Sambuc p2 = estrdup(p);
69ebfedea0SLionel Sambuc
70ebfedea0SLionel Sambuc if (strcmp(p1, p2) != 0)
71ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_default_name no longer same");
72ebfedea0SLionel Sambuc
73ebfedea0SLionel Sambuc ret = krb5_cc_set_default_name(context, test_cc_name);
74ebfedea0SLionel Sambuc if (p == NULL)
75ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_set_default_name 1 failed");
76ebfedea0SLionel Sambuc
77ebfedea0SLionel Sambuc p = krb5_cc_default_name(context);
78ebfedea0SLionel Sambuc if (p == NULL)
79ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_default_name 2 failed");
80ebfedea0SLionel Sambuc p3 = estrdup(p);
81ebfedea0SLionel Sambuc
82ebfedea0SLionel Sambuc #ifndef KRB5_USE_PATH_TOKENS
83ebfedea0SLionel Sambuc /* If we are using path tokens, we don't expect the p3 and
84ebfedea0SLionel Sambuc test_cc_name to match since p3 is going to have expanded
85ebfedea0SLionel Sambuc tokens. */
86ebfedea0SLionel Sambuc if (strcmp(p3, test_cc_name) != 0)
87ebfedea0SLionel Sambuc krb5_errx (context, 1, "krb5_cc_set_default_name 1 failed");
88ebfedea0SLionel Sambuc #endif
89ebfedea0SLionel Sambuc
90ebfedea0SLionel Sambuc free(p1);
91ebfedea0SLionel Sambuc free(p2);
92ebfedea0SLionel Sambuc free(p3);
93ebfedea0SLionel Sambuc }
94ebfedea0SLionel Sambuc
95ebfedea0SLionel Sambuc /*
96ebfedea0SLionel Sambuc * Check that a closed cc still keeps it data and that it's no longer
97ebfedea0SLionel Sambuc * there when it's destroyed.
98ebfedea0SLionel Sambuc */
99ebfedea0SLionel Sambuc
100ebfedea0SLionel Sambuc static void
test_mcache(krb5_context context)101ebfedea0SLionel Sambuc test_mcache(krb5_context context)
102ebfedea0SLionel Sambuc {
103ebfedea0SLionel Sambuc krb5_error_code ret;
104ebfedea0SLionel Sambuc krb5_ccache id, id2;
105ebfedea0SLionel Sambuc const char *nc, *tc;
106ebfedea0SLionel Sambuc char *c;
107ebfedea0SLionel Sambuc krb5_principal p, p2;
108ebfedea0SLionel Sambuc
109ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &p);
110ebfedea0SLionel Sambuc if (ret)
111ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
112ebfedea0SLionel Sambuc
113ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, krb5_cc_type_memory, NULL, &id);
114ebfedea0SLionel Sambuc if (ret)
115ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_new_unique");
116ebfedea0SLionel Sambuc
117ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, id, p);
118ebfedea0SLionel Sambuc if (ret)
119ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
120ebfedea0SLionel Sambuc
121ebfedea0SLionel Sambuc nc = krb5_cc_get_name(context, id);
122ebfedea0SLionel Sambuc if (nc == NULL)
123ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_get_name");
124ebfedea0SLionel Sambuc
125ebfedea0SLionel Sambuc tc = krb5_cc_get_type(context, id);
126ebfedea0SLionel Sambuc if (tc == NULL)
127ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_get_name");
128ebfedea0SLionel Sambuc
129ebfedea0SLionel Sambuc if (asprintf(&c, "%s:%s", tc, nc) < 0 || c == NULL)
130ebfedea0SLionel Sambuc errx(1, "malloc");
131ebfedea0SLionel Sambuc
132ebfedea0SLionel Sambuc krb5_cc_close(context, id);
133ebfedea0SLionel Sambuc
134ebfedea0SLionel Sambuc ret = krb5_cc_resolve(context, c, &id2);
135ebfedea0SLionel Sambuc if (ret)
136ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_resolve");
137ebfedea0SLionel Sambuc
138ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, id2, &p2);
139ebfedea0SLionel Sambuc if (ret)
140ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_get_principal");
141ebfedea0SLionel Sambuc
142ebfedea0SLionel Sambuc if (krb5_principal_compare(context, p, p2) == FALSE)
143ebfedea0SLionel Sambuc krb5_errx(context, 1, "p != p2");
144ebfedea0SLionel Sambuc
145ebfedea0SLionel Sambuc krb5_cc_destroy(context, id2);
146ebfedea0SLionel Sambuc krb5_free_principal(context, p);
147ebfedea0SLionel Sambuc krb5_free_principal(context, p2);
148ebfedea0SLionel Sambuc
149ebfedea0SLionel Sambuc ret = krb5_cc_resolve(context, c, &id2);
150ebfedea0SLionel Sambuc if (ret)
151ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_resolve");
152ebfedea0SLionel Sambuc
153ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, id2, &p2);
154ebfedea0SLionel Sambuc if (ret == 0)
155ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_get_principal");
156ebfedea0SLionel Sambuc
157ebfedea0SLionel Sambuc krb5_cc_destroy(context, id2);
158ebfedea0SLionel Sambuc free(c);
159ebfedea0SLionel Sambuc }
160ebfedea0SLionel Sambuc
161ebfedea0SLionel Sambuc /*
162ebfedea0SLionel Sambuc * Test that init works on a destroyed cc.
163ebfedea0SLionel Sambuc */
164ebfedea0SLionel Sambuc
165ebfedea0SLionel Sambuc static void
test_init_vs_destroy(krb5_context context,const char * type)166ebfedea0SLionel Sambuc test_init_vs_destroy(krb5_context context, const char *type)
167ebfedea0SLionel Sambuc {
168ebfedea0SLionel Sambuc krb5_error_code ret;
169ebfedea0SLionel Sambuc krb5_ccache id, id2;
170ebfedea0SLionel Sambuc krb5_principal p, p2;
171ebfedea0SLionel Sambuc char *n = NULL;
172ebfedea0SLionel Sambuc
173ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &p);
174ebfedea0SLionel Sambuc if (ret)
175ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
176ebfedea0SLionel Sambuc
177ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, type, NULL, &id);
178ebfedea0SLionel Sambuc if (ret)
179*0a6a1f1dSLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_new_unique: %s", type);
180ebfedea0SLionel Sambuc
181ebfedea0SLionel Sambuc if (asprintf(&n, "%s:%s",
182ebfedea0SLionel Sambuc krb5_cc_get_type(context, id),
183ebfedea0SLionel Sambuc krb5_cc_get_name(context, id)) < 0 || n == NULL)
184ebfedea0SLionel Sambuc errx(1, "malloc");
185ebfedea0SLionel Sambuc
186ebfedea0SLionel Sambuc
187ebfedea0SLionel Sambuc ret = krb5_cc_resolve(context, n, &id2);
188ebfedea0SLionel Sambuc free(n);
189ebfedea0SLionel Sambuc if (ret)
190ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_resolve");
191ebfedea0SLionel Sambuc
192ebfedea0SLionel Sambuc krb5_cc_destroy(context, id);
193ebfedea0SLionel Sambuc
194ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, id2, p);
195ebfedea0SLionel Sambuc if (ret)
196ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
197ebfedea0SLionel Sambuc
198ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, id2, &p2);
199ebfedea0SLionel Sambuc if (ret)
200ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_get_principal");
201ebfedea0SLionel Sambuc
202ebfedea0SLionel Sambuc krb5_cc_destroy(context, id2);
203ebfedea0SLionel Sambuc krb5_free_principal(context, p);
204ebfedea0SLionel Sambuc krb5_free_principal(context, p2);
205ebfedea0SLionel Sambuc }
206ebfedea0SLionel Sambuc
207ebfedea0SLionel Sambuc static void
test_cache_remove(krb5_context context,const char * type)208ebfedea0SLionel Sambuc test_cache_remove(krb5_context context, const char *type)
209ebfedea0SLionel Sambuc {
210ebfedea0SLionel Sambuc krb5_error_code ret;
211ebfedea0SLionel Sambuc krb5_ccache id;
212ebfedea0SLionel Sambuc krb5_principal p;
213ebfedea0SLionel Sambuc krb5_creds cred;
214ebfedea0SLionel Sambuc
215ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &p);
216ebfedea0SLionel Sambuc if (ret)
217ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
218ebfedea0SLionel Sambuc
219ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, type, NULL, &id);
220ebfedea0SLionel Sambuc if (ret)
221*0a6a1f1dSLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_gen_new: %s", type);
222ebfedea0SLionel Sambuc
223ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, id, p);
224ebfedea0SLionel Sambuc if (ret)
225ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
226ebfedea0SLionel Sambuc
227ebfedea0SLionel Sambuc /* */
228ebfedea0SLionel Sambuc memset(&cred, 0, sizeof(cred));
229ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "krbtgt/SU.SE@SU.SE", &cred.server);
230ebfedea0SLionel Sambuc if (ret)
231ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
232ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &cred.client);
233ebfedea0SLionel Sambuc if (ret)
234ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
235ebfedea0SLionel Sambuc
236ebfedea0SLionel Sambuc ret = krb5_cc_store_cred(context, id, &cred);
237ebfedea0SLionel Sambuc if (ret)
238ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_store_cred");
239ebfedea0SLionel Sambuc
240ebfedea0SLionel Sambuc ret = krb5_cc_remove_cred(context, id, 0, &cred);
241ebfedea0SLionel Sambuc if (ret)
242ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_remove_cred");
243ebfedea0SLionel Sambuc
244ebfedea0SLionel Sambuc ret = krb5_cc_destroy(context, id);
245ebfedea0SLionel Sambuc if (ret)
246ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_destroy");
247ebfedea0SLionel Sambuc
248ebfedea0SLionel Sambuc krb5_free_principal(context, p);
249ebfedea0SLionel Sambuc krb5_free_principal(context, cred.server);
250ebfedea0SLionel Sambuc krb5_free_principal(context, cred.client);
251ebfedea0SLionel Sambuc }
252ebfedea0SLionel Sambuc
253ebfedea0SLionel Sambuc static void
test_mcc_default(void)254ebfedea0SLionel Sambuc test_mcc_default(void)
255ebfedea0SLionel Sambuc {
256ebfedea0SLionel Sambuc krb5_context context;
257ebfedea0SLionel Sambuc krb5_error_code ret;
258ebfedea0SLionel Sambuc krb5_ccache id, id2;
259ebfedea0SLionel Sambuc int i;
260ebfedea0SLionel Sambuc
261ebfedea0SLionel Sambuc for (i = 0; i < 10; i++) {
262ebfedea0SLionel Sambuc
263ebfedea0SLionel Sambuc ret = krb5_init_context(&context);
264ebfedea0SLionel Sambuc if (ret)
265ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_init_context");
266ebfedea0SLionel Sambuc
267ebfedea0SLionel Sambuc ret = krb5_cc_set_default_name(context, "MEMORY:foo");
268ebfedea0SLionel Sambuc if (ret)
269ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_set_default_name");
270ebfedea0SLionel Sambuc
271ebfedea0SLionel Sambuc ret = krb5_cc_default(context, &id);
272ebfedea0SLionel Sambuc if (ret)
273ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_default");
274ebfedea0SLionel Sambuc
275ebfedea0SLionel Sambuc ret = krb5_cc_default(context, &id2);
276ebfedea0SLionel Sambuc if (ret)
277ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_default");
278ebfedea0SLionel Sambuc
279ebfedea0SLionel Sambuc ret = krb5_cc_close(context, id);
280ebfedea0SLionel Sambuc if (ret)
281ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_close");
282ebfedea0SLionel Sambuc
283ebfedea0SLionel Sambuc ret = krb5_cc_close(context, id2);
284ebfedea0SLionel Sambuc if (ret)
285ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_close");
286ebfedea0SLionel Sambuc
287ebfedea0SLionel Sambuc krb5_free_context(context);
288ebfedea0SLionel Sambuc }
289ebfedea0SLionel Sambuc }
290ebfedea0SLionel Sambuc
291ebfedea0SLionel Sambuc struct {
292ebfedea0SLionel Sambuc char *str;
293ebfedea0SLionel Sambuc int fail;
294ebfedea0SLionel Sambuc char *res;
295ebfedea0SLionel Sambuc } cc_names[] = {
296ebfedea0SLionel Sambuc { "foo", 0, "foo" },
297ebfedea0SLionel Sambuc { "foo%}", 0, "foo%}" },
298ebfedea0SLionel Sambuc { "%{uid}", 0 },
299ebfedea0SLionel Sambuc { "foo%{null}", 0, "foo" },
300ebfedea0SLionel Sambuc { "foo%{null}bar", 0, "foobar" },
301ebfedea0SLionel Sambuc { "%{", 1 },
302ebfedea0SLionel Sambuc { "%{foo %{", 1 },
303ebfedea0SLionel Sambuc { "%{{", 1 },
304ebfedea0SLionel Sambuc { "%{{}", 1 },
305ebfedea0SLionel Sambuc { "%{nulll}", 1 },
306ebfedea0SLionel Sambuc { "%{does not exist}", 1 },
307ebfedea0SLionel Sambuc { "%{}", 1 },
308ebfedea0SLionel Sambuc #ifdef KRB5_USE_PATH_TOKENS
309ebfedea0SLionel Sambuc { "%{APPDATA}", 0 },
310ebfedea0SLionel Sambuc { "%{COMMON_APPDATA}", 0},
311ebfedea0SLionel Sambuc { "%{LOCAL_APPDATA}", 0},
312ebfedea0SLionel Sambuc { "%{SYSTEM}", 0},
313ebfedea0SLionel Sambuc { "%{WINDOWS}", 0},
314ebfedea0SLionel Sambuc { "%{TEMP}", 0},
315ebfedea0SLionel Sambuc { "%{USERID}", 0},
316ebfedea0SLionel Sambuc { "%{uid}", 0},
317ebfedea0SLionel Sambuc { "%{USERCONFIG}", 0},
318ebfedea0SLionel Sambuc { "%{COMMONCONFIG}", 0},
319ebfedea0SLionel Sambuc { "%{LIBDIR}", 0},
320ebfedea0SLionel Sambuc { "%{BINDIR}", 0},
321ebfedea0SLionel Sambuc { "%{LIBEXEC}", 0},
322ebfedea0SLionel Sambuc { "%{SBINDIR}", 0},
323ebfedea0SLionel Sambuc #endif
324ebfedea0SLionel Sambuc };
325ebfedea0SLionel Sambuc
326ebfedea0SLionel Sambuc static void
test_def_cc_name(krb5_context context)327ebfedea0SLionel Sambuc test_def_cc_name(krb5_context context)
328ebfedea0SLionel Sambuc {
329ebfedea0SLionel Sambuc krb5_error_code ret;
330ebfedea0SLionel Sambuc char *str;
331ebfedea0SLionel Sambuc int i;
332ebfedea0SLionel Sambuc
333ebfedea0SLionel Sambuc for (i = 0; i < sizeof(cc_names)/sizeof(cc_names[0]); i++) {
334ebfedea0SLionel Sambuc ret = _krb5_expand_default_cc_name(context, cc_names[i].str, &str);
335ebfedea0SLionel Sambuc if (ret) {
336ebfedea0SLionel Sambuc if (cc_names[i].fail == 0)
337ebfedea0SLionel Sambuc krb5_errx(context, 1, "test %d \"%s\" failed",
338ebfedea0SLionel Sambuc i, cc_names[i].str);
339ebfedea0SLionel Sambuc } else {
340ebfedea0SLionel Sambuc if (cc_names[i].fail)
341ebfedea0SLionel Sambuc krb5_errx(context, 1, "test %d \"%s\" was successful",
342ebfedea0SLionel Sambuc i, cc_names[i].str);
343ebfedea0SLionel Sambuc if (cc_names[i].res && strcmp(cc_names[i].res, str) != 0)
344ebfedea0SLionel Sambuc krb5_errx(context, 1, "test %d %s != %s",
345ebfedea0SLionel Sambuc i, cc_names[i].res, str);
346ebfedea0SLionel Sambuc if (debug_flag)
347ebfedea0SLionel Sambuc printf("%s => %s\n", cc_names[i].str, str);
348ebfedea0SLionel Sambuc free(str);
349ebfedea0SLionel Sambuc }
350ebfedea0SLionel Sambuc }
351ebfedea0SLionel Sambuc }
352ebfedea0SLionel Sambuc
353ebfedea0SLionel Sambuc static void
test_cache_find(krb5_context context,const char * principal,int find)354ebfedea0SLionel Sambuc test_cache_find(krb5_context context, const char *principal, int find)
355ebfedea0SLionel Sambuc {
356ebfedea0SLionel Sambuc krb5_principal client;
357ebfedea0SLionel Sambuc krb5_error_code ret;
358ebfedea0SLionel Sambuc krb5_ccache id = NULL;
359ebfedea0SLionel Sambuc
360ebfedea0SLionel Sambuc ret = krb5_parse_name(context, principal, &client);
361ebfedea0SLionel Sambuc if (ret)
362ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "parse_name for %s failed", principal);
363ebfedea0SLionel Sambuc
364ebfedea0SLionel Sambuc ret = krb5_cc_cache_match(context, client, &id);
365ebfedea0SLionel Sambuc if (ret && find)
366ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "cc_cache_match for %s failed", principal);
367ebfedea0SLionel Sambuc if (ret == 0 && !find)
368ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "cc_cache_match for %s found", principal);
369ebfedea0SLionel Sambuc
370ebfedea0SLionel Sambuc if (id)
371ebfedea0SLionel Sambuc krb5_cc_close(context, id);
372ebfedea0SLionel Sambuc krb5_free_principal(context, client);
373ebfedea0SLionel Sambuc }
374ebfedea0SLionel Sambuc
375ebfedea0SLionel Sambuc
376ebfedea0SLionel Sambuc static void
test_cache_iter(krb5_context context,const char * type,int destroy)377ebfedea0SLionel Sambuc test_cache_iter(krb5_context context, const char *type, int destroy)
378ebfedea0SLionel Sambuc {
379ebfedea0SLionel Sambuc krb5_cc_cache_cursor cursor;
380ebfedea0SLionel Sambuc krb5_error_code ret;
381ebfedea0SLionel Sambuc krb5_ccache id;
382ebfedea0SLionel Sambuc
383ebfedea0SLionel Sambuc ret = krb5_cc_cache_get_first (context, type, &cursor);
384ebfedea0SLionel Sambuc if (ret == KRB5_CC_NOSUPP)
385ebfedea0SLionel Sambuc return;
386ebfedea0SLionel Sambuc else if (ret)
387ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_cache_get_first(%s)", type);
388ebfedea0SLionel Sambuc
389ebfedea0SLionel Sambuc
390ebfedea0SLionel Sambuc while ((ret = krb5_cc_cache_next (context, cursor, &id)) == 0) {
391ebfedea0SLionel Sambuc krb5_principal principal;
392ebfedea0SLionel Sambuc char *name;
393ebfedea0SLionel Sambuc
394ebfedea0SLionel Sambuc if (debug_flag)
395ebfedea0SLionel Sambuc printf("name: %s\n", krb5_cc_get_name(context, id));
396ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, id, &principal);
397ebfedea0SLionel Sambuc if (ret == 0) {
398ebfedea0SLionel Sambuc ret = krb5_unparse_name(context, principal, &name);
399ebfedea0SLionel Sambuc if (ret == 0) {
400ebfedea0SLionel Sambuc if (debug_flag)
401ebfedea0SLionel Sambuc printf("\tprincipal: %s\n", name);
402ebfedea0SLionel Sambuc free(name);
403ebfedea0SLionel Sambuc }
404ebfedea0SLionel Sambuc krb5_free_principal(context, principal);
405ebfedea0SLionel Sambuc }
406ebfedea0SLionel Sambuc if (destroy)
407ebfedea0SLionel Sambuc krb5_cc_destroy(context, id);
408ebfedea0SLionel Sambuc else
409ebfedea0SLionel Sambuc krb5_cc_close(context, id);
410ebfedea0SLionel Sambuc }
411ebfedea0SLionel Sambuc
412ebfedea0SLionel Sambuc krb5_cc_cache_end_seq_get(context, cursor);
413ebfedea0SLionel Sambuc }
414ebfedea0SLionel Sambuc
415ebfedea0SLionel Sambuc static void
test_cache_iter_all(krb5_context context)416ebfedea0SLionel Sambuc test_cache_iter_all(krb5_context context)
417ebfedea0SLionel Sambuc {
418ebfedea0SLionel Sambuc krb5_cccol_cursor cursor;
419ebfedea0SLionel Sambuc krb5_error_code ret;
420ebfedea0SLionel Sambuc krb5_ccache id;
421ebfedea0SLionel Sambuc
422ebfedea0SLionel Sambuc ret = krb5_cccol_cursor_new (context, &cursor);
423ebfedea0SLionel Sambuc if (ret)
424ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cccol_cursor_new");
425ebfedea0SLionel Sambuc
426ebfedea0SLionel Sambuc
427ebfedea0SLionel Sambuc while ((ret = krb5_cccol_cursor_next (context, cursor, &id)) == 0 && id != NULL) {
428ebfedea0SLionel Sambuc krb5_principal principal;
429ebfedea0SLionel Sambuc char *name;
430ebfedea0SLionel Sambuc
431ebfedea0SLionel Sambuc if (debug_flag)
432ebfedea0SLionel Sambuc printf("name: %s\n", krb5_cc_get_name(context, id));
433ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, id, &principal);
434ebfedea0SLionel Sambuc if (ret == 0) {
435ebfedea0SLionel Sambuc ret = krb5_unparse_name(context, principal, &name);
436ebfedea0SLionel Sambuc if (ret == 0) {
437ebfedea0SLionel Sambuc if (debug_flag)
438ebfedea0SLionel Sambuc printf("\tprincipal: %s\n", name);
439ebfedea0SLionel Sambuc free(name);
440ebfedea0SLionel Sambuc }
441ebfedea0SLionel Sambuc krb5_free_principal(context, principal);
442ebfedea0SLionel Sambuc }
443ebfedea0SLionel Sambuc krb5_cc_close(context, id);
444ebfedea0SLionel Sambuc }
445ebfedea0SLionel Sambuc
446ebfedea0SLionel Sambuc krb5_cccol_cursor_free(context, &cursor);
447ebfedea0SLionel Sambuc }
448ebfedea0SLionel Sambuc
449ebfedea0SLionel Sambuc
450ebfedea0SLionel Sambuc static void
test_copy(krb5_context context,const char * from,const char * to)451ebfedea0SLionel Sambuc test_copy(krb5_context context, const char *from, const char *to)
452ebfedea0SLionel Sambuc {
453ebfedea0SLionel Sambuc krb5_ccache fromid, toid;
454ebfedea0SLionel Sambuc krb5_error_code ret;
455ebfedea0SLionel Sambuc krb5_principal p, p2;
456ebfedea0SLionel Sambuc
457ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &p);
458ebfedea0SLionel Sambuc if (ret)
459ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
460ebfedea0SLionel Sambuc
461ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, from, NULL, &fromid);
462ebfedea0SLionel Sambuc if (ret)
463*0a6a1f1dSLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_new_unique: %s", from);
464ebfedea0SLionel Sambuc
465ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, fromid, p);
466ebfedea0SLionel Sambuc if (ret)
467ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
468ebfedea0SLionel Sambuc
469ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, to, NULL, &toid);
470ebfedea0SLionel Sambuc if (ret)
471*0a6a1f1dSLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_gen_new: %s", to);
472ebfedea0SLionel Sambuc
473ebfedea0SLionel Sambuc ret = krb5_cc_copy_cache(context, fromid, toid);
474ebfedea0SLionel Sambuc if (ret)
475ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_copy_cache");
476ebfedea0SLionel Sambuc
477ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, toid, &p2);
478ebfedea0SLionel Sambuc if (ret)
479ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_get_principal");
480ebfedea0SLionel Sambuc
481ebfedea0SLionel Sambuc if (krb5_principal_compare(context, p, p2) == FALSE)
482ebfedea0SLionel Sambuc krb5_errx(context, 1, "p != p2");
483ebfedea0SLionel Sambuc
484ebfedea0SLionel Sambuc krb5_free_principal(context, p);
485ebfedea0SLionel Sambuc krb5_free_principal(context, p2);
486ebfedea0SLionel Sambuc
487ebfedea0SLionel Sambuc krb5_cc_destroy(context, fromid);
488ebfedea0SLionel Sambuc krb5_cc_destroy(context, toid);
489ebfedea0SLionel Sambuc }
490ebfedea0SLionel Sambuc
491ebfedea0SLionel Sambuc static void
test_move(krb5_context context,const char * type)492ebfedea0SLionel Sambuc test_move(krb5_context context, const char *type)
493ebfedea0SLionel Sambuc {
494ebfedea0SLionel Sambuc const krb5_cc_ops *ops;
495ebfedea0SLionel Sambuc krb5_ccache fromid, toid;
496ebfedea0SLionel Sambuc krb5_error_code ret;
497ebfedea0SLionel Sambuc krb5_principal p, p2;
498ebfedea0SLionel Sambuc
499ebfedea0SLionel Sambuc ops = krb5_cc_get_prefix_ops(context, type);
500ebfedea0SLionel Sambuc if (ops == NULL)
501ebfedea0SLionel Sambuc return;
502ebfedea0SLionel Sambuc
503ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, type, NULL, &fromid);
504ebfedea0SLionel Sambuc if (ret == KRB5_CC_NOSUPP)
505ebfedea0SLionel Sambuc return;
506ebfedea0SLionel Sambuc else if (ret)
507*0a6a1f1dSLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_new_unique: %s", type);
508ebfedea0SLionel Sambuc
509ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &p);
510ebfedea0SLionel Sambuc if (ret)
511ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
512ebfedea0SLionel Sambuc
513ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, fromid, p);
514ebfedea0SLionel Sambuc if (ret)
515ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
516ebfedea0SLionel Sambuc
517ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, type, NULL, &toid);
518ebfedea0SLionel Sambuc if (ret)
519ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_new_unique");
520ebfedea0SLionel Sambuc
521ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, toid, p);
522ebfedea0SLionel Sambuc if (ret)
523ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
524ebfedea0SLionel Sambuc
525ebfedea0SLionel Sambuc ret = krb5_cc_get_principal(context, toid, &p2);
526ebfedea0SLionel Sambuc if (ret)
527ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_get_principal");
528ebfedea0SLionel Sambuc
529ebfedea0SLionel Sambuc if (krb5_principal_compare(context, p, p2) == FALSE)
530ebfedea0SLionel Sambuc krb5_errx(context, 1, "p != p2");
531ebfedea0SLionel Sambuc
532ebfedea0SLionel Sambuc krb5_free_principal(context, p);
533ebfedea0SLionel Sambuc krb5_free_principal(context, p2);
534ebfedea0SLionel Sambuc
535ebfedea0SLionel Sambuc krb5_cc_destroy(context, toid);
536ebfedea0SLionel Sambuc krb5_cc_destroy(context, fromid);
537ebfedea0SLionel Sambuc }
538ebfedea0SLionel Sambuc
539ebfedea0SLionel Sambuc
540ebfedea0SLionel Sambuc static void
test_prefix_ops(krb5_context context,const char * name,const krb5_cc_ops * ops)541ebfedea0SLionel Sambuc test_prefix_ops(krb5_context context, const char *name, const krb5_cc_ops *ops)
542ebfedea0SLionel Sambuc {
543ebfedea0SLionel Sambuc const krb5_cc_ops *o;
544ebfedea0SLionel Sambuc
545ebfedea0SLionel Sambuc o = krb5_cc_get_prefix_ops(context, name);
546ebfedea0SLionel Sambuc if (o == NULL)
547ebfedea0SLionel Sambuc krb5_errx(context, 1, "found no match for prefix '%s'", name);
548ebfedea0SLionel Sambuc if (strcmp(o->prefix, ops->prefix) != 0)
549ebfedea0SLionel Sambuc krb5_errx(context, 1, "ops for prefix '%s' is not "
550ebfedea0SLionel Sambuc "the expected %s != %s", name, o->prefix, ops->prefix);
551ebfedea0SLionel Sambuc }
552ebfedea0SLionel Sambuc
553ebfedea0SLionel Sambuc static void
test_cc_config(krb5_context context)554ebfedea0SLionel Sambuc test_cc_config(krb5_context context)
555ebfedea0SLionel Sambuc {
556ebfedea0SLionel Sambuc krb5_error_code ret;
557ebfedea0SLionel Sambuc krb5_principal p;
558ebfedea0SLionel Sambuc krb5_ccache id;
559ebfedea0SLionel Sambuc unsigned int i;
560ebfedea0SLionel Sambuc
561ebfedea0SLionel Sambuc ret = krb5_cc_new_unique(context, "MEMORY", "bar", &id);
562ebfedea0SLionel Sambuc if (ret)
563ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_new_unique");
564ebfedea0SLionel Sambuc
565ebfedea0SLionel Sambuc ret = krb5_parse_name(context, "lha@SU.SE", &p);
566ebfedea0SLionel Sambuc if (ret)
567ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_parse_name");
568ebfedea0SLionel Sambuc
569ebfedea0SLionel Sambuc ret = krb5_cc_initialize(context, id, p);
570ebfedea0SLionel Sambuc if (ret)
571ebfedea0SLionel Sambuc krb5_err(context, 1, ret, "krb5_cc_initialize");
572ebfedea0SLionel Sambuc
573ebfedea0SLionel Sambuc for (i = 0; i < 1000; i++) {
574ebfedea0SLionel Sambuc krb5_data data, data2;
575ebfedea0SLionel Sambuc const char *name = "foo";
576ebfedea0SLionel Sambuc krb5_principal p1 = NULL;
577ebfedea0SLionel Sambuc
578ebfedea0SLionel Sambuc if (i & 1)
579ebfedea0SLionel Sambuc p1 = p;
580ebfedea0SLionel Sambuc
581ebfedea0SLionel Sambuc data.data = rk_UNCONST(name);
582ebfedea0SLionel Sambuc data.length = strlen(name);
583ebfedea0SLionel Sambuc
584ebfedea0SLionel Sambuc ret = krb5_cc_set_config(context, id, p1, "FriendlyName", &data);
585ebfedea0SLionel Sambuc if (ret)
586ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_set_config: add");
587ebfedea0SLionel Sambuc
588ebfedea0SLionel Sambuc ret = krb5_cc_get_config(context, id, p1, "FriendlyName", &data2);
589ebfedea0SLionel Sambuc if (ret)
590ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_get_config: first");
591ebfedea0SLionel Sambuc krb5_data_free(&data2);
592ebfedea0SLionel Sambuc
593ebfedea0SLionel Sambuc ret = krb5_cc_set_config(context, id, p1, "FriendlyName", &data);
594ebfedea0SLionel Sambuc if (ret)
595ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_set_config: add -second");
596ebfedea0SLionel Sambuc
597ebfedea0SLionel Sambuc ret = krb5_cc_get_config(context, id, p1, "FriendlyName", &data2);
598ebfedea0SLionel Sambuc if (ret)
599ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_get_config: second");
600ebfedea0SLionel Sambuc krb5_data_free(&data2);
601ebfedea0SLionel Sambuc
602ebfedea0SLionel Sambuc ret = krb5_cc_set_config(context, id, p1, "FriendlyName", NULL);
603ebfedea0SLionel Sambuc if (ret)
604ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_set_config: delete");
605ebfedea0SLionel Sambuc
606ebfedea0SLionel Sambuc ret = krb5_cc_get_config(context, id, p1, "FriendlyName", &data2);
607ebfedea0SLionel Sambuc if (ret == 0)
608ebfedea0SLionel Sambuc krb5_errx(context, 1, "krb5_cc_get_config: non-existant");
609ebfedea0SLionel Sambuc }
610ebfedea0SLionel Sambuc
611ebfedea0SLionel Sambuc krb5_cc_destroy(context, id);
612ebfedea0SLionel Sambuc krb5_free_principal(context, p);
613ebfedea0SLionel Sambuc }
614ebfedea0SLionel Sambuc
615ebfedea0SLionel Sambuc
616ebfedea0SLionel Sambuc static struct getargs args[] = {
617ebfedea0SLionel Sambuc {"debug", 'd', arg_flag, &debug_flag,
618ebfedea0SLionel Sambuc "turn on debuggin", NULL },
619ebfedea0SLionel Sambuc {"version", 0, arg_flag, &version_flag,
620ebfedea0SLionel Sambuc "print version", NULL },
621ebfedea0SLionel Sambuc {"help", 0, arg_flag, &help_flag,
622ebfedea0SLionel Sambuc NULL, NULL }
623ebfedea0SLionel Sambuc };
624ebfedea0SLionel Sambuc
625ebfedea0SLionel Sambuc static void
usage(int ret)626ebfedea0SLionel Sambuc usage (int ret)
627ebfedea0SLionel Sambuc {
628ebfedea0SLionel Sambuc arg_printusage (args, sizeof(args)/sizeof(*args), NULL, "hostname ...");
629ebfedea0SLionel Sambuc exit (ret);
630ebfedea0SLionel Sambuc }
631ebfedea0SLionel Sambuc
632ebfedea0SLionel Sambuc int
main(int argc,char ** argv)633ebfedea0SLionel Sambuc main(int argc, char **argv)
634ebfedea0SLionel Sambuc {
635ebfedea0SLionel Sambuc krb5_context context;
636ebfedea0SLionel Sambuc krb5_error_code ret;
637ebfedea0SLionel Sambuc int optidx = 0;
638ebfedea0SLionel Sambuc krb5_ccache id1, id2;
639ebfedea0SLionel Sambuc
640ebfedea0SLionel Sambuc setprogname(argv[0]);
641ebfedea0SLionel Sambuc
642ebfedea0SLionel Sambuc if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
643ebfedea0SLionel Sambuc usage(1);
644ebfedea0SLionel Sambuc
645ebfedea0SLionel Sambuc if (help_flag)
646ebfedea0SLionel Sambuc usage (0);
647ebfedea0SLionel Sambuc
648ebfedea0SLionel Sambuc if(version_flag){
649ebfedea0SLionel Sambuc print_version(NULL);
650ebfedea0SLionel Sambuc exit(0);
651ebfedea0SLionel Sambuc }
652ebfedea0SLionel Sambuc
653ebfedea0SLionel Sambuc argc -= optidx;
654ebfedea0SLionel Sambuc argv += optidx;
655ebfedea0SLionel Sambuc
656ebfedea0SLionel Sambuc ret = krb5_init_context(&context);
657ebfedea0SLionel Sambuc if (ret)
658ebfedea0SLionel Sambuc errx (1, "krb5_init_context failed: %d", ret);
659ebfedea0SLionel Sambuc
660ebfedea0SLionel Sambuc test_cache_remove(context, krb5_cc_type_file);
661ebfedea0SLionel Sambuc test_cache_remove(context, krb5_cc_type_memory);
662ebfedea0SLionel Sambuc #ifdef USE_SQLITE
663ebfedea0SLionel Sambuc test_cache_remove(context, krb5_cc_type_scc);
664ebfedea0SLionel Sambuc #endif
665ebfedea0SLionel Sambuc
666ebfedea0SLionel Sambuc test_default_name(context);
667ebfedea0SLionel Sambuc test_mcache(context);
668ebfedea0SLionel Sambuc test_init_vs_destroy(context, krb5_cc_type_memory);
669ebfedea0SLionel Sambuc test_init_vs_destroy(context, krb5_cc_type_file);
670ebfedea0SLionel Sambuc #if 0
671ebfedea0SLionel Sambuc test_init_vs_destroy(context, krb5_cc_type_api);
672ebfedea0SLionel Sambuc #endif
673ebfedea0SLionel Sambuc test_init_vs_destroy(context, krb5_cc_type_scc);
674ebfedea0SLionel Sambuc test_mcc_default();
675ebfedea0SLionel Sambuc test_def_cc_name(context);
676ebfedea0SLionel Sambuc
677ebfedea0SLionel Sambuc test_cache_iter_all(context);
678ebfedea0SLionel Sambuc
679ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_memory, 0);
680ebfedea0SLionel Sambuc {
681ebfedea0SLionel Sambuc krb5_principal p;
682ebfedea0SLionel Sambuc krb5_cc_new_unique(context, krb5_cc_type_memory, "bar", &id1);
683ebfedea0SLionel Sambuc krb5_cc_new_unique(context, krb5_cc_type_memory, "baz", &id2);
684ebfedea0SLionel Sambuc krb5_parse_name(context, "lha@SU.SE", &p);
685ebfedea0SLionel Sambuc krb5_cc_initialize(context, id1, p);
686ebfedea0SLionel Sambuc krb5_free_principal(context, p);
687ebfedea0SLionel Sambuc }
688ebfedea0SLionel Sambuc
689ebfedea0SLionel Sambuc test_cache_find(context, "lha@SU.SE", 1);
690ebfedea0SLionel Sambuc test_cache_find(context, "hulabundulahotentot@SU.SE", 0);
691ebfedea0SLionel Sambuc
692ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_memory, 0);
693ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_memory, 1);
694ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_memory, 0);
695ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_file, 0);
696ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_api, 0);
697ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_scc, 0);
698ebfedea0SLionel Sambuc test_cache_iter(context, krb5_cc_type_scc, 1);
699ebfedea0SLionel Sambuc
700ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_file, krb5_cc_type_file);
701ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_memory, krb5_cc_type_memory);
702ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_file, krb5_cc_type_memory);
703ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_memory, krb5_cc_type_file);
704ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_scc, krb5_cc_type_file);
705ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_file, krb5_cc_type_scc);
706ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_scc, krb5_cc_type_memory);
707ebfedea0SLionel Sambuc test_copy(context, krb5_cc_type_memory, krb5_cc_type_scc);
708ebfedea0SLionel Sambuc
709ebfedea0SLionel Sambuc test_move(context, krb5_cc_type_file);
710ebfedea0SLionel Sambuc test_move(context, krb5_cc_type_memory);
711ebfedea0SLionel Sambuc #ifdef HAVE_KCM
712ebfedea0SLionel Sambuc test_move(context, krb5_cc_type_kcm);
713ebfedea0SLionel Sambuc #endif
714ebfedea0SLionel Sambuc test_move(context, krb5_cc_type_scc);
715ebfedea0SLionel Sambuc
716ebfedea0SLionel Sambuc test_prefix_ops(context, "FILE:/tmp/foo", &krb5_fcc_ops);
717ebfedea0SLionel Sambuc test_prefix_ops(context, "FILE", &krb5_fcc_ops);
718ebfedea0SLionel Sambuc test_prefix_ops(context, "MEMORY", &krb5_mcc_ops);
719ebfedea0SLionel Sambuc test_prefix_ops(context, "MEMORY:foo", &krb5_mcc_ops);
720ebfedea0SLionel Sambuc test_prefix_ops(context, "/tmp/kaka", &krb5_fcc_ops);
721ebfedea0SLionel Sambuc #ifdef HAVE_SCC
722ebfedea0SLionel Sambuc test_prefix_ops(context, "SCC:", &krb5_scc_ops);
723ebfedea0SLionel Sambuc test_prefix_ops(context, "SCC:foo", &krb5_scc_ops);
724ebfedea0SLionel Sambuc #endif
725ebfedea0SLionel Sambuc
726ebfedea0SLionel Sambuc krb5_cc_destroy(context, id1);
727ebfedea0SLionel Sambuc krb5_cc_destroy(context, id2);
728ebfedea0SLionel Sambuc
729ebfedea0SLionel Sambuc test_cc_config(context);
730ebfedea0SLionel Sambuc
731ebfedea0SLionel Sambuc krb5_free_context(context);
732ebfedea0SLionel Sambuc
733ebfedea0SLionel Sambuc #if 0
734ebfedea0SLionel Sambuc sleep(60);
735ebfedea0SLionel Sambuc #endif
736ebfedea0SLionel Sambuc
737ebfedea0SLionel Sambuc return 0;
738ebfedea0SLionel Sambuc }
739