summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWilliam Ahern <william+ubuntu@25thandClement.com>2016-10-19 13:24:50 -0700
committerWilliam Ahern <william+ubuntu@25thandClement.com>2016-10-19 13:24:50 -0700
commit6e9ce5c2b3adfc52030815c43439f4890f31c32c (patch)
treeebffcc6761d18d090da01f755eae781a4041c6e8 /src
parented41847aea5553e67e7df58723dd863c2110b6ae (diff)
parent5949f01087291c0a6431f90264fc9795b133867f (diff)
downloadluaossl-6e9ce5c2b3adfc52030815c43439f4890f31c32c.tar.gz
luaossl-6e9ce5c2b3adfc52030815c43439f4890f31c32c.tar.bz2
luaossl-6e9ce5c2b3adfc52030815c43439f4890f31c32c.zip
Merge branch 'oerdnj-master'
Diffstat (limited to 'src')
-rw-r--r--src/GNUmakefile6
-rw-r--r--src/openssl.c75
2 files changed, 50 insertions, 31 deletions
diff --git a/src/GNUmakefile b/src/GNUmakefile
index 34d9cd2..e7cb54d 100644
--- a/src/GNUmakefile
+++ b/src/GNUmakefile
@@ -20,7 +20,7 @@ OS_$(d) = $(shell $(d)/../mk/vendor.os)
20CC_$(d) = $(shell env CC="$(CC) "$(d)/../mk/vendor.cc) 20CC_$(d) = $(shell env CC="$(CC) "$(d)/../mk/vendor.cc)
21LUAPATH_$(d) = $(shell env CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" $(<D)/../mk/luapath -krxm3 -I$(DESTDIR)$(includedir) -I/usr/include -I/usr/local/include -P$(DESTDIR)$(bindir) -P$(bindir) -L$(DESTDIR)$(libdir) -L$(libdir) -v$(1) $(2)) 21LUAPATH_$(d) = $(shell env CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" $(<D)/../mk/luapath -krxm3 -I$(DESTDIR)$(includedir) -I/usr/include -I/usr/local/include -P$(DESTDIR)$(bindir) -P$(bindir) -L$(DESTDIR)$(libdir) -L$(libdir) -v$(1) $(2))
22 22
23CPPFLAGS_$(d) = $(CPPFLAGS_$(abspath $(@D)/../..)) -DLUA_COMPAT_APIINTCASTS 23CPPFLAGS_$(d) = $(CPPFLAGS_$(abspath $(@D)/../..)) -DLUA_COMPAT_APIINTCASTS -DHAVE_CONFIG_H
24CFLAGS_$(d) = $(CFLAGS_$(abspath $(@D)/../..)) 24CFLAGS_$(d) = $(CFLAGS_$(abspath $(@D)/../..))
25LDFLAGS_$(d) = $(LDFLAGS_$(abspath $(@D)/../..)) 25LDFLAGS_$(d) = $(LDFLAGS_$(abspath $(@D)/../..))
26SOFLAGS_$(d) = $(SOFLAGS_$(abspath $(@D)/../..)) 26SOFLAGS_$(d) = $(SOFLAGS_$(abspath $(@D)/../..))
@@ -41,6 +41,8 @@ endif
41# 41#
42# C O M P I L A T I O N R U L E S 42# C O M P I L A T I O N R U L E S
43# 43#
44$(d)/config.h: $(abspath $(d)/..)/config.h
45 $(CP) $< $@
44 46
45define BUILD_$(d) 47define BUILD_$(d)
46 48
@@ -49,7 +51,7 @@ define BUILD_$(d)
49$$(d)/$(1)/openssl.so: $$(d)/$(1)/openssl.o 51$$(d)/$(1)/openssl.so: $$(d)/$(1)/openssl.o
50 $$(CC) -o $$@ $$^ $$(SOFLAGS_$$(abspath $$(@D)/..)) $$(SOFLAGS) $$(LDFLAGS_$$(abspath $$(@D)/..)) $$(LDFLAGS) 52 $$(CC) -o $$@ $$^ $$(SOFLAGS_$$(abspath $$(@D)/..)) $$(SOFLAGS) $$(LDFLAGS_$$(abspath $$(@D)/..)) $$(LDFLAGS)
51 53
52$$(d)/$(1)/openssl.o: $$(d)/openssl.c $$(d)/compat52.h 54$$(d)/$(1)/openssl.o: $$(d)/openssl.c $$(d)/compat52.h $$(d)/config.h
53 test "$$(notdir $$(@D))" = "$$(call LUAPATH_$$(<D), $$(notdir $$(@D)), version)" 55 test "$$(notdir $$(@D))" = "$$(call LUAPATH_$$(<D), $$(notdir $$(@D)), version)"
54 $$(MKDIR) -p $$(@D) 56 $$(MKDIR) -p $$(@D)
55 $$(CC) $$(CFLAGS_$$(<D)) $$(CFLAGS) $$(call LUAPATH_$$(<D), $$(notdir $$(@D)), cppflags) $$(CPPFLAGS_$$(<D)) $$(CPPFLAGS) -c -o $$@ $$< 57 $$(CC) $$(CFLAGS_$$(<D)) $$(CFLAGS) $$(call LUAPATH_$$(<D), $$(notdir $$(@D)), cppflags) $$(CPPFLAGS_$$(<D)) $$(CPPFLAGS) -c -o $$@ $$<
diff --git a/src/openssl.c b/src/openssl.c
index d8eebb5..78dbd65 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -23,6 +23,10 @@
23 * USE OR OTHER DEALINGS IN THE SOFTWARE. 23 * USE OR OTHER DEALINGS IN THE SOFTWARE.
24 * ========================================================================== 24 * ==========================================================================
25 */ 25 */
26#if HAVE_CONFIG_H
27#include "config.h"
28#endif
29
26#include <limits.h> /* INT_MAX INT_MIN LLONG_MAX LLONG_MIN UCHAR_MAX ULLONG_MAX */ 30#include <limits.h> /* INT_MAX INT_MIN LLONG_MAX LLONG_MIN UCHAR_MAX ULLONG_MAX */
27#include <stdint.h> /* uintptr_t */ 31#include <stdint.h> /* uintptr_t */
28#include <string.h> /* memset(3) strerror_r(3) */ 32#include <string.h> /* memset(3) strerror_r(3) */
@@ -79,10 +83,6 @@
79#define LIBRESSL_PREREQ(M, m, p) \ 83#define LIBRESSL_PREREQ(M, m, p) \
80 (LIBRESSL_VERSION_NUMBER >= (((M) << 28) | ((m) << 20) | ((p) << 12))) 84 (LIBRESSL_VERSION_NUMBER >= (((M) << 28) | ((m) << 20) | ((p) << 12)))
81 85
82#ifndef HAVE_DLADDR
83#define HAVE_DLADDR (!defined _AIX) /* TODO: https://root.cern.ch/drupal/content/aix-and-dladdr */
84#endif
85
86#ifndef HAVE_SSL_CTX_SET_ALPN_PROTOS 86#ifndef HAVE_SSL_CTX_SET_ALPN_PROTOS
87#define HAVE_SSL_CTX_SET_ALPN_PROTOS OPENSSL_PREREQ(1, 0, 2) 87#define HAVE_SSL_CTX_SET_ALPN_PROTOS OPENSSL_PREREQ(1, 0, 2)
88#endif 88#endif
@@ -7811,49 +7811,61 @@ static struct randL_state *randL_getstate(lua_State *L) {
7811 return lua_touserdata(L, lua_upvalueindex(1)); 7811 return lua_touserdata(L, lua_upvalueindex(1));
7812} /* randL_getstate() */ 7812} /* randL_getstate() */
7813 7813
7814#ifndef HAVE_SYS_SYSCTL_H 7814#if HAVE_SYS_SYSCALL_H
7815#define HAVE_SYS_SYSCTL_H (BSD || __GLIBC__) 7815#include <sys/syscall.h> /* SYS_getrandom syscall(2) */
7816#endif 7816#endif
7817 7817
7818#if HAVE_SYS_SYSCTL_H 7818#if HAVE_SYS_SYSCTL_H
7819#include <sys/sysctl.h> /* CTL_KERN KERN_RANDOM RANDOM_UUID KERN_URND KERN_ARND sysctl(2) */ 7819#include <sys/sysctl.h> /* CTL_KERN KERN_RANDOM RANDOM_UUID sysctl(2) */
7820#endif
7821
7822#ifndef HAVE_RANDOM_UUID
7823#define HAVE_RANDOM_UUID (HAVE_SYS_SYSCTL_H && defined __linux) /* RANDOM_UUID is an enum, not macro */
7824#endif
7825
7826#ifndef HAVE_KERN_URND
7827#define HAVE_KERN_URND (defined KERN_URND)
7828#endif
7829
7830#ifndef HAVE_KERN_ARND
7831#define HAVE_KERN_ARND (defined KERN_ARND)
7832#endif 7820#endif
7833 7821
7834static int randL_stir(struct randL_state *st, unsigned rqstd) { 7822static int randL_stir(struct randL_state *st, unsigned rqstd) {
7835 unsigned count = 0; 7823 unsigned count = 0;
7836 int error; 7824 int error;
7837 unsigned char data[256]; 7825 unsigned char data[256];
7838#if HAVE_RANDOM_UUID || HAVE_KERN_URND || HAVE_KERN_ARND 7826
7839#if HAVE_RANDOM_UUID 7827#if HAVE_ARC4RANDOM
7840 int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID }; 7828 while (count < rqstd) {
7841#elif HAVE_KERN_URND 7829 size_t n = MIN(rqstd - count, sizeof data);
7842 int mib[] = { CTL_KERN, KERN_URND }; 7830
7843#else 7831 arc4random(data, n);
7844 int mib[] = { CTL_KERN, KERN_ARND }; 7832
7833 RAND_seed(data, n);
7834
7835 count += n;
7836 }
7837#endif
7838
7839#if HAVE_SYSCALL && HAVE_DECL_SYS_GETRANDOM
7840 while (count < rqstd) {
7841 size_t lim = MIN(rqstd - count, sizeof data);
7842 int n;
7843
7844 n = syscall(SYS_getrandom, data, lim, 0);
7845
7846 if (n == -1) {
7847 break;
7848 }
7849
7850 RAND_seed(data, n);
7851
7852 count += n;
7853 }
7845#endif 7854#endif
7846 7855
7856#if HAVE_SYS_SYSCTL_H && HAVE_DECL_RANDOM_UUID
7847 while (count < rqstd) { 7857 while (count < rqstd) {
7858 int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID };
7848 size_t n = MIN(rqstd - count, sizeof data); 7859 size_t n = MIN(rqstd - count, sizeof data);
7849 7860
7850 if (0 != sysctl(mib, countof(mib), data, &n, (void *)0, 0)) 7861 if (0 != sysctl(mib, countof(mib), data, &n, (void *)0, 0))
7851 break; 7862 break;
7852 7863
7853 RAND_add(data, n, n); 7864 RAND_seed(data, n);
7854 7865
7855 count += n; 7866 count += n;
7856 } 7867 }
7868
7857#endif 7869#endif
7858 7870
7859 if (count < rqstd) { 7871 if (count < rqstd) {
@@ -7884,7 +7896,7 @@ static int randL_stir(struct randL_state *st, unsigned rqstd) {
7884 7896
7885 goto error; 7897 goto error;
7886 default: 7898 default:
7887 RAND_add(data, n, n); 7899 RAND_seed(data, n);
7888 7900
7889 count += n; 7901 count += n;
7890 } 7902 }
@@ -7922,7 +7934,12 @@ error:;
7922#elif defined __sun 7934#elif defined __sun
7923 /* 7935 /*
7924 * NOTE: Linux requires -lrt for clock_gettime, and in any event 7936 * NOTE: Linux requires -lrt for clock_gettime, and in any event
7925 * already has RANDOM_UUID. The BSDs have KERN_URND and KERN_ARND. 7937 * should have RANDOM_UUID or getrandom. (Though, some middle-aged
7938 * kernels might have neither). The BSDs have arc4random which
7939 * should be using KERN_URND, KERN_ARND, and more recently
7940 * getentropy. (Though, again, some older BSD kernels used an
7941 * arc4random implementation that opened /dev/urandom.)
7942 *
7926 * Just do this for Solaris to keep things simple. We've already 7943 * Just do this for Solaris to keep things simple. We've already
7927 * crossed the line of what can be reasonably accomplished on 7944 * crossed the line of what can be reasonably accomplished on
7928 * unreasonable platforms. 7945 * unreasonable platforms.