diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/journal/journalctl.c | 47 | ||||
-rw-r--r-- | src/journal/journald.c | 49 |
2 files changed, 69 insertions, 27 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 5f17f45cac..ac376eaf4f 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -25,6 +25,48 @@ #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; diff --git a/src/journal/journald.c b/src/journal/journald.c index b8a9fc3adf..94261f6763 100644 --- a/src/journal/journald.c +++ b/src/journal/journald.c @@ -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) { |