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:
Alex Richardson 2018-08-23 18:19:01 +00:00
parent a52fd948a2
commit 4635180ea7
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=338267
2 changed files with 22 additions and 2 deletions

View File

@ -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>

View File

@ -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);
}