summaryrefslogtreecommitdiffstats
path: root/kerberosV/src/admin/ktutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'kerberosV/src/admin/ktutil.c')
-rw-r--r--kerberosV/src/admin/ktutil.c68
1 files changed, 33 insertions, 35 deletions
diff --git a/kerberosV/src/admin/ktutil.c b/kerberosV/src/admin/ktutil.c
index 5b585747d3f..f9c001dae64 100644
--- a/kerberosV/src/admin/ktutil.c
+++ b/kerberosV/src/admin/ktutil.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 2002 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997-2004 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -34,7 +34,7 @@
#include "ktutil_locl.h"
#include <err.h>
-RCSID("$KTH: ktutil.c,v 1.36 2002/02/11 14:14:11 joda Exp $");
+RCSID("$KTH: ktutil.c,v 1.38 2005/05/02 19:10:19 lha Exp $");
static int help_flag;
static int version_flag;
@@ -42,35 +42,6 @@ int verbose_flag;
char *keytab_string;
static char keytab_buf[256];
-static int help(int argc, char **argv);
-
-static SL_cmd cmds[] = {
- { "add", kt_add, "add",
- "adds key to keytab" },
- { "change", kt_change, "change [principal...]",
- "get new key for principals (all)" },
- { "copy", kt_copy, "copy src dst",
- "copy one keytab to another" },
- { "get", kt_get, "get [principal...]",
- "create key in database and add to keytab" },
- { "list", kt_list, "list",
- "shows contents of a keytab" },
- { "purge", kt_purge, "purge",
- "remove old and superceeded entries" },
- { "remove", kt_remove, "remove",
- "remove key from keytab" },
- { "rename", kt_rename, "rename from to",
- "rename entry" },
- { "srvconvert", srvconv, "srvconvert [flags]",
- "convert v4 srvtab to keytab" },
- { "srv2keytab" },
- { "srvcreate", srvcreate, "srvcreate [flags]",
- "convert keytab to v4 srvtab" },
- { "key2srvtab" },
- { "help", help, "help", "" },
- { NULL, NULL, NULL, NULL }
-};
-
static struct getargs args[] = {
{
"version",
@@ -134,10 +105,37 @@ ktutil_open_keytab(void)
return keytab;
}
-static int
-help(int argc, char **argv)
+int
+help(void *opt, int argc, char **argv)
{
- sl_help(cmds, argc, argv);
+ if(argc == 0) {
+ sl_help(commands, 1, argv - 1 /* XXX */);
+ } else {
+ SL_cmd *c = sl_match (commands, argv[0], 0);
+ if(c == NULL) {
+ fprintf (stderr, "No such command: %s. "
+ "Try \"help\" for a list of commands\n",
+ argv[0]);
+ } else {
+ if(c->func) {
+ char *fake[] = { NULL, "--help", NULL };
+ fake[0] = argv[0];
+ (*c->func)(2, fake);
+ fprintf(stderr, "\n");
+ }
+ if(c->help && *c->help)
+ fprintf (stderr, "%s\n", c->help);
+ if((++c)->name && c->func == NULL) {
+ int f = 0;
+ fprintf (stderr, "Synonyms:");
+ while (c->name && c->func == NULL) {
+ fprintf (stderr, "%s%s", f ? ", " : " ", (c++)->name);
+ f = 1;
+ }
+ fprintf (stderr, "\n");
+ }
+ }
+ }
return 0;
}
@@ -169,7 +167,7 @@ main(int argc, char **argv)
argv += optind;
if(argc == 0)
usage(1);
- ret = sl_command(cmds, argc, argv);
+ ret = sl_command(commands, argc, argv);
if(ret == -1)
krb5_warnx (context, "unrecognized command: %s", argv[0]);
return ret;