diff -Nru libbsd-0.9.1.orig/include/bsd/sys/cdefs.h libbsd-0.9.1/include/bsd/sys/cdefs.h --- libbsd-0.9.1.orig/include/bsd/sys/cdefs.h 2018-05-22 15:56:14.000000000 +0200 +++ libbsd-0.9.1/include/bsd/sys/cdefs.h 2018-05-30 15:27:07.067975364 +0200 @@ -93,7 +93,7 @@ #define LIBBSD_DEPRECATED(x) #endif -#if LIBBSD_GCC_VERSION >= 0x0200 +#if 0 #define LIBBSD_REDIRECT(name, proto, alias) name proto __asm__(LIBBSD_ASMNAME(#alias)) #endif #define LIBBSD_ASMNAME(cname) LIBBSD_ASMNAME_PREFIX(__USER_LABEL_PREFIX__, cname) diff -Nru libbsd-0.9.1.orig/include/bsd/vis.h libbsd-0.9.1/include/bsd/vis.h --- libbsd-0.9.1.orig/include/bsd/vis.h 2018-05-22 16:07:42.000000000 +0200 +++ libbsd-0.9.1/include/bsd/vis.h 2018-05-30 15:37:23.466013504 +0200 @@ -113,14 +113,9 @@ int strvis(char *, const char *, int); int stravis(char **, const char *, int); -#ifdef LIBBSD_NETBSD_VIS -/* NetBSD prototype. */ -int LIBBSD_REDIRECT(strnvis, (char *, size_t, const char *, int), - strnvis_netbsd); -#else -/* OpenBSD prototype (current default). */ -int strnvis(char *, const char *, size_t, int); -#endif + +/* NetBSD prototype */ +int strnvis(char *, size_t, const char *, int); int strsvis(char *, const char *, int, const char *); int strsnvis(char *, size_t, const char *, int, const char *); @@ -135,14 +130,9 @@ int *); int strunvis(char *, const char *); -#ifdef LIBBSD_NETBSD_VIS -/* NetBSD prototype. */ -int LIBBSD_REDIRECT(strnunvis, (char *, size_t, const char *), - strnunvis_netbsd); -#else -/* OpenBSD prototype (current default). */ -ssize_t strnunvis(char *, const char *, size_t); -#endif + +/* NetBSD prototype */ +int strnunvis(char *, size_t, const char *); int strunvisx(char *, const char *, int); int strnunvisx(char *, size_t, const char *, int); diff -Nru libbsd-0.9.1.orig/src/flopen.c libbsd-0.9.1/src/flopen.c --- libbsd-0.9.1.orig/src/flopen.c 2018-05-21 04:33:33.000000000 +0200 +++ libbsd-0.9.1/src/flopen.c 2018-05-30 15:09:48.789934331 +0200 @@ -32,6 +32,7 @@ #include #include +#include #include #include diff -Nru libbsd-0.9.1.orig/src/getentropy.c libbsd-0.9.1/src/getentropy.c --- libbsd-0.9.1.orig/src/getentropy.c 2018-05-21 04:48:37.000000000 +0200 +++ libbsd-0.9.1/src/getentropy.c 2018-05-30 15:44:15.596626881 +0200 @@ -26,6 +26,8 @@ #if defined(__linux__) #include "getentropy_linux.c" +#elif defined(__midipix__) +#include "getentropy_midipix.c" #elif defined(__GNU__) #include "getentropy_hurd.c" #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) diff -Nru libbsd-0.9.1.orig/src/getentropy_midipix.c libbsd-0.9.1/src/getentropy_midipix.c --- libbsd-0.9.1.orig/src/getentropy_midipix.c 1970-01-01 01:00:00.000000000 +0100 +++ libbsd-0.9.1/src/getentropy_midipix.c 2018-05-30 15:43:30.744779217 +0200 @@ -0,0 +1,153 @@ +/* $OpenBSD: getentropy_linux.c,v 1.45 2018/03/13 22:53:28 bcook Exp $ */ + +/* + * Copyright (c) 2014 Theo de Raadt + * Copyright (c) 2014 Bob Beck + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Emulation of getentropy(2) as documented at: + * http://man.openbsd.org/getentropy.2 + */ + +#define _POSIX_C_SOURCE 199309L +#define _GNU_SOURCE 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "hash/sha512.h" + +#ifdef HAVE_GETAUXVAL +#include +#endif +#include + +int getentropy(void *buf, size_t len); + +static int gotdata(char *buf, size_t len); + +static int getentropy_urandom(void *buf, size_t len); + +int +getentropy(void *buf, size_t len) +{ + int ret = -1; + + if (len > 256) { + errno = EIO; + return (-1); + } + + /* + * Try to get entropy with /dev/urandom + * + * This can fail if the process is inside a chroot or if file + * descriptors are exhausted. + */ + ret = getentropy_urandom(buf, len); + if (ret != -1) + return (ret); + + errno = EIO; + return (ret); +} + +/* + * Basic sanity checking; wish we could do better. + */ +static int +gotdata(char *buf, size_t len) +{ + char any_set = 0; + size_t i; + + for (i = 0; i < len; ++i) + any_set |= buf[i]; + if (any_set == 0) + return (-1); + return (0); +} + +static int +getentropy_urandom(void *buf, size_t len) +{ + struct stat st; + size_t i; + int fd, cnt, flags; + int save_errno = errno; + +start: + + flags = O_RDONLY; +#ifdef O_NOFOLLOW + flags |= O_NOFOLLOW; +#endif +#ifdef O_CLOEXEC + flags |= O_CLOEXEC; +#endif + fd = open("/dev/urandom", flags, 0); + if (fd == -1) { + if (errno == EINTR) + goto start; + goto nodevrandom; + } +#ifndef O_CLOEXEC + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); +#endif + + /* Lightly verify that the device node looks sane */ + if (fstat(fd, &st) == -1 || !S_ISCHR(st.st_mode)) { + close(fd); + goto nodevrandom; + } + for (i = 0; i < len; ) { + size_t wanted = len - i; + ssize_t ret = read(fd, (char *)buf + i, wanted); + + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) + continue; + close(fd); + goto nodevrandom; + } + i += ret; + } + close(fd); + if (gotdata(buf, len) == 0) { + errno = save_errno; + return (0); /* satisfied */ + } +nodevrandom: + errno = EIO; + return (-1); +} diff -Nru libbsd-0.9.1.orig/src/getpeereid.c libbsd-0.9.1/src/getpeereid.c --- libbsd-0.9.1.orig/src/getpeereid.c 2017-06-06 04:06:45.000000000 +0200 +++ libbsd-0.9.1/src/getpeereid.c 2018-05-30 15:10:23.777937764 +0200 @@ -40,7 +40,7 @@ getpeereid(int s, uid_t *euid, gid_t *egid) { /* XXX: This should be autodetected at build time instead. */ -#if defined(__linux__) +#if defined(__linux__) || defined(__midipix__) struct ucred cred; #elif defined(__OpenBSD__) struct sockpeercred cred; diff -Nru libbsd-0.9.1.orig/src/setproctitle.c libbsd-0.9.1/src/setproctitle.c --- libbsd-0.9.1.orig/src/setproctitle.c 2018-04-21 23:30:22.000000000 +0200 +++ libbsd-0.9.1/src/setproctitle.c 2018-05-30 15:13:25.245835004 +0200 @@ -221,8 +221,13 @@ #define SPT_MAXTITLE 255 #endif +#ifdef __midipix__ +void +setproctitle(const char *fmt, ...) +#else void setproctitle_impl(const char *fmt, ...) +#endif { /* Use buffer in case argv[0] is passed. */ char buf[SPT_MAXTITLE + 1]; @@ -280,6 +285,7 @@ *++nul = '\0'; } } +#ifndef __midipix__ __asm__(".symver setproctitle_impl,setproctitle@@LIBBSD_0.5"); /* The original function introduced in 0.2 was a stub, it only got implemented @@ -293,3 +299,4 @@ __attribute__((alias("setproctitle_impl"))); #endif __asm__(".symver setproctitle_stub,setproctitle@LIBBSD_0.2"); +#endif /* !__midipix__ */ diff -Nru libbsd-0.9.1.orig/src/unvis.c libbsd-0.9.1/src/unvis.c --- libbsd-0.9.1.orig/src/unvis.c 2018-05-22 16:07:42.000000000 +0200 +++ libbsd-0.9.1/src/unvis.c 2018-05-30 15:20:12.613101869 +0200 @@ -560,6 +560,8 @@ * OpenBSD, 2001: strnunvis(char *dst, const char *src, size_t dlen); * NetBSD: 2012, strnunvis(char *dst, size_t dlen, const char *src); */ +#ifndef __midipix__ /* Temporary fix until upstream resolves this in a later version, */ + /* do not upstream */ ssize_t strnunvis_openbsd(char *dst, const char *src, size_t dlen) { @@ -573,3 +575,9 @@ return strnunvisx(dst, dlen, src, 0); } __asm__(".symver strnunvis_netbsd,strnunvis@LIBBSD_0.9.1"); +#else +int strnunvis(char *dst, size_t dlen, const char *src) +{ + return strnunvisx(dst, dlen, src, 0); +} +#endif /* __midipix__ */ diff -Nru libbsd-0.9.1.orig/src/vis.c libbsd-0.9.1/src/vis.c --- libbsd-0.9.1.orig/src/vis.c 2018-05-22 16:07:42.000000000 +0200 +++ libbsd-0.9.1/src/vis.c 2018-05-30 15:34:26.362596310 +0200 @@ -718,6 +718,7 @@ * OpenBSD, 2001: strnvis(char *dst, const char *src, size_t dlen, int flag); * NetBSD: 2012, strnvis(char *dst, size_t dlen, const char *src, int flag); */ +#ifndef __midipix__ /* see src/unvis.c */ int strnvis_openbsd(char *mbdst, const char *mbsrc, size_t dlen, int flags) { @@ -731,6 +732,13 @@ return istrsenvisxl(&mbdst, &dlen, mbsrc, flags, "", NULL); } __asm__(".symver strnvis_netbsd,strnvis@LIBBSD_0.9.1"); +#else +int +strnvis(char *mbdst, size_t dlen, const char *mbsrc, int flags) +{ + return istrsenvisxl(&mbdst, &dlen, mbsrc, flags, "", NULL); +} +#endif int stravis(char **mbdstp, const char *mbsrc, int flags)