]> git.ipfire.org Git - thirdparty/dhcpcd.git/commit
privsep: Send all log messages to the privileged actioneer
authorRoy Marples <roy@marples.name>
Fri, 30 Oct 2020 03:43:51 +0000 (03:43 +0000)
committerRoy Marples <roy@marples.name>
Fri, 30 Oct 2020 03:43:51 +0000 (03:43 +0000)
commitc3069de559a30980fa5c72af7e483d912f010002
tree5e6cdd28bc68f2cfeaa0199ac167254f2b4c42b1
parent25e2eec83b600968f01f7fdb3ebfc3c82fc8c742
privsep: Send all log messages to the privileged actioneer

If dhcpcd starts and no syslogd implementation is running then
various syscall filters could be triggered when dhcpcd wants to syslog
and it's already in a chroot.

Not all libc openlog implementations support LOG_NDELAY and
openlog does not return an error code and can also mask errno back to 0.
So we have no way of knowing if we have a syslog connection or not.
This means we cannot cache the connection at startup because syslog itself
will try and open if no connection.

As such, all logging is now directed to the dhcpcd privileged actioneer
process which will handle all the syslog and log file writing actions.

The only downside of this approach (other than an extra fd per process)
is that we no longer know which PID raised the message. While we could
put the correct PID in the logfile as we control the API, we cannot
put it into syslog as we cannot control that API.
As all privsep errors should log which function they came from this
will hopefully not be an issue as on the happy path only the master
process will log stuff.
src/dhcpcd.c
src/dhcpcd.h
src/logerr.c
src/logerr.h
src/privsep-root.c
src/privsep.c