Fix #49: add support for -8 command line option to allow 8-bit data
This patch allows the user to disable the 8-bit data check in the log message validator. If you have experienced problems with logging any unicode (utf-8) messages after v1.6, this option is for you. The correct way to handle this is to add proper parser support for the Unicode BOM, defined in RFC5424[1], as NetBSD syslogd does[2], search for IS_BOM(). [1]: https://datatracker.ietf.org/doc/html/rfc5424#appendix-A.8 [2]: http://cvsweb.netbsd.org/bsdweb.cgi/src/usr.sbin/syslogd/syslogd.c?rev=1.138 Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
parent
eb6e85e851
commit
6022d3c7d0
@ -38,7 +38,7 @@
|
|||||||
.Nd log systems messages
|
.Nd log systems messages
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl ?46AdFHKknsTtv
|
.Op Fl ?468AdFHKknsTtv
|
||||||
.Op Fl a Ar addr[/len][:port]
|
.Op Fl a Ar addr[/len][:port]
|
||||||
.Op Fl a Ar name[:port]
|
.Op Fl a Ar name[:port]
|
||||||
.Op Fl b Ar addr[:port]
|
.Op Fl b Ar addr[:port]
|
||||||
@ -129,6 +129,22 @@ to use IPv4 addresses only.
|
|||||||
Force
|
Force
|
||||||
.Nm
|
.Nm
|
||||||
to use IPv6 addresses only.
|
to use IPv6 addresses only.
|
||||||
|
.It Fl 8
|
||||||
|
Tells
|
||||||
|
.Nm
|
||||||
|
not to interfere with 8-bit data. Normally
|
||||||
|
.Nm
|
||||||
|
replaces C1 control characters
|
||||||
|
.Pq ISO 8859 and Unicode characters
|
||||||
|
with their
|
||||||
|
.Dq M- Ns Em x
|
||||||
|
equivalent. Note, this option does not change the way
|
||||||
|
.Nm
|
||||||
|
alters control characters
|
||||||
|
.Pq see Xr iscntrl 3 .
|
||||||
|
They are always replaced with their
|
||||||
|
.Dq ^ Ns Em x
|
||||||
|
equivalent.
|
||||||
.It Fl A
|
.It Fl A
|
||||||
Ordinarily,
|
Ordinarily,
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -290,11 +290,12 @@ static void sys_seqno_save(void)
|
|||||||
int usage(int code)
|
int usage(int code)
|
||||||
{
|
{
|
||||||
printf("Usage:\n"
|
printf("Usage:\n"
|
||||||
" syslogd [-46AdFHKknsTtv?] [-a PEER] [-b NAME] [-f FILE] [-m INTERVAL]\n"
|
" syslogd [-468AdFHKknsTtv?] [-a PEER] [-b NAME] [-f FILE] [-m INTERVAL]\n"
|
||||||
" [-P PID_FILE] [-p SOCK_PATH] [-r SIZE[:NUM]]\n"
|
" [-P PID_FILE] [-p SOCK_PATH] [-r SIZE[:NUM]]\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
" -4 Force IPv4 only\n"
|
" -4 Force IPv4 only\n"
|
||||||
" -6 Force IPv6 only\n"
|
" -6 Force IPv6 only\n"
|
||||||
|
" -8 Allow all 8-bit data, e.g. unicode, does not affect control chars\n"
|
||||||
" -A Send to all addresses in DNS A, or AAAA record\n"
|
" -A Send to all addresses in DNS A, or AAAA record\n"
|
||||||
" -a PEER Allow PEER to use us as a remote syslog sink. Ignored when started\n"
|
" -a PEER Allow PEER to use us as a remote syslog sink. Ignored when started\n"
|
||||||
" with -s. Multiple -a options may be specified:\n"
|
" with -s. Multiple -a options may be specified:\n"
|
||||||
@ -357,7 +358,7 @@ int main(int argc, char *argv[])
|
|||||||
char *ptr;
|
char *ptr;
|
||||||
int ch;
|
int ch;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "46Aa:b:C:dHFf:Kkm:nP:p:r:sTtv?")) != EOF) {
|
while ((ch = getopt(argc, argv, "468Aa:b:C:dHFf:Kkm:nP:p:r:sTtv?")) != EOF) {
|
||||||
switch ((char)ch) {
|
switch ((char)ch) {
|
||||||
case '4':
|
case '4':
|
||||||
family = PF_INET;
|
family = PF_INET;
|
||||||
@ -367,6 +368,10 @@ int main(int argc, char *argv[])
|
|||||||
family = PF_INET6;
|
family = PF_INET6;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '8':
|
||||||
|
mask_C1 = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'A':
|
case 'A':
|
||||||
send_to_all++;
|
send_to_all++;
|
||||||
break;
|
break;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
EXTRA_DIST = lib.sh opts.sh
|
EXTRA_DIST = lib.sh opts.sh
|
||||||
EXTRA_DIST += api.sh local.sh remote.sh fwd.sh mark.sh
|
EXTRA_DIST += api.sh local.sh unicode.sh remote.sh fwd.sh mark.sh
|
||||||
CLEANFILES = *~ *.trs *.log
|
CLEANFILES = *~ *.trs *.log
|
||||||
TEST_EXTENSIONS = .sh
|
TEST_EXTENSIONS = .sh
|
||||||
TESTS_ENVIRONMENT= unshare -mrun
|
TESTS_ENVIRONMENT= unshare -mrun
|
||||||
@ -12,6 +12,7 @@ api_LDADD = ../src/libsyslog.la
|
|||||||
|
|
||||||
TESTS = opts.sh
|
TESTS = opts.sh
|
||||||
TESTS += local.sh
|
TESTS += local.sh
|
||||||
|
TESTS += unicode.sh
|
||||||
TESTS += remote.sh
|
TESTS += remote.sh
|
||||||
TESTS += api.sh
|
TESTS += api.sh
|
||||||
TESTS += fwd.sh
|
TESTS += fwd.sh
|
||||||
|
20
test/unicode.sh
Executable file
20
test/unicode.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Currently only same as local.sh but with unicode messages
|
||||||
|
# From https://github.com/troglobit/sysklogd/issues/49
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
if [ x"${srcdir}" = x ]; then
|
||||||
|
srcdir=.
|
||||||
|
fi
|
||||||
|
. ${srcdir}/lib.sh
|
||||||
|
setup -8
|
||||||
|
|
||||||
|
MSG="öäüÖÄÜ߀¢§"
|
||||||
|
MSG2="…‘’•"
|
||||||
|
|
||||||
|
../src/logger -u "${SOCK}" ${MSG}
|
||||||
|
grep ${MSG} "${LOG}" || FAIL "Cannot find: ${MSG}"
|
||||||
|
|
||||||
|
../src/logger -u "${ALTSOCK}" ${MSG2}
|
||||||
|
grep ${MSG2} "${LOG}" || FAIL "Cannot find: ${MSG2}"
|
||||||
|
|
||||||
|
OK
|
Loading…
Reference in New Issue
Block a user