updating changelog
[mspang/inapt.git] / util.cc
1 #include <unistd.h>
2 #include <sys/wait.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <stdarg.h>
6 #include <fcntl.h>
7 #include <syslog.h>
8 #include <errno.h>
9 #include <grp.h>
10 #include <pwd.h>
11
12 #include "util.h"
13
14 int debug_level = 0;
15
16 static void errmsg(int prio, const char *prefix, const char *fmt, va_list args) {
17     fprintf(stderr, "%s: ", prefix);
18     vfprintf(stderr, fmt, args);
19     fprintf(stderr, "\n");
20 }
21
22 static void errmsgpe(int prio, const char *prefix, const char *fmt, va_list args) {
23     fprintf(stderr, "%s: ", prefix);
24     vfprintf(stderr, fmt, args);
25     fprintf(stderr, ": %s\n", strerror(errno));
26 }
27
28 NORETURN static void die(int prio, const char *prefix, const char *msg, va_list args) {
29     errmsg(prio, prefix, msg, args);
30     exit(1);
31 }
32
33 NORETURN static void diepe(int prio, const char *prefix, const char *msg, va_list args) {
34     errmsgpe(prio, prefix, msg, args);
35     exit(1);
36 }
37
38 NORETURN void fatal(const char *msg, ...) {
39     va_list args;
40     va_start(args, msg);
41     die(LOG_CRIT, "fatal", msg, args);
42     va_end(args);
43 }
44
45 void error(const char *msg, ...) {
46     va_list args;
47     va_start(args, msg);
48     errmsg(LOG_ERR, "error", msg, args);
49     va_end(args);
50 }
51
52 void warn(const char *msg, ...) {
53     va_list args;
54     va_start(args, msg);
55     errmsg(LOG_WARNING, "warning", msg, args);
56     va_end(args);
57 }
58
59 void notice(const char *msg, ...) {
60     va_list args;
61     va_start(args, msg);
62     errmsg(LOG_NOTICE, "notice", msg, args);
63     va_end(args);
64 }
65
66 void debug(const char *msg, ...) {
67     va_list args;
68     va_start(args, msg);
69     if (debug_level)
70         errmsg(LOG_DEBUG, "debug", msg, args);
71     va_end(args);
72 }
73
74 void debugn(int level, const char *msg, ...) {
75     va_list args;
76     va_start(args, msg);
77     if (debug_level >= level)
78         errmsg(LOG_DEBUG, "debug", msg, args);
79     va_end(args);
80 }
81
82 NORETURN void deny(const char *msg, ...) {
83     va_list args;
84     va_start(args, msg);
85     die(LOG_ERR, "denied", msg, args);
86     va_end(args);
87 }
88
89 NORETURN void badconf(const char *msg, ...) {
90     va_list args;
91     va_start(args, msg);
92     die(LOG_CRIT, "configuration error", msg, args);
93     va_end(args);
94 }
95
96 NORETURN void fatalpe(const char *msg, ...) {
97     va_list args;
98     va_start(args, msg);
99     diepe(LOG_CRIT, "fatal", msg, args);
100     va_end(args);
101 }
102
103 void errorpe(const char *msg, ...) {
104     va_list args;
105     va_start(args, msg);
106     errmsgpe(LOG_ERR, "error", msg, args);
107     va_end(args);
108 }
109
110 void warnpe(const char *msg, ...) {
111     va_list args;
112     va_start(args, msg);
113     errmsgpe(LOG_WARNING, "warning", msg, args);
114     va_end(args);
115 }