The usage message of the "nfsref" command says that more information is available from invoking "nfsref SUBCOMMAND ?", but this currently produces just the same usage message.
Signed-off-by: Chuck Lever <[email protected]> --- src/nfsref/add.c | 34 ++++++++++++++++++++++++++++++++++ src/nfsref/lookup.c | 26 ++++++++++++++++++++++++++ src/nfsref/nfsref.c | 27 ++++++++++++++++++++------- src/nfsref/nfsref.h | 4 ++++ src/nfsref/remove.c | 23 +++++++++++++++++++++++ 5 files changed, 107 insertions(+), 7 deletions(-) diff --git a/src/nfsref/add.c b/src/nfsref/add.c index e0e347f..ce7f813 100644 --- a/src/nfsref/add.c +++ b/src/nfsref/add.c @@ -39,6 +39,7 @@ #include "junction.h" #include "nsdb.h" #include "xlog.h" +#include "gpl-boiler.h" #include "nfsref.h" /** @@ -47,6 +48,39 @@ #define FSN_DEFAULT_TTL (300) /** + * Display help message for "add" subcommand + * + * @param progname NUL-terminated C string containing name of program + * @return program exit status + */ +int +nfsref_add_help(const char *progname) +{ + fprintf(stderr, " \n"); + + fprintf(stderr, "Usage: %s [ -t type ] add <junction path> " + "<server> <export> [ <server> <export> ... ]\n\n", + progname); + + fprintf(stderr, "Add a new junction containing the specified list " + "of fileset locations.\n"); + fprintf(stderr, "<junction path> is the filename of the new junction. " + "<server> is the hostname\n"); + fprintf(stderr, "or IP address of an NFS server where the fileset is " + "located. <export> is the\n"); + fprintf(stderr, "export pathname of the fileset on that server.\n\n"); + + fprintf(stderr, "For NFS basic junctions, the location list is stored " + "locally in the junction.\n"); + fprintf(stderr, "For FedFS junctions, the location list is stored " + "as new FSN and FSL records\n"); + fprintf(stderr, "on an NSDB.\n"); + + fprintf(stderr, "%s", fedfs_gpl_boilerplate); + return EXIT_SUCCESS; +} + +/** * Fill in default settings for NFSv4.0 fs_locations4 * * @param new NFS location structure to fill in diff --git a/src/nfsref/lookup.c b/src/nfsref/lookup.c index ef4a87d..96454fd 100644 --- a/src/nfsref/lookup.c +++ b/src/nfsref/lookup.c @@ -32,9 +32,35 @@ #include "junction.h" #include "nsdb.h" #include "xlog.h" +#include "gpl-boiler.h" #include "nfsref.h" /** + * Display help message for "lookup" subcommand + * + * @param progname NUL-terminated C string containing name of program + * @return program exit status + */ +int +nfsref_lookup_help(const char *progname) +{ + fprintf(stderr, " \n"); + + fprintf(stderr, "Usage: %s [ -t type ] lookup <junction path>\n\n", + progname); + + fprintf(stderr, "Display the contents of the junction at " + "<junction path>. For NFS basic\n"); + fprintf(stderr, "junctions, the local contents of the junction " + "are displayed. For FedFS\n"); + fprintf(stderr, "junctions, FSL records are retrieved from the " + "NSDB and displayed.\n"); + + fprintf(stderr, "%s", fedfs_gpl_boilerplate); + return EXIT_SUCCESS; +} + +/** * Convert a boolean value into a displayable string constant * * @param value boolean value diff --git a/src/nfsref/nfsref.c b/src/nfsref/nfsref.c index be05bda..ef7c5a7 100644 --- a/src/nfsref/nfsref.c +++ b/src/nfsref/nfsref.c @@ -97,6 +97,7 @@ main(int argc, char **argv) char *progname, *subcommand, *junct_path; enum nfsref_type type; int arg, exit_status; + _Bool help; (void)umask(S_IWGRP | S_IWOTH); @@ -124,6 +125,7 @@ main(int argc, char **argv) goto out; } + help = false; type = NFSREF_TYPE_UNSPECIFIED; while ((arg = getopt_long(argc, argv, nfsref_opts, nfsref_longopts, NULL)) != -1) { @@ -144,17 +146,16 @@ main(int argc, char **argv) } break; case '?': - nfsref_usage(progname); - exit(EXIT_SUCCESS); + help = true; } } - if (argc < optind + 2) { - fprintf(stderr, "Not enough positional parameters\n"); + + if (argc < optind + 1) { nfsref_usage(progname); goto out; } - if (geteuid() != 0) { + if (!help && geteuid() != 0) { fprintf(stderr, "Root permission is required\n"); goto out; } @@ -163,6 +164,10 @@ main(int argc, char **argv) junct_path = argv[optind + 1]; if (strcasecmp(subcommand, "add") == 0) { + if (help) { + exit_status = nfsref_add_help(progname); + goto out; + } if (argc < optind + 3) { fprintf(stderr, "Not enough positional parameters\n"); nfsref_usage(progname); @@ -172,12 +177,20 @@ main(int argc, char **argv) if (exit_status == EXIT_SUCCESS) (void)junction_flush_exports_cache(); } else if (strcasecmp(subcommand, "remove") == 0) { + if (help) { + exit_status = nfsref_remove_help(progname); + goto out; + } exit_status = nfsref_remove(type, junct_path); if (exit_status == EXIT_SUCCESS) (void)junction_flush_exports_cache(); - } else if (strcasecmp(subcommand, "lookup") == 0) + } else if (strcasecmp(subcommand, "lookup") == 0) { + if (help) { + exit_status = nfsref_lookup_help(progname); + goto out; + } exit_status = nfsref_lookup(type, junct_path); - else { + } else { xlog(L_ERROR, "Unrecognized subcommand: %s", subcommand); nfsref_usage(progname); } diff --git a/src/nfsref/nfsref.h b/src/nfsref/nfsref.h index 8e40fd9..e9dd9ae 100644 --- a/src/nfsref/nfsref.h +++ b/src/nfsref/nfsref.h @@ -40,4 +40,8 @@ int nfsref_add(enum nfsref_type type, const char *junct_path, char **argv, int nfsref_remove(enum nfsref_type type, const char *junct_path); int nfsref_lookup(enum nfsref_type type, const char *junct_path); +int nfsref_add_help(const char *progname); +int nfsref_remove_help(const char *progname); +int nfsref_lookup_help(const char *progname); + #endif /* !FEDFS_NFSREF_H */ diff --git a/src/nfsref/remove.c b/src/nfsref/remove.c index 7dd5997..7bee9de 100644 --- a/src/nfsref/remove.c +++ b/src/nfsref/remove.c @@ -34,9 +34,32 @@ #include "fedfs.h" #include "junction.h" #include "xlog.h" +#include "gpl-boiler.h" #include "nfsref.h" /** + * Display help message for "remove" subcommand + * + * @param progname NUL-terminated C string containing name of program + * @return program exit status + */ +int +nfsref_remove_help(const char *progname) +{ + fprintf(stderr, " \n"); + + fprintf(stderr, "Usage: %s [ -t type ] remove <junction path>\n\n", + progname); + + fprintf(stderr, "Remove the junction at <junction path>. For FedFS " + "junctions, FSL and FSN\n"); + fprintf(stderr, "records are removed from the NSDB.\n"); + + fprintf(stderr, "%s", fedfs_gpl_boilerplate); + return EXIT_SUCCESS; +} + +/** * Remove any NFS junction information * * _______________________________________________ fedfs-utils-devel mailing list [email protected] https://oss.oracle.com/mailman/listinfo/fedfs-utils-devel
