Blame
Date:
Wed Feb 16 18:28:23 2022 UTC
Message:
initial commit
001
2022-02-16
op
/* $OpenBSD: log.c,v 1.1 2018/07/10 16:39:54 florian Exp $ */
002
2022-02-16
op
003
2022-02-16
op
/*
004
2022-02-16
op
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
005
2022-02-16
op
*
006
2022-02-16
op
* Permission to use, copy, modify, and distribute this software for any
007
2022-02-16
op
* purpose with or without fee is hereby granted, provided that the above
008
2022-02-16
op
* copyright notice and this permission notice appear in all copies.
009
2022-02-16
op
*
010
2022-02-16
op
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
011
2022-02-16
op
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
012
2022-02-16
op
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
013
2022-02-16
op
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
014
2022-02-16
op
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
015
2022-02-16
op
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
016
2022-02-16
op
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
017
2022-02-16
op
*/
018
2022-02-16
op
019
2022-02-16
op
#include <stdio.h>
020
2022-02-16
op
#include <stdlib.h>
021
2022-02-16
op
#include <stdarg.h>
022
2022-02-16
op
#include <string.h>
023
2022-02-16
op
#include <syslog.h>
024
2022-02-16
op
#include <errno.h>
025
2022-02-16
op
#include <time.h>
026
2022-02-16
op
027
2022-02-16
op
#include "log.h"
028
2022-02-16
op
029
2022-02-16
op
static int debug;
030
2022-02-16
op
static int verbose;
031
2022-02-16
op
static const char *log_procname;
032
2022-02-16
op
033
2022-02-16
op
void
034
2022-02-16
op
log_init(int n_debug, int facility)
035
2022-02-16
op
{
036
2022-02-16
op
extern char *__progname;
037
2022-02-16
op
038
2022-02-16
op
debug = n_debug;
039
2022-02-16
op
verbose = n_debug;
040
2022-02-16
op
log_procinit(__progname);
041
2022-02-16
op
042
2022-02-16
op
if (!debug)
043
2022-02-16
op
openlog(__progname, LOG_PID | LOG_NDELAY, facility);
044
2022-02-16
op
045
2022-02-16
op
tzset();
046
2022-02-16
op
}
047
2022-02-16
op
048
2022-02-16
op
void
049
2022-02-16
op
log_procinit(const char *procname)
050
2022-02-16
op
{
051
2022-02-16
op
if (procname != NULL)
052
2022-02-16
op
log_procname = procname;
053
2022-02-16
op
}
054
2022-02-16
op
055
2022-02-16
op
void
056
2022-02-16
op
log_setverbose(int v)
057
2022-02-16
op
{
058
2022-02-16
op
verbose = v;
059
2022-02-16
op
}
060
2022-02-16
op
061
2022-02-16
op
int
062
2022-02-16
op
log_getverbose(void)
063
2022-02-16
op
{
064
2022-02-16
op
return (verbose);
065
2022-02-16
op
}
066
2022-02-16
op
067
2022-02-16
op
void
068
2022-02-16
op
logit(int pri, const char *fmt, ...)
069
2022-02-16
op
{
070
2022-02-16
op
va_list ap;
071
2022-02-16
op
072
2022-02-16
op
va_start(ap, fmt);
073
2022-02-16
op
vlog(pri, fmt, ap);
074
2022-02-16
op
va_end(ap);
075
2022-02-16
op
}
076
2022-02-16
op
077
2022-02-16
op
void
078
2022-02-16
op
vlog(int pri, const char *fmt, va_list ap)
079
2022-02-16
op
{
080
2022-02-16
op
char *nfmt;
081
2022-02-16
op
int saved_errno = errno;
082
2022-02-16
op
083
2022-02-16
op
if (debug) {
084
2022-02-16
op
/* best effort in out of mem situations */
085
2022-02-16
op
if (asprintf(&nfmt, "%s\n", fmt) == -1) {
086
2022-02-16
op
vfprintf(stderr, fmt, ap);
087
2022-02-16
op
fprintf(stderr, "\n");
088
2022-02-16
op
} else {
089
2022-02-16
op
vfprintf(stderr, nfmt, ap);
090
2022-02-16
op
free(nfmt);
091
2022-02-16
op
}
092
2022-02-16
op
fflush(stderr);
093
2022-02-16
op
} else
094
2022-02-16
op
vsyslog(pri, fmt, ap);
095
2022-02-16
op
096
2022-02-16
op
errno = saved_errno;
097
2022-02-16
op
}
098
2022-02-16
op
099
2022-02-16
op
void
100
2022-02-16
op
log_warn(const char *emsg, ...)
101
2022-02-16
op
{
102
2022-02-16
op
char *nfmt;
103
2022-02-16
op
va_list ap;
104
2022-02-16
op
int saved_errno = errno;
105
2022-02-16
op
106
2022-02-16
op
/* best effort to even work in out of memory situations */
107
2022-02-16
op
if (emsg == NULL)
108
2022-02-16
op
logit(LOG_ERR, "%s", strerror(saved_errno));
109
2022-02-16
op
else {
110
2022-02-16
op
va_start(ap, emsg);
111
2022-02-16
op
112
2022-02-16
op
if (asprintf(&nfmt, "%s: %s", emsg,
113
2022-02-16
op
strerror(saved_errno)) == -1) {
114
2022-02-16
op
/* we tried it... */
115
2022-02-16
op
vlog(LOG_ERR, emsg, ap);
116
2022-02-16
op
logit(LOG_ERR, "%s", strerror(saved_errno));
117
2022-02-16
op
} else {
118
2022-02-16
op
vlog(LOG_ERR, nfmt, ap);
119
2022-02-16
op
free(nfmt);
120
2022-02-16
op
}
121
2022-02-16
op
va_end(ap);
122
2022-02-16
op
}
123
2022-02-16
op
124
2022-02-16
op
errno = saved_errno;
125
2022-02-16
op
}
126
2022-02-16
op
127
2022-02-16
op
void
128
2022-02-16
op
log_warnx(const char *emsg, ...)
129
2022-02-16
op
{
130
2022-02-16
op
va_list ap;
131
2022-02-16
op
132
2022-02-16
op
va_start(ap, emsg);
133
2022-02-16
op
vlog(LOG_ERR, emsg, ap);
134
2022-02-16
op
va_end(ap);
135
2022-02-16
op
}
136
2022-02-16
op
137
2022-02-16
op
void
138
2022-02-16
op
log_info(const char *emsg, ...)
139
2022-02-16
op
{
140
2022-02-16
op
va_list ap;
141
2022-02-16
op
142
2022-02-16
op
va_start(ap, emsg);
143
2022-02-16
op
vlog(LOG_INFO, emsg, ap);
144
2022-02-16
op
va_end(ap);
145
2022-02-16
op
}
146
2022-02-16
op
147
2022-02-16
op
void
148
2022-02-16
op
log_debug(const char *emsg, ...)
149
2022-02-16
op
{
150
2022-02-16
op
va_list ap;
151
2022-02-16
op
152
2022-02-16
op
if (verbose) {
153
2022-02-16
op
va_start(ap, emsg);
154
2022-02-16
op
vlog(LOG_DEBUG, emsg, ap);
155
2022-02-16
op
va_end(ap);
156
2022-02-16
op
}
157
2022-02-16
op
}
158
2022-02-16
op
159
2022-02-16
op
static void
160
2022-02-16
op
vfatalc(int code, const char *emsg, va_list ap)
161
2022-02-16
op
{
162
2022-02-16
op
static char s[BUFSIZ];
163
2022-02-16
op
const char *sep;
164
2022-02-16
op
165
2022-02-16
op
if (emsg != NULL) {
166
2022-02-16
op
(void)vsnprintf(s, sizeof(s), emsg, ap);
167
2022-02-16
op
sep = ": ";
168
2022-02-16
op
} else {
169
2022-02-16
op
s[0] = '\0';
170
2022-02-16
op
sep = "";
171
2022-02-16
op
}
172
2022-02-16
op
if (code)
173
2022-02-16
op
logit(LOG_CRIT, "fatal in %s: %s%s%s",
174
2022-02-16
op
log_procname, s, sep, strerror(code));
175
2022-02-16
op
else
176
2022-02-16
op
logit(LOG_CRIT, "fatal in %s%s%s", log_procname, sep, s);
177
2022-02-16
op
}
178
2022-02-16
op
179
2022-02-16
op
void
180
2022-02-16
op
fatal(const char *emsg, ...)
181
2022-02-16
op
{
182
2022-02-16
op
va_list ap;
183
2022-02-16
op
184
2022-02-16
op
va_start(ap, emsg);
185
2022-02-16
op
vfatalc(errno, emsg, ap);
186
2022-02-16
op
va_end(ap);
187
2022-02-16
op
exit(1);
188
2022-02-16
op
}
189
2022-02-16
op
190
2022-02-16
op
void
191
2022-02-16
op
fatalx(const char *emsg, ...)
192
2022-02-16
op
{
193
2022-02-16
op
va_list ap;
194
2022-02-16
op
195
2022-02-16
op
va_start(ap, emsg);
196
2022-02-16
op
vfatalc(0, emsg, ap);
197
2022-02-16
op
va_end(ap);
198
2022-02-16
op
exit(1);
199
2022-02-16
op
}
Omar Polo