comparison src/dhcpcd.c @ 5525:26b5d9bc2985 draft

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.
author Roy Marples <roy@marples.name>
date Fri, 30 Oct 2020 03:43:51 +0000
parents 618c0ef1bae8
children b1a3d9055662
comparison
equal deleted inserted replaced
5524:8c0e5dc34824 5525:26b5d9bc2985
1858 #ifdef DHCP6 1858 #ifdef DHCP6
1859 ctx.dhcp6_rfd = -1; 1859 ctx.dhcp6_rfd = -1;
1860 ctx.dhcp6_wfd = -1; 1860 ctx.dhcp6_wfd = -1;
1861 #endif 1861 #endif
1862 #ifdef PRIVSEP 1862 #ifdef PRIVSEP
1863 ctx.ps_root_fd = ctx.ps_data_fd = -1; 1863 ctx.ps_root_fd = ctx.ps_syslog_fd = ctx.ps_data_fd = -1;
1864 ctx.ps_inet_fd = ctx.ps_control_fd = -1; 1864 ctx.ps_inet_fd = ctx.ps_control_fd = -1;
1865 TAILQ_INIT(&ctx.ps_processes); 1865 TAILQ_INIT(&ctx.ps_processes);
1866 #endif 1866 #endif
1867 1867
1868 /* Check our streams for validity */ 1868 /* Check our streams for validity */