URL: https://github.com/SSSD/sssd/pull/515 Author: amitkumar50 Title: #515: sssctl: Showing help even when sssd not configured Action: synchronized
To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/515/head:pr515 git checkout pr515
From 97e1ee34f47203a024e1461cc6d423ceb2c71fc7 Mon Sep 17 00:00:00 2001 From: amitkuma <amitk...@redhat.com> Date: Thu, 15 Feb 2018 18:21:10 +0530 Subject: [PATCH] sssctl: Showing help even when sssd not configured On a clean and unconfigured system, it's not possible to use --help. 1) dnf install sssd-tools 2) sssctl cache-remove --help Shows: [confdb_get_domains] (0x0010): No domains configured, fatal error! Solution: Donot check for confdb initialization when sssctl 3rd command line argument passed is '--help'. Please note when we run 'sssctl --help' on unconfigured system confdb check is not done and proper o/p is seen. Resolves: https://pagure.io/SSSD/sssd/issue/3634 --- src/tools/common/sss_tools.c | 36 ++++++++++++++++++++++-------------- src/tools/common/sss_tools.h | 5 +++-- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c index e491a1286..05179b378 100644 --- a/src/tools/common/sss_tools.c +++ b/src/tools/common/sss_tools.c @@ -53,16 +53,20 @@ static struct poptOption *sss_tool_common_opts_table(void) } static void sss_tool_common_opts(struct sss_tool_ctx *tool_ctx, - int *argc, const char **argv) + int *argc, const char **argv, + bool *_help) { poptContext pc; int debug = SSSDBG_DEFAULT; int orig_argc = *argc; + int help = 0; int opt; struct poptOption options[] = { {"debug", '\0', POPT_ARG_INT | POPT_ARGFLAG_STRIP, &debug, 0, _("The debug level to run with"), NULL }, + {"help", '?', POPT_ARG_VAL | POPT_ARGFLAG_DOC_HIDDEN, &help, + 1, NULL, NULL }, POPT_TABLEEND }; @@ -74,6 +78,7 @@ static void sss_tool_common_opts(struct sss_tool_ctx *tool_ctx, /* Strip common options from arguments. We will discard_const here, * since it is not worth the trouble to convert it back and forth. */ *argc = poptStrippedArgv(pc, orig_argc, discard_const_p(char *, argv)); + *_help = help; DEBUG_CLI_INIT(debug); @@ -168,7 +173,8 @@ static errno_t sss_tool_domains_init(TALLOC_CTX *mem_ctx, errno_t sss_tool_init(TALLOC_CTX *mem_ctx, int *argc, const char **argv, - struct sss_tool_ctx **_tool_ctx) + struct sss_tool_ctx **_tool_ctx, + bool *_help) { struct sss_tool_ctx *tool_ctx; @@ -178,8 +184,7 @@ errno_t sss_tool_init(TALLOC_CTX *mem_ctx, return ENOMEM; } - sss_tool_common_opts(tool_ctx, argc, argv); - + sss_tool_common_opts(tool_ctx, argc, argv, _help); *_tool_ctx = tool_ctx; return EOK; @@ -296,7 +301,7 @@ static int tool_cmd_init(struct sss_tool_ctx *tool_ctx, errno_t sss_tool_route(int argc, const char **argv, struct sss_tool_ctx *tool_ctx, struct sss_route_cmd *commands, - void *pvt) + void *pvt, bool _help) { struct sss_cmdline cmdline; const char *cmd; @@ -333,13 +338,15 @@ errno_t sss_tool_route(int argc, const char **argv, return tool_ctx->init_err; } - ret = tool_cmd_init(tool_ctx, &commands[i]); - if (ret != EOK) { - DEBUG(SSSDBG_FATAL_FAILURE, - "Command initialization failed [%d] %s\n", - ret, sss_strerror(ret)); - return ret; - } + if (!_help) { + ret = tool_cmd_init(tool_ctx, &commands[i]); + if (ret != EOK) { + DEBUG(SSSDBG_FATAL_FAILURE, + "Command initialization failed [%d] %s\n", + ret, sss_strerror(ret)); + return ret; + } + } return commands[i].fn(&cmdline, tool_ctx, pvt); } @@ -494,6 +501,7 @@ int sss_tool_main(int argc, const char **argv, struct sss_tool_ctx *tool_ctx; uid_t uid; errno_t ret; + bool _help=0; uid = getuid(); if (uid != 0) { @@ -502,7 +510,7 @@ int sss_tool_main(int argc, const char **argv, return EXIT_FAILURE; } - ret = sss_tool_init(NULL, &argc, argv, &tool_ctx); + ret = sss_tool_init(NULL, &argc, argv, &tool_ctx, &_help); if (ret == ERR_SYSDB_VERSION_TOO_OLD) { tool_ctx->init_err = ret; } else if (ret != EOK) { @@ -510,7 +518,7 @@ int sss_tool_main(int argc, const char **argv, return EXIT_FAILURE; } - ret = sss_tool_route(argc, argv, tool_ctx, commands, pvt); + ret = sss_tool_route(argc, argv, tool_ctx, commands, pvt, _help); SYSDB_VERSION_ERROR(ret); talloc_free(tool_ctx); if (ret != EOK) { diff --git a/src/tools/common/sss_tools.h b/src/tools/common/sss_tools.h index 848009365..36a3c0883 100644 --- a/src/tools/common/sss_tools.h +++ b/src/tools/common/sss_tools.h @@ -36,7 +36,8 @@ struct sss_tool_ctx { errno_t sss_tool_init(TALLOC_CTX *mem_ctx, int *argc, const char **argv, - struct sss_tool_ctx **_tool_ctx); + struct sss_tool_ctx **_tool_ctx, + bool *_help); struct sss_cmdline { const char *exec; /* argv[0] */ @@ -74,7 +75,7 @@ void sss_tool_usage(const char *tool_name, errno_t sss_tool_route(int argc, const char **argv, struct sss_tool_ctx *tool_ctx, struct sss_route_cmd *commands, - void *pvt); + void *pvt, bool _help); typedef errno_t (*sss_popt_fn)(poptContext pc, char option, void *pvt);
_______________________________________________ sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org