Date: Tue, 8 Nov 2016 05:31:02 +0000 (UTC) From: "Conrad E. Meyer" <cem@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r308432 - in head: bin/echo bin/sleep usr.bin/basename usr.bin/dc usr.bin/dirname usr.bin/fold usr.bin/getopt usr.bin/locate/bigram usr.bin/logname usr.bin/printenv usr.bin/yes Message-ID: <201611080531.uA85V2DL025382@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cem Date: Tue Nov 8 05:31:01 2016 New Revision: 308432 URL: https://svnweb.freebsd.org/changeset/base/308432 Log: Capsicumize some trivial stdio programs Trivially capsicumize some simple programs that just interact with stdio. This list of programs uses 'pledge("stdio")' in OpenBSD. No objection from: allanjude, emaste, oshogbo Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D8307 Modified: head/bin/echo/echo.c head/bin/sleep/sleep.c head/usr.bin/basename/basename.c head/usr.bin/dc/dc.c head/usr.bin/dirname/dirname.c head/usr.bin/fold/fold.c head/usr.bin/getopt/getopt.c head/usr.bin/locate/bigram/locate.bigram.c head/usr.bin/logname/logname.c head/usr.bin/printenv/printenv.c head/usr.bin/yes/yes.c Modified: head/bin/echo/echo.c ============================================================================== --- head/bin/echo/echo.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/bin/echo/echo.c Tue Nov 8 05:31:01 2016 (r308432) @@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$"); #include <sys/uio.h> #include <assert.h> +#include <capsicum_helpers.h> +#include <err.h> #include <errno.h> #include <limits.h> #include <stdlib.h> @@ -78,6 +80,9 @@ main(int argc, char *argv[]) char newline[] = "\n"; char *progname = argv[0]; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + /* This utility may NOT do getopt(3) option parsing. */ if (*++argv && !strcmp(*argv, "-n")) { ++argv; Modified: head/bin/sleep/sleep.c ============================================================================== --- head/bin/sleep/sleep.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/bin/sleep/sleep.c Tue Nov 8 05:31:01 2016 (r308432) @@ -41,6 +41,7 @@ static char sccsid[] = "@(#)sleep.c 8.3 #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <capsicum_helpers.h> #include <ctype.h> #include <err.h> #include <errno.h> @@ -69,6 +70,9 @@ main(int argc, char *argv[]) time_t original; char buf[2]; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + if (argc != 2) usage(); Modified: head/usr.bin/basename/basename.c ============================================================================== --- head/usr.bin/basename/basename.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/basename/basename.c Tue Nov 8 05:31:01 2016 (r308432) @@ -42,6 +42,7 @@ static char sccsid[] = "@(#)basename.c 8 #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <capsicum_helpers.h> #include <err.h> #include <libgen.h> #include <limits.h> @@ -64,6 +65,9 @@ main(int argc, char **argv) setlocale(LC_ALL, ""); + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + aflag = 0; suffix = NULL; suffixlen = 0; Modified: head/usr.bin/dc/dc.c ============================================================================== --- head/usr.bin/dc/dc.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/dc/dc.c Tue Nov 8 05:31:01 2016 (r308432) @@ -22,9 +22,11 @@ __FBSDID("$FreeBSD$"); #include <sys/stat.h> +#include <capsicum_helpers.h> #include <ctype.h> #include <err.h> #include <errno.h> +#include <fcntl.h> #include <getopt.h> #include <stdio.h> #include <stdlib.h> @@ -58,11 +60,11 @@ usage(void) } static void -procfile(char *fname) { +procfd(int fd, char *fname) { struct stat st; FILE *file; - file = fopen(fname, "r"); + file = fdopen(fd, "r"); if (file == NULL) err(1, "cannot open file %s", fname); if (fstat(fileno(file), &st) == -1) @@ -80,7 +82,7 @@ procfile(char *fname) { int main(int argc, char *argv[]) { - int ch; + int ch, fd; bool extended_regs = false, preproc_done = false; /* accept and ignore a single dash to be 4.4BSD dc(1) compatible */ @@ -97,7 +99,10 @@ main(int argc, char *argv[]) case 'f': if (!preproc_done) init_bmachine(extended_regs); - procfile(optarg); + fd = open(optarg, O_RDONLY); + if (fd < 0) + err(1, "cannot open file %s", optarg); + procfd(fd, optarg); preproc_done = true; break; case 'x': @@ -126,12 +131,23 @@ main(int argc, char *argv[]) if (argc > 1) usage(); if (argc == 1) { - procfile(argv[0]); + fd = open(argv[0], O_RDONLY); + if (fd < 0) + err(1, "cannot open file %s", argv[0]); + + if (caph_limit_stream(fd, CAPH_READ) < 0 || + caph_limit_stdio() < 0 || + (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + + procfd(fd, argv[0]); preproc_done = true; } if (preproc_done) return (0); + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); src_setstream(&src, stdin); reset_bmachine(&src); eval(); Modified: head/usr.bin/dirname/dirname.c ============================================================================== --- head/usr.bin/dirname/dirname.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/dirname/dirname.c Tue Nov 8 05:31:01 2016 (r308432) @@ -39,6 +39,7 @@ static const char sccsid[] = "@(#)dirnam #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <capsicum_helpers.h> #include <err.h> #include <libgen.h> #include <stdio.h> @@ -53,6 +54,9 @@ main(int argc, char **argv) char *p; int ch; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + while ((ch = getopt(argc, argv, "")) != -1) switch(ch) { case '?': Modified: head/usr.bin/fold/fold.c ============================================================================== --- head/usr.bin/fold/fold.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/fold/fold.c Tue Nov 8 05:31:01 2016 (r308432) @@ -45,6 +45,7 @@ static char sccsid[] = "@(#)fold.c 8.1 ( #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <capsicum_helpers.h> #include <err.h> #include <limits.h> #include <locale.h> @@ -72,6 +73,9 @@ main(int argc, char **argv) (void) setlocale(LC_CTYPE, ""); + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + width = -1; previous_ch = 0; while ((ch = getopt(argc, argv, "0123456789bsw:")) != -1) { Modified: head/usr.bin/getopt/getopt.c ============================================================================== --- head/usr.bin/getopt/getopt.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/getopt/getopt.c Tue Nov 8 05:31:01 2016 (r308432) @@ -6,6 +6,9 @@ __FBSDID("$FreeBSD$"); * into the public domain and is thus not subject to any copyright. */ +#include <capsicum_helpers.h> +#include <err.h> +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -16,6 +19,9 @@ main(int argc, char *argv[]) int c; int status = 0; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + optind = 2; /* Past the program name and the option letters. */ while ((c = getopt(argc, argv, argv[1])) != -1) switch (c) { Modified: head/usr.bin/locate/bigram/locate.bigram.c ============================================================================== --- head/usr.bin/locate/bigram/locate.bigram.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/locate/bigram/locate.bigram.c Tue Nov 8 05:31:01 2016 (r308432) @@ -57,6 +57,9 @@ static char sccsid[] = "@(#)locate.bigra * Use 'code' to encode a file using this output. */ +#include <capsicum_helpers.h> +#include <err.h> +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <sys/param.h> /* for MAXPATHLEN */ @@ -73,6 +76,9 @@ main(void) u_char *oldpath = buf1, *path = buf2; u_int i, j; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + while (fgets(path, sizeof(buf2), stdin) != NULL) { /* Modified: head/usr.bin/logname/logname.c ============================================================================== --- head/usr.bin/logname/logname.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/logname/logname.c Tue Nov 8 05:31:01 2016 (r308432) @@ -39,6 +39,7 @@ static const char sccsid[] = "@(#)lognam #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <capsicum_helpers.h> #include <err.h> #include <unistd.h> #include <stdio.h> @@ -51,6 +52,9 @@ main(int argc, char *argv[] __unused) { char *p; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + if (argc != 1) usage(); if ((p = getlogin()) == NULL) Modified: head/usr.bin/printenv/printenv.c ============================================================================== --- head/usr.bin/printenv/printenv.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/printenv/printenv.c Tue Nov 8 05:31:01 2016 (r308432) @@ -44,6 +44,8 @@ __FBSDID("$FreeBSD$"); #include <sys/types.h> +#include <capsicum_helpers.h> +#include <err.h> #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -65,6 +67,9 @@ main(int argc, char *argv[]) size_t len; int ch; + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + while ((ch = getopt(argc, argv, "")) != -1) switch(ch) { case '?': Modified: head/usr.bin/yes/yes.c ============================================================================== --- head/usr.bin/yes/yes.c Tue Nov 8 00:24:49 2016 (r308431) +++ head/usr.bin/yes/yes.c Tue Nov 8 05:31:01 2016 (r308432) @@ -41,12 +41,17 @@ static const char rcsid[] = "$FreeBSD$"; #endif #endif /* not lint */ +#include <capsicum_helpers.h> #include <err.h> #include <stdio.h> int main(int argc, char **argv) { + + if (caph_limit_stdio() < 0 || (cap_enter() < 0 && errno != ENOSYS)) + err(1, "capsicum"); + if (argc > 1) while (puts(argv[1]) != EOF) ;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611080531.uA85V2DL025382>