Commit Graph

353 Commits

Author SHA1 Message Date
ngie
a0665eb83d Fix typos in comments (returing -> returning)
MFC after:	1 week
Sponsored by:	Dell EMC Isilon
2017-02-07 00:09:48 +00:00
hrs
f376359b93 Fix a bug which caused not to create AF_LOCAL sockets when family
is specified.

Spotted by:	Alex Deiter
2017-01-28 13:09:18 +00:00
hrs
93e673adcf Add more #ifdef INET and INET6. 2017-01-11 07:21:59 +00:00
hrs
343a31e4d8 - Use more descriptive names for variables.
- Set O_CLOEXEC to the signal pipe and /dev/klog.
- Use a single signal handler to catch both SIGHUP and SIGCHLD.
- Fix a bug which did FD_SET() the writer-end of the pipe.
2016-12-31 13:15:52 +00:00
hrs
648d10d168 Remove extra NULL-check before free(3). 2016-12-31 09:52:00 +00:00
hrs
0509b89e5c Replace two fat signal handlers with function calls in
the main I/O multiplex loop.  select() now watches
a pipe which is written by the new skinny signal
handlers and the received signals are handled inside
the loop sequencially.

This eliminates a complex signal mask to guarantee
async-signal safety.
2016-12-31 06:23:05 +00:00
hrs
a6a7801a09 Retry to open an F_PIPE process when it dies unexpectedly.
Reported by:	Eugene Grosbein
PR:		215335
2016-12-31 03:07:48 +00:00
hrs
93f074228f - Fix -N flag (NoBind) for AF_LOCAL sockets.
- Do setsockopt(SO_RCVBUF) for AF_LOCAL sockets regardless of -s flag.
2016-12-24 23:29:50 +00:00
ngie
e9becac72d Unbreak syslogd after r310494
Don't close all file descriptors greater than STDERR_FILENO (2) in
waitdaemon(..) -- only close fd (file descriptor for /dev/null used in
subsequent calls to dup2) if it's greater than STDERR_FILENO.

Reported by:	subbsd@gmail.com, danny@cs.huji.ac.il
Pointyhat to:	hrs
X-MFC with:	r310494
2016-12-24 12:50:17 +00:00
hrs
733e7b5b6c - Remove unused code.
- Use closefrom().
2016-12-24 07:13:33 +00:00
hrs
3175084d4e - More ifdef INET and INET6.
- Use STDERR_FILENO + 1 instead of "3".
- Fix dprintf() in cvthname().
2016-12-23 06:29:24 +00:00
hrs
2a7e366589 mdoc and style fixes. 2016-12-23 04:59:22 +00:00
hrs
a5feb675ec - Fix a use-after-free bug when dq_timeout == 1 and
sending SIGTERM to the process failed.  It is an
  unusual situation but it can happen.
- Split deadq_remove() into deadq_remove() and
  deadq_removebypid().
- Normalize variable names of struct deadq_entry *.
2016-12-22 13:46:17 +00:00
hrs
8471fe0d61 Add a missing "default:" case. 2016-12-22 05:57:45 +00:00
hrs
552a44a16d Initialize a structure by using a compound literal to avoid forgetting
to zero unspecified members.
2016-12-22 05:55:44 +00:00
hrs
3fafa4ed6d Fix debug log in the case of AF_INET6. 2016-12-22 05:28:30 +00:00
hrs
64b1664fc0 - Simplify masklen->netmask conversion for AF_INET6.
- Use iov[N] by array index instead of using pointer v = &iov[0] to
  make the compiler catch an out-of-range access of the array.
2016-12-22 05:23:38 +00:00
hrs
4931f7c9eb Simplify type casting of struct sockaddr_in. 2016-12-21 07:05:34 +00:00
hrs
85fbbe71fe - Initialize deadq_head statically.
- Fix indent.
- Add missing -S flag into usage().
- Use nitems() for an iov array instead of a macro.
2016-12-21 06:49:21 +00:00
hrs
8a3b755fff - Add fklog into struct socklist. Files and local/remote sockets are
now processed in struct socklist in a consistent manner.
- Add helper functions to add a new entry of struct socklist, filed, or peer.
- Use the same routine for -l, -p, and -S.
- Close /dev/klog when read(2) failed.
2016-12-21 06:42:30 +00:00
hrs
558fb217fd - Use fnmatch(3) for domanname matching of -a options.
- Document the patten matching.
- Document -S flag in SYNOPSIS.
2016-12-21 05:45:59 +00:00
hrs
18e1337260 Escape punctuation characters. 2016-12-20 08:49:13 +00:00
hrs
1a837765c8 Add a NULL check. 2016-12-20 04:05:21 +00:00
hrs
ee680228b1 Add a default socket bound to *:514 when no -b option is specified.
This was accidentally removed at r309933.

Spotted by:	Michael Butler
2016-12-20 03:41:40 +00:00
hrs
64f20e6425 Add a missing STAILQ_INSERT_TAIL() for allowaddr rule. 2016-12-19 17:10:30 +00:00
hrs
35dafbdd67 Remove an extra "break" which could incorrectly terminate an
STAILQ_FOREACH() loop when an AF_INET6 rule matched.

Spotted by:	cem
2016-12-13 20:55:46 +00:00
hrs
fc29dcf63c - Refactor listening socket list. All of the listening sockets are
now maintained in a single linked-list in a transport-independent manner.
- Use queue.h for linked-list structure.
- Use linked-list for AllowedPeers.
- Use getaddrinfo(8) even for Unix Domain sockets.
- Use macros to type-casting from/to struct sockaddr{,_in,_in6}.
- Define fu_* macro for union f_un to shorten the member names.
- Remove an extra #include <sys/type.h>.
- Add "static" to non-exported symbols.
- !INET support is still incomplete but will be fixed later.

There is no functional change except for some minor debug messages.
2016-12-12 19:33:40 +00:00
hrs
a92b987411 Temporarily backout the previous commit because it was totally broken due to
unresolved merge conflicts.

Pointy hat to:	hrs
2016-12-12 19:24:52 +00:00
hrs
72a9e76712 - Refactor listening socket list. All of the listening sockets are
now maintained in a single linked-list in a transport-independent manner.
- Use queue.h for linked-list structure.
- Use linked-list for AllowedPeers.
- Use getaddrinfo(8) even for Unix Domain sockets.
- Use macros to type-casting from/to struct sockaddr{,_in,_in6}.
- Define fu_* macro for union f_un to shorten the member names.
- Remove an extra #include <sys/type.h>.
- Add "static" to non-exported symbols.
- !INET support is still incomplete but will be fixed later.

There is no functional change except for some minor debug messages.
2016-12-12 19:10:14 +00:00
bapt
add8fe4b90 Properly initialize nextp
MFC after:	1 day
2016-11-27 19:27:13 +00:00
bapt
7fc09585c4 initialize *nextp which could be left uninitialized in case the configuration
file cannot be open/read

Reported by:	Coverity via cem
MFC after:	2 days
CID:		1365665
2016-11-26 15:49:59 +00:00
bapt
b40644e15d syslogd(8): add an 'include' keyword
All the '.conf' files not beginning with a '.' contained int he directory
following the keyword will be included.

This keyword can only be used in the first level configuration files.

Modify the default syslogd.conf to 'include' /etc/syslog.d and
/usr/local/etc/syslog.d

It simplify a lot handling of syslog from automation tools.

Reviewed by:	markj, kib (via irc)
Approved by:	markj
MFC after:	2 weeks
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D8402
2016-11-01 01:41:24 +00:00
bapt
bc0fb0e446 Directly set the O_NONBLOCK flags via open(2) 2016-09-11 18:58:44 +00:00
asomers
3eabf52b20 syslogd: Enable repeated line compression for lines of any length.
Enable repeated line compression for lines of any length, instead of only
short lines. AFAICT repeated line compression was limited to short lines as
a RAM optimization, which made sense when karels added it in 1988, but no
longer.  The penalty is a paltry 904B of RAM per file logged.

Reviewed by:	rpaulo
MFC after:	32 days
Sponsored by:	Spectra Logic Corp
Differential Revision:	https://reviews.freebsd.org/D4475
2016-01-27 16:17:15 +00:00
lidl
efa7d696b4 Have syslogd honor 'mesg' status when logging to users.
PR:		bin/196742
Submitted by:	jef at mail acme com
Approved by:	rpaulo (mentor)
Differential Revision:	https://reviews.freebsd.org/D4270
2015-11-25 20:01:11 +00:00
delphij
d87fa0603a die() would never return, mark it as so.
MFC after:	2 weeks
2015-08-27 18:11:00 +00:00
ngie
15c1eedd90 Set f_file to -1/F_UNUSED when after closing when possible
This will help ensure we don't trash file descriptors that get used later on
in the daemon

Found via internal Coverity scan

MFC after: 2 weeks
Discussed with: cem, ed, markj
Differential Revision: https://reviews.freebsd.org/D3081
Submitted by: Miles Ohlrich <miles.ohlrich@isilon.com>
Sponsored by: EMC / Isilon Storage Division
2015-08-05 03:17:06 +00:00
rpaulo
eedeb8c00c syslogd: re-read the timezone when receive a SIGHUP.
syslogd already re-reads the configuration file and the hostname when
receiving a SIGHUP, so it makes sense to reset the timezone.
Special care was taken to ensure we don't break installations running
with a custom TZ variable.

PR:		196905
Submitted by:	Kurt Lidl <lidl pix.net>
Sponsored by:	Pi-Coral, Inc.
2015-06-16 22:42:19 +00:00
rpaulo
fcc68ddb2e syslogd: don't leak finet0.
Submitted by:	Kurt Lidl <lidl pix.net>
Sponsored by:	Pi-Coral, Inc.
2015-06-16 22:31:38 +00:00
rpaulo
ae4e55741c syslogd: support multiple -b options.
It's now possible to bind multiple sockets to different IP addresses.

PR:		159305
Submitted by:	Kurt Lidl <lidl pix.net>
Sponsored by:	Pi-Coral, Inc.
2015-06-16 22:26:22 +00:00
sjg
008d7c831f Add META_MODE support.
Off by default, build behaves normally.
WITH_META_MODE we get auto objdir creation, the ability to
start build from anywhere in the tree.

Still need to add real targets under targets/ to build packages.

Differential Revision:       D2796
Reviewed by: brooks imp
2015-06-13 19:20:56 +00:00
sjg
75a137820d dirdeps.mk now sets DEP_RELDIR 2015-06-08 23:35:17 +00:00
sjg
65145fa4c8 Merge sync of head 2015-05-27 01:19:58 +00:00
delphij
3bbc74ff2b path.h is not needed here. 2015-05-16 08:12:00 +00:00
pluknet
d696383c0b Update .Dd, sync usage() for -F. Missed in previous change. 2015-03-03 20:23:59 +00:00
rpaulo
39e3a5804e Add and document an option to cause syslogd to run in the
foreground.

This allows a separate process to monitor when and how
syslogd exits. That process can then restart syslogd if needed.

Differential Revision:	https://reviews.freebsd.org/D1985
Submitted by:	Ravi Pokala
Reviewed by:	allanjude (man page)
2015-03-03 20:07:59 +00:00
ed
6c07c5b094 Make syslogd work in case shutdown() is POSIX-ly correct.
On POSIX conformant systems, shutdown() should return ENOTCONN when not
connected. We attempted to fix this once (kern/84761), but this change
got backed out because it 'breaks code' (r150155).

I just reapplied the patch and indeed, syslogd fails on startup. Make it
easier to re-enable this change in the future by paching up syslogd to
do the right thing.

MFC after:	3 weeks
Sponsored by:	Nuxi
2015-02-19 18:56:39 +00:00
dim
49ba8ceb19 Fix two clang 3.6.0 warnings in usr.sbin/syslogd:
usr.sbin/syslogd/syslogd.c:1023:10: error: address of array 'f->f_prevline' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
                    f->f_prevline && !strcmp(msg, f->f_prevline) &&
                    ~~~^~~~~~~~~~
usr.sbin/syslogd/syslogd.c:1178:16: error: address of array 'f->f_prevline' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
        } else if (f->f_prevline) {
               ~~  ~~~^~~~~~~~~~

In both cases, the f_prevline field of struct filed is a char array, so
it can never be null.  Remove the checks.

Reviewed by:	jilles
MFC after:	3 days
Differential Revision: https://reviews.freebsd.org/D1716
2015-02-05 22:28:00 +00:00
ae
b94f2631db Increase the buffer size to keep the list of programm names when
parsing programm specification. It is safe to not check out of bounds
access, because !isprint(p[i]) check will stop reading, when '\0'
character will be read from the input string.

Obtained from:	Yandex LLC
MFC after:	1 week
Sponsored by:	Yandex LLC
2014-12-12 11:29:54 +00:00
bapt
a191ba5195 Convert usr.sbin to LIBADD
Reduce overlinking
2014-11-25 16:57:27 +00:00
sjg
5860f0d106 Updated dependencies 2014-05-16 14:09:51 +00:00
sjg
1a7e48acf1 Updated dependencies 2014-05-10 05:16:28 +00:00
sjg
ed3fc70bf5 Merge from head 2014-05-08 23:54:15 +00:00
imp
2118f42afd Use src.opts.mk in preference to bsd.own.mk except where we need stuff
from the latter.
2014-05-06 04:22:01 +00:00
sjg
5e568154a0 Merge head 2014-04-28 07:50:45 +00:00
ian
1708e7ba2f Add ENETUNREACH and EADDRNOTAVAIL to the list of errors that are potentially
transient and shouldn't result in closing the socket and giving up forever.
2013-11-13 01:04:02 +00:00
ian
dc4eaa7b21 This fixes 3 problems in syslogd related to sizing receive buffers...
- A call was misplaced at the wrong level of nested if blocks, so that
  the buffers for unix domain sockets (/dev/log, /dev/klog) were never
  increased at all; they remained at a way-too-small default size of 4096.

- The function that was supposed to double the size of the buffer
  sometimes did nothing, and sometimes installed a wildly-wrong buffer
  size (either too large or too small) due to an unitialized 'slen'
  variable passed to getsockopt().  Most often it doubled the UDP buffers
  from 40k to 80k because accidentally there would be harmless stack
  garbage in the unitialized variables.

- The whole concept of blindly doubling a socket's buffer size without
  knowing what size it started at is a design flaw that has to be called a
  bug.  If the double_rbuf() function had worked at all (I.E., if the
  other two bugs didn't exist) this would lead to UDP sockets having an
  80k buffer while unix dgram sockets get an 8k buffer.  There's nothing
  about the problem being solved that requires larger buffers for UDP than
  for unix dgram sockets -- the buffering requirements are the same
  regardless of socket type.

This change renames the double_rbuf() function to increase_rbuf() and
increases the buffer size on all types of sockets to 80k.  80k was
chosen only because it appears to be the size the original change was
shooting for, and it certainly seems to be reasonably large (I might
have picked 64k in the absence of any historical guidance).

PR:		160433
Submitted by:	me, in 2011.
2013-11-13 01:01:15 +00:00
sjg
62bb106222 Merge from head 2013-09-05 20:18:59 +00:00
jilles
72dbb34e66 syslogd: Use closefrom() instead of getdtablesize()/close() loop.
When syslogd forks a process for '|' destinations, it closes all file
descriptors greater than 2.

Use closefrom() for this instead of a getdtablesize()/close() loop because
it is both faster and avoids leaving file descriptors open because the limit
was lowered after they were opened.

MFC after:	1 week
2013-04-27 13:26:35 +00:00
sjg
6d37b86f2b Updated dependencies 2013-03-11 17:21:52 +00:00
sjg
0ee5295509 Updated dependencies 2013-02-16 01:23:54 +00:00
obrien
3028e3f8ab Sync with HEAD. 2013-02-08 16:10:16 +00:00
markj
6edca3394d - Make sure that errno isn't modified before calling logerror() in error
conditions.
- Don't check for AF_INET6 when compiled without INET6 support.

PR:		bin/173930
Submitted by:	Garrett Cooper <yanegomi@gmail.com>
Approved by:	rstone (co-mentor)
MFC after:	1 week
2012-12-20 23:21:20 +00:00
sjg
778e93c51a Sync from head 2012-11-04 02:52:03 +00:00
ed
b146225385 Add missing const keywords. 2012-10-19 14:29:03 +00:00
eadler
f6e6da9220 Add documentation for IPv6 support
PR:		docs/171580
Submitted by:	bdrewery
Reviewed by:	wblock
Approved by:	gjb
MFC after:	1 month
X-MFC-With:	r240389
2012-09-12 16:58:42 +00:00
bapt
fcd6b4b1cb Add support for ipv6 addresses as destination
PR:		bin/150530
Submitted by:	andy white <andywhite@gmail.com>
Tested by:	Olivier Cochard-Labbe <olivier@cochard.me>
MFC after:	1 month
2012-09-12 10:39:47 +00:00
marcel
9dd41e3647 Sync FreeBSD's bmake branch with Juniper's internal bmake branch.
Requested by: Simon Gerraty <sjg@juniper.net>
2012-08-22 19:25:57 +00:00
joel
401c81aaa9 Minor spelling fixes. 2012-06-03 11:29:48 +00:00
sbruno
2d3ab5c782 Update man page to present -T argument in synopsis
MFC with r183347

MFC after:	0 days
2012-03-14 21:26:06 +00:00
delphij
8337fe7e3e Add a new option, -N to disable the default and recommended syslogd(8)
behavior, which binds to the well known UDP port.

This option implies -s.

MFC after:	2 months
2011-07-14 07:33:53 +00:00
dwmalone
e84823c8d6 Here v->iov_len has been assigned the return value from snprintf.
Checking if it is > 0 doesn't make sense, because snprintf returns
how much space is needed if the buffer is too small. Instead, check
if the return value was greater than the buffer size, and truncate
the message if it was too long.

It isn't clear if snprintf can return a negative value in the case
of an error - I don't believe it can. If it can, then testing
v->iov_len won't help 'cos it is a size_t, not an ssize_t.

Also, as clang points out, we must always increment v here, because
later code depends on the message being in iov[5].
2011-01-19 17:17:37 +00:00
imp
083b718d7b This isn't WARNS=6 safe. It fails to build on mips. Retore old
WARNS?=3 until that's resolved.
2010-08-08 02:45:14 +00:00
olli
bdb9df6d85 jh pointed out that src/usr.sbin already has a global
WARNS=6 setting in HEAD (unlike stable/8), so it's best
to remove the line entirely.

Pointed out by:	jh
Approved by:	des (mentor)
2010-08-07 20:46:30 +00:00
olli
df9856d691 syslogd(8) already supports *sending* log messages to non-
standard ports, but it can't *receive* them (port 514 is
hardcoded).  This commit adds that missing feature.

(NB:  I actually needed this feature for a server farm where
multiple jails run with shared IP addresses, and every jail
should have its own syslogd process.)

As a side effect, syslogd now compiles with WARNS=6.

Approved by:	des (mentor)
MFC after:	3 weeks
2010-08-07 16:20:12 +00:00
ed
57d10a6e95 Port all applications in usr.sbin/ from libulog to utmpx. 2010-01-13 18:17:53 +00:00
ed
b6ccb3b9f0 Let syslogd use utmpx.
Because strings are guaranteed to be null terminated, there is no need
for excessive copying of strings, such as the line name.
2009-12-24 18:05:33 +00:00
attilio
99524169bf Avoid sshd, cron, syslogd and inetd to be killed under high-pressure swap
environments.
Please note that this can't be done while such processes run in jails.

Note: in future it would be interesting to find a way to do that
selectively for any desired proccess (choosen by user himself), probabilly
via a ptrace interface or whatever.

Obtained from:	Sandvine Incorporated
Reviewed by:	emaste, arch@
Sponsored by:	Sandvine Incorporated
MFC:		1 month
2009-11-25 15:12:24 +00:00
avg
6f7d427c88 syslog.conf(5): correct example
security.* and console.* are moved out of ftpd program block

Approved by:	jhb (mentor)
MFC after:	2 weeks
2009-06-11 18:42:31 +00:00
trhodes
51fadfa5df Add "crit" to the list of keywords.
PR:		126934
2008-12-23 17:39:24 +00:00
delphij
38c055312f Constify 'name' field in struct funix. This commit makes syslogd(8)
WARNS?=6 on amd64 but I have not tested under universe so keep WARNS?=
level as-is for now.
2008-12-19 18:27:51 +00:00
avatar
d8f5aa7301 Fixing !INET6 builds after bumping WARNS to 3. 2008-12-18 04:03:29 +00:00
obrien
77a62a364b Use passed parameter rather than the #define.
(more accurate extraction of Juniper Networks change)
2008-12-17 16:55:58 +00:00
obrien
0ca2a78030 Rather than hardcode the 'struct iovec iov' array size, use a #define.
While I'm here bump WARNS to 3.

Obtained from:	Juniper Networks
2008-12-17 16:51:40 +00:00
trhodes
bbb4729c27 Use "allowed_peer" throughout this manual page. 2008-12-07 18:45:30 +00:00
dwmalone
94da79315b Add a flag, -T, that tells syslogd to always replace the timestamp on
messages from the network. We already replace malformatted timestamps
and this option lets us replace timestamps that are correctly formatted
but wrong.

PR:		120891
Submitted by:	Thomas Vogt <thomas@bsdunix.ch>
MFC after:	1 week
2008-09-25 09:28:18 +00:00
obrien
78f0698aa0 Remove extraneous NULL pointer check - the pointer is guaranteed to be non-NULL. 2008-09-01 15:10:03 +00:00
sobomax
5bc4fd4e14 Allow comment to be placed at the end of a configuration line.
MFC after:	2 weeks
2008-07-09 07:37:54 +00:00
brian
232bfc7d5f Add a -8 switch to syslogd to prevent it from mangling 8-bit data. 2008-05-14 00:22:21 +00:00
dwmalone
23dbe457bf Two no-op fixes to improve corretness of syslogd code:
1) Use [AP]F_LOCAL rather than [AP]F_UNIX.
2) When copying a pipe's name, use f->f_un.f_pipe.f_pname, not f->f_un.f_fname.

PR:		20889
Submitted by:	Damieon Stark
PR:		116642
Submitted by:	Jim Pirzyk
Reviewed by:	md5
2008-02-20 21:54:41 +00:00
obrien
37273340a9 + Open ctty in non-blocking mode to avoid hangs during open and close(waiting
for the port to drain).
+ Handle "*" as a priority properly.
+ Test what is free'ed.
+ Dynamically determine length vs. hardcoding it.
+ Free the previous message buffer (f_prevline) only after logging all the
  messages and just before the process exit.  Also check f_prevline for NULL
  before using it.
+ The time displayed is not synchornized with the other log destinations.
+ Fix a comment.

Obtained from:	Juniper Networks
2007-12-11 06:10:10 +00:00
obrien
2271bb9685 style(9) 2007-12-05 18:00:41 +00:00
trhodes
f9b4142a67 Mark up keywords with .Cm.
PR:		95039
Sumitted by:	SeaD (older version)
Reviewed by:	ru
2006-10-12 01:59:34 +00:00
ru
081fcce9b9 Markup fixes. 2006-09-29 17:57:04 +00:00
ru
006fe97736 Sync usage() with manpage's SYNOPSIS. 2006-09-29 17:36:38 +00:00
yar
ead3193586 Obey MK_INET6_SUPPORT. 2006-07-27 14:52:12 +00:00
julian
e0ba5f137d Add the ability to log to an arbitrary udp port as well as the
standard syslog port. This allows syslog to easily export lines of interest to
an external logging system.
2006-04-17 20:12:35 +00:00
csjp
3e976b12e0 Currently, if writing out a log entry fails, we unlink that log entry from our
internal list of logfiles. So if writev(2) fails for potentially transient
errors like ENOSPC, syslogd requires a restart, even if the filesystem has
purged.

This change allows syslogd to ignore ENOSPC space errors, so that when the
filesystem is cleaned up, syslogd will automatically start logging again
without requiring the reset. This makes syslogd(8) a bit more reliable.

MFC after:	1 week
2006-03-30 21:04:52 +00:00
pjd
96923c291c By default (for security reasons) syslogd(8) doesn't create log files
when they don't exist, but sometimes its quite useful (eg. we use
non-standard log files and memory backed /var/, which is populated on
boot).

Add -C option which tells syslogd(8) to create log files if they don't
exist.

Glanced at by:	phk
MFC after:	3 days
2006-03-06 10:36:33 +00:00
julian
dc87a24886 Fix typo 2006-02-23 18:51:02 +00:00