changeset 5442:a069d919d44c draft

FreeBSD: Don't rights limit stderr Otherwise some utils in scripts will error with insufficient capabilities.
author Roy Marples <roy@marples.name>
date Sun, 06 Sep 2020 03:01:49 +0100
parents ff7c7b4799b3
children 2d1bbc57daeb
files src/dhcpcd.c
diffstat 1 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/dhcpcd.c	Sun Sep 06 02:41:08 2020 +0100
+++ b/src/dhcpcd.c	Sun Sep 06 03:01:49 2020 +0100
@@ -2261,17 +2261,20 @@
 		ctx.fork_fd = fork_fd[1];
 		close(fork_fd[0]);
 #ifdef PRIVSEP_RIGHTS
-		if (ps_rights_limit_fd(fork_fd[1]) == -1 ||
-		    ps_rights_limit_fd(stderr_fd[1]) == 1)
-		{
+		if (ps_rights_limit_fd(fork_fd[1]) == -1) {
 			logerr("ps_rights_limit_fdpair");
 			goto exit_failure;
 		}
 #endif
-		/* Redirect stderr to the stderr socketpair.
+		/*
+		 * Redirect stderr to the stderr socketpair.
 		 * Redirect stdout as well.
 		 * dhcpcd doesn't output via stdout, but something in
-		 * a called script might. */
+		 * a called script might.
+		 *
+		 * Do NOT rights limit this fd as it will affect scripts.
+		 * For example, cmp reports insufficient caps on FreeBSD.
+		 */
 		if (dup2(stderr_fd[1], STDERR_FILENO) == -1 ||
 		    dup2(stderr_fd[1], STDOUT_FILENO) == -1)
 			logerr("dup2");
@@ -2310,7 +2313,8 @@
 #endif
 		setproctitle("[launcher]");
 		eloop_event_add(ctx.eloop, ctx.fork_fd, dhcpcd_fork_cb, &ctx);
-		eloop_event_add(ctx.eloop, ctx.stderr_fd, dhcpcd_stderr_cb, &ctx);
+		eloop_event_add(ctx.eloop, ctx.stderr_fd, dhcpcd_stderr_cb,
+		    &ctx);
 		goto run_loop;
 	}