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 81901701e5230cf62e856ba7cec837e6d0f112b0 Mon Sep 17 00:00:00 2001 From: amitkuma <amitk...@redhat.com> Date: Thu, 15 Feb 2018 18:21:10 +0530 Subject: [PATCH 1/2] 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 | 19 ++++++++++++------- src/tools/common/sss_tools.h | 1 + 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c index 4832db5a0..d45584ce1 100644 --- a/src/tools/common/sss_tools.c +++ b/src/tools/common/sss_tools.c @@ -58,11 +58,14 @@ static void sss_tool_common_opts(struct sss_tool_ctx *tool_ctx, 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 +77,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)); + tool_ctx->print_help = help; DEBUG_CLI_INIT(debug); @@ -187,7 +191,6 @@ errno_t sss_tool_init(TALLOC_CTX *mem_ctx, } sss_tool_common_opts(tool_ctx, argc, argv); - *_tool_ctx = tool_ctx; return EOK; @@ -341,12 +344,14 @@ 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 (!tool_ctx->print_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); diff --git a/src/tools/common/sss_tools.h b/src/tools/common/sss_tools.h index 848009365..0e4308ee6 100644 --- a/src/tools/common/sss_tools.h +++ b/src/tools/common/sss_tools.h @@ -29,6 +29,7 @@ struct sss_tool_ctx { struct confdb_ctx *confdb; + bool print_help; errno_t init_err; char *default_domain; struct sss_domain_info *domains; From 2e1eaf298e0643fde6e1439c24137448e6813521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com> Date: Tue, 3 Apr 2018 10:20:29 +0200 Subject: [PATCH 2/2] sssctl: move check for version error to correct place MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This check was added here: 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 490) int sss_tool_main(int argc, const char **argv, 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 491) struct sss_route_cmd *commands, 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 492) void *pvt) 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 493) { 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 494) struct sss_tool_ctx *tool_ctx; 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 495) uid_t uid; e98ccef2 (Pavel Březina 2016-06-09 16:13:34 +0200 496) errno_t ret; 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 497) 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 498) uid = getuid(); 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 499) if (uid != 0) { 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 500) DEBUG(SSSDBG_CRIT_FAILURE, "Running under %d, must be root\n", uid); 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 501) ERROR("%1$s must be run as root\n", argv[0]); 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 502) return EXIT_FAILURE; 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 503) } 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 504) a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 505) ret = sss_tool_init(NULL, &argc, argv, &tool_ctx); a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 506) if (ret == ERR_SYSDB_VERSION_TOO_OLD) { a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 507) tool_ctx->init_err = ret; a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 508) } else if (ret != EOK) { 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 509) DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tool context\n"); 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 510) return EXIT_FAILURE; 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 511) } But then the initialization code was moved from sss_tool_init to tool_cmd_init which is called from sss_tool_route. a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 328) if (!sss_tools_handles_init_error(&commands[i], tool_ctx->init_err)) { a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 329) DEBUG(SSSDBG_FATAL_FAILURE, a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 330) "Command %s does not handle initialization error [%d] %s\n", a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 331) cmdline.command, tool_ctx->init_err, a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 332) sss_strerror(tool_ctx->init_err)); a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 333) return tool_ctx->init_err; a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 334) } a0b824ac (Jakub Hrozek 2016-07-01 13:26:38 +0200 335) cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 336) ret = tool_cmd_init(tool_ctx, &commands[i]); cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 337) if (ret != EOK) { cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 338) DEBUG(SSSDBG_FATAL_FAILURE, cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 339) "Command initialization failed [%d] %s\n", cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 340) ret, sss_strerror(ret)); cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 341) return ret; cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 342) } cbee11e9 (Michal Židek 2016-10-12 13:09:37 +0200 343) 284937e6 (Pavel Březina 2015-07-22 10:02:02 +0200 344) return commands[i].fn(&cmdline, tool_ctx, pvt); This rendered the original change a dead code, because sss_tool_init only returns ENOMEM or EOK. --- src/tools/common/sss_tools.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c index d45584ce1..701db2d93 100644 --- a/src/tools/common/sss_tools.c +++ b/src/tools/common/sss_tools.c @@ -346,7 +346,9 @@ errno_t sss_tool_route(int argc, const char **argv, if (!tool_ctx->print_help) { ret = tool_cmd_init(tool_ctx, &commands[i]); - if (ret != EOK) { + if (ret == ERR_SYSDB_VERSION_TOO_OLD) { + tool_ctx->init_err = ret; + } else if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "Command initialization failed [%d] %s\n", ret, sss_strerror(ret)); @@ -516,9 +518,7 @@ int sss_tool_main(int argc, const char **argv, } ret = sss_tool_init(NULL, &argc, argv, &tool_ctx); - if (ret == ERR_SYSDB_VERSION_TOO_OLD) { - tool_ctx->init_err = ret; - } else if (ret != EOK) { + if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tool context\n"); return EXIT_FAILURE; }
_______________________________________________ sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org