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.
86 lines
3.4 KiB
86 lines
3.4 KiB
7 years ago
|
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 3da4d3d4f..4ec0cff21 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);
|
||
|
}
|
||
|
}
|
||
|
|