xref: /netbsd-src/crypto/external/bsd/heimdal/dist/lib/krb5/test_princ.c (revision d3273b5b76f5afaafe308cead5511dbb8df8c5e9)
1*d3273b5bSchristos /*	$NetBSD: test_princ.c,v 1.2 2017/01/28 21:31:49 christos Exp $	*/
2ca1c9b0cSelric 
3ca1c9b0cSelric /*
4ca1c9b0cSelric  * Copyright (c) 2003 Kungliga Tekniska Högskolan
5ca1c9b0cSelric  * (Royal Institute of Technology, Stockholm, Sweden).
6ca1c9b0cSelric  * All rights reserved.
7ca1c9b0cSelric  *
8ca1c9b0cSelric  * Redistribution and use in source and binary forms, with or without
9ca1c9b0cSelric  * modification, are permitted provided that the following conditions
10ca1c9b0cSelric  * are met:
11ca1c9b0cSelric  *
12ca1c9b0cSelric  * 1. Redistributions of source code must retain the above copyright
13ca1c9b0cSelric  *    notice, this list of conditions and the following disclaimer.
14ca1c9b0cSelric  *
15ca1c9b0cSelric  * 2. Redistributions in binary form must reproduce the above copyright
16ca1c9b0cSelric  *    notice, this list of conditions and the following disclaimer in the
17ca1c9b0cSelric  *    documentation and/or other materials provided with the distribution.
18ca1c9b0cSelric  *
19ca1c9b0cSelric  * 3. Neither the name of KTH nor the names of its contributors may be
20ca1c9b0cSelric  *    used to endorse or promote products derived from this software without
21ca1c9b0cSelric  *    specific prior written permission.
22ca1c9b0cSelric  *
23ca1c9b0cSelric  * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
24ca1c9b0cSelric  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25ca1c9b0cSelric  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26ca1c9b0cSelric  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
27ca1c9b0cSelric  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28ca1c9b0cSelric  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29ca1c9b0cSelric  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30ca1c9b0cSelric  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31ca1c9b0cSelric  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32ca1c9b0cSelric  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33ca1c9b0cSelric  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
34ca1c9b0cSelric 
35ca1c9b0cSelric #include "krb5_locl.h"
36ca1c9b0cSelric #include <err.h>
37ca1c9b0cSelric 
38ca1c9b0cSelric /*
39ca1c9b0cSelric  * Check that a closed cc still keeps it data and that it's no longer
40ca1c9b0cSelric  * there when it's destroyed.
41ca1c9b0cSelric  */
42ca1c9b0cSelric 
43ca1c9b0cSelric static void
test_princ(krb5_context context)44ca1c9b0cSelric test_princ(krb5_context context)
45ca1c9b0cSelric {
46ca1c9b0cSelric     const char *princ = "lha@SU.SE";
47ca1c9b0cSelric     const char *princ_short = "lha";
48ca1c9b0cSelric     const char *noquote;
49ca1c9b0cSelric     krb5_error_code ret;
50ca1c9b0cSelric     char *princ_unparsed;
51ca1c9b0cSelric     char *princ_reformed = NULL;
52ca1c9b0cSelric     const char *realm;
53ca1c9b0cSelric 
54ca1c9b0cSelric     krb5_principal p, p2;
55ca1c9b0cSelric 
56ca1c9b0cSelric     ret = krb5_parse_name(context, princ, &p);
57ca1c9b0cSelric     if (ret)
58ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
59ca1c9b0cSelric 
60ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &princ_unparsed);
61ca1c9b0cSelric     if (ret)
62ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
63ca1c9b0cSelric 
64ca1c9b0cSelric     if (strcmp(princ, princ_unparsed)) {
65ca1c9b0cSelric 	krb5_errx(context, 1, "%s != %s", princ, princ_unparsed);
66ca1c9b0cSelric     }
67ca1c9b0cSelric 
68ca1c9b0cSelric     free(princ_unparsed);
69ca1c9b0cSelric 
70ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p,
71ca1c9b0cSelric 				  KRB5_PRINCIPAL_UNPARSE_NO_REALM,
72ca1c9b0cSelric 				  &princ_unparsed);
73ca1c9b0cSelric     if (ret)
74ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
75ca1c9b0cSelric 
76ca1c9b0cSelric     if (strcmp(princ_short, princ_unparsed))
77ca1c9b0cSelric 	krb5_errx(context, 1, "%s != %s", princ_short, princ_unparsed);
78ca1c9b0cSelric     free(princ_unparsed);
79ca1c9b0cSelric 
80ca1c9b0cSelric     realm = krb5_principal_get_realm(context, p);
81ca1c9b0cSelric 
82ca1c9b0cSelric     if (asprintf(&princ_reformed, "%s@%s", princ_short, realm) < 0 || princ_reformed == NULL)
83ca1c9b0cSelric 	errx(1, "malloc");
84ca1c9b0cSelric 
85ca1c9b0cSelric     ret = krb5_parse_name(context, princ_reformed, &p2);
86ca1c9b0cSelric     free(princ_reformed);
87ca1c9b0cSelric     if (ret)
88ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
89ca1c9b0cSelric 
90ca1c9b0cSelric     if (!krb5_principal_compare(context, p, p2)) {
91ca1c9b0cSelric 	krb5_errx(context, 1, "p != p2");
92ca1c9b0cSelric     }
93ca1c9b0cSelric 
94ca1c9b0cSelric     krb5_free_principal(context, p2);
95ca1c9b0cSelric 
96ca1c9b0cSelric     ret = krb5_set_default_realm(context, "SU.SE");
97ca1c9b0cSelric     if (ret)
98ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
99ca1c9b0cSelric 
100ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p,
101ca1c9b0cSelric 				  KRB5_PRINCIPAL_UNPARSE_SHORT,
102ca1c9b0cSelric 				  &princ_unparsed);
103ca1c9b0cSelric     if (ret)
104ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
105ca1c9b0cSelric 
106ca1c9b0cSelric     if (strcmp(princ_short, princ_unparsed))
107ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ_short, princ_unparsed);
108ca1c9b0cSelric     free(princ_unparsed);
109ca1c9b0cSelric 
110ca1c9b0cSelric     ret = krb5_parse_name(context, princ_short, &p2);
111ca1c9b0cSelric     if (ret)
112ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
113ca1c9b0cSelric 
114ca1c9b0cSelric     if (!krb5_principal_compare(context, p, p2))
115ca1c9b0cSelric 	krb5_errx(context, 1, "p != p2");
116ca1c9b0cSelric     krb5_free_principal(context, p2);
117ca1c9b0cSelric 
118ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &princ_unparsed);
119ca1c9b0cSelric     if (ret)
120ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
121ca1c9b0cSelric 
122ca1c9b0cSelric     if (strcmp(princ, princ_unparsed))
123ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
124ca1c9b0cSelric     free(princ_unparsed);
125ca1c9b0cSelric 
126ca1c9b0cSelric     ret = krb5_set_default_realm(context, "SAMBA.ORG");
127ca1c9b0cSelric     if (ret)
128ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
129ca1c9b0cSelric 
130ca1c9b0cSelric     ret = krb5_parse_name(context, princ_short, &p2);
131ca1c9b0cSelric     if (ret)
132ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
133ca1c9b0cSelric 
134ca1c9b0cSelric     if (krb5_principal_compare(context, p, p2))
135ca1c9b0cSelric 	krb5_errx(context, 1, "p == p2");
136ca1c9b0cSelric 
137ca1c9b0cSelric     if (!krb5_principal_compare_any_realm(context, p, p2))
138ca1c9b0cSelric 	krb5_errx(context, 1, "(ignoring realms) p != p2");
139ca1c9b0cSelric 
140ca1c9b0cSelric     ret = krb5_unparse_name(context, p2, &princ_unparsed);
141ca1c9b0cSelric     if (ret)
142ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
143ca1c9b0cSelric 
144ca1c9b0cSelric     if (strcmp(princ, princ_unparsed) == 0)
145ca1c9b0cSelric 	krb5_errx(context, 1, "%s == %s", princ, princ_unparsed);
146ca1c9b0cSelric     free(princ_unparsed);
147ca1c9b0cSelric 
148ca1c9b0cSelric     krb5_free_principal(context, p2);
149ca1c9b0cSelric 
150ca1c9b0cSelric     ret = krb5_parse_name(context, princ, &p2);
151ca1c9b0cSelric     if (ret)
152ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
153ca1c9b0cSelric 
154ca1c9b0cSelric     if (!krb5_principal_compare(context, p, p2))
155ca1c9b0cSelric 	krb5_errx(context, 1, "p != p2");
156ca1c9b0cSelric 
157ca1c9b0cSelric     ret = krb5_unparse_name(context, p2, &princ_unparsed);
158ca1c9b0cSelric     if (ret)
159ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
160ca1c9b0cSelric 
161ca1c9b0cSelric     if (strcmp(princ, princ_unparsed))
162ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
163ca1c9b0cSelric     free(princ_unparsed);
164ca1c9b0cSelric 
165ca1c9b0cSelric     krb5_free_principal(context, p2);
166ca1c9b0cSelric 
167ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p,
168ca1c9b0cSelric 				  KRB5_PRINCIPAL_UNPARSE_SHORT,
169ca1c9b0cSelric 				  &princ_unparsed);
170ca1c9b0cSelric     if (ret)
171ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name_short");
172ca1c9b0cSelric 
173ca1c9b0cSelric     if (strcmp(princ, princ_unparsed) != 0)
174ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
175ca1c9b0cSelric     free(princ_unparsed);
176ca1c9b0cSelric 
177ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &princ_unparsed);
178ca1c9b0cSelric     if (ret)
179ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name_short");
180ca1c9b0cSelric 
181ca1c9b0cSelric     if (strcmp(princ, princ_unparsed))
182ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
183ca1c9b0cSelric     free(princ_unparsed);
184ca1c9b0cSelric 
185ca1c9b0cSelric     ret = krb5_parse_name_flags(context, princ,
186ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_NO_REALM,
187ca1c9b0cSelric 				&p2);
188ca1c9b0cSelric     if (!ret)
189ca1c9b0cSelric 	krb5_err(context, 1, ret, "Should have failed to parse %s a "
190ca1c9b0cSelric 		 "short name", princ);
191ca1c9b0cSelric 
192ca1c9b0cSelric     ret = krb5_parse_name_flags(context, princ_short,
193ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_NO_REALM,
194ca1c9b0cSelric 				&p2);
195ca1c9b0cSelric     if (ret)
196ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
197ca1c9b0cSelric 
198ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p2,
199ca1c9b0cSelric 				  KRB5_PRINCIPAL_UNPARSE_NO_REALM,
200ca1c9b0cSelric 				  &princ_unparsed);
201ca1c9b0cSelric     krb5_free_principal(context, p2);
202ca1c9b0cSelric     if (ret)
203ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name_norealm");
204ca1c9b0cSelric 
205ca1c9b0cSelric     if (strcmp(princ_short, princ_unparsed))
206ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ_short, princ_unparsed);
207ca1c9b0cSelric     free(princ_unparsed);
208ca1c9b0cSelric 
209ca1c9b0cSelric     ret = krb5_parse_name_flags(context, princ_short,
210ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_REQUIRE_REALM,
211ca1c9b0cSelric 				&p2);
212ca1c9b0cSelric     if (!ret)
213ca1c9b0cSelric 	krb5_err(context, 1, ret, "Should have failed to parse %s "
214ca1c9b0cSelric 		 "because it lacked a realm", princ_short);
215ca1c9b0cSelric 
216ca1c9b0cSelric     ret = krb5_parse_name_flags(context, princ,
217ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_REQUIRE_REALM,
218ca1c9b0cSelric 				&p2);
219ca1c9b0cSelric     if (ret)
220ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
221ca1c9b0cSelric 
222ca1c9b0cSelric     if (!krb5_principal_compare(context, p, p2))
223ca1c9b0cSelric 	krb5_errx(context, 1, "p != p2");
224ca1c9b0cSelric 
225ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p2,
226ca1c9b0cSelric 				  KRB5_PRINCIPAL_UNPARSE_NO_REALM,
227ca1c9b0cSelric 				  &princ_unparsed);
228ca1c9b0cSelric     krb5_free_principal(context, p2);
229ca1c9b0cSelric     if (ret)
230ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name_norealm");
231ca1c9b0cSelric 
232ca1c9b0cSelric     if (strcmp(princ_short, princ_unparsed))
233ca1c9b0cSelric 	krb5_errx(context, 1, "'%s' != '%s'", princ_short, princ_unparsed);
234ca1c9b0cSelric     free(princ_unparsed);
235ca1c9b0cSelric 
236ca1c9b0cSelric     krb5_free_principal(context, p);
237ca1c9b0cSelric 
238ca1c9b0cSelric     /* test quoting */
239ca1c9b0cSelric 
240ca1c9b0cSelric     princ = "test\\ principal@SU.SE";
241ca1c9b0cSelric     noquote = "test principal@SU.SE";
242ca1c9b0cSelric 
243ca1c9b0cSelric     ret = krb5_parse_name_flags(context, princ, 0, &p);
244ca1c9b0cSelric     if (ret)
245ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
246ca1c9b0cSelric 
247ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p, 0, &princ_unparsed);
248ca1c9b0cSelric     if (ret)
249ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name_flags");
250ca1c9b0cSelric 
251ca1c9b0cSelric     if (strcmp(princ, princ_unparsed))
252ca1c9b0cSelric 	krb5_errx(context, 1, "q '%s' != '%s'", princ, princ_unparsed);
253ca1c9b0cSelric     free(princ_unparsed);
254ca1c9b0cSelric 
255ca1c9b0cSelric     ret = krb5_unparse_name_flags(context, p, KRB5_PRINCIPAL_UNPARSE_DISPLAY,
256ca1c9b0cSelric 				  &princ_unparsed);
257ca1c9b0cSelric     if (ret)
258ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name_flags");
259ca1c9b0cSelric 
260ca1c9b0cSelric     if (strcmp(noquote, princ_unparsed))
261ca1c9b0cSelric 	krb5_errx(context, 1, "nq '%s' != '%s'", noquote, princ_unparsed);
262ca1c9b0cSelric     free(princ_unparsed);
263ca1c9b0cSelric 
264ca1c9b0cSelric     krb5_free_principal(context, p);
265ca1c9b0cSelric }
266ca1c9b0cSelric 
267ca1c9b0cSelric static void
test_enterprise(krb5_context context)268ca1c9b0cSelric test_enterprise(krb5_context context)
269ca1c9b0cSelric {
270ca1c9b0cSelric     krb5_error_code ret;
271ca1c9b0cSelric     char *unparsed;
272ca1c9b0cSelric     krb5_principal p;
273ca1c9b0cSelric 
274ca1c9b0cSelric     ret = krb5_set_default_realm(context, "SAMBA.ORG");
275ca1c9b0cSelric     if (ret)
276ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name");
277ca1c9b0cSelric 
278ca1c9b0cSelric     ret = krb5_parse_name_flags(context, "lha@su.se@WIN.SU.SE",
279ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_ENTERPRISE, &p);
280ca1c9b0cSelric     if (ret)
281ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name_flags");
282ca1c9b0cSelric 
283ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &unparsed);
284ca1c9b0cSelric     if (ret)
285ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name");
286ca1c9b0cSelric 
287ca1c9b0cSelric     krb5_free_principal(context, p);
288ca1c9b0cSelric 
289ca1c9b0cSelric     if (strcmp(unparsed, "lha\\@su.se@WIN.SU.SE") != 0)
290ca1c9b0cSelric 	krb5_errx(context, 1, "enterprise name failed 1");
291ca1c9b0cSelric     free(unparsed);
292ca1c9b0cSelric 
293ca1c9b0cSelric     /*
294ca1c9b0cSelric      *
295ca1c9b0cSelric      */
296ca1c9b0cSelric 
297ca1c9b0cSelric     ret = krb5_parse_name_flags(context, "lha\\@su.se@WIN.SU.SE",
298ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_ENTERPRISE, &p);
299ca1c9b0cSelric     if (ret)
300ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name_flags");
301ca1c9b0cSelric 
302ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &unparsed);
303ca1c9b0cSelric     if (ret)
304ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name");
305ca1c9b0cSelric 
306ca1c9b0cSelric     krb5_free_principal(context, p);
307ca1c9b0cSelric     if (strcmp(unparsed, "lha\\@su.se\\@WIN.SU.SE@SAMBA.ORG") != 0)
308ca1c9b0cSelric 	krb5_errx(context, 1, "enterprise name failed 2: %s", unparsed);
309ca1c9b0cSelric     free(unparsed);
310ca1c9b0cSelric 
311ca1c9b0cSelric     /*
312ca1c9b0cSelric      *
313ca1c9b0cSelric      */
314ca1c9b0cSelric 
315ca1c9b0cSelric     ret = krb5_parse_name_flags(context, "lha\\@su.se@WIN.SU.SE", 0, &p);
316ca1c9b0cSelric     if (ret)
317ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name_flags");
318ca1c9b0cSelric 
319ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &unparsed);
320ca1c9b0cSelric     if (ret)
321ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name");
322ca1c9b0cSelric 
323ca1c9b0cSelric     krb5_free_principal(context, p);
324ca1c9b0cSelric     if (strcmp(unparsed, "lha\\@su.se@WIN.SU.SE") != 0)
325ca1c9b0cSelric 	krb5_errx(context, 1, "enterprise name failed 3");
326ca1c9b0cSelric     free(unparsed);
327ca1c9b0cSelric 
328ca1c9b0cSelric     /*
329ca1c9b0cSelric      *
330ca1c9b0cSelric      */
331ca1c9b0cSelric 
332ca1c9b0cSelric     ret = krb5_parse_name_flags(context, "lha@su.se",
333ca1c9b0cSelric 				KRB5_PRINCIPAL_PARSE_ENTERPRISE, &p);
334ca1c9b0cSelric     if (ret)
335ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_parse_name_flags");
336ca1c9b0cSelric 
337ca1c9b0cSelric     ret = krb5_unparse_name(context, p, &unparsed);
338ca1c9b0cSelric     if (ret)
339ca1c9b0cSelric 	krb5_err(context, 1, ret, "krb5_unparse_name");
340ca1c9b0cSelric 
341ca1c9b0cSelric     krb5_free_principal(context, p);
342ca1c9b0cSelric     if (strcmp(unparsed, "lha\\@su.se@SAMBA.ORG") != 0)
343ca1c9b0cSelric 	krb5_errx(context, 1, "enterprise name failed 2: %s", unparsed);
344ca1c9b0cSelric     free(unparsed);
345ca1c9b0cSelric }
346ca1c9b0cSelric 
347ca1c9b0cSelric 
348ca1c9b0cSelric int
main(int argc,char ** argv)349ca1c9b0cSelric main(int argc, char **argv)
350ca1c9b0cSelric {
351ca1c9b0cSelric     krb5_context context;
352ca1c9b0cSelric     krb5_error_code ret;
353ca1c9b0cSelric 
354ca1c9b0cSelric     setprogname(argv[0]);
355ca1c9b0cSelric 
356ca1c9b0cSelric     ret = krb5_init_context(&context);
357ca1c9b0cSelric     if (ret)
358ca1c9b0cSelric 	errx (1, "krb5_init_context failed: %d", ret);
359ca1c9b0cSelric 
360ca1c9b0cSelric     test_princ(context);
361ca1c9b0cSelric 
362ca1c9b0cSelric     test_enterprise(context);
363ca1c9b0cSelric 
364ca1c9b0cSelric     krb5_free_context(context);
365ca1c9b0cSelric 
366ca1c9b0cSelric     return 0;
367ca1c9b0cSelric }
368