]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal-remote: make specified output file absolute 27022/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 27 Mar 2023 17:07:31 +0000 (02:07 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 27 Mar 2023 17:29:19 +0000 (02:29 +0900)
After f12b399dd6362a03379cb769954ebfb9972236ed, the output path is
also used to determine the directory to be vacuumed. And if a filename
only path is specified, `writer_new()` fails since the commit.

This makes the specified path is always made absolute. This should not
change any behavior before the offending commit, as `journal_open()` opens
the specified journal file with `AT_FDCWD`.

Fixes #27012.

src/journal-remote/journal-remote-main.c

index 2cc7428e78810c41f7f9b1ff69ce11da3378a8ec..c5ecc2b844b6d174926707be0c71789d8710c482 100644 (file)
@@ -42,7 +42,7 @@ static int http_socket = -1, https_socket = -1;
 static char** arg_gnutls_log = NULL;
 
 static JournalWriteSplitMode arg_split_mode = _JOURNAL_WRITE_SPLIT_INVALID;
-static const char* arg_output = NULL;
+static char *arg_output = NULL;
 
 static char *arg_key = NULL;
 static char *arg_cert = NULL;
@@ -62,6 +62,7 @@ STATIC_DESTRUCTOR_REGISTER(arg_gnutls_log, strv_freep);
 STATIC_DESTRUCTOR_REGISTER(arg_key, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_cert, freep);
 STATIC_DESTRUCTOR_REGISTER(arg_trust, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_output, freep);
 
 static const char* const journal_write_split_mode_table[_JOURNAL_WRITE_SPLIT_MAX] = {
         [JOURNAL_WRITE_SPLIT_NONE] = "none",
@@ -957,7 +958,9 @@ static int parse_argv(int argc, char *argv[]) {
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "cannot use --output/-o more than once");
 
-                        arg_output = optarg;
+                        r = parse_path_argument(optarg, /* suppress_root = */ false, &arg_output);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case ARG_SPLIT_MODE: