summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2016-06-02 11:46:43 +0200
committerJakub Hrozek <jhrozek@redhat.com>2016-06-27 16:34:57 +0200
commit3bc651a611a3e5be508875f3ae58bfb5ece2525c (patch)
tree1737ac6db4dc3957eb60cafda450b04def5e3d13 /src
parenta6cd927f298ff5c9a603db5acb6c1b0ebea178c0 (diff)
downloadsssd-3bc651a611a3e5be508875f3ae58bfb5ece2525c.tar.gz
sssd-3bc651a611a3e5be508875f3ae58bfb5ece2525c.tar.xz
sssd-3bc651a611a3e5be508875f3ae58bfb5ece2525c.zip
sss_tools: tell whether an option was provided
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/tools/common/sss_tools.c28
-rw-r--r--src/tools/common/sss_tools.h7
-rw-r--r--src/tools/sss_override.c9
3 files changed, 28 insertions, 16 deletions
diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c
index 7439522c9..7a3a38e5d 100644
--- a/src/tools/common/sss_tools.c
+++ b/src/tools/common/sss_tools.c
@@ -301,7 +301,8 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline,
void *popt_fn_pvt,
const char *fopt_name,
const char *fopt_help,
- const char **_fopt)
+ const char **_fopt,
+ bool *_opt_set)
{
struct poptOption opts_table[] = {
{NULL, '\0', POPT_ARG_INCLUDE_TABLE, nonnull_popt_table(options), \
@@ -314,6 +315,7 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline,
const char *fopt;
char *help;
poptContext pc;
+ bool opt_set;
int ret;
/* Create help option string. We always need to append command name since
@@ -383,13 +385,21 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline,
goto done;
}
- /* If at least one option is required and not provided, print error. */
- if (require_option == SSS_TOOL_OPT_REQUIRED
- && ((_fopt != NULL && cmdline->argc < 2) || cmdline->argc < 1)) {
- fprintf(stderr, _("At least one option is required!\n\n"));
- poptPrintHelp(pc, stderr, 0);
- ret = EXIT_FAILURE;
- goto done;
+ opt_set = true;
+ if ((_fopt != NULL && cmdline->argc < 2) || cmdline->argc < 1) {
+ opt_set = false;
+
+ /* If at least one option is required and not provided, print error. */
+ if (require_option == SSS_TOOL_OPT_REQUIRED) {
+ fprintf(stderr, _("At least one option is required!\n\n"));
+ poptPrintHelp(pc, stderr, 0);
+ ret = EXIT_FAILURE;
+ goto done;
+ }
+ }
+
+ if (_opt_set != NULL) {
+ *_opt_set = opt_set;
}
ret = EXIT_SUCCESS;
@@ -407,7 +417,7 @@ int sss_tool_popt(struct sss_cmdline *cmdline,
void *popt_fn_pvt)
{
return sss_tool_popt_ex(cmdline, options, require_option,
- popt_fn, popt_fn_pvt, NULL, NULL, NULL);
+ popt_fn, popt_fn_pvt, NULL, NULL, NULL, NULL);
}
int sss_tool_main(int argc, const char **argv,
diff --git a/src/tools/common/sss_tools.h b/src/tools/common/sss_tools.h
index 77a964512..1dd83a6fc 100644
--- a/src/tools/common/sss_tools.h
+++ b/src/tools/common/sss_tools.h
@@ -71,9 +71,10 @@ int sss_tool_popt_ex(struct sss_cmdline *cmdline,
enum sss_tool_opt require_option,
sss_popt_fn popt_fn,
void *popt_fn_pvt,
- const char *free_opt_name,
- const char *free_opt_help,
- const char **_free_opt);
+ const char *fopt_name,
+ const char *fopt_help,
+ const char **_fopt,
+ bool *_opt_set);
int sss_tool_popt(struct sss_cmdline *cmdline,
struct poptOption *options,
diff --git a/src/tools/sss_override.c b/src/tools/sss_override.c
index 572cdf899..2dea5a7b2 100644
--- a/src/tools/sss_override.c
+++ b/src/tools/sss_override.c
@@ -68,7 +68,8 @@ static int parse_cmdline(struct sss_cmdline *cmdline,
require = options == NULL ? SSS_TOOL_OPT_OPTIONAL : SSS_TOOL_OPT_REQUIRED;
ret = sss_tool_popt_ex(cmdline, options, require,
- NULL, NULL, "NAME", _("Specify name."), &input_name);
+ NULL, NULL, "NAME", _("Specify name."),
+ &input_name, NULL);
if (ret != EXIT_SUCCESS) {
DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n");
return ret;
@@ -167,7 +168,7 @@ static int parse_cmdline_find(struct sss_cmdline *cmdline,
};
ret = sss_tool_popt_ex(cmdline, options, SSS_TOOL_OPT_OPTIONAL,
- NULL, NULL, NULL, NULL, NULL);
+ NULL, NULL, NULL, NULL, NULL, NULL);
if (ret != EXIT_SUCCESS) {
DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n");
return ret;
@@ -197,7 +198,7 @@ static int parse_cmdline_import(struct sss_cmdline *cmdline,
ret = sss_tool_popt_ex(cmdline, NULL, SSS_TOOL_OPT_OPTIONAL,
NULL, NULL, "FILE", "File to import the data from.",
- _file);
+ _file, NULL);
if (ret != EXIT_SUCCESS) {
DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n");
return ret;
@@ -213,7 +214,7 @@ static int parse_cmdline_export(struct sss_cmdline *cmdline,
ret = sss_tool_popt_ex(cmdline, NULL, SSS_TOOL_OPT_OPTIONAL,
NULL, NULL, "FILE", "File to export the data to.",
- _file);
+ _file, NULL);
if (ret != EXIT_SUCCESS) {
DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse command arguments\n");
return ret;