journald-server.c revision 433dd100442e8197868def975c6fd38b48dc6439
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt This file is part of systemd.
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt Copyright 2011 Lennart Poettering
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt systemd is free software; you can redistribute it and/or modify it
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt under the terms of the GNU Lesser General Public License as published by
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt the Free Software Foundation; either version 2.1 of the License, or
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt (at your option) any later version.
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt systemd is distributed in the hope that it will be useful, but
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt WITHOUT ANY WARRANTY; without even the implied warranty of
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt Lesser General Public License for more details.
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt You should have received a copy of the GNU Lesser General Public License
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt along with systemd; If not, see <http://www.gnu.org/licenses/>.
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt#define DEFAULT_SYNC_INTERVAL_USEC (5*USEC_PER_MINUTE)
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt#define DEFAULT_RATE_LIMIT_INTERVAL (30*USEC_PER_SEC)
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt#define RECHECK_AVAILABLE_SPACE_USEC (30*USEC_PER_SEC)
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flyktstatic const char* const storage_table[] = {
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik FlyktDEFINE_CONFIG_PARSE_ENUM(config_parse_storage, storage, Storage, "Failed to parse storage setting");
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik Flyktstatic const char* const split_mode_table[] = {
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik FlyktDEFINE_STRING_TABLE_LOOKUP(split_mode, SplitMode);
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik FlyktDEFINE_CONFIG_PARSE_ENUM(config_parse_split_mode, split_mode, SplitMode, "Failed to parse split mode setting");
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik Flyktstatic uint64_t available_space(Server *s, bool verbose) {
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik Flykt const char *f;
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik Flykt if (s->cached_available_space_timestamp + RECHECK_AVAILABLE_SPACE_USEC > ts
f12ed3bf0b315fc88d5fbdf5bdca14b218c86e0cPatrik Flykt p = strappend(f, sd_id128_to_string(machine, ids));
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt if (fstatat(dirfd(d), de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0)
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt avail = ss_avail > m->keep_free ? ss_avail - m->keep_free : 0;
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt s->cached_available_space = MIN(m->max_use, avail) > sum ? MIN(m->max_use, avail) - sum : 0;
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt char fb1[FORMAT_BYTES_MAX], fb2[FORMAT_BYTES_MAX], fb3[FORMAT_BYTES_MAX],
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt server_driver_message(s, SD_MESSAGE_JOURNAL_USAGE,
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt "%s journal is using %s (max %s, leaving %s of free %s, current limit %s).",
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt format_bytes(fb5, sizeof(fb5), MIN(m->max_use, avail)));
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt const char *g = "systemd-journal";
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt log_warning("Failed to resolve '%s' group: %s", g, strerror(-r));
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt /* if we couldn't read the gid, then it will be 0, but that's
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt * fine and we shouldn't try to resolve the group again, so
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt * let's just pretend it worked right-away. */
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flyktvoid server_fix_perms(Server *s, JournalFile *f, uid_t uid) {
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt r = fchmod_and_fchown(f->fd, 0640, 0, s->file_gid);
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt log_warning("Failed to fix access mode/rights on %s, ignoring: %s", f->path, strerror(-r));
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt log_warning("Failed to read ACL on %s, ignoring: %m", f->path);
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt if (r <= 0) {
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt log_warning("Failed to patch ACL on %s, ignoring: %m", f->path);
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt /* We do not recalculate the mask unconditionally here,
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt * so that the fchmod() mask above stays intact. */
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt log_warning("Failed to patch ACL on %s, ignoring: %m", f->path);
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt log_warning("Failed to set ACL on %s, ignoring: %m", f->path);
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flyktstatic JournalFile* find_journal(Server *s, uid_t uid) {
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt /* We split up user logs only on /var, not on /run. If the
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt * runtime file is open, we write to it exclusively, in order
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt * to guarantee proper order as soon as we flush /run to
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt * /var and close the runtime file. */
859cca44f834ab1cc3e41fa6b94744f1856ab027Patrik Flykt f = hashmap_get(s->user_journals, UINT32_TO_PTR(uid));
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (asprintf(&p, "/var/log/journal/" SD_ID128_FORMAT_STR "/user-%lu.journal",
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt SD_ID128_FORMAT_VAL(machine), (unsigned long) uid) < 0)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt while (hashmap_size(s->user_journals) >= USER_JOURNALS_MAX) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt /* Too many open? Then let's close one */
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt r = journal_file_open_reliably(p, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &f);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt r = hashmap_put(s->user_journals, UINT32_TO_PTR(uid), f);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (r < 0) {
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = journal_file_rotate(&s->runtime_journal, s->compress, false);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to rotate %s: %s", s->runtime_journal->path, strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to create new runtime journal: %s", strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = journal_file_rotate(&s->system_journal, s->compress, s->seal);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to rotate %s: %s", s->system_journal->path, strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to create new system journal: %s", strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) {
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = journal_file_rotate(&f, s->compress, s->seal);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to rotate %s: %s", f->path, strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to create user journal: %s", strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt static const struct itimerspec sync_timer_disable = {};
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = journal_file_set_offline(s->system_journal);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to sync system journal: %s", strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) {
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to sync user journal: %s", strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = timerfd_settime(s->sync_timer_fd, 0, &sync_timer_disable, NULL);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt if (r < 0) {
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to get machine ID: %s", strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt char *p = strappenda("/var/log/journal/", ids);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = journal_directory_vacuum(p, s->system_metrics.max_use, s->system_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt if (r < 0 && r != -ENOENT)
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_error("Failed to vacuum %s: %s", p, strerror(-r));
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt char *p = strappenda("/run/log/journal/", ids);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt r = journal_directory_vacuum(p, s->runtime_metrics.max_use, s->runtime_metrics.keep_free, s->max_retention_usec, &s->oldest_file_usec);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (r < 0 && r != -ENOENT)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_error("Failed to vacuum %s: %s", p, strerror(-r));
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flyktbool shall_try_append_again(JournalFile *f, int r) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt /* -E2BIG Hit configured limit
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -EFBIG Hit fs limit
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -EDQUOT Quota limit hit
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -ENOSPC Disk full
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -EHOSTDOWN Other machine
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt -EBUSY Unclean shutdown
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt -EPROTONOSUPPORT Unsupported feature
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -EBADMSG Corrupted
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -ENODATA Truncated
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt -ESHUTDOWN Already archived */
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (r == -E2BIG || r == -EFBIG || r == -EDQUOT || r == -ENOSPC)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_debug("%s: Allocation limit reached, rotating.", f->path);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt else if (r == -EHOSTDOWN)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_info("%s: Journal file from other machine, rotating.", f->path);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt else if (r == -EBUSY)
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt log_info("%s: Unclean shutdown, rotating.", f->path);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt else if (r == -EPROTONOSUPPORT)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_info("%s: Unsupported feature, rotating.", f->path);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt else if (r == -EBADMSG || r == -ENODATA || r == ESHUTDOWN)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_warning("%s: Journal file corrupted, rotating.", f->path);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt return false;
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt return true;
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flyktstatic void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned n) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt bool vacuumed = false;
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (journal_file_rotate_suggested(f, s->max_file_usec)) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_debug("%s: Journal header limits reached or header out-of-date, rotating.", f->path);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt r = journal_file_append_entry(f, NULL, iovec, n, &s->seqnum, NULL, NULL);
5e256ea7d3d556b3a1fb5c1faa94ec6a8833e53ePatrik Flykt if (r >= 0) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (vacuumed || !shall_try_append_again(f, r)) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt for (i = 0; i < n; i++)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_error("Failed to write entry (%d items, %zu bytes), ignoring: %s", n, size, strerror(-r));
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt r = journal_file_append_entry(f, NULL, iovec, n, &s->seqnum, NULL, NULL);
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt if (r < 0) {
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt for (i = 0; i < n; i++)
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt log_error("Failed to write entry (%d items, %zu bytes) despite vacuuming, ignoring: %s", n, size, strerror(-r));
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt char pid[sizeof("_PID=") + DECIMAL_STR_MAX(pid_t)],
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt owner_uid[sizeof("_SYSTEMD_OWNER_UID=") + DECIMAL_STR_MAX(uid_t)],
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt source_time[sizeof("_SOURCE_REALTIME_TIMESTAMP=") + DECIMAL_STR_MAX(usec_t)],
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt boot_id[sizeof("_BOOT_ID=") + 32] = "_BOOT_ID=",
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt machine_id[sizeof("_MACHINE_ID=") + 32] = "_MACHINE_ID=",
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt o_uid[sizeof("OBJECT_UID=") + DECIMAL_STR_MAX(uid_t)],
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt o_gid[sizeof("OBJECT_GID=") + DECIMAL_STR_MAX(gid_t)],
2ea8857effb833615b16d10fc7a19a7104c19e13Patrik Flykt o_owner_uid[sizeof("OBJECT_SYSTEMD_OWNER_UID=") + DECIMAL_STR_MAX(uid_t)];
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt char *t, *c;
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt char audit_session[sizeof("_AUDIT_SESSION=") + DECIMAL_STR_MAX(uint32_t)],
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt audit_loginuid[sizeof("_AUDIT_LOGINUID=") + DECIMAL_STR_MAX(uid_t)],
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt o_audit_session[sizeof("OBJECT_AUDIT_SESSION=") + DECIMAL_STR_MAX(uint32_t)],
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt o_audit_loginuid[sizeof("OBJECT_AUDIT_LOGINUID=") + DECIMAL_STR_MAX(uid_t)];
813e3a6ffcd094696001716480bbd68008cc54c8Patrik Flykt assert(n + N_IOVEC_META_FIELDS + (object_pid ? N_IOVEC_OBJECT_FIELDS : 0) <= m);
if (ucred) {
free(t);
free(t);
free(t);
#ifdef HAVE_AUDIT
r = cg_path_get_session(c, &t);
free(t);
owner_valid = true;
if (cg_path_get_unit(c, &t) >= 0) {
free(t);
} else if (cg_path_get_user_unit(c, &t) >= 0) {
free(t);
} else if (unit_id) {
if (session)
x = NULL;
free(c);
#ifdef HAVE_SELINUX
if (label) {
assert(n <= m);
if (object_pid) {
free(t);
free(t);
free(t);
#ifdef HAVE_AUDIT
r = cg_path_get_session(c, &t);
free(t);
if (cg_path_get_unit(c, &t) >= 0) {
free(t);
} else if (cg_path_get_user_unit(c, &t) >= 0) {
free(t);
x = NULL;
free(c);
assert(n <= m);
if (tv) {
t = gethostname_malloc();
free(t);
assert(n <= m);
journal_uid = 0;
assert(s);
void server_dispatch_message(
Server *s,
const char *unit_id,
int priority,
int rl, r;
assert(s);
if (!ucred)
goto finish;
goto finish;
if (rl == 0)
char *fn;
if (!s->system_journal &&
r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, s->compress, s->seal, &s->system_metrics, s->mmap, NULL, &s->system_journal);
if (!s->runtime_journal &&
if (!fn)
return -ENOMEM;
if (s->system_journal) {
r = journal_file_open(fn, O_RDWR, 0640, s->compress, false, &s->runtime_metrics, s->mmap, NULL, &s->runtime_journal);
if (r != -ENOENT)
r = journal_file_open_reliably(fn, O_RDWR|O_CREAT, 0640, s->compress, false, &s->runtime_metrics, s->mmap, NULL, &s->runtime_journal);
if (s->runtime_journal)
available_space(s, true);
assert(s);
if (!s->runtime_journal)
if (!s->system_journal)
SD_JOURNAL_FOREACH(j) {
JournalFile *f;
f = j->current_file;
goto finish;
goto finish;
server_rotate(s);
server_vacuum(s);
if (!s->system_journal) {
r = -EIO;
goto finish;
goto finish;
sd_journal_close(j);
assert(s);
ssize_t n;
return -EIO;
if (n != sizeof(sfsi)) {
return -EIO;
return -errno;
server_sync(s);
server_rotate(s);
server_vacuum(s);
uint64_t t;
server_sync(s);
return -EIO;
r = server_read_dev_kmsg(s);
return -EIO;
} control;
ssize_t n;
unsigned n_fds = 0;
return -errno;
size_t l;
return -ENOMEM;
s->buffer_size = l;
s->buffer = b;
return -errno;
if (n > 0 && n_fds == 0) {
s->buffer[n] = 0;
} else if (n_fds > 0)
if (n > 0 && n_fds == 0)
else if (n_fds > 0)
return -EIO;
return -EIO;
assert(s);
if (s->signal_fd < 0) {
return -errno;
return -errno;
char *w, *state;
size_t l;
if (!word)
return -ENOMEM;
s->forward_to_syslog = r;
s->forward_to_kmsg = r;
s->forward_to_console = r;
assert(s);
return -errno;
(void*) journald_gperf_lookup, false, false, s);
assert(s);
if (s->sync_timer_fd < 0)
return -errno;
return -errno;
assert(s);
if (s->sync_scheduled)
if (s->sync_interval_usec) {
return -errno;
s->sync_scheduled = true;
int n, r, fd;
assert(s);
zero(*s);
s->compress = true;
s->seal = true;
s->sync_scheduled = false;
s->forward_to_syslog = true;
(long long unsigned) s->rate_limit_interval,
s->rate_limit_burst);
if (!s->user_journals)
return log_oom();
if (!s->mmap)
return log_oom();
if (s->epoll_fd < 0) {
return -errno;
n = sd_listen_fds(true);
if (s->native_fd >= 0) {
return -EINVAL;
if (s->stdout_fd >= 0) {
return -EINVAL;
if (s->syslog_fd >= 0) {
return -EINVAL;
return -EINVAL;
r = server_open_syslog_socket(s);
r = server_open_native_socket(s);
r = server_open_stdout_socket(s);
r = server_open_dev_kmsg(s);
r = server_open_kernel_seqnum(s);
r = server_open_sync_timer(s);
r = open_signalfd(s);
if (!s->udev)
return -ENOMEM;
s->rate_limit_burst);
if (!s->rate_limit)
return -ENOMEM;
r = system_journal_open(s);
#ifdef HAVE_GCRYPT
JournalFile *f;
Iterator i;
usec_t n;
if (s->system_journal)
JournalFile *f;
assert(s);
while (s->stdout_streams)
if (s->system_journal)
if (s->runtime_journal)
if (s->epoll_fd >= 0)
if (s->signal_fd >= 0)
if (s->syslog_fd >= 0)
if (s->native_fd >= 0)
if (s->stdout_fd >= 0)
if (s->dev_kmsg_fd >= 0)
if (s->sync_timer_fd >= 0)
if (s->rate_limit)
if (s->kernel_seqnum)
if (s->mmap)
if (s->udev)