(the utmpentry.c code), specifically with respect to who owns them and
when to free them. Now they're owned by utmpentry.c, only. Abolish the
freeutentries() function, which was the wrong abstraction; add instead
endutentries(), which flushes out the internally managed memory.
Update callers as necessary. Some (e.g. talkd) had been leaking memory;
others (e.g. syslogd) had been accidentally freeing and reloading utmp
more often than necessary. There are a couple untidy bits in users and
rwhod that someone should look after sometime, maybe.
Fixes PR bin/35131, which was about talkd's memory leak.
FORTIFY_SOURCE feature of libssp, thus checking the size of arguments to
various string and memory copy and set functions (as well as a few system
calls and other miscellany) where known at function entry. RedHat has
evidently built all "core system packages" with this option for some time.
This option should be used at the top of Makefiles (or Makefile.inc where
this is used for subdirectories) but after any setting of LIB.
This is only useful for userland code, and cannot be used in libc or in
any code which includes the libc internals, because it overrides certain
libc functions with macros. Some effort has been made to make USE_FORT=yes
work correctly for a full-system build by having the bsd.sys.mk logic
disable the feature where it should not be used (libc, libssp iteself,
the kernel) but no attempt has been made to build the entire system with
USE_FORT and doing so will doubtless expose numerous bugs and misfeatures.
Adjust the system build so that all programs and libraries that are setuid,
directly handle network data (including serial comm data), perform
authentication, or appear likely to have (or have a history of having)
data-driven bugs (e.g. file(1)) are built with USE_FORT=yes by default,
with the exception of libc, which cannot use USE_FORT and thus uses
only USE_SSP by default. Tested on i386 with no ill results; USE_FORT=no
per-directory or in a system build will disable if desired.
messages received from the network. Useful for collecting logs from
devices which do not have correct time.
Add it to usage.
Document it, also document that syslogd adds a timestamp with the local
time if it does not recognize the original timestamp field. Bump date.
Approved by wrstuden@.
kqueue descriptor, because we set up events after we parse the file.
Unfortuntately, this means that we also have to do the chroot before
we read the config file. But this is OK -- the config file has to be
in the chroot environment anyway, because it has to be able to get to
it after SIGHUP.
Grrr, all because stupid kqueue descriptors are not inherited across
a fork. LAME.
include:
- Extend the syntax of syslog.conf to allow selections of log destinations
by comma-separated lists of program name (including kernel-generated
messages) and originating host name.
- Ability to pipe selected messages through arbitrary filter commands.
- Ability to specify priority comparison operations.
- Improvements to domain name handling.
- Conversion to use kqueue for communication and signal events, eliminating
all unsafe signal handlers.
- Allow spaces as well as tabs in syslog.conf.
- Log kernel printfs at LOG_NOTICE instad of LOG_CRIT.
- Ability to log facility/priority with a log message.
- Reliability improvements.
This avoids some seriously gratuitous disk hosage in various cases.
XXX It would probably be better to allow this to be specified in the config
file somehow.
the same string into "last message repeated N times", and instead forces
syslogd to write out every message.
Based on '-c' in FreeBSD's syslogd, although a different option letter was
chosen because their syslogd requires '-c -c' to get this functionality,
and we don't have the support for logging to pipes which is what FreeBSD's
syslogd with a single '-c' is related to.
stdout before syslogd becomes a daemon.
- Flags for setuid/setgid/chroot syslogd after initialization is completed
- Warning instead of silent ignoring for malformed lines (with spaces instead
of tags)
Approved by Christos
sockets in the situation where all of the following are true:
* /etc/syslogd.conf contained forwarding actions when we were
started up or when we last received a HUP
* /etc/syslogd.conf has had all forwarding actions removed
* we are running with -s
and we receive a HUP.
request:
instead of the -S flag, fix the -s flag to not open a socket
if there are no forwarding rules in /etc/syslog.conf
The behavior of syslogd when -s is specified and there are forwarding rules
should still be made cleaner.
in man page and comments -- for some time it has no longer prevents
an inet socket from being opened, just caused it to be ignored
2.) Fix this problem with `-s' -- syslogd always opens an inet socket, even if
-s is specified and it has nowhere to send to. This socket is then
shutdown(), but there is no way to not have this socket open.
Users setting up paranoid installations can now specify `-S' which
prevents any non-unix-domain sockets from being opened, even if
forwarding is specified in /etc/syslogd.conf.
As per the previous fix, this is not made the default for `-s', as it
also prevents syslogd from forwarding log messages.
3.) document the above in the man page and usage.
Justification: in light of the possibility of future DoS attacks, or the
desire to set up a machine which is relatively uninformative in the face
of port scans, users may quite legitimately want to control what sockets
are open on their machine. Telling such users that they cannot run
syslogd is non-ideal.
on each of them, and don't bother listening on them. this allows messages
to be forwarded even with -s enabled.
XXX: not 100% sure if this is susceptable to a DoS, e.g someone filling
up kernel buffers with a backlog of packets not being read, but shutdown(2)
should prevent that even if it possibly doesn't at this time.
* minor KNF
if given this). this is extremely useful for chrooted daemons that
still want to create log entries via a local mechanism.
- create a new -P option that takes a filename of log sockets (equiv.
of calling syslogd which -p <each line of file>. this is useful
for the case of many chroot areas and keeping this information in
one place rather than having to remember it all.
if no -p options are given, the default (_PATH_LOG) is used as normal.
- ensure hostname from gethostname() is nul-terminated in all cases
- minor KNF
- use MAXHOSTNAMELEN over various other values/defines
- be safe will buffers that hold hostnames