]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - crypto/heimdal/lib/krb5/test_hostname.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / crypto / heimdal / lib / krb5 / test_hostname.c
1 /*
2  * Copyright (c) 2005 Kungliga Tekniska Högskolan
3  * (Royal Institute of Technology, Stockholm, Sweden).
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  *
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.
16  *
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.
20  *
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. */
32
33 #include "krb5_locl.h"
34 #include <err.h>
35 #include <getarg.h>
36
37 static int debug_flag   = 0;
38 static int version_flag = 0;
39 static int help_flag    = 0;
40
41 static int
42 expand_hostname(krb5_context context, const char *host)
43 {
44     krb5_error_code ret;
45     char *h, **r;
46
47     ret = krb5_expand_hostname(context, host, &h);
48     if (ret)
49         krb5_err(context, 1, ret, "krb5_expand_hostname(%s)", host);
50
51     free(h);
52
53     if (debug_flag)
54         printf("hostname: %s -> %s\n", host, h);
55
56     ret = krb5_expand_hostname_realms(context, host, &h, &r);
57     if (ret)
58         krb5_err(context, 1, ret, "krb5_expand_hostname_realms(%s)", host);
59
60     if (debug_flag) {
61         int j;
62
63         printf("hostname: %s -> %s\n", host, h);
64         for (j = 0; r[j]; j++) {
65             printf("\trealm: %s\n", r[j]);
66         }
67     }
68     free(h);
69     krb5_free_host_realm(context, r);
70
71     return 0;
72 }
73
74 static int
75 test_expand_hostname(krb5_context context)
76 {
77     int i, errors = 0;
78
79     struct t {
80         krb5_error_code ret;
81         const char *orig_hostname;
82         const char *new_hostname;
83     } tests[] = {
84         { 0, "pstn1.su.se", "pstn1.su.se" },
85         { 0, "pstnproxy.su.se", "pstnproxy.su.se" },
86     };
87
88     for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) {
89         errors += expand_hostname(context, tests[i].orig_hostname);
90     }
91
92     return errors;
93 }
94
95 static struct getargs args[] = {
96     {"debug",   'd',    arg_flag,       &debug_flag,
97      "turn on debuggin", NULL },
98     {"version", 0,      arg_flag,       &version_flag,
99      "print version", NULL },
100     {"help",    0,      arg_flag,       &help_flag,
101      NULL, NULL }
102 };
103
104 static void
105 usage (int ret)
106 {
107     arg_printusage (args, sizeof(args)/sizeof(*args), NULL, "hostname ...");
108     exit (ret);
109 }
110
111
112 int
113 main(int argc, char **argv)
114 {
115     krb5_context context;
116     krb5_error_code ret;
117     int optidx = 0, errors = 0;
118
119     setprogname(argv[0]);
120
121     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
122         usage(1);
123
124     if (help_flag)
125         usage (0);
126
127     if(version_flag){
128         print_version(NULL);
129         exit(0);
130     }
131
132     argc -= optidx;
133     argv += optidx;
134
135     ret = krb5_init_context(&context);
136     if (ret)
137         errx (1, "krb5_init_context failed: %d", ret);
138
139     if (argc > 0) {
140         while (argc-- > 0)
141             errors += expand_hostname(context, *argv++);
142         return errors;
143     }
144
145     errors += test_expand_hostname(context);
146
147     krb5_free_context(context);
148
149     return errors;
150 }