xref: /openbsd-src/usr.sbin/ripd/log.c (revision ec786feeeb6868735dfc2e233bdde499db5f7abd)
1*ec786feeSclaudio /*	$OpenBSD: log.c,v 1.8 2021/01/19 10:16:44 claudio Exp $ */
2ddeeec14Snorby 
3ddeeec14Snorby /*
4ddeeec14Snorby  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
5ddeeec14Snorby  *
6ddeeec14Snorby  * Permission to use, copy, modify, and distribute this software for any
7ddeeec14Snorby  * purpose with or without fee is hereby granted, provided that the above
8ddeeec14Snorby  * copyright notice and this permission notice appear in all copies.
9ddeeec14Snorby  *
10ddeeec14Snorby  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11ddeeec14Snorby  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12ddeeec14Snorby  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13ddeeec14Snorby  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14ddeeec14Snorby  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15ddeeec14Snorby  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16ddeeec14Snorby  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17ddeeec14Snorby  */
18ddeeec14Snorby 
19ddeeec14Snorby #include <errno.h>
20ddeeec14Snorby #include <stdarg.h>
21ddeeec14Snorby #include <stdio.h>
22ddeeec14Snorby #include <stdlib.h>
23ddeeec14Snorby #include <string.h>
24ddeeec14Snorby #include <syslog.h>
25537c1c4eSbenno #include <time.h>
26ddeeec14Snorby #include <unistd.h>
27ddeeec14Snorby 
28ddeeec14Snorby #include "log.h"
29537c1c4eSbenno #include "ripd.h"
30ddeeec14Snorby 
31ddeeec14Snorby int		 debug;
32dce97bddSclaudio int		 verbose;
33537c1c4eSbenno const char	*log_procname;
34ddeeec14Snorby 
35ddeeec14Snorby void
log_init(int n_debug)36ddeeec14Snorby log_init(int n_debug)
37ddeeec14Snorby {
38ddeeec14Snorby 	extern char	*__progname;
39ddeeec14Snorby 
40ddeeec14Snorby 	debug = n_debug;
41ddeeec14Snorby 
42ddeeec14Snorby 	if (!debug)
43ddeeec14Snorby 		openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON);
44ddeeec14Snorby 
45ddeeec14Snorby 	tzset();
46ddeeec14Snorby }
47ddeeec14Snorby 
48ddeeec14Snorby void
log_verbose(int v)49dce97bddSclaudio log_verbose(int v)
50dce97bddSclaudio {
51dce97bddSclaudio 	verbose = v;
52dce97bddSclaudio }
53dce97bddSclaudio 
54dce97bddSclaudio void
logit(int pri,const char * fmt,...)55ddeeec14Snorby logit(int pri, const char *fmt, ...)
56ddeeec14Snorby {
57ddeeec14Snorby 	va_list	ap;
58ddeeec14Snorby 
59ddeeec14Snorby 	va_start(ap, fmt);
60ddeeec14Snorby 	vlog(pri, fmt, ap);
61ddeeec14Snorby 	va_end(ap);
62ddeeec14Snorby }
63ddeeec14Snorby 
64ddeeec14Snorby void
vlog(int pri,const char * fmt,va_list ap)65ddeeec14Snorby vlog(int pri, const char *fmt, va_list ap)
66ddeeec14Snorby {
67ddeeec14Snorby 	char	*nfmt;
68ddeeec14Snorby 
69ddeeec14Snorby 	if (debug) {
70ddeeec14Snorby 		/* best effort in out of mem situations */
71ddeeec14Snorby 		if (asprintf(&nfmt, "%s\n", fmt) == -1) {
72ddeeec14Snorby 			vfprintf(stderr, fmt, ap);
73ddeeec14Snorby 			fprintf(stderr, "\n");
74ddeeec14Snorby 		} else {
75ddeeec14Snorby 			vfprintf(stderr, nfmt, ap);
76ddeeec14Snorby 			free(nfmt);
77ddeeec14Snorby 		}
78ddeeec14Snorby 		fflush(stderr);
79ddeeec14Snorby 	} else
80ddeeec14Snorby 		vsyslog(pri, fmt, ap);
81ddeeec14Snorby }
82ddeeec14Snorby 
83ddeeec14Snorby void
log_warn(const char * emsg,...)84ddeeec14Snorby log_warn(const char *emsg, ...)
85ddeeec14Snorby {
86ddeeec14Snorby 	char	*nfmt;
87ddeeec14Snorby 	va_list	 ap;
88ddeeec14Snorby 
89ddeeec14Snorby 	/* best effort to even work in out of memory situations */
90ddeeec14Snorby 	if (emsg == NULL)
919b2c1562Sbluhm 		logit(LOG_ERR, "%s", strerror(errno));
92ddeeec14Snorby 	else {
93ddeeec14Snorby 		va_start(ap, emsg);
94ddeeec14Snorby 
95ddeeec14Snorby 		if (asprintf(&nfmt, "%s: %s", emsg, strerror(errno)) == -1) {
96ddeeec14Snorby 			/* we tried it... */
979b2c1562Sbluhm 			vlog(LOG_ERR, emsg, ap);
989b2c1562Sbluhm 			logit(LOG_ERR, "%s", strerror(errno));
99ddeeec14Snorby 		} else {
1009b2c1562Sbluhm 			vlog(LOG_ERR, nfmt, ap);
101ddeeec14Snorby 			free(nfmt);
102ddeeec14Snorby 		}
103ddeeec14Snorby 		va_end(ap);
104ddeeec14Snorby 	}
105ddeeec14Snorby }
106ddeeec14Snorby 
107ddeeec14Snorby void
log_warnx(const char * emsg,...)108ddeeec14Snorby log_warnx(const char *emsg, ...)
109ddeeec14Snorby {
110ddeeec14Snorby 	va_list	 ap;
111ddeeec14Snorby 
112ddeeec14Snorby 	va_start(ap, emsg);
1139b2c1562Sbluhm 	vlog(LOG_ERR, emsg, ap);
114ddeeec14Snorby 	va_end(ap);
115ddeeec14Snorby }
116ddeeec14Snorby 
117ddeeec14Snorby void
log_info(const char * emsg,...)118ddeeec14Snorby log_info(const char *emsg, ...)
119ddeeec14Snorby {
120ddeeec14Snorby 	va_list	 ap;
121ddeeec14Snorby 
122ddeeec14Snorby 	va_start(ap, emsg);
123ddeeec14Snorby 	vlog(LOG_INFO, emsg, ap);
124ddeeec14Snorby 	va_end(ap);
125ddeeec14Snorby }
126ddeeec14Snorby 
127ddeeec14Snorby void
log_debug(const char * emsg,...)128ddeeec14Snorby log_debug(const char *emsg, ...)
129ddeeec14Snorby {
130ddeeec14Snorby 	va_list	 ap;
131ddeeec14Snorby 
132dce97bddSclaudio 	if (verbose) {
133ddeeec14Snorby 		va_start(ap, emsg);
134ddeeec14Snorby 		vlog(LOG_DEBUG, emsg, ap);
135ddeeec14Snorby 		va_end(ap);
136ddeeec14Snorby 	}
137ddeeec14Snorby }
138ddeeec14Snorby 
139ddeeec14Snorby void
fatal(const char * emsg)140ddeeec14Snorby fatal(const char *emsg)
141ddeeec14Snorby {
142ddeeec14Snorby 	if (emsg == NULL)
143537c1c4eSbenno 		logit(LOG_CRIT, "fatal in %s: %s", log_procname,
144ddeeec14Snorby 		    strerror(errno));
145ddeeec14Snorby 	else
146ddeeec14Snorby 		if (errno)
147ddeeec14Snorby 			logit(LOG_CRIT, "fatal in %s: %s: %s",
148537c1c4eSbenno 			    log_procname, emsg, strerror(errno));
149ddeeec14Snorby 		else
150ddeeec14Snorby 			logit(LOG_CRIT, "fatal in %s: %s",
151537c1c4eSbenno 			    log_procname, emsg);
152ddeeec14Snorby 
153ddeeec14Snorby 	exit(1);
154ddeeec14Snorby }
155ddeeec14Snorby 
156ddeeec14Snorby void
fatalx(const char * emsg)157ddeeec14Snorby fatalx(const char *emsg)
158ddeeec14Snorby {
159ddeeec14Snorby 	errno = 0;
160ddeeec14Snorby 	fatal(emsg);
161ddeeec14Snorby }
162