Package: getdns Version: 0.9.0-1 Severity: normal Tags: patch Hi,
getdns FTBFS on kfreebsd because it lacks a getentropy implementation for the FreeBSD kernel. But there is one already in LibreSSL Portable we can use, and works fine here. Please find patch attached. Thanks! -- System Information: Debian Release: stretch/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: kfreebsd-amd64 (x86_64) Kernel: kFreeBSD 10.1-0-amd64 Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash
From: Steven Chamberlain <ste...@pyro.eu.org> Date: Sun, 17 Jan 2016 21:25:04 +0000 Subject: Add GNU/kFreeBSD support Import getentropy_freebsd.c from LibreSSL Portable, an implementation of getentropy(2) that uses FreeBSD's kern.random sysctl. Add support for GNU/kFreeBSD by matching *FreeBSD in configure.ac and building getentropy_freebsd in that case. This hasn't been tested yet on regular FreeBSD, which may require extra libs. --- a/configure.ac +++ b/configure.ac @@ -988,6 +988,10 @@ fi AC_SEARCH_LIBS([clock_gettime], [rt]) ;; + *FreeBSD) + AC_LIBOBJ(getentropy_freebsd) + AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT]) + ;; Linux|*) AC_LIBOBJ(getentropy_linux) dnl AC_CHECK_FUNCS([SHA512_Update],,[ --- /dev/null +++ b/src/compat/getentropy_freebsd.c @@ -0,0 +1,62 @@ +/* $OpenBSD: getentropy_freebsd.c,v 1.1 2014/11/03 06:23:30 bcook Exp $ */ + +/* + * Copyright (c) 2014 Pawel Jakub Dawidek <p...@freebsd.org> + * Copyright (c) 2014 Brent Cook <bc...@openbsd.org> + * + * 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://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2 + */ + +#include <sys/types.h> +#include <sys/sysctl.h> + +#include <errno.h> +#include <stddef.h> + +/* + * Derived from lib/libc/gen/arc4random.c from FreeBSD. + */ +static size_t +getentropy_sysctl(u_char *buf, size_t size) +{ + int mib[2]; + size_t len, done; + + mib[0] = CTL_KERN; + mib[1] = KERN_ARND; + done = 0; + + do { + len = size; + if (sysctl(mib, 2, buf, &len, NULL, 0) == -1) + return (done); + done += len; + buf += len; + size -= len; + } while (size > 0); + + return (done); +} + +int +getentropy(void *buf, size_t len) +{ + if (len <= 256 && getentropy_sysctl(buf, len) == len) + return (0); + + errno = EIO; + return (-1); +}