journal: move syslog specific calls out of util.c

This commit is contained in:
Lennart Poettering
2012-08-22 03:24:46 +02:00
parent 35e2e347d3
commit 5809560d85
5 changed files with 112 additions and 136 deletions
+1 -1
View File
@@ -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. */
+108 -2
View File
@@ -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);
+3 -1
View File
@@ -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);
-128
View File
@@ -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);
-4
View File
@@ -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);