}
#ifdef HAVE_SELINUX
- if (getpeercon(fd, &stream->security_context) < 0)
- log_error("Failed to determine peer security context.");
+ if (getpeercon(fd, &stream->security_context) < 0 && errno != ENOPROTOOPT)
+ log_error("Failed to determine peer security context: %m");
#endif
if (shutdown(fd, SHUT_WR) < 0) {
return 1;
}
+static bool is_us(const char *pid) {
+ pid_t t;
+
+ assert(pid);
+
+ if (parse_pid(pid, &t) < 0)
+ return false;
+
+ return t == getpid();
+}
+
static void proc_kmsg_line(Server *s, const char *p) {
struct iovec iovec[N_IOVEC_META_FIELDS + 7];
char *message = NULL, *syslog_priority = NULL, *syslog_pid = NULL, *syslog_facility = NULL, *syslog_identifier = NULL, *source_time = NULL;
} else {
read_identifier(&p, &identifier, &pid);
+ /* Avoid any messages we generated ourselves via
+ * log_info() and friends. */
+ if (is_us(pid))
+ goto finish;
+
if (s->forward_to_syslog)
forward_syslog(s, priority, identifier, p, NULL, NULL);
dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, NULL, 0, priority);
+finish:
free(message);
free(syslog_priority);
free(syslog_identifier);
return EXIT_FAILURE;
}
- log_set_target(LOG_TARGET_KMSG);
+ log_set_target(LOG_TARGET_SAFE);
log_set_facility(LOG_SYSLOG);
log_parse_environment();
log_open();