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