diff options
author | Sergey Kandaurov <pluknet@nginx.com> | 2018-07-16 13:30:11 +0300 |
---|---|---|
committer | Sergey Kandaurov <pluknet@nginx.com> | 2018-07-16 13:30:11 +0300 |
commit | 7c5a710c5543debff0c70cb4839e15e9a1da322b (patch) | |
tree | a7ee30b8e7aa308a19ee8a98bc745f6a26d9cf38 | |
parent | bf1cb8f399b2b580da5c014439eff038e9d1315f (diff) | |
download | unit-7c5a710c5543debff0c70cb4839e15e9a1da322b.tar.gz unit-7c5a710c5543debff0c70cb4839e15e9a1da322b.tar.bz2 |
Added getentropy() support.
Prodded by David Carlier.
-rw-r--r-- | auto/unix | 43 | ||||
-rw-r--r-- | src/nxt_random.c | 8 | ||||
-rw-r--r-- | src/nxt_unix.h | 2 |
3 files changed, 53 insertions, 0 deletions
@@ -48,6 +48,49 @@ if [ $nxt_found = no ]; then fi +if [ $nxt_found = no ]; then + + # OpenBSD 5.6 lacks <sys/random.h>. + + nxt_feature="getentropy()" + nxt_feature_name=NXT_HAVE_GETENTROPY + nxt_feature_test="#include <unistd.h> + + int main() { + char buf[4]; + + if (getentropy(buf, 4) == -1) { + return 1; + } + + return 0; + }" + . auto/feature +fi + + +if [ $nxt_found = no ]; then + + # macOS 10.12. + + nxt_feature="getentropy() in sys/random.h" + nxt_feature_name=NXT_HAVE_GETENTROPY_SYS_RANDOM + nxt_feature_test="#include <unistd.h> + #include <sys/random.h> + + int main() { + char buf[4]; + + if (getentropy(buf, 4) == -1) { + return 1; + } + + return 0; + }" + . auto/feature +fi + + nxt_feature="ucontext" nxt_feature_name=NXT_HAVE_UCONTEXT nxt_feature_run= diff --git a/src/nxt_random.c b/src/nxt_random.c index b6c9f704..aaa39887 100644 --- a/src/nxt_random.c +++ b/src/nxt_random.c @@ -68,6 +68,14 @@ nxt_random_stir(nxt_random_t *r) n = syscall(SYS_getrandom, &key, NXT_RANDOM_KEY_SIZE, 0); +#elif (NXT_HAVE_GETENTROPY || NXT_HAVE_GETENTROPY_SYS_RANDOM) + + n = 0; + + if (getentropy(&key, NXT_RANDOM_KEY_SIZE) == 0) { + n = NXT_RANDOM_KEY_SIZE; + } + #else n = 0; diff --git a/src/nxt_unix.h b/src/nxt_unix.h index 33e9f247..151dd555 100644 --- a/src/nxt_unix.h +++ b/src/nxt_unix.h @@ -234,6 +234,8 @@ #include <sys/random.h> /* getrandom(). */ #elif (NXT_HAVE_LINUX_SYS_GETRANDOM) #include <linux/random.h> /* SYS_getrandom. */ +#elif (NXT_HAVE_GETENTROPY_SYS_RANDOM) +#include <sys/random.h> /* getentropy(). */ #endif |