etc/services - sync with NetBSD-8
[minix.git] / crypto / external / bsd / heimdal / dist / admin / ktutil.c
blob387a3db830ff5caa5874783a9c57aba263caa3d8
1 /* $NetBSD: ktutil.c,v 1.1.1.2 2014/04/24 12:45:26 pettai Exp $ */
3 /*
4 * Copyright (c) 1997-2004 Kungliga Tekniska Högskolan
5 * (Royal Institute of Technology, Stockholm, Sweden).
6 * All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
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 the Institute nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
36 #include "ktutil_locl.h"
37 #include <err.h>
39 __RCSID("NetBSD");
41 static int help_flag;
42 static int version_flag;
43 int verbose_flag;
44 char *keytab_string;
45 static char keytab_buf[256];
47 static struct getargs args[] = {
49 "version",
51 arg_flag,
52 &version_flag,
53 NULL,
54 NULL
57 "help",
58 'h',
59 arg_flag,
60 &help_flag,
61 NULL,
62 NULL
65 "keytab",
66 'k',
67 arg_string,
68 &keytab_string,
69 "keytab",
70 "keytab to operate on"
73 "verbose",
74 'v',
75 arg_flag,
76 &verbose_flag,
77 "verbose",
78 "run verbosely"
82 static int num_args = sizeof(args) / sizeof(args[0]);
84 krb5_context context;
86 krb5_keytab
87 ktutil_open_keytab(void)
89 krb5_error_code ret;
90 krb5_keytab keytab;
91 if (keytab_string == NULL) {
92 ret = krb5_kt_default_name (context, keytab_buf, sizeof(keytab_buf));
93 if (ret) {
94 krb5_warn(context, ret, "krb5_kt_default_name");
95 return NULL;
97 keytab_string = keytab_buf;
99 ret = krb5_kt_resolve(context, keytab_string, &keytab);
100 if (ret) {
101 krb5_warn(context, ret, "resolving keytab %s", keytab_string);
102 return NULL;
104 if (verbose_flag)
105 fprintf (stderr, "Using keytab %s\n", keytab_string);
107 return keytab;
111 help(void *opt, int argc, char **argv)
113 if(argc == 0) {
114 sl_help(commands, 1, argv - 1 /* XXX */);
115 } else {
116 SL_cmd *c = sl_match (commands, argv[0], 0);
117 if(c == NULL) {
118 fprintf (stderr, "No such command: %s. "
119 "Try \"help\" for a list of commands\n",
120 argv[0]);
121 } else {
122 if(c->func) {
123 char shelp[] = "--help";
124 char *fake[3];
125 fake[0] = argv[0];
126 fake[1] = shelp;
127 fake[2] = NULL;
128 (*c->func)(2, fake);
129 fprintf(stderr, "\n");
131 if(c->help && *c->help)
132 fprintf (stderr, "%s\n", c->help);
133 if((++c)->name && c->func == NULL) {
134 int f = 0;
135 fprintf (stderr, "Synonyms:");
136 while (c->name && c->func == NULL) {
137 fprintf (stderr, "%s%s", f ? ", " : " ", (c++)->name);
138 f = 1;
140 fprintf (stderr, "\n");
144 return 0;
147 static void
148 usage(int status)
150 arg_printusage(args, num_args, NULL, "command");
151 exit(status);
155 main(int argc, char **argv)
157 int optidx = 0;
158 krb5_error_code ret;
159 setprogname(argv[0]);
160 ret = krb5_init_context(&context);
161 if (ret)
162 errx (1, "krb5_init_context failed: %d", ret);
163 if(getarg(args, num_args, argc, argv, &optidx))
164 usage(1);
165 if(help_flag)
166 usage(0);
167 if(version_flag) {
168 print_version(NULL);
169 exit(0);
171 argc -= optidx;
172 argv += optidx;
173 if(argc == 0)
174 usage(1);
175 ret = sl_command(commands, argc, argv);
176 if(ret == -1)
177 krb5_warnx (context, "unrecognized command: %s", argv[0]);
178 return ret;