]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: be more specific when emitting warning about rotated journal 14965/head
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 27 Feb 2020 18:51:57 +0000 (19:51 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 27 Feb 2020 18:52:08 +0000 (19:52 +0100)
See inline comment for disucssion.
Fixes #14281.

src/shared/journal-util.c
src/shared/journal-util.h
src/shared/logs-show.c

index 2f672c293543c12b3f31362b75a310589997db42..cb3762df436d7d06b61d5d2269c03129457d01a4 100644 (file)
@@ -80,6 +80,10 @@ static int access_check_var_log_journal(sd_journal *j, bool want_other_users) {
         return 1;
 }
 
+int journal_access_blocked(sd_journal *j) {
+        return hashmap_contains(j->errors, INT_TO_PTR(-EACCES));
+}
+
 int journal_access_check_and_warn(sd_journal *j, bool quiet, bool want_other_users) {
         Iterator it;
         void *code;
@@ -95,7 +99,7 @@ int journal_access_check_and_warn(sd_journal *j, bool quiet, bool want_other_use
                 return 0;
         }
 
-        if (hashmap_contains(j->errors, INT_TO_PTR(-EACCES))) {
+        if (journal_access_blocked(j)) {
                 if (!quiet)
                         (void) access_check_var_log_journal(j, want_other_users);
 
index da86434a6795e54b866c22ef7815d7b2d8c6a056..34ad1bfc8e6dafd7504c6ad7695dfe494f9bbf6f 100644 (file)
@@ -7,5 +7,5 @@
 #include "sd-journal.h"
 
 bool journal_field_valid(const char *p, size_t l, bool allow_protected);
-
+int journal_access_blocked(sd_journal *j);
 int journal_access_check_and_warn(sd_journal *j, bool quiet, bool want_other_users);
index 605412aec5186caa75540d96aa18a9e32ae6319f..b83f543ba8ea50b7710707d67164fef69ec8ebc1 100644 (file)
@@ -20,6 +20,7 @@
 #include "id128-util.h"
 #include "io-util.h"
 #include "journal-internal.h"
+#include "journal-util.h"
 #include "json.h"
 #include "log.h"
 #include "logs-show.h"
@@ -1232,7 +1233,21 @@ int show_journal(
 
                         if (r > 0 && not_before < cutoff) {
                                 maybe_print_begin_newline(f, &flags);
-                                fprintf(f, "Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.\n");
+
+                                /* If we logged *something* and no permission error happened, than we can
+                                 * reliably emit the warning about rotation. If we didn't log anything and
+                                 * access errors happened, emit hint about permissions. Otherwise, give a
+                                 * generic message, since we can't diagnose the issue. */
+
+                                bool noaccess = journal_access_blocked(j);
+
+                                if (line == 0 && noaccess)
+                                        fprintf(f, "Warning: some journal files were not opened due to insufficient permissions.");
+                                else if (!noaccess)
+                                        fprintf(f, "Warning: journal has been rotated since unit was started, output may be incomplete.\n");
+                                else
+                                        fprintf(f, "Warning: journal has been rotated since unit was started and some journal "
+                                                "files were not opened due to insufficient permissions, output may be incomplete.\n");
                         }
 
                         warn_cutoff = false;