diff --git a/net/dhcpcd/Makefile b/net/dhcpcd/Makefile index 83aa628d3fb5..24e7319d2cdc 100644 --- a/net/dhcpcd/Makefile +++ b/net/dhcpcd/Makefile @@ -1,28 +1,27 @@ PORTNAME= dhcpcd -DISTVERSION= 10.2.4 -PORTREVISION= 1 +DISTVERSION= 10.3.0 CATEGORIES= net MASTER_SITES= https://github.com/NetworkConfiguration/${PORTNAME}/releases/download/v${DISTVERSION}/ MAINTAINER= driesm@FreeBSD.org COMMENT= DHCP/IPv4LL/IPv6RS/DHCPv6 client WWW= https://roy.marples.name/projects/dhcpcd LICENSE= BSD2CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE USES= compiler:c11 cpe tar:xz CPE_VENDOR= dhcpcd_project USE_RC_SUBR= dhcpcd HAS_CONFIGURE= yes CONFIGURE_ARGS= --datadir=${PREFIX}/share/examples \ --prefix=${PREFIX} \ --privsepuser="_dhcp" \ --without-udev post-install: ${MV} ${STAGEDIR}${PREFIX}/etc/dhcpcd.conf ${STAGEDIR}${PREFIX}/etc/dhcpcd.conf.sample @${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/dhcpcd .include diff --git a/net/dhcpcd/distinfo b/net/dhcpcd/distinfo index 7d88e0269e56..f4c96d61e86f 100644 --- a/net/dhcpcd/distinfo +++ b/net/dhcpcd/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1748841759 -SHA256 (dhcpcd-10.2.4.tar.xz) = 6721e606609226dbf4d864a78802a9e96beec0ee034a1bd84138b3e037bba7d9 -SIZE (dhcpcd-10.2.4.tar.xz) = 276444 +TIMESTAMP = 1763136225 +SHA256 (dhcpcd-10.3.0.tar.xz) = 06e4c1aaf958523f3fd1c57258c613c6c7ae56b8f1d678fa7943495d5ea6aeb5 +SIZE (dhcpcd-10.3.0.tar.xz) = 279100 diff --git a/net/dhcpcd/files/patch-src_dhcpcd.c b/net/dhcpcd/files/patch-src_dhcpcd.c deleted file mode 100644 index a2c0f8559bd0..000000000000 --- a/net/dhcpcd/files/patch-src_dhcpcd.c +++ /dev/null @@ -1,33 +0,0 @@ ---- src/dhcpcd.c.orig 2025-06-01 18:40:28 UTC -+++ src/dhcpcd.c -@@ -393,7 +393,7 @@ dhcpcd_daemonise(struct dhcpcd_ctx *ctx) - - eloop_event_delete(ctx->eloop, ctx->fork_fd); - exit_code = EXIT_SUCCESS; -- if (write(ctx->fork_fd, &exit_code, sizeof(exit_code)) == -1) -+ if (send(ctx->fork_fd, &exit_code, sizeof(exit_code), MSG_EOR) == -1) - logerr(__func__); - close(ctx->fork_fd); - ctx->fork_fd = -1; -@@ -1449,8 +1449,8 @@ dhcpcd_signal_cb(int sig, void *arg) - - if (sig != SIGCHLD && ctx->options & DHCPCD_FORKED) { - if (sig != SIGHUP && -- write(ctx->fork_fd, &sig, sizeof(sig)) == -1) -- logerr("%s: write", __func__); -+ send(ctx->fork_fd, &sig, sizeof(sig), MSG_EOR) == -1) -+ logerr("%s: send", __func__); - return; - } - -@@ -2712,8 +2712,8 @@ exit1: - #ifdef USE_SIGNALS - /* If still attached, detach from the launcher */ - if (ctx.options & DHCPCD_STARTED && ctx.fork_fd != -1) { -- if (write(ctx.fork_fd, &i, sizeof(i)) == -1) -- logerr("%s: write", __func__); -+ if (send(ctx.fork_fd, &i, sizeof(i), MSG_EOR) == -1) -+ logerr("%s: send", __func__); - } - #endif - diff --git a/net/dhcpcd/files/patch-src_logerr.c b/net/dhcpcd/files/patch-src_logerr.c deleted file mode 100644 index 6f4861cd3a1d..000000000000 --- a/net/dhcpcd/files/patch-src_logerr.c +++ /dev/null @@ -1,94 +0,0 @@ ---- src/logerr.c.orig 2025-06-01 18:40:28 UTC -+++ src/logerr.c -@@ -26,7 +26,9 @@ - * SUCH DAMAGE. - */ - -+#include - #include -+ - #include - #include - #include -@@ -215,18 +217,25 @@ vlogmessage(int pri, const char *fmt, va_list args) - int len = 0; - - if (ctx->log_fd != -1) { -+ pid_t pid = getpid(); - char buf[LOGERR_SYSLOGBUF]; -- pid_t pid; -+ struct iovec iov[] = { -+ { .iov_base = &pri, .iov_len = sizeof(pri) }, -+ { .iov_base = &pid, .iov_len = sizeof(pid) }, -+ { .iov_base = buf }, -+ }; - -- memcpy(buf, &pri, sizeof(pri)); -- pid = getpid(); -- memcpy(buf + sizeof(pri), &pid, sizeof(pid)); -- len = vsnprintf(buf + sizeof(pri) + sizeof(pid), -- sizeof(buf) - sizeof(pri) - sizeof(pid), -- fmt, args); -- if (len != -1) -- len = (int)write(ctx->log_fd, buf, -- ((size_t)++len) + sizeof(pri) + sizeof(pid)); -+ len = vsnprintf(buf, sizeof(buf), fmt, args); -+ if (len != -1) { -+ if ((size_t)len >= sizeof(buf)) -+ len = (int)sizeof(buf) - 1; -+ iov[2].iov_len = (size_t)(len + 1); -+ struct msghdr msg = { -+ .msg_iov = iov, -+ .msg_iovlen = sizeof(iov) / sizeof(iov[0]), -+ }; -+ len = (int)sendmsg(ctx->log_fd, &msg, MSG_EOR); -+ } - return len; - } - -@@ -390,24 +399,33 @@ logreadfd(int fd) - logreadfd(int fd) - { - struct logctx *ctx = &_logctx; -- char buf[LOGERR_SYSLOGBUF]; - int len, pri; -+ pid_t pid; -+ char buf[LOGERR_SYSLOGBUF] = { '\0' }; -+ struct iovec iov[] = { -+ { .iov_base = &pri, .iov_len = sizeof(pri) }, -+ { .iov_base = &pid, .iov_len = sizeof(pid) }, -+ { .iov_base = buf, .iov_len = sizeof(buf) }, -+ }; -+ struct msghdr msg = { -+ .msg_iov = iov, -+ .msg_iovlen = sizeof(iov) / sizeof(iov[0]) -+ }; - -- len = (int)read(fd, buf, sizeof(buf)); -- if (len == -1) -+ len = (int)recvmsg(fd, &msg, MSG_WAITALL); -+ if (len == -1 || len == 0) - return -1; -- -- /* Ensure we have pri, pid and a terminator */ -- if (len < (int)(sizeof(pri) + sizeof(pid_t) + 1) || -- buf[len - 1] != '\0') -- { -- errno = EINVAL; -+ /* Ensure we received the minimum and at least one character to log */ -+ if ((size_t)len < sizeof(pri) + sizeof(pid) + 1 || -+ msg.msg_flags & MSG_TRUNC) { -+ errno = EMSGSIZE; - return -1; - } -+ /* Ensure what we receive is NUL terminated */ -+ buf[(size_t)len - (sizeof(pri) + sizeof(pid)) - 1] = '\0'; - -- memcpy(&pri, buf, sizeof(pri)); -- memcpy(&ctx->log_pid, buf + sizeof(pri), sizeof(ctx->log_pid)); -- logmessage(pri, "%s", buf + sizeof(pri) + sizeof(ctx->log_pid)); -+ ctx->log_pid = pid; -+ logmessage(pri, "%s", buf); - ctx->log_pid = 0; - return len; - } diff --git a/net/dhcpcd/files/patch-src_logerr.h b/net/dhcpcd/files/patch-src_logerr.h deleted file mode 100644 index 1c5f07205169..000000000000 --- a/net/dhcpcd/files/patch-src_logerr.h +++ /dev/null @@ -1,11 +0,0 @@ ---- src/logerr.h.orig 2025-06-01 18:40:28 UTC -+++ src/logerr.h -@@ -76,7 +76,7 @@ __printflike(2, 3) void logerrmessage(int pri, const c - #define logerr(...) log_err(__VA_ARGS__) - #define logerrx(...) log_errx(__VA_ARGS__) - --/* For logging in a chroot */ -+/* For logging in a chroot using SOCK_SEQPACKET */ - int loggetfd(void); - void logsetfd(int); - int logreadfd(int); diff --git a/net/dhcpcd/files/patch-src_privsep-root.c b/net/dhcpcd/files/patch-src_privsep-root.c deleted file mode 100644 index 83242bb52106..000000000000 --- a/net/dhcpcd/files/patch-src_privsep-root.c +++ /dev/null @@ -1,28 +0,0 @@ ---- src/privsep-root.c.orig 2025-06-01 18:40:28 UTC -+++ src/privsep-root.c -@@ -210,6 +210,7 @@ ps_root_writeerror(struct dhcpcd_ctx *ctx, ssize_t res - { .iov_base = &psr, .iov_len = sizeof(psr) }, - { .iov_base = data, .iov_len = len }, - }; -+ struct msghdr msg = { .msg_iov = iov, .msg_iovlen = __arraycount(iov) }; - ssize_t err; - int fd = PS_ROOT_FD(ctx); - -@@ -217,7 +218,7 @@ ps_root_writeerror(struct dhcpcd_ctx *ctx, ssize_t res - logdebugx("%s: result %zd errno %d", __func__, result, errno); - #endif - -- err = writev(fd, iov, __arraycount(iov)); -+ err = sendmsg(fd, &msg, MSG_EOR); - - /* Error sending the message? Try sending the error of sending. */ - if (err == -1) { -@@ -227,7 +228,7 @@ ps_root_writeerror(struct dhcpcd_ctx *ctx, ssize_t res - psr.psr_errno = errno; - iov[1].iov_base = NULL; - iov[1].iov_len = 0; -- err = writev(fd, iov, __arraycount(iov)); -+ err = sendmsg(fd, &msg, MSG_EOR); - } - - return err; diff --git a/net/dhcpcd/files/patch-src_privsep.c b/net/dhcpcd/files/patch-src_privsep.c deleted file mode 100644 index 0258308ee061..000000000000 --- a/net/dhcpcd/files/patch-src_privsep.c +++ /dev/null @@ -1,81 +0,0 @@ ---- src/privsep.c.orig 2025-06-01 18:40:28 UTC -+++ src/privsep.c -@@ -895,7 +895,7 @@ ps_sendpsmmsg(struct dhcpcd_ctx *ctx, int fd, - { .iov_base = NULL, }, /* payload 2 */ - { .iov_base = NULL, }, /* payload 3 */ - }; -- int iovlen; -+ struct msghdr m = { .msg_iov = iov, .msg_iovlen = 1 }; - ssize_t len; - - if (msg != NULL) { -@@ -909,6 +909,7 @@ ps_sendpsmmsg(struct dhcpcd_ctx *ctx, int fd, - iovp->iov_base = msg->msg_name; - iovp->iov_len = msg->msg_namelen; - iovp++; -+ m.msg_iovlen++; - - cmsg_padlen = - CALC_CMSG_PADLEN(msg->msg_controllen, msg->msg_namelen); -@@ -916,25 +917,26 @@ ps_sendpsmmsg(struct dhcpcd_ctx *ctx, int fd, - iovp->iov_len = cmsg_padlen; - iovp->iov_base = cmsg_padlen != 0 ? padding : NULL; - iovp++; -+ m.msg_iovlen++; - - iovp->iov_base = msg->msg_control; - iovp->iov_len = msg->msg_controllen; -- iovlen = 4; -+ iovp++; -+ m.msg_iovlen++; - - for (i = 0; i < (int)msg->msg_iovlen; i++) { -- if ((size_t)(iovlen + i) > __arraycount(iov)) { -+ if ((size_t)(m.msg_iovlen++) > __arraycount(iov)) { - errno = ENOBUFS; - return -1; - } -- iovp++; - iovp->iov_base = msg->msg_iov[i].iov_base; - iovp->iov_len = msg->msg_iov[i].iov_len; -+ iovp++; - } -- iovlen += i; -- } else -- iovlen = 1; -+ } - -- len = writev(fd, iov, iovlen); -+ len = sendmsg(fd, &m, MSG_EOR); -+ - if (len == -1) { - if (ctx->options & DHCPCD_FORKED && - !(ctx->options & DHCPCD_PRIVSEPROOT)) -@@ -1028,6 +1030,7 @@ ps_sendcmdmsg(int fd, uint16_t cmd, const struct msghd - { .iov_base = &psm, .iov_len = sizeof(psm) }, - { .iov_base = data, .iov_len = 0 }, - }; -+ struct msghdr m = { .msg_iov = iov, .msg_iovlen = __arraycount(iov) }; - size_t dl = sizeof(data); - socklen_t cmsg_padlen = - CALC_CMSG_PADLEN(msg->msg_controllen, msg->msg_namelen); -@@ -1063,8 +1066,9 @@ ps_sendcmdmsg(int fd, uint16_t cmd, const struct msghd - psm.ps_namelen + psm.ps_controllen + psm.ps_datalen + cmsg_padlen; - if (psm.ps_datalen != 0) - memcpy(p, msg->msg_iov[0].iov_base, psm.ps_datalen); -- return writev(fd, iov, __arraycount(iov)); - -+ return sendmsg(fd, &m, MSG_EOR); -+ - nobufs: - errno = ENOBUFS; - return -1; -@@ -1089,7 +1093,7 @@ ps_recvmsg(int rfd, unsigned short events, uint16_t cm - if (!(events & ELE_READ)) - logerrx("%s: unexpected event 0x%04x", __func__, events); - -- len = recvmsg(rfd, &msg, 0); -+ len = recvmsg(rfd, &msg, MSG_WAITALL); - if (len == -1) { - logerr("%s: recvmsg", __func__); - return len;