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