Allow bootstrapping md5 on Linux, MacOS and FreeBSD < 12
In order to build on a Linux host we need to bootstrap md5 since the Linux md5sum command produces output in a different format. Reviewed By: emaste Approved By: brooks (mentor) Differential Revision: https://reviews.freebsd.org/D16846
This commit is contained in:
parent
a52fd948a2
commit
4635180ea7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=338267
@ -28,4 +28,12 @@ MLINKS= md5.1 rmd160.1 \
|
||||
|
||||
LIBADD= md
|
||||
|
||||
.ifndef(BOOTSTRAPPING)
|
||||
# Avoid depending on capsicum during bootstrap. caph_limit_stdout() is not
|
||||
# available when building for Linux/MacOS or older FreeBSD hosts.
|
||||
# We need to bootstrap md5 when building on Linux since the md5sum command there
|
||||
# produces different output.
|
||||
CFLAGS+=-DHAVE_CAPSICUM
|
||||
.endif
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -21,11 +21,10 @@
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/capsicum.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <capsicum_helpers.h>
|
||||
#include <err.h>
|
||||
#include <fcntl.h>
|
||||
#include <md5.h>
|
||||
#include <ripemd.h>
|
||||
#include <sha.h>
|
||||
@ -41,6 +40,11 @@ __FBSDID("$FreeBSD$");
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef HAVE_CAPSICUM
|
||||
#include <sys/capsicum.h>
|
||||
#include <capsicum_helpers.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Length of test block, number of test blocks.
|
||||
*/
|
||||
@ -162,7 +166,9 @@ Arguments (may be any combination):
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
#ifdef HAVE_CAPSICUM
|
||||
cap_rights_t rights;
|
||||
#endif
|
||||
int ch, fd;
|
||||
char *p;
|
||||
char buf[HEX_DIGEST_LENGTH];
|
||||
@ -215,8 +221,10 @@ main(int argc, char *argv[])
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
#ifdef HAVE_CAPSICUM
|
||||
if (caph_limit_stdout() < 0 || caph_limit_stderr() < 0)
|
||||
err(1, "unable to limit rights for stdio");
|
||||
#endif
|
||||
|
||||
if (*argv) {
|
||||
do {
|
||||
@ -232,10 +240,12 @@ main(int argc, char *argv[])
|
||||
* earlier.
|
||||
*/
|
||||
if (*(argv + 1) == NULL) {
|
||||
#ifdef HAVE_CAPSICUM
|
||||
cap_rights_init(&rights, CAP_READ);
|
||||
if ((cap_rights_limit(fd, &rights) < 0 &&
|
||||
errno != ENOSYS) || caph_enter() < 0)
|
||||
err(1, "capsicum");
|
||||
#endif
|
||||
}
|
||||
if ((p = Algorithm[digest].Fd(fd, buf)) == NULL) {
|
||||
warn("%s", *argv);
|
||||
@ -258,8 +268,10 @@ main(int argc, char *argv[])
|
||||
}
|
||||
} while (*++argv);
|
||||
} else if (!sflag && (optind == 1 || qflag || rflag)) {
|
||||
#ifdef HAVE_CAPSICUM
|
||||
if (caph_limit_stdin() < 0 || caph_enter() < 0)
|
||||
err(1, "capsicum");
|
||||
#endif
|
||||
MDFilter(&Algorithm[digest], 0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user