chiark / gitweb /
journalctl: find journal files in right path
authorLennart Poettering <lennart@poettering.net>
Wed, 12 Oct 2011 03:29:08 +0000 (05:29 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 12 Oct 2011 03:29:08 +0000 (05:29 +0200)
src/journal/journalctl.c
src/journal/journald.c

index 5f17f45cac9e4a96ad490b0f375e66828ac0616f..ac376eaf4f7971f9b494a1b0196336e0caf6acfc 100644 (file)
 
 #include "journal-file.h"
 
+static int system_journal_open(JournalFile **f) {
+        int r;
+        char *fn;
+        sd_id128_t machine;
+        char ids[33];
+
+        assert(f);
+
+        r = sd_id128_get_machine(&machine);
+        if (r < 0)
+                return r;
+
+        fn = join("/var/log/journal/", sd_id128_to_string(machine, ids), "/system.journal", NULL);
+        if (!fn)
+                return -ENOMEM;
+
+        r = journal_file_open(fn, O_RDONLY, 0640, f);
+        free(fn);
+
+        if (r >= 0)
+                return r;
+
+        if (r < 0 && r != -ENOENT) {
+                log_error("Failed to open system journal: %s", strerror(-r));
+                return r;
+        }
+
+        fn = join("/run/log/journal/", ids, "/system.journal", NULL);
+        if (!fn)
+                return -ENOMEM;
+
+        r = journal_file_open(fn, O_RDONLY, 0640, f);
+        free(fn);
+
+        if (r < 0) {
+                log_error("Failed to open system journal: %s", strerror(-r));
+                return r;
+        }
+
+        return r;
+}
+
 int main(int argc, char *argv[]) {
         int r;
         JournalFile *f;
@@ -33,10 +75,7 @@ int main(int argc, char *argv[]) {
         log_parse_environment();
         log_open();
 
-        r = journal_file_open("/var/log/journal/system.journal", O_RDONLY, 0644, &f);
-        if (r == -ENOENT)
-                r = journal_file_open("/run/log/journal/system.journal", O_RDONLY, 0644, &f);
-
+        r = system_journal_open(&f);
         if (r < 0) {
                 log_error("Failed to open journal: %s", strerror(-r));
                 return EXIT_FAILURE;
index b8a9fc3adfd8bf1d89b996a6290278c50fa284de..94261f676350d6834b53d9ce222c975a4decb462 100644 (file)
@@ -375,7 +375,7 @@ static int system_journal_open(Server *s) {
                 return r;
 
         /* First try to create the machine path, but not the prefix */
-        fn = join("/var/log/journal/", sd_id128_to_string(machine, ids), NULL);
+        fn = strappend("/var/log/journal/", sd_id128_to_string(machine, ids));
         if (!fn)
                 return -ENOMEM;
         (void) mkdir(fn, 0755);
@@ -389,35 +389,38 @@ static int system_journal_open(Server *s) {
         r = journal_file_open(fn, O_RDWR|O_CREAT, 0640, &s->system_journal);
         free(fn);
 
-        if (r >= 0)
+        if (r >= 0) {
                 fix_perms(s->system_journal, 0);
-        else if (r == -ENOENT) {
-
-                /* /var didn't work, so try /run, but this time we
-                 * create the prefix too */
-                fn = join("/run/log/journal/", ids, NULL);
-                if (!fn)
-                        return -ENOMEM;
-                (void) mkdir_p(fn, 0755);
-                free(fn);
-
-                /* Then create the runtime journal file */
-                fn = join("/run/log/journal/", ids, "/system.journal", NULL);
-                if (!fn)
-                        return -ENOMEM;
-                r = journal_file_open(fn, O_RDWR|O_CREAT, 0640, &s->runtime_journal);
-                free(fn);
-
-                if (r >= 0)
-                        fix_perms(s->runtime_journal, 0);
+                return r;
         }
 
         if (r < 0 && r != -ENOENT) {
-                log_error("Failed to open journal: %s", strerror(-r));
+                log_error("Failed to open system journal: %s", strerror(-r));
                 return r;
         }
 
-        return 0;
+        /* /var didn't work, so try /run, but this time we
+         * create the prefix too */
+        fn = strappend("/run/log/journal/", ids);
+        if (!fn)
+                return -ENOMEM;
+        (void) mkdir_p(fn, 0755);
+        free(fn);
+
+        /* Then create the runtime journal file */
+        fn = join("/run/log/journal/", ids, "/system.journal", NULL);
+        if (!fn)
+                return -ENOMEM;
+        r = journal_file_open(fn, O_RDWR|O_CREAT, 0640, &s->runtime_journal);
+        free(fn);
+
+        if (r < 0) {
+                log_error("Failed to open runtime journal: %s", strerror(-r));
+                return r;
+        }
+
+        fix_perms(s->runtime_journal, 0);
+        return r;
 }
 
 static int server_init(Server *s) {