On Tue, Aug 12, 2014 at 11:53 AM, Phil Pennock <[email protected]> wrote:
> On 2014-08-12 at 08:07 -0700, Todd Lyons wrote:
>> OpenBSD 5.5 was released on May 1 2014.  In it, there appears to be
>> movement on deprecating arc4random_* function calls.  A build client
>> builds all of the object files correctly, but is failing to link the
>> final exim binary with the following error:
>
> Already covered in:
>   https://github.com/Exim/exim/issues/14
>
> If we now have an OpenBSD build bot and want to support it, first class,
> then we need a new #define to guard on, "HAVENOT_ARC4RANDOM_STIR"
> perhaps, then define that in "OS/os.h-OpenBSD".  A comment on the guard
> should make clear that before defining this for a new OS, we need to
> make sure that all known releases of that OS support auto-mixing,
> because if not then defining the guard is weakening protection.

I experimented with a vagrant OpenBSD 5.5 box and ended up with this
change.  Look ok to the Unix types?  I don't really like including a
new header file, but it's the simplest (only?) clean way I could see
to get an OS version number.

diff --git a/src/OS/os.h-OpenBSD b/src/OS/os.h-OpenBSD
index 55bade6..9578047 100644
--- a/src/OS/os.h-OpenBSD
+++ b/src/OS/os.h-OpenBSD
@@ -5,6 +5,13 @@
 #define HAVE_SYS_MOUNT_H
 #define SIOCGIFCONF_GIVES_ADDR
 #define HAVE_ARC4RANDOM
+/* In May 2014, OpenBSD 5.5 was released which cleaned up the arc4random_* API
+   which removed the arc4random_stir() function. Set NOT_HAVE_ARC4RANDOM_STIR
+   if the version released is past that point. */
+#include <sys/param.h>
+#if OpenBSD >= 201405
+#define NOT_HAVE_ARC4RANDOM_STIR
+#endif
·
 typedef struct flock flock_t;
·
diff --git a/src/src/expand.c b/src/src/expand.c
index 70d7c7d..0b6513c 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -913,7 +913,9 @@ vaguely_random_number(int max)
 #ifdef HAVE_ARC4RANDOM
       /* cryptographically strong randomness, common on *BSD platforms, not
       so much elsewhere.  Alas. */
+#ifndef NOT_HAVE_ARC4RANDOM_STIR
       arc4random_stir();
+#endif
 #elif defined(HAVE_SRANDOM) || defined(HAVE_SRANDOMDEV)
 #ifdef HAVE_SRANDOMDEV
       /* uses random(4) for seeding */

...Todd
-- 
The total budget at all receivers for solving senders' problems is $0.
If you want them to accept your mail and manage it the way you want,
send it the way the spec says to. --John Levine

-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim 
details at http://www.exim.org/ ##

Reply via email to