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