You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.4 KiB
85 lines
3.4 KiB
From 98d1fe84e1eac91563bff326539465cd34e971c0 Mon Sep 17 00:00:00 2001 |
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl> |
|
Date: Sat, 7 Feb 2015 11:35:37 -0500 |
|
Subject: [PATCH] systemctl: support auditd.service better |
|
|
|
We would print the filename header before trying to open the file. But since |
|
the header was printed to stdout, and the error to stderr, the error would appear |
|
on the terminal before the header. It is cleaner to open the file first, then |
|
and only then print the header. |
|
|
|
Also exit on first error. We shouldn't report success if we were unable to open |
|
a file. |
|
|
|
(cherry picked from commit 8527b07be1c5211b50a1a6496585952857a25c73) |
|
--- |
|
src/systemctl/systemctl.c | 46 +++++++++++++++++++-------------------- |
|
1 file changed, 23 insertions(+), 23 deletions(-) |
|
|
|
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c |
|
index 3da4d3d4f1..4ec0cff21d 100644 |
|
--- a/src/systemctl/systemctl.c |
|
+++ b/src/systemctl/systemctl.c |
|
@@ -4555,6 +4555,23 @@ static int init_home_and_lookup_paths(char **user_home, char **user_runtime, Loo |
|
return 0; |
|
} |
|
|
|
+static int cat_file(const char *filename, bool newline) { |
|
+ _cleanup_close_ int fd; |
|
+ |
|
+ fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOCTTY); |
|
+ if (fd < 0) |
|
+ return -errno; |
|
+ |
|
+ printf("%s%s# %s%s\n", |
|
+ newline ? "\n" : "", |
|
+ ansi_highlight_blue(), |
|
+ filename, |
|
+ ansi_highlight_off()); |
|
+ fflush(stdout); |
|
+ |
|
+ return copy_bytes(fd, STDOUT_FILENO, (off_t) -1, false); |
|
+} |
|
+ |
|
static int cat(sd_bus *bus, char **args) { |
|
_cleanup_free_ char *user_home = NULL; |
|
_cleanup_free_ char *user_runtime = NULL; |
|
@@ -4600,32 +4617,15 @@ static int cat(sd_bus *bus, char **args) { |
|
puts(""); |
|
|
|
if (fragment_path) { |
|
- printf("%s# %s%s\n", |
|
- ansi_highlight_blue(), |
|
- fragment_path, |
|
- ansi_highlight_off()); |
|
- fflush(stdout); |
|
- |
|
- r = copy_file_fd(fragment_path, STDOUT_FILENO, false); |
|
- if (r < 0) { |
|
- log_warning_errno(r, "Failed to cat %s: %m", fragment_path); |
|
- continue; |
|
- } |
|
+ r = cat_file(fragment_path, false); |
|
+ if (r < 0) |
|
+ return log_warning_errno(r, "Failed to cat %s: %m", fragment_path); |
|
} |
|
|
|
STRV_FOREACH(path, dropin_paths) { |
|
- printf("%s%s# %s%s\n", |
|
- isempty(fragment_path) && path == dropin_paths ? "" : "\n", |
|
- ansi_highlight_blue(), |
|
- *path, |
|
- ansi_highlight_off()); |
|
- fflush(stdout); |
|
- |
|
- r = copy_file_fd(*path, STDOUT_FILENO, false); |
|
- if (r < 0) { |
|
- log_warning_errno(r, "Failed to cat %s: %m", *path); |
|
- continue; |
|
- } |
|
+ r = cat_file(*path, path == dropin_paths); |
|
+ if (r < 0) |
|
+ return log_warning_errno(r, "Failed to cat %s: %m", *path); |
|
} |
|
} |
|
|
|
|