X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fjournal%2Fjournald.c;h=97d2ec05c7873eee59cab9aa2aac88ad4e271fff;hp=d27cb60ac7e7791b137c4c9a7c44859e544272dd;hb=7ea07dcddafe573c699fc48171b57b912897e7e2;hpb=0071d9f1db6dc9a1035cf5afb81455b67ed462f6
diff --git a/src/journal/journald.c b/src/journal/journald.c
index d27cb60ac..97d2ec05c 100644
--- a/src/journal/journald.c
+++ b/src/journal/journald.c
@@ -6,16 +6,16 @@
Copyright 2011 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see .
***/
@@ -29,13 +29,13 @@
#include
#include
#include
-#include
#include
#include
#include
#include
+#include "mkdir.h"
#include "hashmap.h"
#include "journal-file.h"
#include "socket-util.h"
@@ -1148,7 +1148,7 @@ static void process_native_message(
char *identifier = NULL, *message = NULL;
assert(s);
- assert(buffer || n == 0);
+ assert(buffer || buffer_size == 0);
p = buffer;
remaining = buffer_size;
@@ -1259,6 +1259,7 @@ static void process_native_message(
p = e + 1;
continue;
} else {
+ le64_t l_le;
uint64_t l;
char *k;
@@ -1267,8 +1268,8 @@ static void process_native_message(
break;
}
- memcpy(&l, e + 1, sizeof(uint64_t));
- l = le64toh(l);
+ memcpy(&l_le, e + 1, sizeof(uint64_t));
+ l = le64toh(l_le);
if (remaining < e - p + 1 + sizeof(uint64_t) + l + 1 ||
e[1+sizeof(uint64_t)+l] != '\n') {
@@ -2149,10 +2150,20 @@ static int process_event(Server *s, struct epoll_event *ev) {
size_t label_len = 0;
union {
struct cmsghdr cmsghdr;
+
+ /* We use NAME_MAX space for the
+ * SELinux label here. The kernel
+ * currently enforces no limit, but
+ * according to suggestions from the
+ * SELinux people this will change and
+ * it will probably be identical to
+ * NAME_MAX. For now we use that, but
+ * this should be updated one day when
+ * the final limit is known.*/
uint8_t buf[CMSG_SPACE(sizeof(struct ucred)) +
CMSG_SPACE(sizeof(struct timeval)) +
- CMSG_SPACE(sizeof(int)) +
- CMSG_SPACE(PAGE_SIZE)]; /* selinux label */
+ CMSG_SPACE(sizeof(int)) + /* fd */
+ CMSG_SPACE(NAME_MAX)]; /* selinux label */
} control;
ssize_t n;
int v;
@@ -2469,7 +2480,7 @@ static int open_proc_kmsg(Server *s) {
return 0;
- s->proc_kmsg_fd = open("/proc/kmsg", O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
+ s->proc_kmsg_fd = open("/proc/kmsg", O_RDONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
if (s->proc_kmsg_fd < 0) {
log_warning("Failed to open /proc/kmsg, ignoring: %m");
return 0;
@@ -2574,7 +2585,7 @@ static int server_parse_config_file(Server *s) {
assert(s);
- fn = "/etc/systemd/systemd-journald.conf";
+ fn = "/etc/systemd/journald.conf";
f = fopen(fn, "re");
if (!f) {
if (errno == ENOENT)
@@ -2755,6 +2766,7 @@ int main(int argc, char *argv[]) {
}
log_set_target(LOG_TARGET_CONSOLE);
+ log_set_facility(LOG_SYSLOG);
log_parse_environment();
log_open();