From: Justin Mitchell <jumitche@redhat.com>
To: Linux NFS Mailing list <linux-nfs@vger.kernel.org>
Subject: [PATCH 6/7] nfs-utils: Add nfsconftool cli
Date: Mon, 23 Apr 2018 16:34:25 +0100 [thread overview]
Message-ID: <1524497665.7418.10.camel@redhat.com> (raw)
In-Reply-To: <1524496788.7418.2.camel@redhat.com>
This tool uses the conffile facilities to allow commandline
querying of configuration settings and to dump the current
config for diagnosis and testing
Signed-off-by: Justin Mitchell <jumitche@redhat.com>
---
Makefile.am | 2 +-
configure.ac | 1 +
tools/Makefile.am | 2 +
tools/nfsconf/Makefile.am | 9 +++
tools/nfsconf/nfsconfcli.c | 144 +++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 157 insertions(+), 1 deletion(-)
create mode 100644 tools/nfsconf/Makefile.am
create mode 100644 tools/nfsconf/nfsconfcli.c
diff --git a/Makefile.am b/Makefile.am
index e1f39aa..0022084 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,7 @@
AUTOMAKE_OPTIONS = foreign
-SUBDIRS = tools support utils linux-nfs tests systemd
+SUBDIRS = support tools utils linux-nfs tests systemd
MAINTAINERCLEANFILES = Makefile.in
diff --git a/configure.ac b/configure.ac
index 5a11636..b925666 100644
--- a/configure.ac
+++ b/configure.ac
@@ -616,6 +616,7 @@ AC_CONFIG_FILES([
tools/rpcgen/Makefile
tools/mountstats/Makefile
tools/nfs-iostat/Makefile
+ tools/nfsconf/Makefile
utils/Makefile
utils/blkmapd/Makefile
utils/nfsdcltrack/Makefile
diff --git a/tools/Makefile.am b/tools/Makefile.am
index f2ce282..4266da4 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -6,6 +6,8 @@ if CONFIG_RPCGEN
OPTDIRS += rpcgen
endif
+OPTDIRS += nfsconf
+
SUBDIRS = locktest rpcdebug nlmtest mountstats nfs-iostat $(OPTDIRS)
MAINTAINERCLEANFILES = Makefile.in
diff --git a/tools/nfsconf/Makefile.am b/tools/nfsconf/Makefile.am
new file mode 100644
index 0000000..4baaa26
--- /dev/null
+++ b/tools/nfsconf/Makefile.am
@@ -0,0 +1,9 @@
+## Process this file with automake to produce Makefile.in
+
+bin_PROGRAMS = nfsconftool
+
+nfsconftool_SOURCES = nfsconfcli.c
+nfsconftool_LDADD = ../../support/nfs/libnfsconf.la
+
+MAINTAINERCLEANFILES = Makefile.in
+
diff --git a/tools/nfsconf/nfsconfcli.c b/tools/nfsconf/nfsconfcli.c
new file mode 100644
index 0000000..1443e97
--- /dev/null
+++ b/tools/nfsconf/nfsconfcli.c
@@ -0,0 +1,144 @@
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <getopt.h>
+#include <string.h>
+#include <errno.h>
+#include "config.h"
+#include "conffile.h"
+#include "xlog.h"
+
+typedef enum {
+ MODE_NONE,
+ MODE_GET,
+ MODE_ISSET,
+ MODE_DUMP
+} confmode_t;
+
+static void usage(const char *name)
+{
+ fprintf(stderr, "Usage: %s [-v] [--file filename.conf] ...\n", name);
+ fprintf(stderr, "Options:\n");
+ fprintf(stderr, " -v Increase Verbosity\n");
+ fprintf(stderr, " --file filename.conf Load this config file\n");
+ fprintf(stderr, " (Default config file: " NFS_CONFFILE "\n");
+ fprintf(stderr, "Modes:\n");
+ fprintf(stderr, " --dump [outputfile]\n");
+ fprintf(stderr, " Outputs the configuration to the named file\n");
+ fprintf(stderr, " --get [--arg subsection] {section} {tag}\n");
+ fprintf(stderr, " Output one specific config value\n");
+ fprintf(stderr, " --isset [--arg subsection] {section} {tag}\n");
+ fprintf(stderr, " Return code indicates if config value is present\n");
+}
+
+int main(int argc, char **argv)
+{
+ const char * val;
+ char * confpath = NFS_CONFFILE;
+ char * arg = NULL;
+ int verbose=0;
+ int ret = 0;
+ char * dumpfile = NULL;
+
+ confmode_t mode = MODE_NONE;
+
+ while (1) {
+ int c;
+ int index = 0;
+ struct option long_options[] = {
+ {"get", no_argument, 0, 'g' },
+ {"arg", required_argument, 0, 'a' },
+ {"isset", no_argument, 0, 'i' },
+ {"dump", optional_argument, 0, 'd' },
+ {"file", required_argument, 0, 'f' },
+ {"verbose", no_argument, 0, 'v' },
+ {NULL, 0, 0, 0 }
+ };
+
+ c = getopt_long(argc, argv, "ga:id::f:v", long_options, &index);
+ if (c == -1) break;
+
+ switch (c) {
+ case 0:
+ break;
+ case 'f':
+ confpath = optarg;
+ break;
+ case 'a':
+ arg = optarg;
+ break;
+ case 'v':
+ verbose++;
+ break;
+ case 'g':
+ mode = MODE_GET;
+ break;
+ case 'i':
+ mode = MODE_ISSET;
+ break;
+ case 'd':
+ if (optarg==NULL && argv[optind]!=NULL && argv[optind][0]!='-')
+ optarg = argv[optind++];
+ mode = MODE_DUMP;
+ dumpfile = optarg;
+ break;
+ default:
+ usage(argv[0]);
+ return 1;
+ }
+ }
+
+ if (verbose) xlog_config(D_ALL, 1);
+ xlog_stderr(1);
+ xlog_syslog(0);
+ xlog_open("nfsconf");
+
+ if (mode == MODE_NONE) {
+ fprintf(stderr, "Error: No MODE selected.\n");
+ usage(argv[0]);
+ return 1;
+ }
+
+ if (conf_init_file(confpath)) {
+ if (verbose || mode != MODE_ISSET) fprintf(stderr, "Error loading config file %s\n", confpath);
+ if (mode != MODE_ISSET) return 1;
+ }
+
+ if (mode == MODE_DUMP) {
+ FILE *out = stdout;
+ if (dumpfile) {
+ if ((out=fopen(dumpfile, "w"))==NULL) {
+ fprintf(stderr, "Error opening dumpfile %s: %s\n", dumpfile, strerror(errno));
+ ret = 2;
+ goto cleanup;
+ }
+ if (verbose) printf("Dumping config to %s\n", dumpfile);
+ }
+ conf_report(out);
+ if (dumpfile) fclose(out);
+ } else
+ if (mode == MODE_GET || mode == MODE_ISSET) {
+ if (optind+1 >= argc) {
+ fprintf(stderr, "Error: insufficient arguments for mode\n");
+ usage(argv[0]);
+ ret = 2;
+ goto cleanup;
+ }
+ char * section = argv[optind++];
+ char * tag = argv[optind++];
+
+ if ((val=conf_get_section(section, arg, tag))!=NULL) {
+ if (mode == MODE_GET) printf("%s\n", val);
+ } else {
+ if (mode == MODE_GET && verbose) fprintf(stderr, "Tag '%s' not found\n", tag);
+ ret = 1;
+ }
+ } else {
+ fprintf(stderr, "Mode not yet implimented.\n");
+ ret = 2;
+ }
+
+cleanup:
+ conf_cleanup();
+ return ret;
+}
--
1.8.3.1
next prev parent reply other threads:[~2018-04-23 15:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-23 15:19 [PATCH 0/7] nfs-utils: nfsconf cli tool and code tests Justin Mitchell
2018-04-23 15:24 ` [PATCH 1/7] nfs-utils: Fix minor memory leaks Justin Mitchell
2018-04-23 15:25 ` [PATCH 2/7] nfs-utils: Make config includes relative to current config Justin Mitchell
2018-05-02 18:21 ` Steve Dickson
2018-05-03 10:11 ` Justin Mitchell
2018-04-23 15:26 ` [PATCH 3/7] nfs-utils: Use config file name in error messages Justin Mitchell
2018-04-23 15:26 ` [PATCH 4/7] nfs-utils: Indicate if config file was missing Justin Mitchell
2018-04-23 15:27 ` [PATCH 5/7] nfs-utils: tidy up output of conf_report Justin Mitchell
2018-05-02 18:24 ` Steve Dickson
2018-04-23 15:34 ` Justin Mitchell [this message]
2018-05-02 18:25 ` [PATCH 6/7] nfs-utils: Add nfsconftool cli Steve Dickson
2018-04-23 15:35 ` [PATCH 7/7] nfs-utils: use nfsconftool cli to test library function Justin Mitchell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1524497665.7418.10.camel@redhat.com \
--to=jumitche@redhat.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.