Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Dec 2019 23:39:38 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r355470 - head/usr.bin/tail
Message-ID:  <201912062339.xB6Ndceu088650@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Fri Dec  6 23:39:38 2019
New Revision: 355470
URL: https://svnweb.freebsd.org/changeset/base/355470

Log:
  Fix tail -f in capability mode.
  
  We were not adding CAP_EVENT to input file capabilities, so kevent()
  always failed with ENOTCAPABLE.  tail implements a fallback mode to
  poll the file in this case, so the failure was not apparent.
  
  Reviewed by:	emaste
  MFC after:	1 week
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D22709

Modified:
  head/usr.bin/tail/tail.c

Modified: head/usr.bin/tail/tail.c
==============================================================================
--- head/usr.bin/tail/tail.c	Fri Dec  6 23:39:08 2019	(r355469)
+++ head/usr.bin/tail/tail.c	Fri Dec  6 23:39:38 2019	(r355470)
@@ -93,11 +93,6 @@ main(int argc, char *argv[])
 	char *p;
 	cap_rights_t rights;
 
-	cap_rights_init(&rights, CAP_FSTAT, CAP_FSTATFS, CAP_FCNTL, CAP_MMAP_RW);
-	if (caph_rights_limit(STDIN_FILENO, &rights) < 0 ||
-	    caph_limit_stderr() < 0 || caph_limit_stdout() < 0)
-		err(1, "can't limit stdio rights");
-
 	/*
 	 * Tail's options are weird.  First, -n10 is the same as -n-10, not
 	 * -n+10.  Second, the number options are 1 based and not offsets,
@@ -166,6 +161,14 @@ main(int argc, char *argv[])
 	argv += optind;
 
 	no_files = argc ? argc : 1;
+
+	cap_rights_init(&rights, CAP_FSTAT, CAP_FSTATFS, CAP_FCNTL,
+	    CAP_MMAP_R);
+	if (fflag)
+		cap_rights_set(&rights, CAP_EVENT);
+	if (caph_rights_limit(STDIN_FILENO, &rights) < 0 ||
+	    caph_limit_stderr() < 0 || caph_limit_stdout() < 0)
+		err(1, "can't limit stdio rights");
 
 	fa = fileargs_init(argc, argv, O_RDONLY, 0, &rights, FA_OPEN);
 	if (fa == NULL)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912062339.xB6Ndceu088650>