Page MenuHomeFreeBSD

D14409.id39414.diff
No OneTemporary

D14409.id39414.diff

Index: usr.bin/head/Makefile
===================================================================
--- usr.bin/head/Makefile
+++ usr.bin/head/Makefile
@@ -8,4 +8,10 @@
HAS_TESTS=
SUBDIR.${MK_TESTS}+= tests
+.if ${MK_CASPER} != "no" && !defined(RESCUE)
+LIBADD+= casper
+LIBADD+= cap_fileargs
+CFLAGS+=-DWITH_CASPER
+.endif
+
.include <bsd.prog.mk>
Index: usr.bin/head/head.c
===================================================================
--- usr.bin/head/head.c
+++ usr.bin/head/head.c
@@ -43,16 +43,22 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include <sys/capsicum.h>
#include <sys/types.h>
+#include <capsicum_helpers.h>
#include <ctype.h>
#include <err.h>
+#include <errno.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <libcasper.h>
+#include <casper/cap_fileargs.h>
+
/*
* head - give the first few lines of a stream or of each of a set of files
*
@@ -72,6 +78,8 @@
int first, linecnt = -1, eval = 0;
off_t bytecnt = -1;
char *ep;
+ fileargs_t *fa;
+ cap_rights_t rights;
obsolete(argv);
while ((ch = getopt(argc, argv, "n:c:")) != -1)
@@ -93,13 +101,24 @@
argc -= optind;
argv += optind;
+ if (*argv) {
+ fa = fileargs_init(argc, argv, O_RDONLY, 0,
+ cap_rights_init(&rights, CAP_READ, CAP_FSTAT, CAP_FCNTL));
+ if (fa == NULL)
+ errx(1, "unable to init casper");
+ }
+
+ caph_cache_catpages();
+ if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS))
+ err(1, "unable to enter capability mode");
+
if (linecnt != -1 && bytecnt != -1)
errx(1, "can't combine line and byte counts");
if (linecnt == -1 )
linecnt = 10;
if (*argv) {
for (first = 1; *argv; ++argv) {
- if ((fp = fopen(*argv, "r")) == NULL) {
+ if ((fp = fileargs_fopen(fa, *argv, "r")) < 0) {
warn("%s", *argv);
eval = 1;
continue;

File Metadata

Mime Type
text/plain
Expires
Wed, Jul 22, 8:31 PM (6 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35381855
Default Alt Text
D14409.id39414.diff (1 KB)

Event Timeline