diff --git a/lib/gssapi/gss.c b/lib/gssapi/gss.c index afd916af1..df1d99014 100644 --- a/lib/gssapi/gss.c +++ b/lib/gssapi/gss.c @@ -41,6 +41,7 @@ #include #include #include +#include RCSID("$Id$"); @@ -63,8 +64,8 @@ usage (int ret) #define COL_OID "OID" #define COL_NAME "Name" -static void -supported_mechs(void) +int +supported_mechs(void *argptr, int argc, char **argv) { OM_uint32 maj_stat, min_stat; gss_OID_set mechs; @@ -105,6 +106,42 @@ supported_mechs(void) rtbl_format(ct, stdout); rtbl_destroy(ct); + + return 0; +} + +int +help(void *opt, int argc, char **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; } int @@ -127,7 +164,10 @@ main(int argc, char **argv) argc -= optidx; argv += optidx; - supported_mechs(); + if (argc == 0) + help(NULL, argc, argv); + else + sl_command (commands, argc, argv); return 0; }