turn off v4 conversion stuff
[heimdal.git] / lib / krb5 / test_princ.c
blobe75b2ec2c243f985e4f27496fe607494d4643b6b
1 /*
2 * Copyright (c) 2003 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of KTH nor the names of its contributors may be
18 * used to endorse or promote products derived from this software without
19 * specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
33 #include "krb5_locl.h"
34 #include <err.h>
37 * Check that a closed cc still keeps it data and that it's no longer
38 * there when it's destroyed.
41 static void
42 test_princ(krb5_context context)
44 const char *princ = "lha@SU.SE";
45 const char *princ_short = "lha";
46 const char *noquote;
47 krb5_error_code ret;
48 char *princ_unparsed;
49 char *princ_reformed = NULL;
50 const char *realm;
52 krb5_principal p, p2;
54 ret = krb5_parse_name(context, princ, &p);
55 if (ret)
56 krb5_err(context, 1, ret, "krb5_parse_name");
58 ret = krb5_unparse_name(context, p, &princ_unparsed);
59 if (ret)
60 krb5_err(context, 1, ret, "krb5_parse_name");
62 if (strcmp(princ, princ_unparsed)) {
63 krb5_errx(context, 1, "%s != %s", princ, princ_unparsed);
66 free(princ_unparsed);
68 ret = krb5_unparse_name_flags(context, p,
69 KRB5_PRINCIPAL_UNPARSE_NO_REALM,
70 &princ_unparsed);
71 if (ret)
72 krb5_err(context, 1, ret, "krb5_parse_name");
74 if (strcmp(princ_short, princ_unparsed))
75 krb5_errx(context, 1, "%s != %s", princ_short, princ_unparsed);
76 free(princ_unparsed);
78 realm = krb5_principal_get_realm(context, p);
80 asprintf(&princ_reformed, "%s@%s", princ_short, realm);
82 ret = krb5_parse_name(context, princ_reformed, &p2);
83 free(princ_reformed);
84 if (ret)
85 krb5_err(context, 1, ret, "krb5_parse_name");
87 if (!krb5_principal_compare(context, p, p2)) {
88 krb5_errx(context, 1, "p != p2");
91 krb5_free_principal(context, p2);
93 ret = krb5_set_default_realm(context, "SU.SE");
94 if (ret)
95 krb5_err(context, 1, ret, "krb5_parse_name");
97 ret = krb5_unparse_name_flags(context, p,
98 KRB5_PRINCIPAL_UNPARSE_SHORT,
99 &princ_unparsed);
100 if (ret)
101 krb5_err(context, 1, ret, "krb5_parse_name");
103 if (strcmp(princ_short, princ_unparsed))
104 krb5_errx(context, 1, "'%s' != '%s'", princ_short, princ_unparsed);
105 free(princ_unparsed);
107 ret = krb5_parse_name(context, princ_short, &p2);
108 if (ret)
109 krb5_err(context, 1, ret, "krb5_parse_name");
111 if (!krb5_principal_compare(context, p, p2))
112 krb5_errx(context, 1, "p != p2");
113 krb5_free_principal(context, p2);
115 ret = krb5_unparse_name(context, p, &princ_unparsed);
116 if (ret)
117 krb5_err(context, 1, ret, "krb5_parse_name");
119 if (strcmp(princ, princ_unparsed))
120 krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
121 free(princ_unparsed);
123 ret = krb5_set_default_realm(context, "SAMBA.ORG");
124 if (ret)
125 krb5_err(context, 1, ret, "krb5_parse_name");
127 ret = krb5_parse_name(context, princ_short, &p2);
128 if (ret)
129 krb5_err(context, 1, ret, "krb5_parse_name");
131 if (krb5_principal_compare(context, p, p2))
132 krb5_errx(context, 1, "p == p2");
134 if (!krb5_principal_compare_any_realm(context, p, p2))
135 krb5_errx(context, 1, "(ignoring realms) p != p2");
137 ret = krb5_unparse_name(context, p2, &princ_unparsed);
138 if (ret)
139 krb5_err(context, 1, ret, "krb5_parse_name");
141 if (strcmp(princ, princ_unparsed) == 0)
142 krb5_errx(context, 1, "%s == %s", princ, princ_unparsed);
143 free(princ_unparsed);
145 krb5_free_principal(context, p2);
147 ret = krb5_parse_name(context, princ, &p2);
148 if (ret)
149 krb5_err(context, 1, ret, "krb5_parse_name");
151 if (!krb5_principal_compare(context, p, p2))
152 krb5_errx(context, 1, "p != p2");
154 ret = krb5_unparse_name(context, p2, &princ_unparsed);
155 if (ret)
156 krb5_err(context, 1, ret, "krb5_parse_name");
158 if (strcmp(princ, princ_unparsed))
159 krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
160 free(princ_unparsed);
162 krb5_free_principal(context, p2);
164 ret = krb5_unparse_name_flags(context, p,
165 KRB5_PRINCIPAL_UNPARSE_SHORT,
166 &princ_unparsed);
167 if (ret)
168 krb5_err(context, 1, ret, "krb5_unparse_name_short");
170 if (strcmp(princ, princ_unparsed) != 0)
171 krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
172 free(princ_unparsed);
174 ret = krb5_unparse_name(context, p, &princ_unparsed);
175 if (ret)
176 krb5_err(context, 1, ret, "krb5_unparse_name_short");
178 if (strcmp(princ, princ_unparsed))
179 krb5_errx(context, 1, "'%s' != '%s'", princ, princ_unparsed);
180 free(princ_unparsed);
182 ret = krb5_parse_name_flags(context, princ,
183 KRB5_PRINCIPAL_PARSE_NO_REALM,
184 &p2);
185 if (!ret)
186 krb5_err(context, 1, ret, "Should have failed to parse %s a "
187 "short name", princ);
189 ret = krb5_parse_name_flags(context, princ_short,
190 KRB5_PRINCIPAL_PARSE_NO_REALM,
191 &p2);
192 if (ret)
193 krb5_err(context, 1, ret, "krb5_parse_name");
195 ret = krb5_unparse_name_flags(context, p2,
196 KRB5_PRINCIPAL_UNPARSE_NO_REALM,
197 &princ_unparsed);
198 krb5_free_principal(context, p2);
199 if (ret)
200 krb5_err(context, 1, ret, "krb5_unparse_name_norealm");
202 if (strcmp(princ_short, princ_unparsed))
203 krb5_errx(context, 1, "'%s' != '%s'", princ_short, princ_unparsed);
204 free(princ_unparsed);
206 ret = krb5_parse_name_flags(context, princ_short,
207 KRB5_PRINCIPAL_PARSE_REQUIRE_REALM,
208 &p2);
209 if (!ret)
210 krb5_err(context, 1, ret, "Should have failed to parse %s "
211 "because it lacked a realm", princ_short);
213 ret = krb5_parse_name_flags(context, princ,
214 KRB5_PRINCIPAL_PARSE_REQUIRE_REALM,
215 &p2);
216 if (ret)
217 krb5_err(context, 1, ret, "krb5_parse_name");
219 if (!krb5_principal_compare(context, p, p2))
220 krb5_errx(context, 1, "p != p2");
222 ret = krb5_unparse_name_flags(context, p2,
223 KRB5_PRINCIPAL_UNPARSE_NO_REALM,
224 &princ_unparsed);
225 krb5_free_principal(context, p2);
226 if (ret)
227 krb5_err(context, 1, ret, "krb5_unparse_name_norealm");
229 if (strcmp(princ_short, princ_unparsed))
230 krb5_errx(context, 1, "'%s' != '%s'", princ_short, princ_unparsed);
231 free(princ_unparsed);
233 krb5_free_principal(context, p);
235 /* test quoting */
237 princ = "test\\ principal@SU.SE";
238 noquote = "test principal@SU.SE";
240 ret = krb5_parse_name_flags(context, princ, 0, &p);
241 if (ret)
242 krb5_err(context, 1, ret, "krb5_parse_name");
244 ret = krb5_unparse_name_flags(context, p, 0, &princ_unparsed);
245 if (ret)
246 krb5_err(context, 1, ret, "krb5_unparse_name_flags");
248 if (strcmp(princ, princ_unparsed))
249 krb5_errx(context, 1, "q '%s' != '%s'", princ, princ_unparsed);
250 free(princ_unparsed);
252 ret = krb5_unparse_name_flags(context, p, KRB5_PRINCIPAL_UNPARSE_DISPLAY,
253 &princ_unparsed);
254 if (ret)
255 krb5_err(context, 1, ret, "krb5_unparse_name_flags");
257 if (strcmp(noquote, princ_unparsed))
258 krb5_errx(context, 1, "nq '%s' != '%s'", noquote, princ_unparsed);
259 free(princ_unparsed);
261 krb5_free_principal(context, p);
264 static void
265 test_enterprise(krb5_context context)
267 krb5_error_code ret;
268 char *unparsed;
269 krb5_principal p;
271 ret = krb5_set_default_realm(context, "SAMBA.ORG");
272 if (ret)
273 krb5_err(context, 1, ret, "krb5_parse_name");
275 ret = krb5_parse_name_flags(context, "lha@su.se@WIN.SU.SE",
276 KRB5_PRINCIPAL_PARSE_ENTERPRISE, &p);
277 if (ret)
278 krb5_err(context, 1, ret, "krb5_parse_name_flags");
280 ret = krb5_unparse_name(context, p, &unparsed);
281 if (ret)
282 krb5_err(context, 1, ret, "krb5_unparse_name");
284 krb5_free_principal(context, p);
286 if (strcmp(unparsed, "lha\\@su.se@WIN.SU.SE") != 0)
287 krb5_errx(context, 1, "enterprise name failed 1");
288 free(unparsed);
294 ret = krb5_parse_name_flags(context, "lha\\@su.se@WIN.SU.SE",
295 KRB5_PRINCIPAL_PARSE_ENTERPRISE, &p);
296 if (ret)
297 krb5_err(context, 1, ret, "krb5_parse_name_flags");
299 ret = krb5_unparse_name(context, p, &unparsed);
300 if (ret)
301 krb5_err(context, 1, ret, "krb5_unparse_name");
303 krb5_free_principal(context, p);
304 if (strcmp(unparsed, "lha\\@su.se\\@WIN.SU.SE@SAMBA.ORG") != 0)
305 krb5_errx(context, 1, "enterprise name failed 2: %s", unparsed);
306 free(unparsed);
312 ret = krb5_parse_name_flags(context, "lha\\@su.se@WIN.SU.SE", 0, &p);
313 if (ret)
314 krb5_err(context, 1, ret, "krb5_parse_name_flags");
316 ret = krb5_unparse_name(context, p, &unparsed);
317 if (ret)
318 krb5_err(context, 1, ret, "krb5_unparse_name");
320 krb5_free_principal(context, p);
321 if (strcmp(unparsed, "lha\\@su.se@WIN.SU.SE") != 0)
322 krb5_errx(context, 1, "enterprise name failed 3");
323 free(unparsed);
329 ret = krb5_parse_name_flags(context, "lha@su.se",
330 KRB5_PRINCIPAL_PARSE_ENTERPRISE, &p);
331 if (ret)
332 krb5_err(context, 1, ret, "krb5_parse_name_flags");
334 ret = krb5_unparse_name(context, p, &unparsed);
335 if (ret)
336 krb5_err(context, 1, ret, "krb5_unparse_name");
338 krb5_free_principal(context, p);
339 if (strcmp(unparsed, "lha\\@su.se@SAMBA.ORG") != 0)
340 krb5_errx(context, 1, "enterprise name failed 2: %s", unparsed);
341 free(unparsed);
346 main(int argc, char **argv)
348 krb5_context context;
349 krb5_error_code ret;
351 setprogname(argv[0]);
353 ret = krb5_init_context(&context);
354 if (ret)
355 errx (1, "krb5_init_context failed: %d", ret);
357 test_princ(context);
359 test_enterprise(context);
361 krb5_free_context(context);
363 return 0;