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