aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/brandelf/brandelf.c
diff options
context:
space:
mode:
authorMariusz Zaborski <oshogbo@FreeBSD.org>2018-11-18 12:23:03 +0000
committerMariusz Zaborski <oshogbo@FreeBSD.org>2018-11-18 12:23:03 +0000
commitce57fd97fe51c377bc3b87aa6e58d9603f076023 (patch)
tree6dcc2566733dccd00ea8f0501744eacc069cbd49 /usr.bin/brandelf/brandelf.c
parentd72ba183ff2d28704755e3044193d465d29c6585 (diff)
downloadsrc-ce57fd97fe51c377bc3b87aa6e58d9603f076023.tar.gz
src-ce57fd97fe51c377bc3b87aa6e58d9603f076023.zip
brandelf: capsicumize it
Notes
Notes: svn path=/head/; revision=340572
Diffstat (limited to 'usr.bin/brandelf/brandelf.c')
-rw-r--r--usr.bin/brandelf/brandelf.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/usr.bin/brandelf/brandelf.c b/usr.bin/brandelf/brandelf.c
index 2dc84796c836..c7ce94112365 100644
--- a/usr.bin/brandelf/brandelf.c
+++ b/usr.bin/brandelf/brandelf.c
@@ -33,9 +33,11 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/capsicum.h>
#include <sys/elf_common.h>
#include <sys/errno.h>
+#include <capsicum_helpers.h>
#include <err.h>
#include <fcntl.h>
#include <stdbool.h>
@@ -44,6 +46,9 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
+#include <libcasper.h>
+#include <casper/cap_fileargs.h>
+
static int elftype(const char *);
static const char *iselftype(int);
static void printelftypes(void);
@@ -66,8 +71,10 @@ main(int argc, char **argv)
{
const char *strtype = "FreeBSD";
- int ch, retval, type;
+ int ch, flags, retval, type;
bool change, force, listed;
+ fileargs_t *fa;
+ cap_rights_t rights;
type = ELFOSABI_FREEBSD;
retval = 0;
@@ -121,11 +128,24 @@ main(int argc, char **argv)
usage();
}
+ flags = change || force ? O_RDWR : O_RDONLY;
+ cap_rights_init(&rights, CAP_READ, CAP_SEEK);
+ if (flags == O_RDWR)
+ cap_rights_set(&rights, CAP_WRITE);
+
+ fa = fileargs_init(argc, argv, flags, 0, &rights);
+ if (fa == NULL)
+ errx(1, "unable to init casper");
+
+ caph_cache_catpages();
+ if (caph_limit_stdio() < 0 || caph_enter_casper() < 0)
+ err(1, "unable to enter capability mode");
+
while (argc != 0) {
int fd;
char buffer[EI_NIDENT];
- if ((fd = open(argv[0], change || force ? O_RDWR : O_RDONLY, 0)) < 0) {
+ if ((fd = fileargs_open(fa, argv[0])) < 0) {
warn("error opening file %s", argv[0]);
retval = 1;
goto fail;
@@ -167,6 +187,7 @@ fail:
argv++;
}
+ fileargs_free(fa);
return (retval);
}