Module Name: src Committed By: christos Date: Fri Aug 2 17:11:56 UTC 2024
Modified Files: src/external/bsd/blocklist/bin: blocklistd.c support.c support.h src/external/bsd/blocklist/include: bl.h blocklist.h src/external/bsd/blocklist/lib: bl.c blocklist.c libblocklist.3 shlib_version Log Message: Add blocklist_open2() that can pass a custom logger or NULL for no logging. Switch internally to use syslog_r. Add compatibility for systems that don't have syslog_r. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/external/bsd/blocklist/bin/blocklistd.c cvs rdiff -u -r1.1.1.1 -r1.2 src/external/bsd/blocklist/bin/support.c \ src/external/bsd/blocklist/bin/support.h cvs rdiff -u -r1.1.1.1 -r1.2 src/external/bsd/blocklist/include/bl.h cvs rdiff -u -r1.2 -r1.3 src/external/bsd/blocklist/include/blocklist.h cvs rdiff -u -r1.2 -r1.3 src/external/bsd/blocklist/lib/bl.c \ src/external/bsd/blocklist/lib/blocklist.c cvs rdiff -u -r1.3 -r1.4 src/external/bsd/blocklist/lib/libblocklist.3 cvs rdiff -u -r1.1.1.1 -r1.2 src/external/bsd/blocklist/lib/shlib_version Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/blocklist/bin/blocklistd.c diff -u src/external/bsd/blocklist/bin/blocklistd.c:1.4 src/external/bsd/blocklist/bin/blocklistd.c:1.5 --- src/external/bsd/blocklist/bin/blocklistd.c:1.4 Sat Dec 23 16:53:54 2023 +++ src/external/bsd/blocklist/bin/blocklistd.c Fri Aug 2 13:11:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: blocklistd.c,v 1.4 2023/12/23 21:53:54 christos Exp $ */ +/* $NetBSD: blocklistd.c,v 1.5 2024/08/02 17:11:55 christos Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #include "config.h" #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: blocklistd.c,v 1.4 2023/12/23 21:53:54 christos Exp $"); +__RCSID("$NetBSD: blocklistd.c,v 1.5 2024/08/02 17:11:55 christos Exp $"); #include <sys/types.h> #include <sys/socket.h> @@ -334,7 +334,7 @@ static void addfd(struct pollfd **pfdp, bl_t **blp, size_t *nfd, size_t *maxfd, const char *path) { - bl_t bl = bl_create(true, path, vflag ? vdlog : vsyslog); + bl_t bl = bl_create(true, path, vflag ? vdlog : vsyslog_r); if (bl == NULL || !bl_isconnected(bl)) exit(EXIT_FAILURE); if (*nfd >= *maxfd) { Index: src/external/bsd/blocklist/bin/support.c diff -u src/external/bsd/blocklist/bin/support.c:1.1.1.1 src/external/bsd/blocklist/bin/support.c:1.2 --- src/external/bsd/blocklist/bin/support.c:1.1.1.1 Sun Jun 14 21:52:53 2020 +++ src/external/bsd/blocklist/bin/support.c Fri Aug 2 13:11:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: support.c,v 1.1.1.1 2020/06/15 01:52:53 christos Exp $ */ +/* $NetBSD: support.c,v 1.2 2024/08/02 17:11:55 christos Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: support.c,v 1.1.1.1 2020/06/15 01:52:53 christos Exp $"); +__RCSID("$NetBSD: support.c,v 1.2 2024/08/02 17:11:55 christos Exp $"); #include <time.h> #include <string.h> @@ -66,7 +66,8 @@ expandm(char *buf, size_t len, const cha } void -vdlog(int level __unused, const char *fmt, va_list ap) +vdlog(int level __unused, struct syslog_data *sd __unused, + const char *fmt, va_list ap) { char buf[BUFSIZ]; @@ -81,7 +82,7 @@ dlog(int level, const char *fmt, ...) va_list ap; va_start(ap, fmt); - vdlog(level, fmt, ap); + vdlog(level, NULL, fmt, ap); va_end(ap); } Index: src/external/bsd/blocklist/bin/support.h diff -u src/external/bsd/blocklist/bin/support.h:1.1.1.1 src/external/bsd/blocklist/bin/support.h:1.2 --- src/external/bsd/blocklist/bin/support.h:1.1.1.1 Sun Jun 14 21:52:53 2020 +++ src/external/bsd/blocklist/bin/support.h Fri Aug 2 13:11:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: support.h,v 1.1.1.1 2020/06/15 01:52:53 christos Exp $ */ +/* $NetBSD: support.h,v 1.2 2024/08/02 17:11:55 christos Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -34,8 +34,9 @@ __BEGIN_DECLS const char *fmttime(char *, size_t, time_t); const char *fmtydhms(char *, size_t, time_t); -void vdlog(int, const char *, va_list) - __attribute__((__format__(__printf__, 2, 0))); +struct syslog_data; +void vdlog(int, struct syslog_data *, const char *, va_list) + __attribute__((__format__(__printf__, 3, 0))); void dlog(int, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); ssize_t blhexdump(char *, size_t, const char *, const void *, size_t); Index: src/external/bsd/blocklist/include/bl.h diff -u src/external/bsd/blocklist/include/bl.h:1.1.1.1 src/external/bsd/blocklist/include/bl.h:1.2 --- src/external/bsd/blocklist/include/bl.h:1.1.1.1 Sun Jun 14 21:52:53 2020 +++ src/external/bsd/blocklist/include/bl.h Fri Aug 2 13:11:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: bl.h,v 1.1.1.1 2020/06/15 01:52:53 christos Exp $ */ +/* $NetBSD: bl.h,v 1.2 2024/08/02 17:11:55 christos Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -65,7 +65,8 @@ __BEGIN_DECLS typedef struct blocklist *bl_t; -bl_t bl_create(bool, const char *, void (*)(int, const char *, va_list)); +bl_t bl_create(bool, const char *, + void (*)(int, struct syslog_data *, const char *, va_list)); void bl_destroy(bl_t); int bl_send(bl_t, bl_type_t, int, const struct sockaddr *, socklen_t, const char *); Index: src/external/bsd/blocklist/include/blocklist.h diff -u src/external/bsd/blocklist/include/blocklist.h:1.2 src/external/bsd/blocklist/include/blocklist.h:1.3 --- src/external/bsd/blocklist/include/blocklist.h:1.2 Sun Jun 14 22:29:45 2020 +++ src/external/bsd/blocklist/include/blocklist.h Fri Aug 2 13:11:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: blocklist.h,v 1.2 2020/06/15 02:29:45 christos Exp $ */ +/* $NetBSD: blocklist.h,v 1.3 2024/08/02 17:11:55 christos Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -32,9 +32,13 @@ #define _BLOCKLIST_H #include <sys/socket.h> +#include <syslog.h> __BEGIN_DECLS +struct syslog_data; struct blocklist *blocklist_open(void); +struct blocklist *blocklist_open2( + void (*)(int, struct syslog_data *, const char *, va_list)); void blocklist_close(struct blocklist *); int blocklist(int, int, const char *); int blocklist_r(struct blocklist *, int, int, const char *); Index: src/external/bsd/blocklist/lib/bl.c diff -u src/external/bsd/blocklist/lib/bl.c:1.2 src/external/bsd/blocklist/lib/bl.c:1.3 --- src/external/bsd/blocklist/lib/bl.c:1.2 Sun Jun 12 13:54:15 2022 +++ src/external/bsd/blocklist/lib/bl.c Fri Aug 2 13:11:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: bl.c,v 1.2 2022/06/12 17:54:15 christos Exp $ */ +/* $NetBSD: bl.c,v 1.3 2024/08/02 17:11:55 christos Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: bl.c,v 1.2 2022/06/12 17:54:15 christos Exp $"); +__RCSID("$NetBSD: bl.c,v 1.3 2024/08/02 17:11:55 christos Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -59,6 +59,19 @@ __RCSID("$NetBSD: bl.c,v 1.2 2022/06/12 #include "bl.h" +#ifndef SYSLOG_DATA_INIT +struct syslog_data { + int dummy; +}; +#define SYSLOG_DATA_INIT { 0 } + +static void +vsyslog_r(int priority, struct syslog_data *sd, const char *fmt, va_list ap) +{ + vsyslog(priority, fmt, ap); +} +#endif + typedef struct { uint32_t bl_len; uint32_t bl_version; @@ -82,7 +95,8 @@ struct blocklist { int b_fd; int b_connected; struct sockaddr_un b_sun; - void (*b_fun)(int, const char *, va_list); + struct syslog_data b_syslog_data; + void (*b_fun)(int, struct syslog_data *, const char *, va_list); bl_info_t b_info; }; @@ -115,14 +129,16 @@ bl_reset(bl_t b, bool locked) } static void -bl_log(void (*fun)(int, const char *, va_list), int level, - const char *fmt, ...) +bl_log(bl_t b, int level, const char *fmt, ...) { va_list ap; int serrno = errno; + if (b->b_fun == NULL) + return; + va_start(ap, fmt); - (*fun)(level, fmt, ap); + (*b->b_fun)(level, &b->b_syslog_data, fmt, ap); va_end(ap); errno = serrno; } @@ -152,7 +168,7 @@ bl_init(bl_t b, bool srv) b->b_fd = socket(PF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK|SOCK_NOSIGPIPE, 0); if (b->b_fd == -1) { - bl_log(b->b_fun, LOG_ERR, "%s: socket failed (%s)", + bl_log(b, LOG_ERR, "%s: socket failed (%s)", __func__, strerror(errno)); BL_UNLOCK(b); return -1; @@ -186,7 +202,7 @@ bl_init(bl_t b, bool srv) rv = connect(b->b_fd, (const void *)sun, (socklen_t)sizeof(*sun)); if (rv == 0) { if (srv) { - bl_log(b->b_fun, LOG_ERR, + bl_log(b, LOG_ERR, "%s: another daemon is handling `%s'", __func__, sun->sun_path); goto out; @@ -199,7 +215,7 @@ bl_init(bl_t b, bool srv) * and only log once. */ if (b->b_connected != 1) { - bl_log(b->b_fun, LOG_DEBUG, + bl_log(b, LOG_DEBUG, "%s: connect failed for `%s' (%s)", __func__, sun->sun_path, strerror(errno)); b->b_connected = 1; @@ -207,8 +223,7 @@ bl_init(bl_t b, bool srv) BL_UNLOCK(b); return -1; } - bl_log(b->b_fun, LOG_DEBUG, "Connected to blocklist server", - __func__); + bl_log(b, LOG_DEBUG, "Connected to blocklist server", __func__); } if (srv) { @@ -219,8 +234,7 @@ bl_init(bl_t b, bool srv) (void)umask(om); errno = serrno; if (rv == -1) { - bl_log(b->b_fun, LOG_ERR, - "%s: bind failed for `%s' (%s)", + bl_log(b, LOG_ERR, "%s: bind failed for `%s' (%s)", __func__, sun->sun_path, strerror(errno)); goto out; } @@ -259,7 +273,7 @@ bl_init(bl_t b, bool srv) #ifdef CRED_LEVEL if (setsockopt(b->b_fd, CRED_LEVEL, CRED_NAME, &one, (socklen_t)sizeof(one)) == -1) { - bl_log(b->b_fun, LOG_ERR, "%s: setsockopt %s " + bl_log(b, LOG_ERR, "%s: setsockopt %s " "failed (%s)", __func__, __STRING(CRED_NAME), strerror(errno)); goto out; @@ -275,12 +289,15 @@ out: } bl_t -bl_create(bool srv, const char *path, void (*fun)(int, const char *, va_list)) +bl_create(bool srv, const char *path, + void (*fun)(int, struct syslog_data *, const char *, va_list)) { + static struct syslog_data sd = SYSLOG_DATA_INIT; bl_t b = calloc(1, sizeof(*b)); if (b == NULL) - goto out; - b->b_fun = fun == NULL ? vsyslog : fun; + return NULL; + b->b_fun = fun; + b->b_syslog_data = sd; b->b_fd = -1; b->b_connected = -1; BL_INIT(b); @@ -295,11 +312,6 @@ bl_create(bool srv, const char *path, vo bl_init(b, srv); return b; -out: - free(b); - bl_log(fun, LOG_ERR, "%s: malloc failed (%s)", __func__, - strerror(errno)); - return NULL; } void @@ -327,7 +339,7 @@ bl_getsock(bl_t b, struct sockaddr_stora family = AF_INET6; break; default: - bl_log(b->b_fun, LOG_ERR, "%s: invalid socket len %u (%s)", + bl_log(b, LOG_ERR, "%s: invalid socket len %u (%s)", __func__, (unsigned)slen, ctx); errno = EINVAL; return -1; @@ -336,7 +348,7 @@ bl_getsock(bl_t b, struct sockaddr_stora memcpy(ss, sa, slen); if (ss->ss_family != family) { - bl_log(b->b_fun, LOG_INFO, + bl_log(b, LOG_INFO, "%s: correcting socket family %d to %d (%s)", __func__, ss->ss_family, family, ctx); ss->ss_family = family; @@ -344,7 +356,7 @@ bl_getsock(bl_t b, struct sockaddr_stora #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN if (ss->ss_len != slen) { - bl_log(b->b_fun, LOG_INFO, + bl_log(b, LOG_INFO, "%s: correcting socket len %u to %u (%s)", __func__, ss->ss_len, (unsigned)slen, ctx); ss->ss_len = (uint8_t)slen; @@ -454,14 +466,14 @@ bl_recv(bl_t b) rlen = recvmsg(b->b_fd, &msg, 0); if (rlen == -1) { - bl_log(b->b_fun, LOG_ERR, "%s: recvmsg failed (%s)", __func__, + bl_log(b, LOG_ERR, "%s: recvmsg failed (%s)", __func__, strerror(errno)); return NULL; } for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) { if (cmsg->cmsg_level != SOL_SOCKET) { - bl_log(b->b_fun, LOG_ERR, + bl_log(b, LOG_ERR, "%s: unexpected cmsg_level %d", __func__, cmsg->cmsg_level); continue; @@ -469,7 +481,7 @@ bl_recv(bl_t b) switch (cmsg->cmsg_type) { case SCM_RIGHTS: if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) { - bl_log(b->b_fun, LOG_ERR, + bl_log(b, LOG_ERR, "%s: unexpected cmsg_len %d != %zu", __func__, cmsg->cmsg_len, CMSG_LEN(2 * sizeof(int))); @@ -487,7 +499,7 @@ bl_recv(bl_t b) break; #endif default: - bl_log(b->b_fun, LOG_ERR, + bl_log(b, LOG_ERR, "%s: unexpected cmsg_type %d", __func__, cmsg->cmsg_type); continue; @@ -496,7 +508,7 @@ bl_recv(bl_t b) } if (got != (GOT_CRED|GOT_FD)) { - bl_log(b->b_fun, LOG_ERR, "message missing %s %s", + bl_log(b, LOG_ERR, "message missing %s %s", #if GOT_CRED != 0 (got & GOT_CRED) == 0 ? "cred" : #endif @@ -506,13 +518,13 @@ bl_recv(bl_t b) rem = (size_t)rlen; if (rem < sizeof(ub.bl)) { - bl_log(b->b_fun, LOG_ERR, "message too short %zd", rlen); + bl_log(b, LOG_ERR, "message too short %zd", rlen); return NULL; } rem -= sizeof(ub.bl); if (ub.bl.bl_version != BL_VERSION) { - bl_log(b->b_fun, LOG_ERR, "bad version %d", ub.bl.bl_version); + bl_log(b, LOG_ERR, "bad version %d", ub.bl.bl_version); return NULL; } Index: src/external/bsd/blocklist/lib/blocklist.c diff -u src/external/bsd/blocklist/lib/blocklist.c:1.2 src/external/bsd/blocklist/lib/blocklist.c:1.3 --- src/external/bsd/blocklist/lib/blocklist.c:1.2 Sun Jun 14 22:29:45 2020 +++ src/external/bsd/blocklist/lib/blocklist.c Fri Aug 2 13:11:56 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: blocklist.c,v 1.2 2020/06/15 02:29:45 christos Exp $ */ +/* $NetBSD: blocklist.c,v 1.3 2024/08/02 17:11:56 christos Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #endif #include <sys/cdefs.h> -__RCSID("$NetBSD: blocklist.c,v 1.2 2020/06/15 02:29:45 christos Exp $"); +__RCSID("$NetBSD: blocklist.c,v 1.3 2024/08/02 17:11:56 christos Exp $"); #include <stdio.h> #include <bl.h> @@ -98,7 +98,14 @@ blocklist_r(struct blocklist *bl, int ac struct blocklist * blocklist_open(void) { - return bl_create(false, NULL, vsyslog); + return bl_create(false, NULL, vsyslog_r); +} + +struct blocklist * +blocklist_open2( + void (*logger)(int, struct syslog_data *, const char *, va_list)) +{ + return bl_create(false, NULL, logger); } void Index: src/external/bsd/blocklist/lib/libblocklist.3 diff -u src/external/bsd/blocklist/lib/libblocklist.3:1.3 src/external/bsd/blocklist/lib/libblocklist.3:1.4 --- src/external/bsd/blocklist/lib/libblocklist.3:1.3 Mon Jun 15 17:27:57 2020 +++ src/external/bsd/blocklist/lib/libblocklist.3 Fri Aug 2 13:11:56 2024 @@ -1,4 +1,4 @@ -.\" $NetBSD: libblocklist.3,v 1.3 2020/06/15 21:27:57 christos Exp $ +.\" $NetBSD: libblocklist.3,v 1.4 2024/08/02 17:11:56 christos Exp $ .\" .\" Copyright (c) 2015 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,11 +27,12 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd March 30, 2020 +.Dd August 2, 2024 .Dt LIBBLOCKLIST 3 .Os .Sh NAME .Nm blocklist_open , +.Nm blocklist_open2 , .Nm blocklist_close , .Nm blocklist_r , .Nm blocklist , @@ -44,6 +45,8 @@ .In blocklist.h .Ft struct blocklist * .Fn blocklist_open "void" +.Ft struct blocklist * +.Fn blocklist_open2 "void (*logger)(int, struct syslog_data *, va_list)" .Ft void .Fn blocklist_close "struct blocklist *cookie" .Ft int @@ -68,6 +71,19 @@ and returns a pointer to it, or .Dv NULL on failure. .Pp +The function +.Fn blocklist_open2 +is similar to +.Fn blocklist_open +but allows a +.Fa logger +to be specified. +If the +.Fa logger +is +.Dv NULL , +then no logging is performed. +.Pp The .Fn blocklist_close function frees all memory and resources used. Index: src/external/bsd/blocklist/lib/shlib_version diff -u src/external/bsd/blocklist/lib/shlib_version:1.1.1.1 src/external/bsd/blocklist/lib/shlib_version:1.2 --- src/external/bsd/blocklist/lib/shlib_version:1.1.1.1 Sun Jun 14 21:52:53 2020 +++ src/external/bsd/blocklist/lib/shlib_version Fri Aug 2 13:11:56 2024 @@ -1,2 +1,2 @@ major=0 -minor=0 +minor=1