commit - bf7a7fd7b24102bf1a24caf21023c8abc5ce63f3
commit + 3826d7de43d3b9078c5e18e0074799a3a9ee682e
blob - cf0639e21e157309a221c0289e329f9420176f48
blob + 97de2011d61ccd1352484c6c70f7bdbdc011855c
--- logger.c
+++ logger.c
#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
#endif
-static FILE *log;
+static int logfd = 2; /* stderr */
static void logger_init(struct privsep *, struct privsep_proc *, void *);
static void logger_shutdown(void);
logger_init(struct privsep *ps, struct privsep_proc *p, void *arg)
{
p->p_shutdown = logger_shutdown;
- log = stderr;
sandbox_logger_process();
}
logger_shutdown(void)
{
closelog();
- if (log && log != stderr) {
- fflush(log);
- fclose(log);
- }
+ if (logfd != -1)
+ close(logfd);
}
static int
{
switch (imsg->hdr.type) {
case IMSG_LOG_TYPE:
- if (log != NULL && log != stderr) {
- fflush(log);
- fclose(log);
- }
- log = NULL;
+ if (logfd != -1)
+ close(logfd);
+ logfd = -1;
- if (imsg->fd != -1) {
- if ((log = fdopen(imsg->fd, "a")) == NULL)
- fatal("fdopen");
- }
+ if (imsg->fd != -1)
+ logfd = imsg->fd;
break;
default:
return -1;
if (datalen == 0)
fatal("got invalid IMSG_LOG_REQUEST");
msg[datalen - 1] = '\0';
- if (log != NULL)
- fprintf(log, "%s\n", msg);
+ if (logfd != -1)
+ dprintf(logfd, "%s\n", msg);
else
syslog(LOG_DAEMON | LOG_NOTICE, "%s", msg);
break;