journal: move syslog specific calls out of util.c
This commit is contained in:
@@ -274,7 +274,7 @@ static void dev_kmsg_record(Server *s, char *p, size_t l) {
|
||||
if ((priority & LOG_FACMASK) == LOG_KERN)
|
||||
IOVEC_SET_STRING(iovec[n++], "SYSLOG_IDENTIFIER=kernel");
|
||||
else {
|
||||
syslog_read_identifier((const char**) &p, &identifier, &pid);
|
||||
syslog_parse_identifier((const char**) &p, &identifier, &pid);
|
||||
|
||||
/* Avoid any messages we generated ourselves via
|
||||
* log_info() and friends. */
|
||||
|
||||
@@ -175,7 +175,7 @@ int syslog_fixup_facility(int priority) {
|
||||
return priority;
|
||||
}
|
||||
|
||||
void syslog_read_identifier(const char **buf, char **identifier, char **pid) {
|
||||
void syslog_parse_identifier(const char **buf, char **identifier, char **pid) {
|
||||
const char *p;
|
||||
char *t;
|
||||
size_t l, e;
|
||||
@@ -225,6 +225,112 @@ void syslog_read_identifier(const char **buf, char **identifier, char **pid) {
|
||||
*buf += strspn(*buf, WHITESPACE);
|
||||
}
|
||||
|
||||
void syslog_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 void syslog_skip_date(char **buf) {
|
||||
enum {
|
||||
LETTER,
|
||||
SPACE,
|
||||
NUMBER,
|
||||
SPACE_OR_NUMBER,
|
||||
COLON
|
||||
} sequence[] = {
|
||||
LETTER, LETTER, LETTER,
|
||||
SPACE,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
SPACE,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
COLON,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
COLON,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
SPACE
|
||||
};
|
||||
|
||||
char *p;
|
||||
unsigned i;
|
||||
|
||||
assert(buf);
|
||||
assert(*buf);
|
||||
|
||||
p = *buf;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(sequence); i++, p++) {
|
||||
|
||||
if (!*p)
|
||||
return;
|
||||
|
||||
switch (sequence[i]) {
|
||||
|
||||
case SPACE:
|
||||
if (*p != ' ')
|
||||
return;
|
||||
break;
|
||||
|
||||
case SPACE_OR_NUMBER:
|
||||
if (*p == ' ')
|
||||
break;
|
||||
|
||||
/* fall through */
|
||||
|
||||
case NUMBER:
|
||||
if (*p < '0' || *p > '9')
|
||||
return;
|
||||
|
||||
break;
|
||||
|
||||
case LETTER:
|
||||
if (!(*p >= 'A' && *p <= 'Z') &&
|
||||
!(*p >= 'a' && *p <= 'z'))
|
||||
return;
|
||||
|
||||
break;
|
||||
|
||||
case COLON:
|
||||
if (*p != ':')
|
||||
return;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
*buf = p;
|
||||
}
|
||||
|
||||
void server_process_syslog_message(
|
||||
Server *s,
|
||||
const char *buf,
|
||||
@@ -250,7 +356,7 @@ void server_process_syslog_message(
|
||||
forward_syslog_raw(s, priority, orig, ucred, tv);
|
||||
|
||||
syslog_skip_date((char**) &buf);
|
||||
syslog_read_identifier(&buf, &identifier, &pid);
|
||||
syslog_parse_identifier(&buf, &identifier, &pid);
|
||||
|
||||
if (s->forward_to_kmsg)
|
||||
server_forward_kmsg(s, priority, identifier, buf, ucred);
|
||||
|
||||
@@ -23,9 +23,11 @@
|
||||
|
||||
#include "journald.h"
|
||||
|
||||
void syslog_read_identifier(const char **buf, char **identifier, char **pid);
|
||||
int syslog_fixup_facility(int priority);
|
||||
|
||||
void syslog_parse_priority(char **p, int *priority);
|
||||
void syslog_parse_identifier(const char **buf, char **identifier, char **pid);
|
||||
|
||||
void server_forward_syslog(Server *s, int priority, const char *identifier, const char *message, struct ucred *ucred, struct timeval *tv);
|
||||
|
||||
void server_process_syslog_message(Server *s, const char *buf, struct ucred *ucred, struct timeval *tv, const char *label, size_t label_len);
|
||||
|
||||
@@ -4409,134 +4409,6 @@ bool plymouth_running(void) {
|
||||
return access("/run/plymouth/pid", F_OK) >= 0;
|
||||
}
|
||||
|
||||
void syslog_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;
|
||||
}
|
||||
|
||||
void syslog_skip_pid(char **buf) {
|
||||
char *p;
|
||||
|
||||
assert(buf);
|
||||
assert(*buf);
|
||||
|
||||
p = *buf;
|
||||
|
||||
if (*p != '[')
|
||||
return;
|
||||
|
||||
p++;
|
||||
p += strspn(p, "0123456789");
|
||||
|
||||
if (*p != ']')
|
||||
return;
|
||||
|
||||
p++;
|
||||
|
||||
*buf = p;
|
||||
}
|
||||
|
||||
void syslog_skip_date(char **buf) {
|
||||
enum {
|
||||
LETTER,
|
||||
SPACE,
|
||||
NUMBER,
|
||||
SPACE_OR_NUMBER,
|
||||
COLON
|
||||
} sequence[] = {
|
||||
LETTER, LETTER, LETTER,
|
||||
SPACE,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
SPACE,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
COLON,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
COLON,
|
||||
SPACE_OR_NUMBER, NUMBER,
|
||||
SPACE
|
||||
};
|
||||
|
||||
char *p;
|
||||
unsigned i;
|
||||
|
||||
assert(buf);
|
||||
assert(*buf);
|
||||
|
||||
p = *buf;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(sequence); i++, p++) {
|
||||
|
||||
if (!*p)
|
||||
return;
|
||||
|
||||
switch (sequence[i]) {
|
||||
|
||||
case SPACE:
|
||||
if (*p != ' ')
|
||||
return;
|
||||
break;
|
||||
|
||||
case SPACE_OR_NUMBER:
|
||||
if (*p == ' ')
|
||||
break;
|
||||
|
||||
/* fall through */
|
||||
|
||||
case NUMBER:
|
||||
if (*p < '0' || *p > '9')
|
||||
return;
|
||||
|
||||
break;
|
||||
|
||||
case LETTER:
|
||||
if (!(*p >= 'A' && *p <= 'Z') &&
|
||||
!(*p >= 'a' && *p <= 'z'))
|
||||
return;
|
||||
|
||||
break;
|
||||
|
||||
case COLON:
|
||||
if (*p != ':')
|
||||
return;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
*buf = p;
|
||||
}
|
||||
|
||||
char* strshorten(char *s, size_t l) {
|
||||
assert(s);
|
||||
|
||||
|
||||
@@ -419,10 +419,6 @@ bool nulstr_contains(const char*nulstr, const char *needle);
|
||||
|
||||
bool plymouth_running(void);
|
||||
|
||||
void syslog_parse_priority(char **p, int *priority);
|
||||
void syslog_skip_pid(char **buf);
|
||||
void syslog_skip_date(char **buf);
|
||||
|
||||
bool hostname_is_valid(const char *s);
|
||||
char* hostname_cleanup(char *s);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user