Blame SOURCES/012-string-arguments.patch

7ac83c
From 2eee93e8f9ea2daa81769bc69843d63ced1a7112 Mon Sep 17 00:00:00 2001
7ac83c
From: Chris Lumens <clumens@redhat.com>
7ac83c
Date: Tue, 20 Jul 2021 16:39:07 -0400
7ac83c
Subject: [PATCH 1/2] Low: tools: Audit command line options.
7ac83c
7ac83c
This just goes through and makes sure the command line options that take
7ac83c
arguments are in the special parameter to pcmk__cmdline_preproc, and
7ac83c
that options that do not take arguments are not.
7ac83c
---
7ac83c
 tools/crm_attribute.c | 2 +-
7ac83c
 tools/crm_error.c     | 2 +-
7ac83c
 tools/crm_resource.c  | 2 +-
7ac83c
 tools/crm_rule.c      | 2 +-
7ac83c
 tools/crm_simulate.c  | 2 +-
7ac83c
 tools/crmadmin.c      | 2 +-
7ac83c
 tools/stonith_admin.c | 2 +-
7ac83c
 7 files changed, 7 insertions(+), 7 deletions(-)
7ac83c
7ac83c
diff --git a/tools/crm_attribute.c b/tools/crm_attribute.c
7ac83c
index 8a5b4e4..6bd4e2a 100644
7ac83c
--- a/tools/crm_attribute.c
7ac83c
+++ b/tools/crm_attribute.c
7ac83c
@@ -312,7 +312,7 @@ main(int argc, char **argv)
7ac83c
 
7ac83c
     GOptionGroup *output_group = NULL;
7ac83c
     pcmk__common_args_t *args = pcmk__new_common_args(SUMMARY);
7ac83c
-    gchar **processed_args = pcmk__cmdline_preproc(argv, "DGNPdilnpstv");
7ac83c
+    gchar **processed_args = pcmk__cmdline_preproc(argv, "NPUdilnpstv");
7ac83c
     GOptionContext *context = build_arg_context(args, &output_group);
7ac83c
 
7ac83c
     if (!g_option_context_parse_strv(context, &processed_args, &error)) {
7ac83c
diff --git a/tools/crm_error.c b/tools/crm_error.c
7ac83c
index b4328ce..923f393 100644
7ac83c
--- a/tools/crm_error.c
7ac83c
+++ b/tools/crm_error.c
7ac83c
@@ -79,7 +79,7 @@ main(int argc, char **argv)
7ac83c
 
7ac83c
     GOptionGroup *output_group = NULL;
7ac83c
     pcmk__common_args_t *args = pcmk__new_common_args(SUMMARY);
7ac83c
-    gchar **processed_args = pcmk__cmdline_preproc(argv, "lrnX");
7ac83c
+    gchar **processed_args = pcmk__cmdline_preproc(argv, NULL);
7ac83c
     GOptionContext *context = build_arg_context(args, &output_group);
7ac83c
 
7ac83c
     if (!g_option_context_parse_strv(context, &processed_args, &error)) {
7ac83c
diff --git a/tools/crm_resource.c b/tools/crm_resource.c
7ac83c
index fa7902c..d8e140f 100644
7ac83c
--- a/tools/crm_resource.c
7ac83c
+++ b/tools/crm_resource.c
7ac83c
@@ -1530,7 +1530,7 @@ main(int argc, char **argv)
7ac83c
      */
7ac83c
 
7ac83c
     args = pcmk__new_common_args(SUMMARY);
7ac83c
-    processed_args = pcmk__cmdline_preproc(argv, "GINSTdginpstuv");
7ac83c
+    processed_args = pcmk__cmdline_preproc(argv, "GHINSTdginpstuvx");
7ac83c
     context = build_arg_context(args, &output_group);
7ac83c
 
7ac83c
     pcmk__register_formats(output_group, formats);
7ac83c
diff --git a/tools/crm_rule.c b/tools/crm_rule.c
7ac83c
index 8b19bcd..30c5155 100644
7ac83c
--- a/tools/crm_rule.c
7ac83c
+++ b/tools/crm_rule.c
7ac83c
@@ -239,7 +239,7 @@ main(int argc, char **argv)
7ac83c
 
7ac83c
     pcmk__common_args_t *args = pcmk__new_common_args(SUMMARY);
7ac83c
     GOptionContext *context = build_arg_context(args);
7ac83c
-    gchar **processed_args = pcmk__cmdline_preproc(argv, "nopNO");
7ac83c
+    gchar **processed_args = pcmk__cmdline_preproc(argv, "drX");
7ac83c
 
7ac83c
     if (!g_option_context_parse_strv(context, &processed_args, &error)) {
7ac83c
         exit_code = CRM_EX_USAGE;
7ac83c
diff --git a/tools/crm_simulate.c b/tools/crm_simulate.c
7ac83c
index 0406bff..c83b1b1 100644
7ac83c
--- a/tools/crm_simulate.c
7ac83c
+++ b/tools/crm_simulate.c
7ac83c
@@ -865,7 +865,7 @@ main(int argc, char **argv)
7ac83c
 
7ac83c
     GOptionGroup *output_group = NULL;
7ac83c
     pcmk__common_args_t *args = pcmk__new_common_args(SUMMARY);
7ac83c
-    gchar **processed_args = pcmk__cmdline_preproc(argv, "bdefgiqrtuwxDFGINO");
7ac83c
+    gchar **processed_args = pcmk__cmdline_preproc(argv, "bdefgiqrtuwxDFGINOP");
7ac83c
     GOptionContext *context = build_arg_context(args, &output_group);
7ac83c
 
7ac83c
     /* This must come before g_option_context_parse_strv. */
7ac83c
diff --git a/tools/crmadmin.c b/tools/crmadmin.c
7ac83c
index 5cbde1b..b98f282 100644
7ac83c
--- a/tools/crmadmin.c
7ac83c
+++ b/tools/crmadmin.c
7ac83c
@@ -188,7 +188,7 @@ main(int argc, char **argv)
7ac83c
 
7ac83c
     GOptionGroup *output_group = NULL;
7ac83c
     pcmk__common_args_t *args = pcmk__new_common_args(SUMMARY);
7ac83c
-    gchar **processed_args = pcmk__cmdline_preproc(argv, "itBDEHKNPS");
7ac83c
+    gchar **processed_args = pcmk__cmdline_preproc(argv, "itKNS");
7ac83c
     GOptionContext *context = build_arg_context(args, &output_group);
7ac83c
 
7ac83c
     pcmk__register_formats(output_group, formats);
7ac83c
diff --git a/tools/stonith_admin.c b/tools/stonith_admin.c
7ac83c
index 6773cea..2d48326 100644
7ac83c
--- a/tools/stonith_admin.c
7ac83c
+++ b/tools/stonith_admin.c
7ac83c
@@ -349,7 +349,7 @@ main(int argc, char **argv)
7ac83c
 
7ac83c
     GOptionGroup *output_group = NULL;
7ac83c
     pcmk__common_args_t *args = pcmk__new_common_args(SUMMARY);
7ac83c
-    gchar **processed_args = pcmk__cmdline_preproc(argv, "adehilorstvBCDFHQRTU");
7ac83c
+    gchar **processed_args = pcmk__cmdline_preproc(argv, "adehilorstvyBCDFHQRTU");
7ac83c
     GOptionContext *context = build_arg_context(args, &output_group);
7ac83c
 
7ac83c
     pcmk__register_formats(output_group, formats);
7ac83c
-- 
7ac83c
1.8.3.1
7ac83c
7ac83c
7ac83c
From 8301678ad1162450814d2fea5288aefe47a67a74 Mon Sep 17 00:00:00 2001
7ac83c
From: Chris Lumens <clumens@redhat.com>
7ac83c
Date: Tue, 20 Jul 2021 16:40:58 -0400
7ac83c
Subject: [PATCH 2/2] Low: libcrmcommon: Also allow string arguments that start
7ac83c
 with a dash.
7ac83c
7ac83c
There's various places where an option to a command line argument could
7ac83c
itself be a valid command line argument.  For instance:
7ac83c
7ac83c
    crm_attribute -n crm_mon_options -v "-1i3"
7ac83c
7ac83c
The previous patching to pcmk__cmdline_preproc did not take this into
7ac83c
account.  With this patch, options that are last in a string (or by
7ac83c
themselves) and take an argument will have the next command line option
7ac83c
grabbed and copied straight through without processing.
7ac83c
7ac83c
Regression in 2.1.0 caused by a long-standing bug in pcmk__cmdline_preproc.
7ac83c
---
7ac83c
 lib/common/cmdline.c                               |  8 ++++++
7ac83c
 .../tests/cmdline/pcmk__cmdline_preproc_test.c     | 33 ++++++++++++++++++++++
7ac83c
 2 files changed, 41 insertions(+)
7ac83c
7ac83c
diff --git a/lib/common/cmdline.c b/lib/common/cmdline.c
7ac83c
index 9c1b810..1ca6147 100644
7ac83c
--- a/lib/common/cmdline.c
7ac83c
+++ b/lib/common/cmdline.c
7ac83c
@@ -146,6 +146,7 @@ gchar **
7ac83c
 pcmk__cmdline_preproc(char **argv, const char *special) {
7ac83c
     GPtrArray *arr = NULL;
7ac83c
     bool saw_dash_dash = false;
7ac83c
+    bool copy_option = false;
7ac83c
 
7ac83c
     if (argv == NULL) {
7ac83c
         return NULL;
7ac83c
@@ -175,6 +176,12 @@ pcmk__cmdline_preproc(char **argv, const char *special) {
7ac83c
             continue;
7ac83c
         }
7ac83c
 
7ac83c
+        if (copy_option == true) {
7ac83c
+            g_ptr_array_add(arr, g_strdup(argv[i]));
7ac83c
+            copy_option = false;
7ac83c
+            continue;
7ac83c
+        }
7ac83c
+
7ac83c
         /* This is just a dash by itself.  That could indicate stdin/stdout, or
7ac83c
          * it could be user error.  Copy it over and let glib figure it out.
7ac83c
          */
7ac83c
@@ -239,6 +246,7 @@ pcmk__cmdline_preproc(char **argv, const char *special) {
7ac83c
                      */
7ac83c
                     } else {
7ac83c
                         g_ptr_array_add(arr, g_strdup_printf("-%c", *ch));
7ac83c
+                        copy_option = true;
7ac83c
                         ch++;
7ac83c
                     }
7ac83c
 
7ac83c
diff --git a/lib/common/tests/cmdline/pcmk__cmdline_preproc_test.c b/lib/common/tests/cmdline/pcmk__cmdline_preproc_test.c
7ac83c
index 9a752ef..edc5640 100644
7ac83c
--- a/lib/common/tests/cmdline/pcmk__cmdline_preproc_test.c
7ac83c
+++ b/lib/common/tests/cmdline/pcmk__cmdline_preproc_test.c
7ac83c
@@ -106,6 +106,36 @@ negative_score_2(void) {
7ac83c
     g_strfreev(processed);
7ac83c
 }
7ac83c
 
7ac83c
+static void
7ac83c
+string_arg_with_dash(void) {
7ac83c
+    const char *argv[] = { "-n", "crm_mon_options", "-v", "--opt1 --opt2", NULL };
7ac83c
+    const gchar *expected[] = { "-n", "crm_mon_options", "-v", "--opt1 --opt2", NULL };
7ac83c
+
7ac83c
+    gchar **processed = pcmk__cmdline_preproc((char **) argv, "v");
7ac83c
+    LISTS_EQ(processed, expected);
7ac83c
+    g_strfreev(processed);
7ac83c
+}
7ac83c
+
7ac83c
+static void
7ac83c
+string_arg_with_dash_2(void) {
7ac83c
+    const char *argv[] = { "-n", "crm_mon_options", "-v", "-1i3", NULL };
7ac83c
+    const gchar *expected[] = { "-n", "crm_mon_options", "-v", "-1i3", NULL };
7ac83c
+
7ac83c
+    gchar **processed = pcmk__cmdline_preproc((char **) argv, "v");
7ac83c
+    LISTS_EQ(processed, expected);
7ac83c
+    g_strfreev(processed);
7ac83c
+}
7ac83c
+
7ac83c
+static void
7ac83c
+string_arg_with_dash_3(void) {
7ac83c
+    const char *argv[] = { "-abc", "-1i3", NULL };
7ac83c
+    const gchar *expected[] = { "-a", "-b", "-c", "-1i3", NULL };
7ac83c
+
7ac83c
+    gchar **processed = pcmk__cmdline_preproc((char **) argv, "c");
7ac83c
+    LISTS_EQ(processed, expected);
7ac83c
+    g_strfreev(processed);
7ac83c
+}
7ac83c
+
7ac83c
 int
7ac83c
 main(int argc, char **argv)
7ac83c
 {
7ac83c
@@ -120,5 +150,8 @@ main(int argc, char **argv)
7ac83c
     g_test_add_func("/common/cmdline/preproc/long_arg", long_arg);
7ac83c
     g_test_add_func("/common/cmdline/preproc/negative_score", negative_score);
7ac83c
     g_test_add_func("/common/cmdline/preproc/negative_score_2", negative_score_2);
7ac83c
+    g_test_add_func("/common/cmdline/preproc/string_arg_with_dash", string_arg_with_dash);
7ac83c
+    g_test_add_func("/common/cmdline/preproc/string_arg_with_dash_2", string_arg_with_dash_2);
7ac83c
+    g_test_add_func("/common/cmdline/preproc/string_arg_with_dash_3", string_arg_with_dash_3);
7ac83c
     return g_test_run();
7ac83c
 }
7ac83c
-- 
7ac83c
1.8.3.1
7ac83c