strings: capsicumize it
Reviewed by: cem Discussed with: emaste Differential Revision: https://reviews.freebsd.org/D18038
This commit is contained in:
parent
d5f4dd1be7
commit
6d395deba1
@ -25,8 +25,10 @@
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/capsicum.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <capsicum_helpers.h>
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
@ -44,6 +46,9 @@
|
||||
#include <libelftc.h>
|
||||
#include <gelf.h>
|
||||
|
||||
#include <libcasper.h>
|
||||
#include <casper/cap_fileargs.h>
|
||||
|
||||
#include "_elftc.h"
|
||||
|
||||
ELFTC_VCSID("$Id: strings.c 3648 2018-11-22 23:26:43Z emaste $");
|
||||
@ -85,7 +90,7 @@ static struct option strings_longopts[] = {
|
||||
};
|
||||
|
||||
int getcharacter(FILE *, long *);
|
||||
int handle_file(const char *);
|
||||
int handle_file(fileargs_t *fa, const char *);
|
||||
int handle_elf(const char *, FILE *);
|
||||
int handle_binary(const char *, FILE *, size_t);
|
||||
int find_strings(const char *, FILE *, off_t, off_t);
|
||||
@ -99,6 +104,8 @@ void usage(void);
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
fileargs_t *fa;
|
||||
cap_rights_t rights;
|
||||
int ch, rc;
|
||||
|
||||
rc = 0;
|
||||
@ -187,27 +194,41 @@ main(int argc, char **argv)
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
cap_rights_init(&rights, CAP_READ, CAP_SEEK, CAP_FSTAT, CAP_FCNTL);
|
||||
fa = fileargs_init(argc, argv, O_RDONLY, 0, &rights);
|
||||
if (fa == NULL)
|
||||
err(1, "Unable to initialize casper fileargs");
|
||||
|
||||
caph_cache_catpages();
|
||||
if (caph_limit_stdio() < 0 && caph_enter_casper() < 0) {
|
||||
fileargs_free(fa);
|
||||
err(1, "Unable to enter capability mode");
|
||||
}
|
||||
|
||||
if (min_len == 0)
|
||||
min_len = 4;
|
||||
if (*argv == NULL)
|
||||
rc = find_strings("{standard input}", stdin, 0, 0);
|
||||
else while (*argv != NULL) {
|
||||
if (handle_file(*argv) != 0)
|
||||
if (handle_file(fa, *argv) != 0)
|
||||
rc = 1;
|
||||
argv++;
|
||||
}
|
||||
|
||||
fileargs_free(fa);
|
||||
|
||||
return (rc);
|
||||
}
|
||||
|
||||
int
|
||||
handle_file(const char *name)
|
||||
handle_file(fileargs_t *fa, const char *name)
|
||||
{
|
||||
FILE *pfile;
|
||||
int rt;
|
||||
|
||||
if (name == NULL)
|
||||
return (1);
|
||||
pfile = fopen(name, "rb");
|
||||
pfile = fileargs_fopen(fa, name, "rb");
|
||||
if (pfile == NULL) {
|
||||
warnx("'%s': %s", name, strerror(errno));
|
||||
return (1);
|
||||
|
@ -10,6 +10,12 @@ PROG= strings
|
||||
|
||||
LIBADD= elftc elf
|
||||
|
||||
.if ${MK_CASPER} != "no" && !defined(BOOTSTRAPPING)
|
||||
LIBADD+= casper
|
||||
LIBADD+= cap_fileargs
|
||||
CFLAGS+= -DWITH_CASPER
|
||||
.endif
|
||||
|
||||
CFLAGS+=-I${ELFTCDIR}/libelftc -I${ELFTCDIR}/common
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
Loading…
Reference in New Issue
Block a user