This diff replaces calls to err(3)/errx(3) with fatal()/fatalx() from log.c for code that runs in the deamon (we want errors logged to syslog, not stderr). It's pretty mechanical, with two things to note:
The call to default_config() has to be done after log_init() in smtpd.c, and log_init() is called early in smtpctl.c, since it uses files (iobuf.c) that uses the log api. It still logs to stderr though. Eric. Index: bounce.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/bounce.c,v retrieving revision 1.83 diff -u -p -r1.83 bounce.c --- bounce.c 31 Dec 2020 08:27:15 -0000 1.83 +++ bounce.c 26 May 2021 11:14:04 -0000 @@ -23,7 +23,6 @@ #include <sys/tree.h> #include <sys/socket.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -141,7 +140,7 @@ bounce_add(uint64_t evpid) } if (evp.type != D_BOUNCE) - errx(1, "bounce: evp:%016" PRIx64 " is not of type D_BOUNCE!", + fatalx("bounce: evp:%016" PRIx64 " is not of type D_BOUNCE!", evp.id); key.msgid = evpid_to_msgid(evpid); Index: ca.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/ca.c,v retrieving revision 1.38 diff -u -p -r1.38 ca.c --- ca.c 5 Mar 2021 12:37:32 -0000 1.38 +++ ca.c 26 May 2021 11:17:24 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <sys/tree.h> -#include <err.h> #include <imsg.h> #include <limits.h> #include <pwd.h> @@ -117,7 +116,7 @@ ca(void) mproc_disable(p_dispatcher); if (pledge("stdio", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); @@ -333,7 +332,7 @@ ca_imsg(struct mproc *p, struct imsg *im return; } - errx(1, "ca_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("ca_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } /* Index: compress_gzip.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/compress_gzip.c,v retrieving revision 1.11 diff -u -p -r1.11 compress_gzip.c --- compress_gzip.c 23 Jan 2021 16:11:11 -0000 1.11 +++ compress_gzip.c 26 May 2021 11:14:58 -0000 @@ -24,7 +24,6 @@ #include <sys/stat.h> #include <ctype.h> -#include <err.h> #include <fcntl.h> #include <imsg.h> #include <pwd.h> Index: control.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/control.c,v retrieving revision 1.126 diff -u -p -r1.126 control.c --- control.c 31 Dec 2020 08:27:15 -0000 1.126 +++ control.c 26 May 2021 11:15:39 -0000 @@ -25,7 +25,6 @@ #include <sys/socket.h> #include <sys/un.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> @@ -159,7 +158,7 @@ control_imsg(struct mproc *p, struct ims return; } - errx(1, "control_imsg: unexpected %s imsg", + fatalx("control_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } @@ -254,7 +253,7 @@ control(void) control_listen(); if (pledge("stdio unix recvfd sendfd", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); Index: dict.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/dict.c,v retrieving revision 1.6 diff -u -p -r1.6 dict.c --- dict.c 23 Dec 2018 16:06:24 -0000 1.6 +++ dict.c 26 May 2021 11:16:31 -0000 @@ -20,12 +20,12 @@ #include <sys/types.h> #include <sys/tree.h> -#include <err.h> #include <stdlib.h> #include <string.h> #include <limits.h> #include "dict.h" +#include "log.h" struct dictentry { SPLAY_ENTRY(dictentry) entry; @@ -72,7 +72,7 @@ dict_set(struct dict *d, const char *k, key.key = k; if ((entry = SPLAY_FIND(_dict, &d->dict, &key)) == NULL) { if ((entry = dict_alloc(k, data)) == NULL) - err(1, "dict_set: malloc"); + fatal("dict_set: malloc"); SPLAY_INSERT(_dict, &d->dict, entry); old = NULL; d->count += 1; @@ -90,9 +90,9 @@ dict_xset(struct dict *d, const char * k struct dictentry *entry; if ((entry = dict_alloc(k, data)) == NULL) - err(1, "dict_xset: malloc"); + fatal("dict_xset: malloc"); if (SPLAY_INSERT(_dict, &d->dict, entry)) - errx(1, "dict_xset(%p, %s)", d, k); + fatalx("dict_xset(%p, %s)", d, k); d->count += 1; } @@ -115,7 +115,7 @@ dict_xget(struct dict *d, const char *k) key.key = k; if ((entry = SPLAY_FIND(_dict, &d->dict, &key)) == NULL) - errx(1, "dict_xget(%p, %s)", d, k); + fatalx("dict_xget(%p, %s)", d, k); return (entry->data); } @@ -146,7 +146,7 @@ dict_xpop(struct dict *d, const char *k) key.key = k; if ((entry = SPLAY_FIND(_dict, &d->dict, &key)) == NULL) - errx(1, "dict_xpop(%p, %s)", d, k); + fatalx("dict_xpop(%p, %s)", d, k); data = entry->data; SPLAY_REMOVE(_dict, &d->dict, entry); @@ -252,7 +252,7 @@ dict_merge(struct dict *dst, struct dict entry = SPLAY_ROOT(&src->dict); SPLAY_REMOVE(_dict, &src->dict, entry); if (SPLAY_INSERT(_dict, &dst->dict, entry)) - errx(1, "dict_merge: duplicate"); + fatalx("dict_merge: duplicate"); } dst->count += src->count; src->count = 0; Index: dispatcher.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/dispatcher.c,v retrieving revision 1.3 diff -u -p -r1.3 dispatcher.c --- dispatcher.c 21 Apr 2021 07:54:10 -0000 1.3 +++ dispatcher.c 26 May 2021 11:17:09 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -134,7 +133,7 @@ dispatcher_imsg(struct mproc *p, struct break; } - errx(1, "session_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("session_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } static void @@ -194,7 +193,7 @@ dispatcher(void) config_peer(PROC_CA); if (pledge("stdio inet unix recvfd sendfd", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); Index: envelope.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/envelope.c,v retrieving revision 1.47 diff -u -p -r1.47 envelope.c --- envelope.c 25 Nov 2019 14:18:32 -0000 1.47 +++ envelope.c 26 May 2021 11:18:02 -0000 @@ -27,7 +27,6 @@ #include <arpa/inet.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> @@ -60,7 +59,7 @@ envelope_set_errormsg(struct envelope *e /* this should not happen */ if (ret < 0) - err(1, "vsnprintf"); + fatal("vsnprintf"); if ((size_t)ret >= sizeof(e->errorline)) (void)strlcpy(e->errorline + (sizeof(e->errorline) - 4), Index: ioev.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/ioev.c,v retrieving revision 1.46 diff -u -p -r1.46 ioev.c --- ioev.c 20 May 2021 07:33:32 -0000 1.46 +++ ioev.c 26 May 2021 11:18:55 -0000 @@ -19,7 +19,6 @@ #include <sys/queue.h> #include <sys/socket.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> @@ -34,6 +33,7 @@ #include "ioev.h" #include "iobuf.h" +#include "log.h" enum { IO_STATE_NONE, @@ -149,12 +149,12 @@ io_set_nonblocking(int fd) int flags; if ((flags = fcntl(fd, F_GETFL)) == -1) - err(1, "io_set_blocking:fcntl(F_GETFL)"); + fatal("io_set_blocking:fcntl(F_GETFL)"); flags |= O_NONBLOCK; if (fcntl(fd, F_SETFL, flags) == -1) - err(1, "io_set_blocking:fcntl(F_SETFL)"); + fatal("io_set_blocking:fcntl(F_SETFL)"); } void @@ -164,7 +164,7 @@ io_set_nolinger(int fd) memset(&l, 0, sizeof(l)); if (setsockopt(fd, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) == -1) - err(1, "io_set_linger:setsockopt"); + fatal("io_set_linger:setsockopt"); } /* @@ -186,7 +186,7 @@ io_frame_enter(const char *where, struct frame, where, io_evstr(ev), io_strio(io)); if (current) - errx(1, "io_frame_enter: interleaved frames"); + fatalx("io_frame_enter: interleaved frames"); current = io; @@ -199,7 +199,7 @@ io_frame_leave(struct io *io) io_debug("io_frame_leave(%" PRIu64 ")\n", frame); if (current && current != io) - errx(1, "io_frame_leave: io mismatch"); + fatalx("io_frame_leave: io mismatch"); /* io has been cleared */ if (current == NULL) @@ -289,7 +289,7 @@ io_hold(struct io *io) io_debug("io_enter(%p)\n", io); if (io->flags & IO_HELD) - errx(1, "io_hold: io is already held"); + fatalx("io_hold: io is already held"); io->flags &= ~IO_RESET; io->flags |= IO_HELD; @@ -299,7 +299,7 @@ void io_release(struct io *io) { if (!(io->flags & IO_HELD)) - errx(1, "io_release: io is not held"); + fatalx("io_release: io is not held"); io->flags &= ~IO_HELD; if (!(io->flags & IO_RESET)) @@ -364,7 +364,7 @@ io_set_read(struct io *io) mode = io->flags & IO_RW; if (!(mode == 0 || mode == IO_WRITE)) - errx(1, "io_set_read: full-duplex or reading"); + fatalx("io_set_read: full-duplex or reading"); io->flags &= ~IO_RW; io->flags |= IO_READ; @@ -380,7 +380,7 @@ io_set_write(struct io *io) mode = io->flags & IO_RW; if (!(mode == 0 || mode == IO_READ)) - errx(1, "io_set_write: full-duplex or writing"); + fatalx("io_set_write: full-duplex or writing"); io->flags &= ~IO_RW; io->flags |= IO_WRITE; @@ -784,7 +784,7 @@ io_dispatch_connect(int fd, short ev, vo sl = sizeof(e); r = getsockopt(fd, SOL_SOCKET, SO_ERROR, &e, &sl); if (r == -1) { - warn("io_dispatch_connect: getsockopt"); + log_warn("io_dispatch_connect: getsockopt"); e = errno; } if (e) { @@ -810,10 +810,10 @@ io_connect_tls(struct io *io, struct tls mode = io->flags & IO_RW; if (mode != IO_WRITE) - errx(1, "io_connect_tls: expect IO_WRITE mode"); + fatalx("io_connect_tls: expect IO_WRITE mode"); if (io->tls) - errx(1, "io_connect_tls: TLS already started"); + fatalx("io_connect_tls: TLS already started"); if (tls_connect_socket(tls, io->sock, hostname) == -1) { io->error = tls_error(tls); @@ -834,10 +834,10 @@ io_accept_tls(struct io *io, struct tls mode = io->flags & IO_RW; if (mode != IO_READ) - errx(1, "io_accept_tls: expect IO_READ mode"); + fatalx("io_accept_tls: expect IO_READ mode"); if (io->tls) - errx(1, "io_accept_tls: TLS already started"); + fatalx("io_accept_tls: TLS already started"); if (tls_accept_socket(tls, &io->tls, io->sock) == -1) { io->error = tls_error(tls); @@ -967,7 +967,7 @@ void io_reload_tls(struct io *io) { if (io->state != IO_STATE_UP) - errx(1, "io_reload_tls: bad state"); + fatalx("io_reload_tls: bad state"); if (IO_READING(io) && !(io->flags & IO_PAUSE_IN)) { io_reset(io, EV_READ, io_dispatch_read_tls); Index: limit.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/limit.c,v retrieving revision 1.5 diff -u -p -r1.5 limit.c --- limit.c 15 Jun 2016 19:59:03 -0000 1.5 +++ limit.c 26 May 2021 11:19:19 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <event.h> #include <fcntl.h> #include <imsg.h> Index: lka.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/lka.c,v retrieving revision 1.245 diff -u -p -r1.245 lka.c --- lka.c 21 Apr 2021 07:54:10 -0000 1.245 +++ lka.c 26 May 2021 11:19:54 -0000 @@ -28,7 +28,6 @@ #include <netinet/in.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -313,7 +312,7 @@ lka_imsg(struct mproc *p, struct imsg *i /* revoke proc & exec */ if (pledge("stdio rpath inet dns getpw recvfd sendfd", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); /* setup proc registering task */ evtimer_set(&ev_proc_ready, proc_timeout, &ev_proc_ready); @@ -637,7 +636,7 @@ lka_imsg(struct mproc *p, struct imsg *i } - errx(1, "lka_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("lka_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } static void @@ -705,7 +704,7 @@ lka(void) /* proc & exec will be revoked before serving requests */ if (pledge("stdio rpath inet dns getpw recvfd sendfd proc exec", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); Index: mda.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/mda.c,v retrieving revision 1.141 diff -u -p -r1.141 mda.c --- mda.c 3 Oct 2019 08:50:08 -0000 1.141 +++ mda.c 26 May 2021 11:23:41 -0000 @@ -25,7 +25,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -380,7 +379,7 @@ mda_imsg(struct mproc *p, struct imsg *i return; } - errx(1, "mda_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("mda_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } void Index: mproc.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/mproc.c,v retrieving revision 1.37 diff -u -p -r1.37 mproc.c --- mproc.c 20 Dec 2020 14:06:12 -0000 1.37 +++ mproc.c 26 May 2021 11:27:08 -0000 @@ -26,7 +26,6 @@ #include <arpa/inet.h> #include <arpa/nameser.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -64,7 +63,7 @@ mproc_fork(struct mproc *p, const char * exit(1); execv(path, argv); - err(1, "execv: %s", path); + fatal("execv: %s", path); } /* parent process */ Index: mta.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/mta.c,v retrieving revision 1.238 diff -u -p -r1.238 mta.c --- mta.c 9 Apr 2021 16:43:43 -0000 1.238 +++ mta.c 26 May 2021 11:28:00 -0000 @@ -25,7 +25,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -466,7 +465,7 @@ mta_imsg(struct mproc *p, struct imsg *i return; } - errx(1, "mta_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("mta_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } void @@ -506,21 +505,21 @@ mta_setup_dispatcher(struct dispatcher * if (remote->tls_ciphers) ciphers = remote->tls_ciphers; if (ciphers && tls_config_set_ciphers(config, ciphers) == -1) - err(1, "%s", tls_config_error(config)); + fatal("%s", tls_config_error(config)); if (remote->tls_protocols) { if (tls_config_parse_protocols(&protos, remote->tls_protocols) == -1) - err(1, "failed to parse protocols \"%s\"", + fatal("failed to parse protocols \"%s\"", remote->tls_protocols); if (tls_config_set_protocols(config, protos) == -1) - err(1, "%s", tls_config_error(config)); + fatal("%s", tls_config_error(config)); } if (remote->pki) { pki = dict_get(env->sc_pki_dict, remote->pki); if (pki == NULL) - err(1, "client pki \"%s\" not found ", remote->pki); + fatal("client pki \"%s\" not found ", remote->pki); tls_config_set_dheparams(config, dheparams[pki->pki_dhe]); tls_config_use_fake_private_key(config); @@ -1549,7 +1548,7 @@ mta_flush(struct mta_relay *relay, int f mta_relay_to_text(relay), fail, error); if (fail != IMSG_MTA_DELIVERY_TEMPFAIL && fail != IMSG_MTA_DELIVERY_PERMFAIL) - errx(1, "unexpected delivery status %d", fail); + fatalx("unexpected delivery status %d", fail); n = 0; while ((task = TAILQ_FIRST(&relay->tasks))) { Index: mta_session.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/mta_session.c,v retrieving revision 1.141 diff -u -p -r1.141 mta_session.c --- mta_session.c 20 May 2021 07:33:32 -0000 1.141 +++ mta_session.c 26 May 2021 11:28:34 -0000 @@ -28,7 +28,6 @@ #include <arpa/inet.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -358,7 +357,7 @@ mta_session_imsg(struct mproc *p, struct return; default: - errx(1, "mta_session_imsg: unexpected %s imsg", + fatalx("mta_session_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } } Index: parse.y =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/parse.y,v retrieving revision 1.287 diff -u -p -r1.287 parse.y --- parse.y 9 Apr 2021 16:43:43 -0000 1.287 +++ parse.y 26 May 2021 14:12:04 -0000 @@ -34,7 +34,6 @@ #include <arpa/inet.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <ifaddrs.h> @@ -1894,7 +1893,7 @@ STRING { filter_config->chain_size += 1; filter_config->chain = reallocarray(filter_config->chain, filter_config->chain_size, sizeof(char *)); if (filter_config->chain == NULL) - err(1, NULL); + fatal("reallocarray"); filter_config->chain[filter_config->chain_size - 1] = $1; } ; @@ -2846,7 +2845,7 @@ lungetc(int c) if (file->ungetpos >= file->ungetsize) { void *p = reallocarray(file->ungetbuf, file->ungetsize, 2); if (p == NULL) - err(1, "%s", __func__); + fatal("%s", __func__); file->ungetbuf = p; file->ungetsize *= 2; } @@ -2956,7 +2955,7 @@ top: } yylval.v.string = strdup(buf); if (yylval.v.string == NULL) - err(1, "%s", __func__); + fatal("%s", __func__); return (STRING); } @@ -3021,7 +3020,7 @@ nodigits: *p = '\0'; if ((token = lookup(buf)) == STRING) if ((yylval.v.string = strdup(buf)) == NULL) - err(1, "%s", __func__); + fatal("%s", __func__); return (token); } if (c == '\n') { @@ -3215,7 +3214,7 @@ cmdline_symset(char *s) return (-1); sym = strndup(s, val - s); if (sym == NULL) - errx(1, "%s: strndup", __func__); + fatalx("%s: strndup", __func__); ret = symset(sym, val + 1, 1); free(sym); @@ -3254,15 +3253,15 @@ create_if_listener(struct listen_opts *l uint16_t flags; if (lo->port != 0 && lo->ssl == F_SSL) - errx(1, "invalid listen option: tls/smtps on same port"); + fatalx("invalid listen option: tls/smtps on same port"); if (lo->auth != 0 && !lo->ssl) - errx(1, "invalid listen option: auth requires tls/smtps"); + fatalx("invalid listen option: auth requires tls/smtps"); if (lo->pkicount && !lo->ssl) - errx(1, "invalid listen option: pki requires tls/smtps"); + fatalx("invalid listen option: pki requires tls/smtps"); if (lo->pkicount == 0 && lo->ssl) - errx(1, "invalid listen option: pki required for tls/smtps"); + fatalx("invalid listen option: pki required for tls/smtps"); flags = lo->flags; @@ -3293,7 +3292,7 @@ create_if_listener(struct listen_opts *l if (host_dns(lo)) return; - errx(1, "invalid virtual ip or interface: %s", lo->ifx); + fatalx("invalid virtual ip or interface: %s", lo->ifx); } static void @@ -3609,23 +3608,23 @@ is_if_in_group(const char *ifname, const int ret = 0; if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1) - err(1, "socket"); + fatal("socket"); memset(&ifgr, 0, sizeof(ifgr)); if (strlcpy(ifgr.ifgr_name, ifname, IFNAMSIZ) >= IFNAMSIZ) - errx(1, "interface name too large"); + fatalx("interface name too large"); if (ioctl(s, SIOCGIFGROUP, (caddr_t)&ifgr) == -1) { if (errno == EINVAL || errno == ENOTTY) goto end; - err(1, "SIOCGIFGROUP"); + fatal("SIOCGIFGROUP"); } len = ifgr.ifgr_len; ifgr.ifgr_groups = xcalloc(len/sizeof(struct ifg_req), sizeof(struct ifg_req)); if (ioctl(s, SIOCGIFGROUP, (caddr_t)&ifgr) == -1) - err(1, "SIOCGIFGROUP"); + fatal("SIOCGIFGROUP"); ifg = ifgr.ifgr_groups; for (; ifg && len >= sizeof(struct ifg_req); ifg++) { Index: proxy.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/proxy.c,v retrieving revision 1.1 diff -u -p -r1.1 proxy.c --- proxy.c 10 Aug 2019 16:07:01 -0000 1.1 +++ proxy.c 26 May 2021 11:30:19 -0000 @@ -19,7 +19,6 @@ #include <sys/tree.h> #include <sys/un.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> Index: queue.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/queue.c,v retrieving revision 1.191 diff -u -p -r1.191 queue.c --- queue.c 31 Dec 2020 08:27:15 -0000 1.191 +++ queue.c 26 May 2021 11:32:27 -0000 @@ -24,7 +24,6 @@ #include <sys/socket.h> #include <sys/stat.h> -#include <err.h> #include <event.h> #include <imsg.h> #include <inttypes.h> @@ -525,7 +524,7 @@ queue_imsg(struct mproc *p, struct imsg return; } - errx(1, "queue_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("queue_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } static void @@ -674,7 +673,7 @@ queue(void) evtimer_add(&ev_qload, &tv); if (pledge("stdio rpath wpath cpath flock recvfd sendfd", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); Index: queue_backend.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/queue_backend.c,v retrieving revision 1.66 diff -u -p -r1.66 queue_backend.c --- queue_backend.c 22 Apr 2020 11:35:34 -0000 1.66 +++ queue_backend.c 26 May 2021 11:33:00 -0000 @@ -23,7 +23,6 @@ #include <sys/stat.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> @@ -119,11 +118,11 @@ queue_init(const char *name, int server) pwq = getpwnam(SMTPD_QUEUE_USER); if (pwq == NULL) - errx(1, "unknown user %s", SMTPD_QUEUE_USER); + fatalx("unknown user %s", SMTPD_QUEUE_USER); gr = getgrnam(SMTPD_QUEUE_GROUP); if (gr == NULL) - errx(1, "unknown group %s", SMTPD_QUEUE_GROUP); + fatalx("unknown group %s", SMTPD_QUEUE_GROUP); tree_init(&evpcache_tree); TAILQ_INIT(&evpcache_list); @@ -139,16 +138,16 @@ queue_init(const char *name, int server) if (server) { if (ckdir(PATH_SPOOL, 0711, 0, 0, 1) == 0) - errx(1, "error in spool directory setup"); + fatalx("error in spool directory setup"); if (ckdir(PATH_SPOOL PATH_OFFLINE, 0770, 0, gr->gr_gid, 1) == 0) - errx(1, "error in offline directory setup"); + fatalx("error in offline directory setup"); if (ckdir(PATH_SPOOL PATH_PURGE, 0700, pwq->pw_uid, 0, 1) == 0) - errx(1, "error in purge directory setup"); + fatalx("error in purge directory setup"); mvpurge(PATH_SPOOL PATH_TEMPORARY, PATH_SPOOL PATH_PURGE); if (ckdir(PATH_SPOOL PATH_TEMPORARY, 0700, pwq->pw_uid, 0, 1) == 0) - errx(1, "error in purge directory setup"); + fatalx("error in purge directory setup"); } r = backend->init(pwq, server, name); Index: queue_fs.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/queue_fs.c,v retrieving revision 1.20 diff -u -p -r1.20 queue_fs.c --- queue_fs.c 25 Feb 2020 17:03:13 -0000 1.20 +++ queue_fs.c 26 May 2021 11:33:37 -0000 @@ -25,7 +25,6 @@ #include <ctype.h> #include <dirent.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> @@ -565,7 +564,7 @@ fsqueue_qwalk_new(void) FTS_PHYSICAL | FTS_NOCHDIR, NULL); if (q->fts == NULL) - err(1, "fsqueue_qwalk_new: fts_open: %s", path); + fatal("fsqueue_qwalk_new: fts_open: %s", path); return (q); } @@ -651,13 +650,13 @@ queue_fs_init(struct passwd *pw, int ser for (n = 0; n < nitems(paths); n++) { (void)strlcpy(path, PATH_SPOOL, sizeof(path)); if (strlcat(path, paths[n], sizeof(path)) >= sizeof(path)) - errx(1, "path too long %s%s", PATH_SPOOL, paths[n]); + fatalx("path too long %s%s", PATH_SPOOL, paths[n]); if (ckdir(path, 0700, pw->pw_uid, 0, server) == 0) ret = 0; } if (clock_gettime(CLOCK_REALTIME, &startup)) - err(1, "clock_gettime"); + fatal("clock_gettime"); tree_init(&evpcount); Index: queue_null.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/queue_null.c,v retrieving revision 1.8 diff -u -p -r1.8 queue_null.c --- queue_null.c 30 Dec 2018 23:09:58 -0000 1.8 +++ queue_null.c 26 May 2021 11:33:50 -0000 @@ -23,7 +23,6 @@ #include <sys/stat.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> Index: queue_ram.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/queue_ram.c,v retrieving revision 1.9 diff -u -p -r1.9 queue_ram.c --- queue_ram.c 30 Dec 2018 23:09:58 -0000 1.9 +++ queue_ram.c 26 May 2021 11:34:09 -0000 @@ -23,7 +23,6 @@ #include <sys/stat.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> Index: scheduler.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/scheduler.c,v retrieving revision 1.60 diff -u -p -r1.60 scheduler.c --- scheduler.c 30 Dec 2018 23:09:58 -0000 1.60 +++ scheduler.c 26 May 2021 11:34:48 -0000 @@ -27,7 +27,6 @@ #include <ctype.h> #include <dirent.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -400,7 +399,7 @@ scheduler_imsg(struct mproc *p, struct i return; } - errx(1, "scheduler_imsg: unexpected %s imsg", + fatalx("scheduler_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } @@ -429,7 +428,7 @@ scheduler(void) backend = scheduler_backend_lookup(backend_scheduler); if (backend == NULL) - errx(1, "cannot find scheduler backend \"%s\"", + fatalx("cannot find scheduler backend \"%s\"", backend_scheduler); purge_config(PURGE_EVERYTHING & ~PURGE_DISPATCHERS); @@ -471,7 +470,7 @@ scheduler(void) scheduler_reset_events(); if (pledge("stdio", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); Index: scheduler_backend.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/scheduler_backend.c,v retrieving revision 1.16 diff -u -p -r1.16 scheduler_backend.c --- scheduler_backend.c 24 May 2018 11:38:24 -0000 1.16 +++ scheduler_backend.c 26 May 2021 11:35:02 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <event.h> #include <fcntl.h> #include <imsg.h> Index: scheduler_null.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/scheduler_null.c,v retrieving revision 1.9 diff -u -p -r1.9 scheduler_null.c --- scheduler_null.c 20 Jan 2015 17:37:54 -0000 1.9 +++ scheduler_null.c 26 May 2021 11:35:14 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <event.h> #include <fcntl.h> #include <imsg.h> Index: scheduler_ramqueue.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/scheduler_ramqueue.c,v retrieving revision 1.45 diff -u -p -r1.45 scheduler_ramqueue.c --- scheduler_ramqueue.c 31 May 2018 21:06:12 -0000 1.45 +++ scheduler_ramqueue.c 26 May 2021 11:36:46 -0000 @@ -23,7 +23,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <event.h> #include <fcntl.h> #include <imsg.h> @@ -310,7 +309,7 @@ scheduler_ram_update(struct scheduler_in /* it *must* be in-flight */ if (evp->state != RQ_EVPSTATE_INFLIGHT) - errx(1, "evp:%016" PRIx64 " not in-flight", si->evpid); + fatalx("evp:%016" PRIx64 " not in-flight", si->evpid); TAILQ_REMOVE(&ramqueue.q_inflight, evp, entry); @@ -352,7 +351,7 @@ scheduler_ram_delete(uint64_t evpid) /* it *must* be in-flight */ if (evp->state != RQ_EVPSTATE_INFLIGHT) - errx(1, "evp:%016" PRIx64 " not in-flight", evpid); + fatalx("evp:%016" PRIx64 " not in-flight", evpid); TAILQ_REMOVE(&ramqueue.q_inflight, evp, entry); @@ -379,7 +378,7 @@ scheduler_ram_hold(uint64_t evpid, uint6 /* it *must* be in-flight */ if (evp->state != RQ_EVPSTATE_INFLIGHT) - errx(1, "evp:%016" PRIx64 " not in-flight", evpid); + fatalx("evp:%016" PRIx64 " not in-flight", evpid); TAILQ_REMOVE(&ramqueue.q_inflight, evp, entry); @@ -898,7 +897,7 @@ rq_queue_schedule(struct rq_queue *rq) break; if (evp->state != RQ_EVPSTATE_PENDING) - errx(1, "evp:%016" PRIx64 " flags=0x%x", evp->evpid, + fatalx("evp:%016" PRIx64 " flags=0x%x", evp->evpid, evp->flags); if (evp->expire <= currtime) { @@ -935,7 +934,7 @@ rq_envelope_list(struct rq_queue *rq, st return &rq->q_mda; if (evp->type == D_BOUNCE) return &rq->q_bounce; - errx(1, "%016" PRIx64 " bad evp type %d", evp->evpid, evp->type); + fatalx("%016" PRIx64 " bad evp type %d", evp->evpid, evp->type); case RQ_EVPSTATE_INFLIGHT: return &rq->q_inflight; @@ -944,7 +943,7 @@ rq_envelope_list(struct rq_queue *rq, st return (NULL); } - errx(1, "%016" PRIx64 " bad state %d", evp->evpid, evp->state); + fatalx("%016" PRIx64 " bad state %d", evp->evpid, evp->state); return (NULL); } @@ -1146,7 +1145,7 @@ rq_envelope_to_text(struct rq_envelope * (void)strlcat(buf, t, sizeof buf); break; default: - errx(1, "%016" PRIx64 " bad state %d", e->evpid, e->state); + fatalx("%016" PRIx64 " bad state %d", e->evpid, e->state); } if (e->flags & RQ_ENVELOPE_REMOVED) Index: smtp.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/smtp.c,v retrieving revision 1.169 diff -u -p -r1.169 smtp.c --- smtp.c 9 Apr 2021 16:43:43 -0000 1.169 +++ smtp.c 26 May 2021 11:49:39 -0000 @@ -23,7 +23,6 @@ #include <sys/tree.h> #include <sys/socket.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> @@ -117,7 +116,7 @@ smtp_imsg(struct mproc *p, struct imsg * return; } - errx(1, "smtp_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); + fatalx("smtp_imsg: unexpected %s imsg", imsg_to_str(imsg->hdr.type)); } void @@ -182,14 +181,14 @@ smtp_setup_listener_tls(struct listener if (l->tls_ciphers) ciphers = l->tls_ciphers; if (ciphers && tls_config_set_ciphers(config, ciphers) == -1) - err(1, "%s", tls_config_error(config)); + fatal("%s", tls_config_error(config)); if (l->tls_protocols) { if (tls_config_parse_protocols(&protos, l->tls_protocols) == -1) - err(1, "failed to parse protocols \"%s\"", + fatal("failed to parse protocols \"%s\"", l->tls_protocols); if (tls_config_set_protocols(config, protos) == -1) - err(1, "%s", tls_config_error(config)); + fatal("%s", tls_config_error(config)); } pki = l->pki[0]; Index: smtpctl.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/smtpctl.c,v retrieving revision 1.167 diff -u -p -r1.167 smtpctl.c --- smtpctl.c 24 Feb 2020 16:16:07 -0000 1.167 +++ smtpctl.c 26 May 2021 13:51:39 -0000 @@ -761,7 +761,6 @@ do_show_queue(int argc, struct parameter now = time(NULL); if (!srv_connect()) { - log_init(1, LOG_MAIL); queue_init("fs", 0); if (chroot(PATH_SPOOL) == -1 || chdir("/") == -1) err(1, "%s", PATH_SPOOL); @@ -1043,6 +1042,8 @@ main(int argc, char **argv) gid_t gid; int privileged; char *argv_mailq[] = { "show", "queue", NULL }; + + log_init(1, LOG_MAIL); sendmail_compat(argc, argv); privileged = geteuid() == 0; Index: smtpd.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/smtpd.c,v retrieving revision 1.338 diff -u -p -r1.338 smtpd.c --- smtpd.c 21 Apr 2021 07:54:10 -0000 1.338 +++ smtpd.c 26 May 2021 13:13:56 -0000 @@ -29,7 +29,6 @@ #include <bsd_auth.h> #include <dirent.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> @@ -270,7 +269,7 @@ parent_imsg(struct mproc *p, struct imsg return; } - errx(1, "parent_imsg: unexpected %s imsg from %s", + fatalx("parent_imsg: unexpected %s imsg from %s", imsg_to_str(imsg->hdr.type), proc_title(p->proc)); } @@ -485,11 +484,6 @@ main(int argc, char *argv[]) char *rexec = NULL; struct smtpd *conf; - if ((conf = config_default()) == NULL) - err(1, NULL); - - env = conf; - flags = 0; opts = 0; debug = 0; @@ -497,6 +491,10 @@ main(int argc, char *argv[]) log_init(1, LOG_MAIL); + if ((conf = config_default()) == NULL) + fatal("config_default"); + env = conf; + TAILQ_INIT(&offline_q); while ((c = getopt(argc, argv, "B:dD:hnP:f:FT:vx:")) != -1) { @@ -617,7 +615,7 @@ main(int argc, char *argv[]) if (strlcpy(env->sc_conffile, conffile, PATH_MAX) >= PATH_MAX) - errx(1, "config file exceeds PATH_MAX"); + fatalx("config file exceeds PATH_MAX"); if (env->sc_opts & SMTPD_OPT_NOACTION) { if (env->sc_queue_key && @@ -636,7 +634,7 @@ main(int argc, char *argv[]) /* check for root privileges */ if (geteuid()) - errx(1, "need root privileges"); + fatalx("need root privileges"); log_init(foreground_log, LOG_MAIL); log_trace_verbose(tracing); @@ -648,7 +646,7 @@ main(int argc, char *argv[]) log_debug("debug: using \"%s\" stat backend", backend_stat); if (env->sc_hostname[0] == '\0') - errx(1, "machine does not have a hostname set"); + fatalx("machine does not have a hostname set"); env->sc_uptime = time(NULL); if (rexec == NULL) { @@ -660,12 +658,12 @@ main(int argc, char *argv[]) password = getpass("queue key: "); if (password == NULL) - err(1, "getpass"); + fatal("getpass"); env->sc_queue_key = strdup(password); explicit_bzero(password, strlen(password)); if (env->sc_queue_key == NULL) - err(1, "strdup"); + fatal("strdup"); } else { char *buf = NULL; @@ -674,7 +672,7 @@ main(int argc, char *argv[]) if (strcasecmp(env->sc_queue_key, "stdin") == 0) { if ((len = getline(&buf, &sz, stdin)) == -1) - err(1, "getline"); + fatal("getline"); if (buf[len - 1] == '\n') buf[len - 1] = '\0'; env->sc_queue_key = buf; @@ -686,7 +684,7 @@ main(int argc, char *argv[]) if (!foreground) if (daemon(0, 0) == -1) - err(1, "failed to daemonize"); + fatal("failed to daemonize"); /* setup all processes */ @@ -756,7 +754,7 @@ main(int argc, char *argv[]) env->sc_stat = stat_backend_lookup(backend_stat); if (env->sc_stat == NULL) - errx(1, "could not find stat backend \"%s\"", backend_stat); + fatalx("could not find stat backend \"%s\"", backend_stat); return control(); } @@ -783,7 +781,7 @@ main(int argc, char *argv[]) env->sc_comp = compress_backend_lookup("gzip"); if (!queue_init(backend_queue, 1)) - errx(1, "could not initialize queue backend"); + fatalx("could not initialize queue backend"); return queue(); } @@ -1088,7 +1086,7 @@ smtpd(void) { if (pledge("stdio rpath wpath cpath fattr tmppath " "getpw sendfd proc exec id inet chown unix", NULL) == -1) - err(1, "pledge"); + fatal("pledge"); event_dispatch(); fatalx("exited event loop"); @@ -1189,7 +1187,7 @@ fork_proc_backend(const char *key, const procname = name; execl(path, procname, arg, (char *)NULL); - err(1, "execl: %s", path); + fatal("execl: %s", path); } /* parent process */ @@ -1310,24 +1308,24 @@ fork_filter_process(const char *name, co if (user == NULL) user = SMTPD_USER; if ((pw = getpwnam(user)) == NULL) - err(1, "getpwnam"); + fatal("getpwnam"); if (group) { if ((gr = getgrnam(group)) == NULL) - err(1, "getgrnam"); + fatal("getgrnam"); } else { if ((gr = getgrgid(pw->pw_gid)) == NULL) - err(1, "getgrgid"); + fatal("getgrgid"); } if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, sp) == -1) - err(1, "socketpair"); + fatal("socketpair"); if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, errfd) == -1) - err(1, "socketpair"); + fatal("socketpair"); if ((pid = fork()) == -1) - err(1, "fork"); + fatal("fork"); /* parent passes the child fd over to lka */ if (pid > 0) { @@ -1351,24 +1349,24 @@ fork_filter_process(const char *name, co if (chroot_path) { if (chroot(chroot_path) != 0 || chdir("/") != 0) - err(1, "chroot: %s", chroot_path); + fatal("chroot: %s", chroot_path); } if (setgroups(1, &gr->gr_gid) || setresgid(gr->gr_gid, gr->gr_gid, gr->gr_gid) || setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid)) - err(1, "fork_filter_process: cannot drop privileges"); + fatal("fork_filter_process: cannot drop privileges"); if (closefrom(STDERR_FILENO + 1) == -1) - err(1, "closefrom"); + fatal("closefrom"); if (setsid() == -1) - err(1, "setsid"); + fatal("setsid"); if (signal(SIGPIPE, SIG_DFL) == SIG_ERR || signal(SIGINT, SIG_DFL) == SIG_ERR || signal(SIGTERM, SIG_DFL) == SIG_ERR || signal(SIGCHLD, SIG_DFL) == SIG_ERR || signal(SIGHUP, SIG_DFL) == SIG_ERR) - err(1, "signal"); + fatal("signal"); if (command[0] == '/') execr = snprintf(exec, sizeof(exec), "exec %s", command); @@ -1376,7 +1374,7 @@ fork_filter_process(const char *name, co execr = snprintf(exec, sizeof(exec), "exec %s/%s", PATH_LIBEXEC, command); if (execr >= (int) sizeof(exec)) - errx(1, "%s: exec path too long", name); + fatalx("%s: exec path too long", name); /* * Wait for lka to acknowledge that it received the fd. @@ -1387,9 +1385,9 @@ fork_filter_process(const char *name, co * never going to be read from we can shutdown(2) the write-end in lka. */ if (read(STDERR_FILENO, &buf, 1) != 0) - errx(1, "lka didn't properly close write end of error socket"); + fatalx("lka didn't properly close write end of error socket"); if (system(exec) == -1) - err(1, NULL); + fatal("system"); /* there's no successful exit from a processor */ _exit(1); @@ -1521,25 +1519,25 @@ forkmda(struct mproc *p, uint64_t id, st mda_mbox_init(deliver); if (chdir(pw_dir) == -1 && chdir("/") == -1) - err(1, "chdir"); + fatal("chdir"); if (setgroups(1, &pw_gid) || setresgid(pw_gid, pw_gid, pw_gid) || setresuid(pw_uid, pw_uid, pw_uid)) - err(1, "forkmda: cannot drop privileges"); + fatal("forkmda: cannot drop privileges"); if (dup2(pipefd[0], STDIN_FILENO) == -1 || dup2(allout, STDOUT_FILENO) == -1 || dup2(allout, STDERR_FILENO) == -1) - err(1, "forkmda: dup2"); + fatal("forkmda: dup2"); if (closefrom(STDERR_FILENO + 1) == -1) - err(1, "closefrom"); + fatal("closefrom"); if (setsid() == -1) - err(1, "setsid"); + fatal("setsid"); if (signal(SIGPIPE, SIG_DFL) == SIG_ERR || signal(SIGINT, SIG_DFL) == SIG_ERR || signal(SIGTERM, SIG_DFL) == SIG_ERR || signal(SIGCHLD, SIG_DFL) == SIG_ERR || signal(SIGHUP, SIG_DFL) == SIG_ERR) - err(1, "signal"); + fatal("signal"); /* avoid hangs by setting 5m timeout */ alarm(300); Index: srs.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/srs.c,v retrieving revision 1.3 diff -u -p -r1.3 srs.c --- srs.c 29 Sep 2019 10:03:49 -0000 1.3 +++ srs.c 26 May 2021 11:48:03 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <imsg.h> Index: table_db.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/table_db.c,v retrieving revision 1.22 diff -u -p -r1.22 table_db.c --- table_db.c 23 Jan 2021 16:11:11 -0000 1.22 +++ table_db.c 26 May 2021 11:48:32 -0000 @@ -27,7 +27,6 @@ #include <db.h> #include <ctype.h> -#include <err.h> #include <event.h> #include <fcntl.h> #include <imsg.h> @@ -261,7 +260,7 @@ table_db_get_entry(void *hdl, const char /* workaround the stupidity of the DB interface */ if (strlcpy(pkey, key, sizeof pkey) >= sizeof pkey) - errx(1, "table_db_get_entry: key too long"); + fatalx("table_db_get_entry: key too long"); dbk.data = pkey; dbk.size = strlen(pkey) + 1; Index: table_getpwnam.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/table_getpwnam.c,v retrieving revision 1.12 diff -u -p -r1.12 table_getpwnam.c --- table_getpwnam.c 27 Dec 2018 14:23:41 -0000 1.12 +++ table_getpwnam.c 26 May 2021 11:48:45 -0000 @@ -22,7 +22,6 @@ #include <sys/socket.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> Index: to.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/to.c,v retrieving revision 1.46 diff -u -p -r1.46 to.c --- to.c 5 Mar 2021 12:37:32 -0000 1.46 +++ to.c 26 May 2021 11:48:58 -0000 @@ -29,7 +29,6 @@ #include <arpa/inet.h> #include <ctype.h> -#include <err.h> #include <errno.h> #include <event.h> #include <fcntl.h> Index: tree.c =================================================================== RCS file: /cvs/src/usr.sbin/smtpd/tree.c,v retrieving revision 1.6 diff -u -p -r1.6 tree.c --- tree.c 23 Dec 2018 16:06:24 -0000 1.6 +++ tree.c 26 May 2021 11:11:38 -0000 @@ -19,12 +19,12 @@ #include <sys/types.h> #include <sys/tree.h> -#include <err.h> #include <inttypes.h> #include <stdlib.h> #include <limits.h> #include "tree.h" +#include "log.h" struct treeentry { SPLAY_ENTRY(treeentry) entry; @@ -54,7 +54,7 @@ tree_set(struct tree *t, uint64_t id, vo key.id = id; if ((entry = SPLAY_FIND(_tree, &t->tree, &key)) == NULL) { if ((entry = malloc(sizeof *entry)) == NULL) - err(1, "tree_set: malloc"); + fatal("tree_set: malloc"); entry->id = id; SPLAY_INSERT(_tree, &t->tree, entry); old = NULL; @@ -73,11 +73,11 @@ tree_xset(struct tree *t, uint64_t id, v struct treeentry *entry; if ((entry = malloc(sizeof *entry)) == NULL) - err(1, "tree_xset: malloc"); + fatal("tree_xset: malloc"); entry->id = id; entry->data = data; if (SPLAY_INSERT(_tree, &t->tree, entry)) - errx(1, "tree_xset(%p, 0x%016"PRIx64 ")", t, id); + fatalx("tree_xset(%p, 0x%016"PRIx64 ")", t, id); t->count += 1; } @@ -100,7 +100,7 @@ tree_xget(struct tree *t, uint64_t id) key.id = id; if ((entry = SPLAY_FIND(_tree, &t->tree, &key)) == NULL) - errx(1, "tree_get(%p, 0x%016"PRIx64 ")", t, id); + fatalx("tree_get(%p, 0x%016"PRIx64 ")", t, id); return (entry->data); } @@ -131,7 +131,7 @@ tree_xpop(struct tree *t, uint64_t id) key.id = id; if ((entry = SPLAY_FIND(_tree, &t->tree, &key)) == NULL) - errx(1, "tree_xpop(%p, 0x%016" PRIx64 ")", t, id); + fatalx("tree_xpop(%p, 0x%016" PRIx64 ")", t, id); data = entry->data; SPLAY_REMOVE(_tree, &t->tree, entry); @@ -238,7 +238,7 @@ tree_merge(struct tree *dst, struct tree entry = SPLAY_ROOT(&src->tree); SPLAY_REMOVE(_tree, &src->tree, entry); if (SPLAY_INSERT(_tree, &dst->tree, entry)) - errx(1, "tree_merge: duplicate"); + fatalx("tree_merge: duplicate"); } dst->count += src->count; src->count = 0;