1 /* $NetBSD: parse-name-test.c,v 1.1.1.1 2011/04/13 18:15:36 elric Exp $ */
4 * Copyright (c) 2002 Kungliga Tekniska Högskolan
5 * (Royal Institute of Technology, Stockholm, Sweden).
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of KTH nor the names of its contributors may be
20 * used to endorse or promote products derived from this software without
21 * specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
24 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
30 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
32 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
35 #include "krb5_locl.h"
38 enum { MAX_COMPONENTS
= 3 };
40 static struct testcase
{
41 const char *input_string
;
42 const char *output_string
;
45 char *comp_val
[MAX_COMPONENTS
];
48 {"", "@", "", 1, {""}, FALSE
},
49 {"a", "a@", "", 1, {"a"}, FALSE
},
50 {"\\n", "\\n@", "", 1, {"\n"}, FALSE
},
51 {"\\ ", "\\ @", "", 1, {" "}, FALSE
},
52 {"\\t", "\\t@", "", 1, {"\t"}, FALSE
},
53 {"\\b", "\\b@", "", 1, {"\b"}, FALSE
},
54 {"\\\\", "\\\\@", "", 1, {"\\"}, FALSE
},
55 {"\\/", "\\/@", "", 1, {"/"}, FALSE
},
56 {"\\@", "\\@@", "", 1, {"@"}, FALSE
},
57 {"@", "@", "", 1, {""}, TRUE
},
58 {"a/b", "a/b@", "", 2, {"a", "b"}, FALSE
},
59 {"a/", "a/@", "", 2, {"a", ""}, FALSE
},
60 {"a\\//\\/", "a\\//\\/@", "", 2, {"a/", "/"}, FALSE
},
61 {"/a", "/a@", "", 2, {"", "a"}, FALSE
},
62 {"\\@@\\@", "\\@@\\@", "@", 1, {"@"}, TRUE
},
63 {"a/b/c", "a/b/c@", "", 3, {"a", "b", "c"}, FALSE
},
64 {NULL
, NULL
, "", 0, { NULL
}, FALSE
}};
67 main(int argc
, char **argv
)
74 ret
= krb5_init_context (&context
);
76 errx (1, "krb5_init_context failed: %d", ret
);
78 /* to enable realm-less principal name above */
80 krb5_set_default_realm(context
, "");
82 for (t
= tests
; t
->input_string
; ++t
) {
88 ret
= krb5_parse_name(context
, t
->input_string
, &princ
);
90 krb5_err (context
, 1, ret
, "krb5_parse_name %s",
92 if (strcmp (t
->realm
, princ
->realm
) != 0) {
93 printf ("wrong realm (\"%s\" should be \"%s\")"
95 princ
->realm
, t
->realm
,
100 if (t
->ncomponents
!= princ
->name
.name_string
.len
) {
101 printf ("wrong number of components (%u should be %u)"
103 princ
->name
.name_string
.len
, t
->ncomponents
,
107 for (i
= 0; i
< t
->ncomponents
; ++i
) {
108 if (strcmp(t
->comp_val
[i
],
109 princ
->name
.name_string
.val
[i
]) != 0) {
110 printf ("bad component %d (\"%s\" should be \"%s\")"
113 princ
->name
.name_string
.val
[i
],
120 for (j
= 0; j
< strlen(t
->output_string
); ++j
) {
121 ret
= krb5_unparse_name_fixed(context
, princ
,
124 printf ("unparse_name %s with length %d should have failed\n",
130 ret
= krb5_unparse_name_fixed(context
, princ
,
131 name_buf
, sizeof(name_buf
));
133 krb5_err (context
, 1, ret
, "krb5_unparse_name_fixed");
135 if (strcmp (t
->output_string
, name_buf
) != 0) {
136 printf ("failed comparing the re-parsed"
137 " (\"%s\" should be \"%s\")\n",
138 name_buf
, t
->output_string
);
142 ret
= krb5_unparse_name(context
, princ
, &s
);
144 krb5_err (context
, 1, ret
, "krb5_unparse_name");
146 if (strcmp (t
->output_string
, s
) != 0) {
147 printf ("failed comparing the re-parsed"
148 " (\"%s\" should be \"%s\"\n",
149 s
, t
->output_string
);
155 for (j
= 0; j
< strlen(t
->input_string
); ++j
) {
156 ret
= krb5_unparse_name_fixed_short(context
, princ
,
159 printf ("unparse_name_short %s with length %d"
160 " should have failed\n",
166 ret
= krb5_unparse_name_fixed_short(context
, princ
,
167 name_buf
, sizeof(name_buf
));
169 krb5_err (context
, 1, ret
, "krb5_unparse_name_fixed");
171 if (strcmp (t
->input_string
, name_buf
) != 0) {
172 printf ("failed comparing the re-parsed"
173 " (\"%s\" should be \"%s\")\n",
174 name_buf
, t
->input_string
);
178 ret
= krb5_unparse_name_short(context
, princ
, &s
);
180 krb5_err (context
, 1, ret
, "krb5_unparse_name_short");
182 if (strcmp (t
->input_string
, s
) != 0) {
183 printf ("failed comparing the re-parsed"
184 " (\"%s\" should be \"%s\"\n",
190 krb5_free_principal (context
, princ
);
192 krb5_free_context(context
);