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

Reply via email to