Commit Graph

62 Commits

Author SHA1 Message Date
Jake Burkholder
e39756439c Back out the previous change to the queue(3) interface.
It was not discussed and should probably not happen.

Requested by:		msmith and others
2000-05-26 02:09:24 +00:00
Jake Burkholder
740a1973a6 Change the way that the queue(3) structures are declared; don't assume that
the type argument to *_HEAD and *_ENTRY is a struct.

Suggested by:	phk
Reviewed by:	phk
Approved by:	mdodd
2000-05-23 20:41:01 +00:00
Andrey A. Chernov
8d396be510 Enable 8bit chars excepting high controls 2000-04-18 01:12:27 +00:00
Joerg Wunsch
debf48c59c Fix a nit in my previous commit: make SIGHUP and SIGCHLD restartable
as they ought to be.  The description of SA_RESTART was a little
unobvious to me in the man page, so i missed it.  Thanks to Bruce for
spotting this.

Submitted by:	bde
2000-02-29 08:02:29 +00:00
Joerg Wunsch
6b5c2dd6a1 Fix a serious bug in syslogd regarding the handling of pipes. The bug
would cause syslogd to eventually kill innocent processes in the
system over time (note: not `could' but `would').  Many thanks to my
colleague Mirko for digging into the kernel structures and providing
me with the debugging framework to find out about the nature of this
bug (and to isolate that syslogd was the culprit) in a rather large
set of distributed machines at client sites where this happened
occasionally.

Whenever a child process was no longer responsive, or when syslogd
receives a SIGHUP so it closes all its logging file descriptors, for
any descriptor that refers to a pipe syslogd enters the data about the
old logging child process into a `dead queue', where it is being
removed from (and the status of the dead kitten being fetched) upon
receipt of a SIGCHLD.  However, there's a high probability that the
SIGCHLD already arrives before the child's data are actually entered
into the dead queue inside the SIGHUP handler, so the SIGCHLD handler
has nothing to fetch and remove and simply continues.  Whenever this
happens, the process'es data remain on the dead queue forever, and
since domark() tried to get rid of totally unresponsive children by
first sending a SIGTERM and later a SIGKILL, it was only a matter of
time until the system had recycled enough PIDs so an innocent process
got shot to death.

Fix the race by masking SIGHUP and SIGCHLD from both handlers mutually.

Add additional bandaids ``just in case'', i. e. don't enter a process
into the dead queue if we can't signal it (this should only happen in
case it is already dead by that time so we can fetch the status
immediately instead of deferring this to the SIGCHLD handler); for the
kill(2) inside domark(), check for an error status (/* Can't happen */
:) and remove it from the dead queue in this case (which if it would
have been there in the first place would have reduced the problem to a
statistically minimal likelihood so i certainly would never have
noticed the bug at all :).

Mirko also reviewed the fix in priciple (mutual blocking of both
signals inside the handlers), but not the actual code.

Reviewed by:	Mirko Kaffka <mirko@interface-business.de>
Approved by:	jkh
2000-02-28 17:49:43 +00:00
Philippe Charnier
922a51eea0 Add section number to .Xr. Use .Pa for filenames.
fprintf -> warnx.
2000-01-23 20:22:23 +00:00
Dag-Erling Smørgrav
3a62556310 Do this the Right Way (tm), i.e. use shutdown() instead of fooling around
with the size of the receive buffer.

Pointed out by:	ru
2000-01-14 15:37:18 +00:00
Dag-Erling Smørgrav
e0d22b94e1 Slight change of secure mode semantics: instead of reading (and counting)
vogons, set the size of the receive buffer to 1 and rely on the kernel to
simply drop incoming packets. The logging code was buggy anyway.

Use socklen_t instead of int for the length argument to recvfrom.

Add a 'continue' at the end of a loop for ANSI conformance.
2000-01-14 15:09:06 +00:00
Ruslan Ermilov
533eb9138f Fix page fault in -vv mode.
PR:		16098
Submitted by:	Alan.Judge@indigo.ie
Reviewed by:	ru
2000-01-13 12:59:58 +00:00
Peter Wemm
97d92980a9 $Id$ -> $FreeBSD$ 1999-08-28 01:35:59 +00:00
Brian Somers
2d3411d359 Make hostname comparisons case insensitive 1999-08-17 01:25:16 +00:00
Dmitrij Tejblum
70c03db51c readklog(): rename variable 'l' to 'len', to avoid possible confusion with 'i'
and '1'.

Requested by:	mckay
1999-05-06 13:57:57 +00:00
Dag-Erling Smørgrav
4e880257b8 Is there a limit to how stupid I can get? 1999-05-04 18:03:59 +00:00
Dmitrij Tejblum
1b44fb0337 Little fix in previous: watch NUL-termination. 1999-05-02 17:44:16 +00:00
Dmitrij Tejblum
823da6884b Fight with false newlines in kernel message logs. Output a line into log only
after we read a newline, or we have nothing to read from /dev/klog. Read
/dev/klog in non-blocking mode.
1999-05-02 12:47:09 +00:00
Dag-Erling Smørgrav
d35f30aa80 Implement fascist mode (do not open a datagram socket at all). 1999-04-30 12:51:20 +00:00
Chris Timmons
c807beb495 Ensure a terminating null when processing hostname strings from
arbitrary sources.
Obtained from:	OpenBSD
1998-12-29 23:14:50 +00:00
Chris Timmons
e1b5d1517c Accept "!*" as a valid all-programs tag line as documented.
PR:		8447
Submitted by:	Gaspar Chilingarov <nightmar@lemming.acc.am>
1998-12-29 20:36:22 +00:00
Chris Timmons
65f14c0055 Block SIGHUP during call to gethostbyaddr().
PR: 5548
Reviewed by: Matthew Dillon <dillon@apollo.backplane.com>
Obtained from: OpenBSD
1998-12-28 00:39:14 +00:00
Jordan K. Hubbard
60159a0633 Allow either tabs or spaces in configuration files.
PR:		8762
Submitted by:	Igor Roshchin <str@giganda.komkon.org>
1998-12-04 06:49:20 +00:00
David Greenman
624bb2d1c1 When warning about discarding packets in secure mode, include the IP
address of the most recent offender.
1998-11-05 10:51:21 +00:00
Julian Elischer
352ef9ec55 Submitted by: archie@whistle.com
quieten cc -Wall
1998-08-25 21:16:47 +00:00
Poul-Henning Kamp
6a19bdc8af Harlan.Stenn@pfcs.com added two (very interesting) options to syslogd for
-current (Thanks Harald). However, on my attempt to try this on -STABLE,
I found that when forwarding to another host the actual messages gets lost.
This is due to a wrong index because when the -v option was added, the
indexes shifted one place.

PR:		7407
Submitted by:	Andre Albsmeier <andre.albsmeier@mchp.siemens.de>
1998-07-27 13:04:14 +00:00
Poul-Henning Kamp
2eec1ab091 Add -u, -v and -vv options to syslogd, this improves the control and
logging verbosity about facility & priority levels.
PR:		7278
Reviewed by:	phk
Submitted by:	Harlan Stenn <Harlan.Stenn@pfcs.com>
1998-07-22 06:15:19 +00:00
Bruce Evans
78cda23056 Fixed printf format errors. 1998-07-06 20:28:08 +00:00
Guido van Rooij
1af721d635 Fix off by 1 error. 1998-07-02 19:35:40 +00:00
Steve Price
25d0f8a50c Note in log file if messages are being forwarded from a
remote machine.

PR:		7055
Submitted by:	Edwin Groothus <edwin@nwm.wan.philips.com>
1998-06-27 21:45:59 +00:00
Guido van Rooij
79962d3ede Implement new argument -l (OpenBSD has -a but we already use that).
This allows one to specify additional sockets in the unix domain
that syslogd listens to. Its primary use is to create log sockets in
chroot environments.
Obtained from:OpenBSD (with a bug fixed d
1998-06-25 19:39:19 +00:00
Julian Elischer
e2c597dd6a Reviewed by: guido@mouse.gvr.org
Submitted by:	Archie@whistle.com
redo the last patch to allow differentiated kernel logging in
a much better way.
1998-06-24 23:50:20 +00:00
Julian Elischer
d2b4b1fa20 Allow syslogd to separate out kernel log messages with a known
category.
e.g. separate out ipfw entries to a separate file.

Reviewed by:	(briefly) phk
Submitted by:	archie@whistle.com
Obtained from:	Whistle source tree
1998-06-10 04:34:56 +00:00
Poul-Henning Kamp
76aba7e431 Remove a bogus dependency on the size of the inkernel msgbuf.
This change is likely to introduce a few linebreaks in the boot
messages, but that is not easy to solve without breaking syslogd
semantics.  Maybe the right  fix is to return an integral number
of lines from the kernel driver.

Noticed by:	dg
1998-05-19 12:02:41 +00:00
Brian Somers
a95587674c Make syslogd function in non-secure mode.
Log the correct ^2 packet as per the last commit comment.
1998-05-07 00:39:56 +00:00
Poul-Henning Kamp
c46308e85c Augment the last change after some deliberation with rgrimes & peter.
It is important that we keep the ability to send packets to a remote
server and that the packets come from our well-known port, also in
that case.

Reviewed by:	peter, rgrimes.
1998-04-24 17:32:23 +00:00
Poul-Henning Kamp
94a60328c1 Even with '-s', syslogd still creates an AF_INET socket, although
it is not bind(2)ed.

PR:		6366
Reviewed by:	phk
Submitted by:	Soren S. Jorvang <soren@dt.dk>
1998-04-22 06:28:18 +00:00
James Raynard
194787f381 Don't assume sigset_t and int are equivalent. Also, get
sigprocmask arguments the right way round.
1998-02-28 15:14:00 +00:00
Philippe Charnier
b8b7e105a9 Cosmetic in usage string. 1997-10-20 12:55:49 +00:00
Brian Somers
173471e627 Use snprintf() instead of sprintf() most of the time.
Obtained from: OpenBSD

Make usage() consistent with man page.
1997-09-19 22:22:04 +00:00
Joerg Wunsch
3548606371 Nobody ever seemed to be interested in reviewing these changes, and i
found that my syslogd is now running them for several months...

Add an option to syslogd to restrict the IP addresses that are allowed
to log to this syslogd.  It's too late to develop the inter-syslogd
communications protocol mentioned in the BUGS section, some 10 years
too late.  Thus, restricting the IP address range is about the most
effective change we can do if we want to allow incoming syslog
messages at all.

IMHO, we should encourage the system administrators to use this option,
and thus provide a knob in /etc/rc.* for it, defaulting to -a 127.0.0.1/32
(just as a hint about the usage).

Please state opinions about whether to merge this change into 2.2 or
not (i've got it running on RELENG_2_2 anyway).
1997-05-03 22:17:43 +00:00
Paul Traina
cf27d94b69 Whoops -- code inspection showed I forgot to clean up getopt string 1997-04-26 00:03:21 +00:00
Paul Traina
26bed90fac Secure mode (-s) incorrectly disabled both sending and receiving of syslog
packets over UDP.  Secure boxes should still be able to send packets.
1997-04-26 00:00:33 +00:00
Warner Losh
6c3f552a31 compare return value from getopt against -1 rather than EOF, per the final
posix standard on the topic.
1997-03-31 05:11:47 +00:00
Joerg Wunsch
d086327d14 Save and restore the state of the variable Initialized inside die().
Otherwise, the shutdown message will print out with 15 NUL bytes in
front, due to a missing timestamp.
1997-03-14 01:27:02 +00:00
Peter Wemm
476602a9d0 Revert $FreeBSD$ to $Id$ 1997-02-22 16:15:28 +00:00
Joerg Wunsch
5fadfc4ce7 The "burn-in" phase has finished: this set of patches seems to run
stable now at a customer's site.

Finally add the ability to syslogd to pipe particular messages through
an arbitrary filtering command.  Idea stolen from IRIX.

This code is courtesy of the interface business GmbH, Dresden.

Comment about whether to also merge this into 2.2 or not, please.

Reviewed by:	(long ago) peter
1997-02-22 12:59:36 +00:00
Jordan K. Hubbard
1130b656e5 Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!)
avoiding the Id-smashing problem which has plagued developers for so long.

Boy, I'm glad we're not using sup anymore.  This update would have been
insane otherwise.
1997-01-14 07:20:47 +00:00
Jordan K. Hubbard
e960bb4911 Unlink LogName before attempting to open it. Since we now have a lovely
bug in syslogd which causes it to die after random amounts of time (widely
reported), this at least allows the administrator to easily restart it
without wondering why it simply exits again each time.
1997-01-03 07:13:20 +00:00
Peter Wemm
5bb4699e9c Revert part of the previous change. syslogd (when logging to ttys)
has always held an open file descriptor.  This allowed logging to
spare virtual consoles and being able to switch to them.

My previous change removed this since all writes were done with ttymsg()
which opens it's own fd, and hence syslogd didn't need it's own fd to
send messages on... but this caused an unexpected behavior change.

This should close PR#2176
1996-12-10 17:52:23 +00:00
Peter Wemm
a66a1e11cf Don't close f->f_file on F_TTY types on error returns from ttymsg() since
it wasn't open in the first place..
1996-11-26 02:35:08 +00:00
Peter Wemm
d486bc8fb9 Make the handling of the /dev/ prefix for tty names more consistant.
ttymsg() insists on them not being there.

Also, since ttymsg() opens the tty "on demand", don't keep an fd open
ourselves.  This would interfere with HUPCL etc.

This should close PR#2103 from <xaa@stack.nl>
1996-11-26 02:24:42 +00:00
Peter Wemm
a30a31bb3f put on my flame resistant suit and tempt fate by attempting to fix some of
the races in my previous commits here, and fix some other problems with
syslogd as well.

- if the child process exited early (eg: could not bind to the socket),
  the boot process would hang for 30 seconds.  The parent was not noticing
  that the child had exited.  (my fault)
- when writing to tty devices, instead of treating them like files that
  need \r\n instead of \n, actually use ttymsg() which has specific code
  intended to write to potentially blocking ttys safely.  I had a machine
  lock up last night because /dev/console on a serial port got flow control
  blocked.  Setting comcontrol drainwait fixed everything but syslogd which
  was going into a spin trying to write to the console and completely
  ignoreing everything else.
- fix a couple of nonsensical bits of code while here..  eg: wait3 takes
  a pointer to an int.  There is no sense in declaring it as 'union wait',
  then casting the pointer to (int *), then forgetting about it.
1996-11-18 21:48:29 +00:00