Fabiano Fidêncio d6e60d0
From 08fced82ad1a8bc03c69f84bcfdb495a5f473165 Mon Sep 17 00:00:00 2001
Fabiano Fidêncio d6e60d0
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Fabiano Fidêncio d6e60d0
Date: Tue, 3 Apr 2018 10:20:29 +0200
Fabiano Fidêncio d6e60d0
Subject: [PATCH] sssctl: move check for version error to correct place
Fabiano Fidêncio d6e60d0
MIME-Version: 1.0
Fabiano Fidêncio d6e60d0
Content-Type: text/plain; charset=UTF-8
Fabiano Fidêncio d6e60d0
Content-Transfer-Encoding: 8bit
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
This check was added here:
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 490) int sss_tool_main(int argc, const char **argv,
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 491)                   struct sss_route_cmd *commands,
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 492)                   void *pvt)
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 493) {
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 494)     struct sss_tool_ctx *tool_ctx;
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 495)     uid_t uid;
Fabiano Fidêncio d6e60d0
e98ccef2 (Pavel Březina   2016-06-09 16:13:34 +0200 496)     errno_t ret;
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 497)
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 498)     uid = getuid();
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 499)     if (uid != 0) {
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 500)         DEBUG(SSSDBG_CRIT_FAILURE, "Running under %d, must be root\n", uid);
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 501)         ERROR("%1$s must be run as root\n", argv[0]);
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 502)         return EXIT_FAILURE;
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 503)     }
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 504)
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 505)     ret = sss_tool_init(NULL, &argc, argv, &tool_ctx);
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 506)     if (ret == ERR_SYSDB_VERSION_TOO_OLD) {
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 507)         tool_ctx->init_err = ret;
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 508)     } else if (ret != EOK) {
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 509)         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tool context\n");
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 510)         return EXIT_FAILURE;
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 511)     }
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
But then the initialization code was moved from sss_tool_init to tool_cmd_init which is called from sss_tool_route.
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 328)             if (!sss_tools_handles_init_error(&commands[i], tool_ctx->init_err)) {
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 329)                 DEBUG(SSSDBG_FATAL_FAILURE,
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 330)                       "Command %s does not handle initialization error [%d] %s\n",
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 331)                       cmdline.command, tool_ctx->init_err,
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 332)                       sss_strerror(tool_ctx->init_err));
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 333)                 return tool_ctx->init_err;
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 334)             }
Fabiano Fidêncio d6e60d0
a0b824ac (Jakub Hrozek    2016-07-01 13:26:38 +0200 335)
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 336)             ret = tool_cmd_init(tool_ctx, &commands[i]);
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 337)             if (ret != EOK) {
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 338)                 DEBUG(SSSDBG_FATAL_FAILURE,
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 339)                       "Command initialization failed [%d] %s\n",
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 340)                       ret, sss_strerror(ret));
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 341)                 return ret;
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 342)             }
Fabiano Fidêncio d6e60d0
cbee11e9 (Michal Židek    2016-10-12 13:09:37 +0200 343)
Fabiano Fidêncio d6e60d0
284937e6 (Pavel Březina   2015-07-22 10:02:02 +0200 344)             return commands[i].fn(&cmdline, tool_ctx, pvt);
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
This rendered the original change a dead code, because sss_tool_init only returns ENOMEM or EOK.
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
Reviewed-by: Fabiano Fidêncio <fidencio@redhat.com>
Fabiano Fidêncio d6e60d0
(cherry picked from commit fe58f0fbf34de5931ce3305396e5e4467796a325)
Fabiano Fidêncio d6e60d0
---
Fabiano Fidêncio d6e60d0
 src/tools/common/sss_tools.c | 8 ++++----
Fabiano Fidêncio d6e60d0
 1 file changed, 4 insertions(+), 4 deletions(-)
Fabiano Fidêncio d6e60d0
Fabiano Fidêncio d6e60d0
diff --git a/src/tools/common/sss_tools.c b/src/tools/common/sss_tools.c
Fabiano Fidêncio d6e60d0
index d45584ce1..701db2d93 100644
Fabiano Fidêncio d6e60d0
--- a/src/tools/common/sss_tools.c
Fabiano Fidêncio d6e60d0
+++ b/src/tools/common/sss_tools.c
Fabiano Fidêncio d6e60d0
@@ -346,7 +346,9 @@ errno_t sss_tool_route(int argc, const char **argv,
Fabiano Fidêncio d6e60d0
 
Fabiano Fidêncio d6e60d0
             if (!tool_ctx->print_help) {
Fabiano Fidêncio d6e60d0
                 ret = tool_cmd_init(tool_ctx, &commands[i]);
Fabiano Fidêncio d6e60d0
-                if (ret != EOK) {
Fabiano Fidêncio d6e60d0
+                if (ret == ERR_SYSDB_VERSION_TOO_OLD) {
Fabiano Fidêncio d6e60d0
+                    tool_ctx->init_err = ret;
Fabiano Fidêncio d6e60d0
+                } else if (ret != EOK) {
Fabiano Fidêncio d6e60d0
                     DEBUG(SSSDBG_FATAL_FAILURE,
Fabiano Fidêncio d6e60d0
                           "Command initialization failed [%d] %s\n",
Fabiano Fidêncio d6e60d0
                           ret, sss_strerror(ret));
Fabiano Fidêncio d6e60d0
@@ -516,9 +518,7 @@ int sss_tool_main(int argc, const char **argv,
Fabiano Fidêncio d6e60d0
     }
Fabiano Fidêncio d6e60d0
 
Fabiano Fidêncio d6e60d0
     ret = sss_tool_init(NULL, &argc, argv, &tool_ctx);
Fabiano Fidêncio d6e60d0
-    if (ret == ERR_SYSDB_VERSION_TOO_OLD) {
Fabiano Fidêncio d6e60d0
-        tool_ctx->init_err = ret;
Fabiano Fidêncio d6e60d0
-    } else if (ret != EOK) {
Fabiano Fidêncio d6e60d0
+    if (ret != EOK) {
Fabiano Fidêncio d6e60d0
         DEBUG(SSSDBG_CRIT_FAILURE, "Unable to create tool context\n");
Fabiano Fidêncio d6e60d0
         return EXIT_FAILURE;
Fabiano Fidêncio d6e60d0
     }
Fabiano Fidêncio d6e60d0
-- 
Fabiano Fidêncio d6e60d0
2.14.3
Fabiano Fidêncio d6e60d0