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 c5cbcdbebb753cec5ed0c918b5d00a1ec97d3129 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..aee6bfcae 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 = false;
 
     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

Reply via email to