ktutil.c revision 55682
155682Smarkm/*
255682Smarkm * Copyright (c) 1997 - 2000 Kungliga Tekniska H�gskolan
355682Smarkm * (Royal Institute of Technology, Stockholm, Sweden).
455682Smarkm * All rights reserved.
555682Smarkm *
655682Smarkm * Redistribution and use in source and binary forms, with or without
755682Smarkm * modification, are permitted provided that the following conditions
855682Smarkm * are met:
955682Smarkm *
1055682Smarkm * 1. Redistributions of source code must retain the above copyright
1155682Smarkm *    notice, this list of conditions and the following disclaimer.
1255682Smarkm *
1355682Smarkm * 2. Redistributions in binary form must reproduce the above copyright
1455682Smarkm *    notice, this list of conditions and the following disclaimer in the
1555682Smarkm *    documentation and/or other materials provided with the distribution.
1655682Smarkm *
1755682Smarkm * 3. Neither the name of the Institute nor the names of its contributors
1855682Smarkm *    may be used to endorse or promote products derived from this software
1955682Smarkm *    without specific prior written permission.
2055682Smarkm *
2155682Smarkm * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
2255682Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2355682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2455682Smarkm * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
2555682Smarkm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2655682Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2755682Smarkm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2855682Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2955682Smarkm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3055682Smarkm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3155682Smarkm * SUCH DAMAGE.
3255682Smarkm */
3355682Smarkm
3455682Smarkm#include "ktutil_locl.h"
3555682Smarkm
3655682SmarkmRCSID("$Id: ktutil.c,v 1.25 2000/01/02 05:07:34 assar Exp $");
3755682Smarkm
3855682Smarkmint help_flag;
3955682Smarkmint version_flag;
4055682Smarkmint verbose_flag;
4155682Smarkmchar *keytab_string;
4255682Smarkm
4355682Smarkmstatic int help(int argc, char **argv);
4455682Smarkm
4555682Smarkmstatic SL_cmd cmds[] = {
4655682Smarkm    { "add", 		kt_add,		"add",
4755682Smarkm      "adds key to keytab" },
4855682Smarkm    { "change",		kt_change,	"change [principal...]",
4955682Smarkm      "get new key for principals (all)" },
5055682Smarkm    { "copy",		kt_copy,	"copy src dst",
5155682Smarkm      "copy one keytab to another" },
5255682Smarkm    { "get", 		kt_get,		"get [principal...]",
5355682Smarkm      "create key in database and add to keytab" },
5455682Smarkm    { "list",		kt_list,	"list",
5555682Smarkm      "shows contents of a keytab" },
5655682Smarkm    { "purge",		kt_purge,	"purge",
5755682Smarkm      "remove old and superceeded entries" },
5855682Smarkm    { "remove", 	kt_remove,	"remove",
5955682Smarkm      "remove key from keytab" },
6055682Smarkm    { "srvconvert",	srvconv,	"srvconvert [flags]",
6155682Smarkm      "convert v4 srvtab to keytab" },
6255682Smarkm    { "srv2keytab" },
6355682Smarkm    { "srvcreate",	srvcreate,	"srvcreate [flags]",
6455682Smarkm      "convert keytab to v4 srvtab" },
6555682Smarkm    { "key2srvtab" },
6655682Smarkm    { "help",		help,		"help",			"" },
6755682Smarkm    { NULL, 	NULL,		NULL, 			NULL }
6855682Smarkm};
6955682Smarkm
7055682Smarkmstatic struct getargs args[] = {
7155682Smarkm    {
7255682Smarkm	"version",
7355682Smarkm	0,
7455682Smarkm	arg_flag,
7555682Smarkm	&version_flag,
7655682Smarkm	NULL,
7755682Smarkm	NULL
7855682Smarkm    },
7955682Smarkm    {
8055682Smarkm	"help",
8155682Smarkm	'h',
8255682Smarkm	arg_flag,
8355682Smarkm	&help_flag,
8455682Smarkm	NULL,
8555682Smarkm	NULL
8655682Smarkm    },
8755682Smarkm    {
8855682Smarkm	"keytab",
8955682Smarkm	'k',
9055682Smarkm	arg_string,
9155682Smarkm	&keytab_string,
9255682Smarkm	"keytab",
9355682Smarkm	"keytab to operate on"
9455682Smarkm    },
9555682Smarkm    {
9655682Smarkm	"verbose",
9755682Smarkm	'v',
9855682Smarkm	arg_flag,
9955682Smarkm	&verbose_flag,
10055682Smarkm	"verbose",
10155682Smarkm	"run verbosely"
10255682Smarkm    }
10355682Smarkm};
10455682Smarkm
10555682Smarkmstatic int num_args = sizeof(args) / sizeof(args[0]);
10655682Smarkm
10755682Smarkmkrb5_context context;
10855682Smarkmkrb5_keytab keytab;
10955682Smarkm
11055682Smarkmstatic int
11155682Smarkmhelp(int argc, char **argv)
11255682Smarkm{
11355682Smarkm    sl_help(cmds, argc, argv);
11455682Smarkm    return 0;
11555682Smarkm}
11655682Smarkm
11755682Smarkmstatic void
11855682Smarkmusage(int status)
11955682Smarkm{
12055682Smarkm    arg_printusage(args, num_args, NULL, "command");
12155682Smarkm    exit(status);
12255682Smarkm}
12355682Smarkm
12455682Smarkmint
12555682Smarkmmain(int argc, char **argv)
12655682Smarkm{
12755682Smarkm    int optind = 0;
12855682Smarkm    krb5_error_code ret;
12955682Smarkm    set_progname(argv[0]);
13055682Smarkm    krb5_init_context(&context);
13155682Smarkm    if(getarg(args, num_args, argc, argv, &optind))
13255682Smarkm	usage(1);
13355682Smarkm    if(help_flag)
13455682Smarkm	usage(0);
13555682Smarkm    if(version_flag) {
13655682Smarkm	print_version(NULL);
13755682Smarkm	exit(0);
13855682Smarkm    }
13955682Smarkm    argc -= optind;
14055682Smarkm    argv += optind;
14155682Smarkm    if(argc == 0)
14255682Smarkm	usage(1);
14355682Smarkm    if(keytab_string) {
14455682Smarkm	ret = krb5_kt_resolve(context, keytab_string, &keytab);
14555682Smarkm    } else {
14655682Smarkm	ret = krb5_kt_default(context, &keytab);
14755682Smarkm    }
14855682Smarkm    if(ret)
14955682Smarkm	krb5_err(context, 1, ret, "resolving keytab");
15055682Smarkm    ret = sl_command(cmds, argc, argv);
15155682Smarkm    if(ret == -1)
15255682Smarkm	krb5_warnx (context, "unrecognized command: %s", argv[0]);
15355682Smarkm    krb5_kt_close(context, keytab);
15455682Smarkm    return ret;
15555682Smarkm}
156