journalctl: find journal files in right path

This commit is contained in:
Lennart Poettering 2011-10-12 05:29:08 +02:00
parent 69e5d42db0
commit 250d54b5be
2 changed files with 72 additions and 30 deletions

View file

@ -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;

View 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);
}
if (r < 0 && r != -ENOENT) {
log_error("Failed to open journal: %s", strerror(-r));
return r;
}
return 0;
if (r < 0 && r != -ENOENT) {
log_error("Failed to open system journal: %s", strerror(-r));
return r;
}
/* /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) {