annotate src/logerr.c @ 5579:22d473eabfcc draft

Linux: fix a memory leak when dhcpcd exits or the log is reopened
author Roy Marples <roy@marples.name>
date Sun, 24 Jan 2021 22:53:20 +0000
parents 071a9ea18363
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4548
c7df03794de3 Add SPDX identifiers to all dhcpcd source files.
Yegor Yefremov <yegorslists@googlemail.com>
parents: 4333
diff changeset
1 /* SPDX-License-Identifier: BSD-2-Clause */
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
2 /*
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
3 * logerr: errx with logging
4922
555d7d1a4939 Welcome to 2020!
Roy Marples <roy@marples.name>
parents: 4578
diff changeset
4 * Copyright (c) 2006-2020 Roy Marples <roy@marples.name>
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
5 * All rights reserved
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
6
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
7 * Redistribution and use in source and binary forms, with or without
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
8 * modification, are permitted provided that the following conditions
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
9 * are met:
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
10 * 1. Redistributions of source code must retain the above copyright
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer.
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
15 *
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
26 * SUCH DAMAGE.
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
27 */
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
28
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
29 #include <sys/time.h>
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
30 #include <errno.h>
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
31 #include <stdbool.h>
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
32 #include <stdarg.h>
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
33 #include <stdio.h>
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
34 #include <stdlib.h>
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
35 #include <string.h>
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
36 #include <syslog.h>
4013
b9235d531c0d Fix compile.
Roy Marples <roy@marples.name>
parents: 4011
diff changeset
37 #include <time.h>
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
38 #include <unistd.h>
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
39
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
40 #include "logerr.h"
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
41
4011
2c2f1a6a61d9 LOG_SYSLOG_OPTS and LOG_SYSLOG_FACILITY can set these syslog
Roy Marples <roy@marples.name>
parents: 4010
diff changeset
42 #ifndef LOGERR_SYSLOG_FACILITY
2c2f1a6a61d9 LOG_SYSLOG_OPTS and LOG_SYSLOG_FACILITY can set these syslog
Roy Marples <roy@marples.name>
parents: 4010
diff changeset
43 #define LOGERR_SYSLOG_FACILITY LOG_DAEMON
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
44 #endif
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
45
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
46 #ifdef SMALL
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
47 #undef LOGERR_TAG
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
48 #endif
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
49
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
50 /* syslog protocol is 1k message max, RFC 3164 section 4.1 */
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
51 #define LOGERR_SYSLOGBUF 1024 + sizeof(int) + sizeof(pid_t)
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
52
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
53 #define UNUSED(a) (void)(a)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
54
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
55 struct logctx {
5326
ce2922c1b6dc logerr: buffer stderr as we now have many processes
Roy Marples <roy@marples.name>
parents: 5283
diff changeset
56 char log_buf[BUFSIZ];
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
57 unsigned int log_opts;
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
58 int log_fd;
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
59 pid_t log_pid;
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
60 #ifndef SMALL
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
61 FILE *log_file;
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
62 #ifdef LOGERR_TAG
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
63 const char *log_tag;
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
64 #endif
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
65 #endif
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
66 };
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
67
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
68 static struct logctx _logctx = {
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
69 /* syslog style, but without the hostname or tag. */
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
70 .log_opts = LOGERR_LOG | LOGERR_LOG_DATE | LOGERR_LOG_PID,
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
71 .log_fd = -1,
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
72 .log_pid = 0,
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
73 };
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
74
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
75 #if defined(__linux__)
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
76 /* Poor man's getprogname(3). */
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
77 static char *_logprog;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
78 static const char *
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
79 getprogname(void)
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
80 {
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
81 const char *p;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
82
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
83 /* Use PATH_MAX + 1 to avoid truncation. */
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
84 if (_logprog == NULL) {
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
85 /* readlink(2) does not append a NULL byte,
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
86 * so zero the buffer. */
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
87 if ((_logprog = calloc(1, PATH_MAX + 1)) == NULL)
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
88 return NULL;
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
89 if (readlink("/proc/self/exe", _logprog, PATH_MAX + 1) == -1) {
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
90 free(_logprog);
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
91 _logprog = NULL;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
92 return NULL;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
93 }
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
94 }
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
95 if (_logprog[0] == '[')
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
96 return NULL;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
97 p = strrchr(_logprog, '/');
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
98 if (p == NULL)
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
99 return _logprog;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
100 return p + 1;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
101 }
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
102 #endif
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
103
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
104 #ifndef SMALL
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
105 /* Write the time, syslog style. month day time - */
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
106 static int
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
107 logprintdate(FILE *stream)
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
108 {
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
109 struct timeval tv;
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
110 time_t now;
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
111 struct tm tmnow;
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
112 char buf[32];
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
113
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
114 if (gettimeofday(&tv, NULL) == -1)
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
115 return -1;
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
116
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
117 now = tv.tv_sec;
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
118 if (localtime_r(&now, &tmnow) == NULL)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
119 return -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
120 if (strftime(buf, sizeof(buf), "%b %d %T ", &tmnow) == 0)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
121 return -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
122 return fprintf(stream, "%s", buf);
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
123 }
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
124 #endif
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
125
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
126 __printflike(3, 0) static int
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
127 vlogprintf_r(struct logctx *ctx, FILE *stream, const char *fmt, va_list args)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
128 {
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
129 int len = 0, e;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
130 va_list a;
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
131 #ifndef SMALL
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
132 bool log_pid;
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
133 #ifdef LOGERR_TAG
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
134 bool log_tag;
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
135 #endif
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
136
5441
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
137 if ((stream == stderr && ctx->log_opts & LOGERR_ERR_DATE) ||
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
138 (stream != stderr && ctx->log_opts & LOGERR_LOG_DATE))
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
139 {
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
140 if ((e = logprintdate(stream)) == -1)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
141 return -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
142 len += e;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
143 }
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
144
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
145 #ifdef LOGERR_TAG
5441
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
146 log_tag = ((stream == stderr && ctx->log_opts & LOGERR_ERR_TAG) ||
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
147 (stream != stderr && ctx->log_opts & LOGERR_LOG_TAG));
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
148 if (log_tag) {
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
149 if (ctx->log_tag == NULL)
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
150 ctx->log_tag = getprogname();
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
151 if ((e = fprintf(stream, "%s", ctx->log_tag)) == -1)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
152 return -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
153 len += e;
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
154 }
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
155 #endif
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
156
5441
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
157 log_pid = ((stream == stderr && ctx->log_opts & LOGERR_ERR_PID) ||
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
158 (stream != stderr && ctx->log_opts & LOGERR_LOG_PID));
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
159 if (log_pid) {
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
160 pid_t pid;
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
161
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
162 if (ctx->log_pid == 0)
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
163 pid = getpid();
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
164 else
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
165 pid = ctx->log_pid;
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
166 if ((e = fprintf(stream, "[%d]", pid)) == -1)
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
167 return -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
168 len += e;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
169 }
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
170
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
171 #ifdef LOGERR_TAG
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
172 if (log_tag || log_pid)
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
173 #else
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
174 if (log_pid)
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
175 #endif
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
176 {
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
177 if ((e = fprintf(stream, ": ")) == -1)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
178 return -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
179 len += e;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
180 }
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
181 #else
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
182 UNUSED(ctx);
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
183 #endif
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
184
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
185 va_copy(a, args);
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
186 e = vfprintf(stream, fmt, a);
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
187 if (fputc('\n', stream) == EOF)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
188 e = -1;
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
189 else if (e != -1)
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
190 e++;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
191 va_end(a);
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
192
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
193 return e == -1 ? -1 : len + e;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
194 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
195
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
196 /*
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
197 * NetBSD's gcc has been modified to check for the non standard %m in printf
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
198 * like functions and warn noisily about it that they should be marked as
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
199 * syslog like instead.
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
200 * This is all well and good, but our logger also goes via vfprintf and
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
201 * when marked as a sysloglike funcion, gcc will then warn us that the
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
202 * function should be printflike instead!
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
203 * This creates an infinte loop of gcc warnings.
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
204 * Until NetBSD solves this issue, we have to disable a gcc diagnostic
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
205 * for our fully standards compliant code in the logger function.
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
206 */
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
207 #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5))
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
208 #pragma GCC diagnostic push
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
209 #pragma GCC diagnostic ignored "-Wmissing-format-attribute"
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
210 #endif
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
211 __printflike(2, 0) static int
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
212 vlogmessage(int pri, const char *fmt, va_list args)
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
213 {
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
214 struct logctx *ctx = &_logctx;
4566
defe875f1d89 logerr: Care about fprintf return codes
Roy Marples <roy@marples.name>
parents: 4548
diff changeset
215 int len = 0;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
216
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
217 if (ctx->log_fd != -1) {
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
218 char buf[LOGERR_SYSLOGBUF];
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
219 pid_t pid;
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
220
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
221 memcpy(buf, &pri, sizeof(pri));
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
222 pid = getpid();
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
223 memcpy(buf + sizeof(pri), &pid, sizeof(pid));
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
224 len = vsnprintf(buf + sizeof(pri) + sizeof(pid),
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
225 sizeof(buf) - sizeof(pri) - sizeof(pid),
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
226 fmt, args);
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
227 if (len != -1)
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
228 len = (int)write(ctx->log_fd, buf,
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
229 ((size_t)++len) + sizeof(pri) + sizeof(pid));
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
230 return len;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
231 }
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
232
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
233 if (ctx->log_opts & LOGERR_ERR &&
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
234 (pri <= LOG_ERR ||
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
235 (!(ctx->log_opts & LOGERR_QUIET) && pri <= LOG_INFO) ||
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
236 (ctx->log_opts & LOGERR_DEBUG && pri <= LOG_DEBUG)))
5441
ff7c7b4799b3 dhcpcd: Redirect stdout/stderr to the launcher stderr descriptor
Roy Marples <roy@marples.name>
parents: 5438
diff changeset
237 len = vlogprintf_r(ctx, stderr, fmt, args);
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
238
4997
774f445ed677 logging: Always log to syslog(3).
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
239 #ifndef SMALL
774f445ed677 logging: Always log to syslog(3).
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
240 if (ctx->log_file != NULL &&
774f445ed677 logging: Always log to syslog(3).
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
241 (pri != LOG_DEBUG || (ctx->log_opts & LOGERR_DEBUG)))
774f445ed677 logging: Always log to syslog(3).
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
242 len = vlogprintf_r(ctx, ctx->log_file, fmt, args);
774f445ed677 logging: Always log to syslog(3).
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
243 #endif
774f445ed677 logging: Always log to syslog(3).
Roy Marples <roy@marples.name>
parents: 4922
diff changeset
244
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
245 if (ctx->log_opts & LOGERR_LOG)
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
246 vsyslog(pri, fmt, args);
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
247
4578
5ab00b922cab Fix SMALL build.
Roy Marples <roy@marples.name>
parents: 4566
diff changeset
248 return len;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
249 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
250 #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5))
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
251 #pragma GCC diagnostic pop
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
252 #endif
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
253
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
254 __printflike(2, 3) void
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
255 logmessage(int pri, const char *fmt, ...)
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
256 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
257 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
258
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
259 va_start(args, fmt);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
260 vlogmessage(pri, fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
261 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
262 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
263
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
264 __printflike(2, 0) static void
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
265 vlogerrmessage(int pri, const char *fmt, va_list args)
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
266 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
267 int _errno = errno;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
268 char buf[1024];
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
269
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
270 vsnprintf(buf, sizeof(buf), fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
271 logmessage(pri, "%s: %s", buf, strerror(_errno));
5283
87cdd74ea98e logerr: Preserve errno
Roy Marples <roy@marples.name>
parents: 5207
diff changeset
272 errno = _errno;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
273 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
274
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
275 __printflike(2, 3) void
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
276 logerrmessage(int pri, const char *fmt, ...)
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
277 {
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
278 va_list args;
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
279
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
280 va_start(args, fmt);
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
281 vlogerrmessage(pri, fmt, args);
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
282 va_end(args);
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
283 }
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
284
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
285 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
286 log_debug(const char *fmt, ...)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
287 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
288 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
289
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
290 va_start(args, fmt);
4023
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
291 vlogerrmessage(LOG_DEBUG, fmt, args);
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
292 va_end(args);
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
293 }
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
294
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
295 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
296 log_debugx(const char *fmt, ...)
4023
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
297 {
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
298 va_list args;
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
299
66f9399ba5c6 Add logdebugx, similar to logerrx and logwarnx.
Roy Marples <roy@marples.name>
parents: 4022
diff changeset
300 va_start(args, fmt);
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
301 vlogmessage(LOG_DEBUG, fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
302 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
303 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
304
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
305 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
306 log_info(const char *fmt, ...)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
307 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
308 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
309
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
310 va_start(args, fmt);
4024
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
311 vlogerrmessage(LOG_INFO, fmt, args);
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
312 va_end(args);
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
313 }
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
314
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
315 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
316 log_infox(const char *fmt, ...)
4024
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
317 {
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
318 va_list args;
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
319
0984f93d896e To be consitent, do the same to loginfo as we just did for logdebug.
Roy Marples <roy@marples.name>
parents: 4023
diff changeset
320 va_start(args, fmt);
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
321 vlogmessage(LOG_INFO, fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
322 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
323 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
324
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
325 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
326 log_warn(const char *fmt, ...)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
327 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
328 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
329
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
330 va_start(args, fmt);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
331 vlogerrmessage(LOG_WARNING, fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
332 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
333 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
334
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
335 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
336 log_warnx(const char *fmt, ...)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
337 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
338 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
339
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
340 va_start(args, fmt);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
341 vlogmessage(LOG_WARNING, fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
342 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
343 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
344
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
345 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
346 log_err(const char *fmt, ...)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
347 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
348 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
349
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
350 va_start(args, fmt);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
351 vlogerrmessage(LOG_ERR, fmt, args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
352 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
353 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
354
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
355 void
5064
7721231839f5 logerr: Use macros to call log functions
Sergey Nikiforov <Sergey.Nikiforov@kaspersky.com>
parents: 4997
diff changeset
356 log_errx(const char *fmt, ...)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
357 {
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
358 va_list args;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
359
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
360 va_start(args, fmt);
4022
b35c56dc40fe Don't print strerror for logerrx.
Roy Marples <roy@marples.name>
parents: 4021
diff changeset
361 vlogmessage(LOG_ERR, fmt, args);
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
362 va_end(args);
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
363 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
364
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
365 int
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
366 loggetfd(void)
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
367 {
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
368 struct logctx *ctx = &_logctx;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
369
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
370 return ctx->log_fd;
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
371 }
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
372
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
373 void
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
374 logsetfd(int fd)
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
375 {
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
376 struct logctx *ctx = &_logctx;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
377
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
378 ctx->log_fd = fd;
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
379 #ifndef SMALL
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
380 if (fd != -1 && ctx->log_file != NULL) {
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
381 fclose(ctx->log_file);
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
382 ctx->log_file = NULL;
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
383 }
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
384 #endif
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
385 }
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
386
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
387 int
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
388 logreadfd(int fd)
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
389 {
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
390 struct logctx *ctx = &_logctx;
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
391 char buf[LOGERR_SYSLOGBUF];
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
392 int len, pri;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
393
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
394 len = (int)read(fd, buf, sizeof(buf));
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
395 if (len == -1)
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
396 return -1;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
397
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
398 /* Ensure we have pri, pid and a terminator */
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
399 if (len < (int)(sizeof(pri) + sizeof(pid_t) + 1) ||
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
400 buf[len - 1] != '\0')
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
401 {
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
402 errno = EINVAL;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
403 return -1;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
404 }
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
405
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
406 memcpy(&pri, buf, sizeof(pri));
5526
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
407 memcpy(&ctx->log_pid, buf + sizeof(pri), sizeof(ctx->log_pid));
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
408 logmessage(pri, "%s", buf + sizeof(pri) + sizeof(ctx->log_pid));
b1a3d9055662 privsep: Allow logfile reopening in a chroot
Roy Marples <roy@marples.name>
parents: 5525
diff changeset
409 ctx->log_pid = 0;
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
410 return len;
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
411 }
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
412
5077
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
413 unsigned int
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
414 loggetopts(void)
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
415 {
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
416 struct logctx *ctx = &_logctx;
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
417
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
418 return ctx->log_opts;
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
419 }
16919a390f4d dhcpcd: don't report forked to background in quiet mode
Roy Marples <roy@marples.name>
parents: 5064
diff changeset
420
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
421 void
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
422 logsetopts(unsigned int opts)
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
423 {
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
424 struct logctx *ctx = &_logctx;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
425
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
426 ctx->log_opts = opts;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
427 setlogmask(LOG_UPTO(opts & LOGERR_DEBUG ? LOG_DEBUG : LOG_INFO));
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
428 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
429
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
430 #ifdef LOGERR_TAG
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
431 void
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
432 logsettag(const char *tag)
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
433 {
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
434 #if !defined(SMALL)
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
435 struct logctx *ctx = &_logctx;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
436
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
437 ctx->log_tag = tag;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
438 #else
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
439 UNUSED(tag);
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
440 #endif
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
441 }
4021
a0e367494ce8 Over engineer the logging some more.
Roy Marples <roy@marples.name>
parents: 4019
diff changeset
442 #endif
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
443
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
444 int
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
445 logopen(const char *path)
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
446 {
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
447 struct logctx *ctx = &_logctx;
5506
9c7bd8bd8729 privsep: Always try and open syslog
Roy Marples <roy@marples.name>
parents: 5453
diff changeset
448 int opts = 0;
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
449
5207
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5077
diff changeset
450 /* Cache timezone */
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5077
diff changeset
451 tzset();
84b63f09c8a4 privsep: Handle all file IO in the Priviledged Actioneer
Roy Marples <roy@marples.name>
parents: 5077
diff changeset
452
5347
fabb85fb8e37 logerr: Remove setvbuf diagnostic - it's not critical
Roy Marples <roy@marples.name>
parents: 5326
diff changeset
453 (void)setvbuf(stderr, ctx->log_buf, _IOLBF, sizeof(ctx->log_buf));
5326
ce2922c1b6dc logerr: buffer stderr as we now have many processes
Roy Marples <roy@marples.name>
parents: 5283
diff changeset
454
5527
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
455 #ifndef SMALL
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
456 if (ctx->log_file != NULL) {
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
457 fclose(ctx->log_file);
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
458 ctx->log_file = NULL;
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
459 }
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
460 #endif
071a9ea18363 log: Allow logopen to be called without logclose
Roy Marples <roy@marples.name>
parents: 5526
diff changeset
461
5506
9c7bd8bd8729 privsep: Always try and open syslog
Roy Marples <roy@marples.name>
parents: 5453
diff changeset
462 if (ctx->log_opts & LOGERR_LOG_PID)
9c7bd8bd8729 privsep: Always try and open syslog
Roy Marples <roy@marples.name>
parents: 5453
diff changeset
463 opts |= LOG_PID;
5525
26b5d9bc2985 privsep: Send all log messages to the privileged actioneer
Roy Marples <roy@marples.name>
parents: 5506
diff changeset
464 openlog(getprogname(), opts, LOGERR_SYSLOG_FACILITY);
5506
9c7bd8bd8729 privsep: Always try and open syslog
Roy Marples <roy@marples.name>
parents: 5453
diff changeset
465 if (path == NULL)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
466 return 1;
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
467
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
468 #ifndef SMALL
5453
fef58462dea6 logerr: Don't leak the logfile stream to scripts
Roy Marples <roy@marples.name>
parents: 5441
diff changeset
469 if ((ctx->log_file = fopen(path, "ae")) == NULL)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
470 return -1;
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
471 setlinebuf(ctx->log_file);
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
472 return fileno(ctx->log_file);
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
473 #else
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
474 errno = ENOTSUP;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
475 return -1;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
476 #endif
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
477 }
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
478
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
479 void
4017
f832abaccf6f Use void to show no args.
Roy Marples <roy@marples.name>
parents: 4013
diff changeset
480 logclose(void)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
481 {
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
482 #ifndef SMALL
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
483 struct logctx *ctx = &_logctx;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
484 #endif
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
485
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
486 closelog();
5579
22d473eabfcc Linux: fix a memory leak when dhcpcd exits or the log is reopened
Roy Marples <roy@marples.name>
parents: 5527
diff changeset
487 #if defined(__linux__)
22d473eabfcc Linux: fix a memory leak when dhcpcd exits or the log is reopened
Roy Marples <roy@marples.name>
parents: 5527
diff changeset
488 free(_logprog);
22d473eabfcc Linux: fix a memory leak when dhcpcd exits or the log is reopened
Roy Marples <roy@marples.name>
parents: 5527
diff changeset
489 _logprog = NULL;
22d473eabfcc Linux: fix a memory leak when dhcpcd exits or the log is reopened
Roy Marples <roy@marples.name>
parents: 5527
diff changeset
490 #endif
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
491 #ifndef SMALL
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
492 if (ctx->log_file == NULL)
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
493 return;
4019
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
494 fclose(ctx->log_file);
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
495 ctx->log_file = NULL;
fe2f1ad133a2 Write syslog entries in logfile:
Roy Marples <roy@marples.name>
parents: 4017
diff changeset
496 #endif
4010
746684127581 logerr: errx with logging
Roy Marples <roy@marples.name>
parents:
diff changeset
497 }