]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #18863 from keszybz/cmdline-escaping
authorLennart Poettering <lennart@poettering.net>
Fri, 7 May 2021 15:29:39 +0000 (17:29 +0200)
committerGitHub <noreply@github.com>
Fri, 7 May 2021 15:29:39 +0000 (17:29 +0200)
Escape command lines properly

1  2 
src/basic/fileio.c
src/basic/fileio.h
src/basic/string-util.c
src/basic/string-util.h
src/core/dbus-unit.c
src/core/job.c
src/coredump/coredump.c
src/environment-d-generator/environment-d-generator.c
src/shared/bus-print-properties.c
src/shared/bus-wait-for-jobs.c
src/test/test-fileio.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc src/core/job.c
index cfc120961596fac478700d4d31f5e64364142358,639dc352a6c0db44080d8a9d9cc1f9a708f830e5..57829d185a059012f18e947caf86f3302aac12c2
@@@ -846,9 -844,9 +846,9 @@@ static void job_print_done_status_messa
          REENABLE_WARNING;
  
          if (t == JOB_START && result == JOB_FAILED) {
 -                _cleanup_free_ char *quoted;
 +                _cleanup_free_ char *quoted = NULL;
  
-                 quoted = shell_maybe_quote(u->id, ESCAPE_BACKSLASH);
+                 quoted = shell_maybe_quote(u->id, 0);
                  manager_status_printf(u->manager, STATUS_TYPE_NORMAL, NULL, "See 'systemctl status %s' for details.", strna(quoted));
          }
  }
Simple merge
Simple merge
index 8458fe8684770680d7ce198394dc0aa1c49739a7,f325dd4e6d06ca5ab7240b2f48c7f18fa96b81a2..e4a3ab9a956b5a90ded066c82042387a3039cf5f
@@@ -181,10 -181,10 +181,10 @@@ static void log_job_error_with_service_
  
          assert(service);
  
-         service_shell_quoted = shell_maybe_quote(service, ESCAPE_BACKSLASH);
+         service_shell_quoted = shell_maybe_quote(service, 0);
  
          if (!strv_isempty((char**) extra_args)) {
 -                _cleanup_free_ char *t;
 +                _cleanup_free_ char *t = NULL;
  
                  t = strv_join((char**) extra_args, " ");
                  systemctl = strjoina("systemctl ", t ? : "<args>");
index 4d2895c84771ed61a7fb7913740b4fd78e550f4f,bf763d7dd322b1f2ff48bd59346e7ad7a3205e4c..51ae6652797eab99ecd82a76e301feb2fa54cfe0
@@@ -526,46 -539,34 +540,48 @@@ static void test_load_env_file_pairs(vo
  }
  
  static void test_search_and_fopen(void) {
 -        const char *dirs[] = {"/tmp/foo/bar", "/tmp", NULL};
 -
 +        static const char* const dirs[] = {
 +                "/tmp/foo/bar",
 +                "/tmp",
 +                NULL
 +        };
          char name[] = "/tmp/test-search_and_fopen.XXXXXX";
 -        int fd, r;
 -        FILE *f;
 +        _cleanup_fclose_ FILE *f = NULL;
 +        _cleanup_free_ char *p = NULL;
 +        _cleanup_close_ int fd = -1;
 +        const char *e;
 +        int r;
  
+         log_info("/* %s */", __func__);
          fd = mkostemp_safe(name);
          assert_se(fd >= 0);
 -        close(fd);
 +        fd = safe_close(fd);
  
 -        r = search_and_fopen(basename(name), "r", NULL, dirs, &f);
 +        r = search_and_fopen(basename(name), "re", NULL, (const char**) dirs, &f, &p);
          assert_se(r >= 0);
 -        fclose(f);
 +        assert_se(e = path_startswith(p, "/tmp/"));
 +        assert_se(streq(basename(name), e));
 +        f = safe_fclose(f);
 +        p = mfree(p);
  
 -        r = search_and_fopen(name, "r", NULL, dirs, &f);
 +        r = search_and_fopen(name, "re", NULL, (const char**) dirs, &f, &p);
          assert_se(r >= 0);
 -        fclose(f);
 +        assert_se(path_equal(name, p));
 +        f = safe_fclose(f);
 +        p = mfree(p);
  
 -        r = search_and_fopen(basename(name), "r", "/", dirs, &f);
 +        r = search_and_fopen(basename(name), "re", "/", (const char**) dirs, &f, &p);
          assert_se(r >= 0);
 -        fclose(f);
 +        assert_se(e = path_startswith(p, "/tmp/"));
 +        assert_se(streq(basename(name), e));
 +        f = safe_fclose(f);
 +        p = mfree(p);
  
 -        r = search_and_fopen("/a/file/which/does/not/exist/i/guess", "r", NULL, dirs, &f);
 -        assert_se(r < 0);
 -        r = search_and_fopen("afilewhichdoesnotexistiguess", "r", NULL, dirs, &f);
 -        assert_se(r < 0);
 +        r = search_and_fopen("/a/file/which/does/not/exist/i/guess", "r", NULL, (const char**) dirs, &f, &p);
 +        assert_se(r == -ENOENT);
 +        r = search_and_fopen("afilewhichdoesnotexistiguess", "r", NULL, (const char**) dirs, &f, &p);
 +        assert_se(r == -ENOENT);
  
          r = unlink(name);
          assert_se(r == 0);
  }
  
  static void test_search_and_fopen_nulstr(void) {
 -        const char dirs[] = "/tmp/foo/bar\0/tmp\0";
 +        static const char dirs[] =
 +                "/tmp/foo/bar\0"
 +                "/tmp\0";
  
+         log_info("/* %s */", __func__);
          _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-search_and_fopen.XXXXXX";
 -        int fd, r;
 -        FILE *f;
 +        _cleanup_fclose_ FILE *f = NULL;
 +        _cleanup_free_ char *p = NULL;
 +        _cleanup_close_ int fd = -1;
 +        const char *e;
 +        int r;
  
          fd = mkostemp_safe(name);
          assert_se(fd >= 0);