Add a Lua wrapper library for openssl. Add patches for: 1. Revise the makefile, so the package can be built under openwrt 2. Remove "lua_isinteger" implementation from the package's "compat" code in order to avoid linkage issues - An implementation already exists in the target's Lua package. 3. Support OPENSSL_NO_SSL3_METHOD & OPENSSL_NO_COMP Signed-off-by: Amnon Paz <pazamnon@gmail.com>lilik-openwrt-22.03
@ -0,0 +1,42 @@ | |||||
# | |||||
# Copyright (C) 2016 Amnon Paz <pazamnon@gmail.com> | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=lua-openssl | |||||
PKG_VERSION:=0.6.0 | |||||
PKG_RELEASE:=1 | |||||
PKG_MAINTAINER:=Amnon Paz <pazamnon@gmail.com> | |||||
PKG_LICENSE:=MIT | |||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | |||||
PKG_SOURCE_URL:=https://github.com/zhaozg/lua-openssl.git | |||||
PKG_SOURCE_PROTO:=git | |||||
PKG_SOURCE_VERSION:=1b950e6ff8617205cda1a1b612637ef21b9daf96 | |||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/$(PKG_NAME) | |||||
SUBMENU:=Lua | |||||
SECTION:=lang | |||||
CATEGORY:=Languages | |||||
TITLE:=Lua openSSL binding | |||||
URL:=http://github.com/zhaozg/lua-openssl | |||||
DEPENDS:=+lua +libopenssl +librt | |||||
endef | |||||
define Package/lua-openssl/description | |||||
A free, MIT-licensed OpenSSL binding for Lua. | |||||
endef | |||||
define Package/$(PKG_NAME)/install | |||||
$(INSTALL_DIR) $(1)/usr/lib/lua | |||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/openssl.so $(1)/usr/lib/lua/ | |||||
endef | |||||
$(eval $(call BuildPackage,$(PKG_NAME))) |
@ -0,0 +1,135 @@ | |||||
diff --git a/Makefile b/Makefile | |||||
index 6cb1176..6605879 100644 | |||||
--- a/Makefile | |||||
+++ b/Makefile | |||||
@@ -1,85 +1,45 @@ | |||||
-T=openssl | |||||
- | |||||
-PREFIX ?=/usr/local | |||||
-LIB_OPTION ?= -shared | |||||
- | |||||
-#Lua auto detect | |||||
-LUA_VERSION ?= $(shell pkg-config luajit --print-provides) | |||||
-ifeq ($(LUA_VERSION),) ############ Not use luajit | |||||
-LUAV ?= $(shell lua -e "_,_,v=string.find(_VERSION,'Lua (.+)');print(v)") | |||||
-LUA_CFLAGS ?= -I$(PREFIX)/include/lua$(LUAV) | |||||
-LUA_LIBS ?= -L$(PREFIX)/lib | |||||
-LUA_LIBDIR ?= $(PREFIX)/lib/lua/$(LUAV) | |||||
-else | |||||
-LUAV ?= $(shell lua -e "_,_,v=string.find(_VERSION,'Lua (.+)');print(v)") | |||||
-LUA_CFLAGS ?= $(shell pkg-config luajit --cflags) | |||||
-LUA_LIBS ?= $(shell pkg-config luajit --libs) | |||||
-LUA_LIBDIR ?= $(PREFIX)/lib/lua/$(LUAV) | |||||
-endif | |||||
- | |||||
-#OS auto detect | |||||
-SYS := $(shell gcc -dumpmachine) | |||||
- | |||||
-ifneq (, $(findstring linux, $(SYS))) | |||||
-# Do linux things | |||||
-LDFLAGS = -fPIC -lrt -ldl | |||||
-OPENSSL_LIBS ?= $(shell pkg-config openssl --libs) | |||||
-OPENSSL_CFLAGS ?= $(shell pkg-config openssl --cflags) | |||||
-CFLAGS = -fPIC $(OPENSSL_CFLAGS) $(LUA_CFLAGS) | |||||
-endif | |||||
-ifneq (, $(findstring apple, $(SYS))) | |||||
-# Do darwin things | |||||
-LDFLAGS = -fPIC -lrt -ldl | |||||
-OPENSSL_LIBS ?= $(shell pkg-config openssl --libs) | |||||
-OPENSSL_CFLAGS ?= $(shell pkg-config openssl --cflags) | |||||
-CFLAGS = -fPIC $(OPENSSL_CFLAGS) $(LUA_CFLAGS) | |||||
-endif | |||||
-ifneq (, $(findstring mingw, $(SYS))) | |||||
-# Do mingw things | |||||
-V = $(shell lua -e "v=string.gsub('$(LUAV)','%.','');print(v)") | |||||
-LDFLAGS = -mwindows -lcrypt32 -lssl -lcrypto -lws2_32 $(PREFIX)/bin/lua$(V).dll | |||||
-LUA_CFLAGS = -DLUA_LIB -DLUA_BUILD_AS_DLL -I$(PREFIX)/include/ | |||||
-CFLAGS = $(OPENSSL_CFLAGS) $(LUA_CFLAGS) | |||||
-endif | |||||
-ifneq (, $(findstring cygwin, $(SYS))) | |||||
-# Do cygwin things | |||||
-OPENSSL_LIBS ?= $(shell pkg-config openssl --libs) | |||||
-OPENSSL_CFLAGS ?= $(shell pkg-config openssl --cflags) | |||||
-CFLAGS = -fPIC $(OPENSSL_CFLAGS) $(LUA_CFLAGS) | |||||
-endif | |||||
-#custome config | |||||
-ifeq (.config, $(wildcard .config)) | |||||
-include .config | |||||
-endif | |||||
- | |||||
-LIBNAME= $T.so.$V | |||||
- | |||||
-#LIB_OPTION= -bundle -undefined dynamic_lookup #for MacOS X | |||||
- | |||||
-# Compilation directives | |||||
-WARN_MOST = -Wall -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -pedantic | |||||
-WARN = -Wall -Wno-unused-value | |||||
-WARN_MIN = | |||||
-CFLAGS += $(WARN_MIN) -DPTHREADS | |||||
-CC= gcc -g $(CFLAGS) -Ideps | |||||
- | |||||
- | |||||
-OBJS=src/asn1.o src/auxiliar.o src/bio.o src/cipher.o src/cms.o src/compat.o src/crl.o src/csr.o src/dh.o src/digest.o src/dsa.o \ | |||||
-src/ec.o src/engine.o src/hmac.o src/lbn.o src/lhash.o src/misc.o src/ocsp.o src/openssl.o src/ots.o src/pkcs12.o src/pkcs7.o \ | |||||
-src/pkey.o src/rsa.o src/ssl.o src/th-lock.o src/util.o src/x509.o src/xattrs.o src/xexts.o src/xname.o src/xstore.o src/xalgor.o src/callback.o | |||||
- | |||||
-.c.o: | |||||
- $(CC) -c -o $@ $? | |||||
- | |||||
-all: $T.so | |||||
- echo $(SYS) | |||||
- | |||||
-$T.so: $(OBJS) | |||||
- MACOSX_DEPLOYMENT_TARGET="10.3"; export MACOSX_DEPLOYMENT_TARGET; $(CC) $(CFLAGS) $(LIB_OPTION) -o $T.so $(OBJS) $(OPENSSL_LIBS) $(LUA_LIBS) $(LDFLAGS) | |||||
- | |||||
-install: all | |||||
- mkdir -p $(LUA_LIBDIR) | |||||
- cp $T.so $(LUA_LIBDIR) | |||||
- | |||||
-clean: | |||||
- rm -f $T.so $(OBJS) | |||||
+.PHONY: install clean | |||||
+ | |||||
+PKGC ?= pkg-config | |||||
+ | |||||
+LIBNAME = openssl.so | |||||
+LIB_OPTION = -shared | |||||
+ | |||||
+# lua's package config can be under various names | |||||
+LUAPKGC := $(shell for pc in lua lua5.1 lua5.2 lua5.3; do \ | |||||
+ $(PKGC) --exists $$pc && echo $$pc && break; \ | |||||
+ done) | |||||
+ | |||||
+BUILD_DIR = $(shell pwd) | |||||
+ | |||||
+# LUA include/libraries build flags | |||||
+LUA_LIBDIR := $(shell $(PKGC) --variable=libdir $(LUAPKGC)) | |||||
+LUA_CFLAGS := $(shell $(PKGC) --cflags $(LUAPKGC)) | |||||
+LUA_LIBS := $(shell $(PKGC) --libs-only-L $(LUAPKGC)) | |||||
+ | |||||
+# openssl include/libraries build flags | |||||
+OPENSSL_LIBS = $(shell $(PKGC) openssl --libs) | |||||
+OPENSSL_CFLAGS = $(shell $(PKGC) openssl --cflags) | |||||
+ | |||||
+# openssl include/libraries build flags | |||||
+LOCAL_INCLUDE = -I$(BUILD_DIR)/deps | |||||
+ | |||||
+CFLAGS += -fPIC -DPTHREADS -g $(LOCAL_INCLUDE) $(OPENSSL_CFLAGS) $(LUA_CFLAGS) | |||||
+LDFLAGS += -lrt -ldl $(OPENSSL_LIBS) $(LUA_LIBS) | |||||
+ | |||||
+OBJS = src/asn1.o src/auxiliar.o src/bio.o src/cipher.o src/cms.o src/compat.o src/crl.o src/csr.o src/dh.o src/digest.o src/dsa.o src/ec.o src/engine.o src/hmac.o src/lbn.o src/lhash.o src/misc.o src/ocsp.o src/openssl.o src/ots.o src/pkcs12.o src/pkcs7.o src/pkey.o src/rsa.o src/ssl.o src/th-lock.o src/util.o src/x509.o src/xattrs.o src/xexts.o src/xname.o src/xstore.o src/xalgor.o src/callback.o | |||||
+ | |||||
+all: clean $(LIBNAME) | |||||
+ | |||||
+$(LIBNAME): $(OBJS) | |||||
+ $(CC) $(LDFLAGS) $(LIB_OPTION) $(OBJS) -o $@ | |||||
+ | |||||
+%.o: %.c | |||||
+ $(CC) $(CFLAGS) -c $< -o $@ | |||||
+ | |||||
+install: all | |||||
+ mkdir -p $(LUA_LIBDIR) | |||||
+ cp $(LIBNAME) $(LUA_LIBDIR) | |||||
+ | |||||
+clean: | |||||
+ rm -f $(LIBNAME) $(OBJS) |
@ -0,0 +1,36 @@ | |||||
diff --git a/deps/lua-compat/c-api/compat-5.3.c b/deps/lua-compat/c-api/compat-5.3.c | |||||
index 4395bbc..4a8877c 100644 | |||||
--- a/deps/lua-compat/c-api/compat-5.3.c | |||||
+++ b/deps/lua-compat/c-api/compat-5.3.c | |||||
@@ -491,17 +491,6 @@ COMPAT53_API int lua_geti (lua_State *L, int index, lua_Integer i) { | |||||
} | |||||
-COMPAT53_API int lua_isinteger (lua_State *L, int index) { | |||||
- if (lua_type(L, index) == LUA_TNUMBER) { | |||||
- lua_Number n = lua_tonumber(L, index); | |||||
- lua_Integer i = lua_tointeger(L, index); | |||||
- if (i == n) | |||||
- return 1; | |||||
- } | |||||
- return 0; | |||||
-} | |||||
- | |||||
- | |||||
static void compat53_reverse (lua_State *L, int a, int b) { | |||||
for (; a < b; ++a, --b) { | |||||
lua_pushvalue(L, a); | |||||
diff --git a/deps/lua-compat/c-api/compat-5.3.h b/deps/lua-compat/c-api/compat-5.3.h | |||||
index 2309294..8e67bae 100644 | |||||
--- a/deps/lua-compat/c-api/compat-5.3.h | |||||
+++ b/deps/lua-compat/c-api/compat-5.3.h | |||||
@@ -244,9 +244,6 @@ typedef int (*lua_KFunction)(lua_State *L, int status, lua_KContext ctx); | |||||
#define lua_geti COMPAT53_CONCAT(COMPAT53_PREFIX, _geti) | |||||
COMPAT53_API int lua_geti (lua_State *L, int index, lua_Integer i); | |||||
-#define lua_isinteger COMPAT53_CONCAT(COMPAT53_PREFIX, _isinteger) | |||||
-COMPAT53_API int lua_isinteger (lua_State *L, int index); | |||||
- | |||||
#define lua_numbertointeger(n, p) \ | |||||
((*(p) = (lua_Integer)(n)), 1) | |||||
@ -0,0 +1,41 @@ | |||||
--- lua-openssl-0.6.0.old/src/ssl.c 2016-09-19 08:30:43.735075695 +0200 | |||||
+++ lua-openssl-0.6.0/src/ssl.c 2016-09-19 09:02:45.733813437 +0200 | |||||
@@ -24,12 +24,17 @@ | |||||
SSL_METHOD* method = NULL; | |||||
const char* ciphers; | |||||
SSL_CTX* ctx; | |||||
- if (strcmp(meth, "SSLv3") == 0) | |||||
+ if (0); | |||||
+ | |||||
+#ifndef OPENSSL_NO_SSL3 | |||||
+ else if (strcmp(meth, "SSLv3") == 0) | |||||
method = SSLv3_method(); /* SSLv3 */ | |||||
else if (strcmp(meth, "SSLv3_server") == 0) | |||||
method = SSLv3_server_method(); /* SSLv3 */ | |||||
else if (strcmp(meth, "SSLv3_client") == 0) | |||||
method = SSLv3_client_method(); /* SSLv3 */ | |||||
+#endif | |||||
+ | |||||
else if (strcmp(meth, "SSLv23") == 0) | |||||
method = SSLv23_method(); /* SSLv3 but can rollback to v2 */ | |||||
else if (strcmp(meth, "SSLv23_server") == 0) | |||||
@@ -79,15 +84,15 @@ | |||||
#endif | |||||
else | |||||
luaL_error(L, "#1:%s not supported\n" | |||||
- "Maybe SSLv3 SSLv23 TLSv1 TLSv1_1 TLSv1_2 DTLSv1 [SSLv2], option followed by _client or _server\n", | |||||
- "default is SSLv3", | |||||
+ "Maybe [SSLv3] SSLv23 TLSv1 TLSv1_1 TLSv1_2 DTLSv1 [SSLv2], option followed by _client or _server\n", | |||||
+ "default is TLSv1", | |||||
meth); | |||||
ciphers = luaL_optstring(L, 2, SSL_DEFAULT_CIPHER_LIST); | |||||
ctx = SSL_CTX_new(method); | |||||
if (!ctx) | |||||
luaL_error(L, "#1:%s not supported\n" | |||||
- "Maybe SSLv3 SSLv23 TLSv1 TLSv1_1 TLSv1_2 DTLSv1 [SSLv2], option followed by _client or _server\n", | |||||
- "default is SSLv3", | |||||
+ "Maybe [SSLv3] SSLv23 TLSv1 TLSv1_1 TLSv1_2 DTLSv1 [SSLv2], option followed by _client or _server\n", | |||||
+ "default is TLSv1", | |||||
meth); | |||||
openssl_newvalue(L, ctx); | |||||
SSL_CTX_set_cipher_list(ctx, ciphers); |
@ -0,0 +1,20 @@ | |||||
--- lua-openssl-0.6.0.old/src/ssl.c 2016-09-19 08:30:43.735075695 +0200 | |||||
+++ lua-openssl-0.6.0/src/ssl.c 2016-09-19 08:48:37.393737125 +0200 | |||||
@@ -1245,7 +1250,7 @@ | |||||
lua_pushinteger(L, st); | |||||
return 2; | |||||
} | |||||
-#ifndef LIBRESSL_VERSION_NUMBER | |||||
+#if !defined(OPENSSL_NO_COMP) && !defined(LIBRESSL_VERSION_NUMBER) | |||||
static int openssl_ssl_current_compression(lua_State *L) | |||||
{ | |||||
SSL* s = CHECK_OBJECT(1, SSL, "openssl.ssl"); | |||||
@@ -1803,7 +1808,7 @@ | |||||
{"getfd", openssl_ssl_getfd}, | |||||
{"current_cipher", openssl_ssl_current_cipher}, | |||||
-#ifndef LIBRESSL_VERSION_NUMBER | |||||
+#if !defined(OPENSSL_NO_COMP) && !defined(LIBRESSL_VERSION_NUMBER) | |||||
{"current_compression", openssl_ssl_current_compression}, | |||||
#endif | |||||
{"getpeerverification", openssl_ssl_getpeerverification}, |