]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #2141 - for libsodium detect lack of entropy in chroot, print
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 3 Nov 2017 15:08:14 +0000 (15:08 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 3 Nov 2017 15:08:14 +0000 (15:08 +0000)
  a message and exit.

git-svn-id: file:///svn/unbound/trunk@4398 be551aaa-1e26-0410-a405-d3ace91eadb9

config.h.in
configure
dnscrypt/dnscrypt.c
dnscrypt/dnscrypt.m4
doc/Changelog

index 16a7b0281a1f713fe8a9a97b6f6cdc5920589832..90038a88fac599d26fdbcee1a75a4b88e2116434 100644 (file)
 /* define if (v)snprintf does not return length needed, (but length used) */
 #undef SNPRINTF_RET_BROKEN
 
+/* Define to 1 if libsodium supports sodium_set_misuse_handler */
+#undef SODIUM_MISUSE_HANDLER
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
index 1c57b61ed664e2139825221ad643b57d67385a86..1977da2b354602c63679e2b1090ecbf6775b8673 100755 (executable)
--- a/configure
+++ b/configure
@@ -20493,6 +20493,66 @@ else
             ENABLE_DNSCRYPT_XCHACHA20=0
 
 
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sodium_set_misuse_handler" >&5
+$as_echo_n "checking for library containing sodium_set_misuse_handler... " >&6; }
+if ${ac_cv_search_sodium_set_misuse_handler+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sodium_set_misuse_handler ();
+int
+main ()
+{
+return sodium_set_misuse_handler ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' sodium; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_sodium_set_misuse_handler=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_sodium_set_misuse_handler+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_sodium_set_misuse_handler+:} false; then :
+
+else
+  ac_cv_search_sodium_set_misuse_handler=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sodium_set_misuse_handler" >&5
+$as_echo "$ac_cv_search_sodium_set_misuse_handler" >&6; }
+ac_res=$ac_cv_search_sodium_set_misuse_handler
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+
+$as_echo "#define SODIUM_MISUSE_HANDLER 1" >>confdefs.h
+
+
 fi
 
 
index b72c62f319f7e83e1e6808757b58a44689a686a3..f139ce8b22b4fe678b34195f746aa5880f523465 100644 (file)
@@ -870,6 +870,16 @@ dnsc_parse_keys(struct dnsc_env *env, struct config_file *cfg)
        return cert_id;
 }
 
+static void
+sodium_misuse_handler(void)
+{
+       fatal_exit(
+               "dnscrypt: libsodium could not be initialized, this typically"
+               " happens when no good source of entropy is found. If you run"
+               " unbound in a chroot, make sure /dev/random is available. See"
+               " https://www.unbound.net/documentation/unbound.conf.html");
+}
+
 
 /**
  * #########################################################
@@ -933,6 +943,9 @@ struct dnsc_env *
 dnsc_create(void)
 {
        struct dnsc_env *env;
+#ifdef SODIUM_MISUSE_HANDLER
+       sodium_set_misuse_handler(sodium_misuse_handler);
+#endif
        if (sodium_init() == -1) {
                fatal_exit("dnsc_create: could not initialize libsodium.");
        }
index 7193519fcf03a9cb1fd98e0960889a7d3e8c78a0..591bd13755816f095af8bd779a310fc98dc2a597 100644 (file)
@@ -28,6 +28,14 @@ AC_DEFUN([dnsc_DNSCRYPT],
         [
             AC_SUBST([ENABLE_DNSCRYPT_XCHACHA20], [0])
         ])
+    AC_SEARCH_LIBS([sodium_set_misuse_handler], [sodium],
+        [
+            AC_DEFINE(
+                [SODIUM_MISUSE_HANDLER], [1],
+                [Define to 1 if libsodium supports sodium_set_misuse_handler])
+        ],
+        [
+        ])
     $1
   else
     AC_SUBST([ENABLE_DNSCRYPT_XCHACHA20], [0])
index 69442680311d3d8da8831ba5e73b8d9c01a6e06c..50e62c54865e990feae550bce07f4bc012eac051 100644 (file)
@@ -1,6 +1,8 @@
 3 November 2017: Wouter 
        - Fix #2362: TLS1.3/openssl-1.1.1 not working.
        - Fix #2034 - Autoconf and -flto.
+       - Fix #2141 - for libsodium detect lack of entropy in chroot, print
+         a message and exit.
 
 2 November 2017: Wouter 
        - Fix #1913: ub_ctx_config is under circumstances thread-safe.