ktutil.c revision 78527
1/*
2 * Copyright (c) 1997 - 2001 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 the Institute nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#include "ktutil_locl.h"
35#include <err.h>
36
37RCSID("$Id: ktutil.c,v 1.33 2001/05/10 16:04:27 assar Exp $");
38
39static int help_flag;
40static int version_flag;
41int verbose_flag;
42char *keytab_string;
43char keytab_buf[256];
44
45static int help(int argc, char **argv);
46
47static SL_cmd cmds[] = {
48    { "add", 		kt_add,		"add",
49      "adds key to keytab" },
50    { "change",		kt_change,	"change [principal...]",
51      "get new key for principals (all)" },
52    { "copy",		kt_copy,	"copy src dst",
53      "copy one keytab to another" },
54    { "get", 		kt_get,		"get [principal...]",
55      "create key in database and add to keytab" },
56    { "list",		kt_list,	"list",
57      "shows contents of a keytab" },
58    { "purge",		kt_purge,	"purge",
59      "remove old and superceeded entries" },
60    { "remove", 	kt_remove,	"remove",
61      "remove key from keytab" },
62    { "srvconvert",	srvconv,	"srvconvert [flags]",
63      "convert v4 srvtab to keytab" },
64    { "srv2keytab" },
65    { "srvcreate",	srvcreate,	"srvcreate [flags]",
66      "convert keytab to v4 srvtab" },
67    { "key2srvtab" },
68    { "help",		help,		"help",			"" },
69    { NULL, 	NULL,		NULL, 			NULL }
70};
71
72static struct getargs args[] = {
73    {
74	"version",
75	0,
76	arg_flag,
77	&version_flag,
78	NULL,
79	NULL
80    },
81    {
82	"help",
83	'h',
84	arg_flag,
85	&help_flag,
86	NULL,
87	NULL
88    },
89    {
90	"keytab",
91	'k',
92	arg_string,
93	&keytab_string,
94	"keytab",
95	"keytab to operate on"
96    },
97    {
98	"verbose",
99	'v',
100	arg_flag,
101	&verbose_flag,
102	"verbose",
103	"run verbosely"
104    }
105};
106
107static int num_args = sizeof(args) / sizeof(args[0]);
108
109krb5_context context;
110
111static int
112help(int argc, char **argv)
113{
114    sl_help(cmds, argc, argv);
115    return 0;
116}
117
118static void
119usage(int status)
120{
121    arg_printusage(args, num_args, NULL, "command");
122    exit(status);
123}
124
125int
126main(int argc, char **argv)
127{
128    int optind = 0;
129    krb5_error_code ret;
130    setprogname(argv[0]);
131    ret = krb5_init_context(&context);
132    if (ret)
133	errx (1, "krb5_init_context failed: %d", ret);
134    if(getarg(args, num_args, argc, argv, &optind))
135	usage(1);
136    if(help_flag)
137	usage(0);
138    if(version_flag) {
139	print_version(NULL);
140	exit(0);
141    }
142    argc -= optind;
143    argv += optind;
144    if(argc == 0)
145	usage(1);
146    ret = sl_command(cmds, argc, argv);
147    if(ret == -1)
148	krb5_warnx (context, "unrecognized command: %s", argv[0]);
149    return ret;
150}
151