From: Lennart Poettering Date: Fri, 7 May 2021 15:29:39 +0000 (+0200) Subject: Merge pull request #18863 from keszybz/cmdline-escaping X-Git-Tag: v249-rc1~274 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37ef2fc9f7709c710692081e7e3be94d7b16d9fa;p=thirdparty%2Fsystemd.git Merge pull request #18863 from keszybz/cmdline-escaping Escape command lines properly --- 37ef2fc9f7709c710692081e7e3be94d7b16d9fa diff --cc src/core/job.c index cfc12096159,639dc352a6c..57829d185a0 --- a/src/core/job.c +++ b/src/core/job.c @@@ -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)); } } diff --cc src/shared/bus-wait-for-jobs.c index 8458fe86847,f325dd4e6d0..e4a3ab9a956 --- a/src/shared/bus-wait-for-jobs.c +++ b/src/shared/bus-wait-for-jobs.c @@@ -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 ? : ""); diff --cc src/test/test-fileio.c index 4d2895c8477,bf763d7dd32..51ae6652797 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@@ -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); @@@ -575,16 -576,13 +591,18 @@@ } 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);