log: don't strip facility when writing to kmsg
This commit is contained in:
parent
7602c46fe6
commit
29db583471
10
TODO
10
TODO
|
@ -19,18 +19,10 @@ F15:
|
||||||
|
|
||||||
* NM should pull in network.target, ntpd should pull in rtc-set.target.
|
* NM should pull in network.target, ntpd should pull in rtc-set.target.
|
||||||
|
|
||||||
* kernel patch wegen kmsg prio nach f15
|
|
||||||
|
|
||||||
* selinux issue http://people.gnome.org/~cosimoc/selinux.jpg
|
|
||||||
|
|
||||||
* fix alsa mixer restore to not print error when no config is stored
|
* fix alsa mixer restore to not print error when no config is stored
|
||||||
|
|
||||||
* ply should do mkdir before writing pid file
|
|
||||||
|
|
||||||
* ConditionDirectoryNotEmpty= needs to be documented
|
* ConditionDirectoryNotEmpty= needs to be documented
|
||||||
|
|
||||||
* add /etc/modules-load.d to rpm
|
|
||||||
|
|
||||||
Features:
|
Features:
|
||||||
|
|
||||||
* tmpfiles should allow two identical lines
|
* tmpfiles should allow two identical lines
|
||||||
|
@ -40,8 +32,6 @@ Features:
|
||||||
|
|
||||||
* document default dependencies
|
* document default dependencies
|
||||||
|
|
||||||
* LOG_DAEMON/LOG_USER für kmsg messages schreiben
|
|
||||||
|
|
||||||
* Find a way to replace /var/run, /var/lock directories with
|
* Find a way to replace /var/run, /var/lock directories with
|
||||||
symlinks during an RPM package upgrade (filesystem.rpm or systemd.rpm).
|
symlinks during an RPM package upgrade (filesystem.rpm or systemd.rpm).
|
||||||
We soon want to get rid of var-run.mount var-lock.mount units.
|
We soon want to get rid of var-run.mount var-lock.mount units.
|
||||||
|
|
|
@ -289,7 +289,7 @@ static int write_to_syslog(
|
||||||
if (syslog_fd < 0)
|
if (syslog_fd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
snprintf(header_priority, sizeof(header_priority), "<%i>", LOG_MAKEPRI(LOG_DAEMON, LOG_PRI(level)));
|
snprintf(header_priority, sizeof(header_priority), "<%i>", level);
|
||||||
char_array_0(header_priority);
|
char_array_0(header_priority);
|
||||||
|
|
||||||
t = (time_t) (now(CLOCK_REALTIME) / USEC_PER_SEC);
|
t = (time_t) (now(CLOCK_REALTIME) / USEC_PER_SEC);
|
||||||
|
@ -346,7 +346,7 @@ static int write_to_kmsg(
|
||||||
if (kmsg_fd < 0)
|
if (kmsg_fd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
snprintf(header_priority, sizeof(header_priority), "<%i>", LOG_PRI(level));
|
snprintf(header_priority, sizeof(header_priority), "<%i>", level);
|
||||||
char_array_0(header_priority);
|
char_array_0(header_priority);
|
||||||
|
|
||||||
snprintf(header_pid, sizeof(header_pid), "[%lu]: ", (unsigned long) getpid());
|
snprintf(header_pid, sizeof(header_pid), "[%lu]: ", (unsigned long) getpid());
|
||||||
|
@ -377,6 +377,10 @@ static int log_dispatch(
|
||||||
if (log_target == LOG_TARGET_NULL)
|
if (log_target == LOG_TARGET_NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* Patch in LOG_DAEMON facility if necessary */
|
||||||
|
if (LOG_FAC(level) == 0)
|
||||||
|
level = LOG_MAKEPRI(LOG_DAEMON, LOG_PRI(level));
|
||||||
|
|
||||||
do {
|
do {
|
||||||
char *e;
|
char *e;
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
|
46
src/logger.c
46
src/logger.c
|
@ -93,6 +93,42 @@ struct Stream {
|
||||||
LIST_FIELDS(Stream, stream);
|
LIST_FIELDS(Stream, stream);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void parse_priority(char **p, int *priority) {
|
||||||
|
int a = 0, b = 0, c = 0;
|
||||||
|
int k;
|
||||||
|
|
||||||
|
assert(p);
|
||||||
|
assert(*p);
|
||||||
|
assert(priority);
|
||||||
|
|
||||||
|
if ((*p)[0] != '<')
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!strchr(*p, '>'))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((*p)[2] == '>') {
|
||||||
|
c = undecchar((*p)[1]);
|
||||||
|
k = 3;
|
||||||
|
} else if ((*p)[3] == '>') {
|
||||||
|
b = undecchar((*p)[1]);
|
||||||
|
c = undecchar((*p)[2]);
|
||||||
|
k = 4;
|
||||||
|
} else if ((*p)[4] == '>') {
|
||||||
|
a = undecchar((*p)[1]);
|
||||||
|
b = undecchar((*p)[2]);
|
||||||
|
c = undecchar((*p)[3]);
|
||||||
|
k = 5;
|
||||||
|
} else
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (a < 0 || b < 0 || c < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
*priority = a*100+b*10+c;
|
||||||
|
*p += k;
|
||||||
|
}
|
||||||
|
|
||||||
static int stream_log(Stream *s, char *p, usec_t ts) {
|
static int stream_log(Stream *s, char *p, usec_t ts) {
|
||||||
|
|
||||||
char header_priority[16], header_time[64], header_pid[16];
|
char header_priority[16], header_time[64], header_pid[16];
|
||||||
|
@ -104,6 +140,9 @@ static int stream_log(Stream *s, char *p, usec_t ts) {
|
||||||
|
|
||||||
priority = s->priority;
|
priority = s->priority;
|
||||||
|
|
||||||
|
if (s->prefix)
|
||||||
|
parse_priority(&p, &priority);
|
||||||
|
|
||||||
if (s->prefix &&
|
if (s->prefix &&
|
||||||
p[0] == '<' &&
|
p[0] == '<' &&
|
||||||
p[1] >= '0' && p[1] <= '7' &&
|
p[1] >= '0' && p[1] <= '7' &&
|
||||||
|
@ -118,6 +157,10 @@ static int stream_log(Stream *s, char *p, usec_t ts) {
|
||||||
if (*p == 0)
|
if (*p == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* Patch in LOG_USER facility if necessary */
|
||||||
|
if (LOG_FAC(priority) == 0)
|
||||||
|
priority = LOG_MAKEPRI(LOG_USER, LOG_PRI(priority));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The format glibc uses to talk to the syslog daemon is:
|
* The format glibc uses to talk to the syslog daemon is:
|
||||||
*
|
*
|
||||||
|
@ -130,8 +173,7 @@ static int stream_log(Stream *s, char *p, usec_t ts) {
|
||||||
* We extend the latter to include the process name and pid.
|
* We extend the latter to include the process name and pid.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
snprintf(header_priority, sizeof(header_priority), "<%i>",
|
snprintf(header_priority, sizeof(header_priority), "<%i>", priority);
|
||||||
s->target == STREAM_SYSLOG ? priority : LOG_PRI(priority));
|
|
||||||
char_array_0(header_priority);
|
char_array_0(header_priority);
|
||||||
|
|
||||||
if (s->target == STREAM_SYSLOG) {
|
if (s->target == STREAM_SYSLOG) {
|
||||||
|
|
Loading…
Reference in New Issue