Added openconnect + ocserv related packageslilik-openwrt-22.03
@ -0,0 +1,64 @@ | |||
# | |||
# Copyright (C) 2006-2012 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=gmp | |||
PKG_VERSION:=5.1.3 | |||
PKG_RELEASE:=1 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 | |||
PKG_SOURCE_URL:=ftp://ftp.gmplib.org/pub/$(PKG_NAME)-$(PKG_VERSION)/ | |||
PKG_MD5SUM:=a082867cbca5e898371a97bb27b31fea | |||
PKG_BUILD_PARALLEL:=1 | |||
PKG_INSTALL:=1 | |||
PKG_FIXUP:=autoreconf | |||
PKG_USE_MIPS16:=0 | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/libgmp | |||
SECTION:=libs | |||
CATEGORY:=Libraries | |||
TITLE:=GNU multiprecision arithmetic library | |||
URL:=http://gmplib.org/ | |||
endef | |||
define Package/libgmp/description | |||
GMP is a free library for arbitrary precision arithmetic, operating on | |||
signed integers, rational numbers, and floating point numbers. | |||
endef | |||
TARGET_CFLAGS += $(FPIC) | |||
CONFIGURE_VARS += CC="$(TARGET_CROSS)gcc" | |||
CONFIGURE_ARGS += \ | |||
--enable-shared \ | |||
--enable-static \ | |||
define Build/Compile | |||
$(call Build/Compile/Default, \ | |||
DESTDIR="$(PKG_INSTALL_DIR)" \ | |||
CC="$(TARGET_CC)" \ | |||
all \ | |||
) | |||
endef | |||
define Build/InstallDev | |||
$(INSTALL_DIR) $(1)/usr/include | |||
$(CP) $(PKG_INSTALL_DIR)/usr/include/gmp* $(1)/usr/include/ | |||
$(INSTALL_DIR) $(1)/usr/lib | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgmp.{a,so*} $(1)/usr/lib/ | |||
endef | |||
define Package/libgmp/install | |||
$(INSTALL_DIR) $(1)/usr/lib | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgmp.so.* $(1)/usr/lib/ | |||
endef | |||
$(eval $(call BuildPackage,libgmp)) |
@ -0,0 +1,34 @@ | |||
# gnutls avanced configuration | |||
menu "Configuration" | |||
depends on PACKAGE_libgnutls | |||
config GNUTLS_DTLS_SRTP | |||
bool "enable DTLS SRTP support" | |||
config GNUTLS_ALPN | |||
bool "enable ALPN support" | |||
config GNUTLS_OCSP | |||
bool "enable ocsp support" | |||
config GNUTLS_CRYPTODEV | |||
bool "enable /dev/crypto support" | |||
depends on BROKEN | |||
config GNUTLS_HEARTBEAT | |||
bool "enable DTLS heartbeat support" | |||
config GNUTLS_OPENPGP | |||
bool "enable OPENPGP authentication support" | |||
config GNUTLS_SRP | |||
bool "enable SRP authentication support" | |||
config GNUTLS_PSK | |||
bool "enable PSK authentication support" | |||
config GNUTLS_ANON | |||
bool "enable anonymous authentication support" | |||
endmenu |
@ -0,0 +1,231 @@ | |||
# | |||
# Copyright (C) 2005-2010 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=gnutls | |||
PKG_VERSION:=3.2.15 | |||
PKG_RELEASE:=1 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | |||
PKG_SOURCE_URL:=ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2 | |||
PKG_MD5SUM:=ec3b06f80e312137386c5d322183ca5a | |||
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org> | |||
PKG_INSTALL:=1 | |||
PKG_LIBTOOL_PATHS:=. lib | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/gnutls/Default | |||
SUBMENU:=SSL | |||
SECTION:=libs | |||
CATEGORY:=Libraries | |||
TITLE:=GNU TLS | |||
URL:=http://www.gnutls.org/ | |||
endef | |||
define Package/gnutls/Default/description | |||
GnuTLS is a secure communications library implementing the SSL, TLS | |||
and DTLS protocols and technologies around them. It provides a simple | |||
C language application programming interface (API) to access the secure | |||
communications protocols as well as APIs to parse and write X.509, PKCS12, | |||
OpenPGP and other required structures. It is aimed to be portable and | |||
efficient with focus on security and interoperability. | |||
endef | |||
define Package/certtool | |||
$(call Package/gnutls/Default) | |||
SECTION:=utils | |||
CATEGORY:=Utilities | |||
TITLE+= (certool utility) | |||
DEPENDS+= +libgnutls | |||
endef | |||
define Package/certtool/description | |||
$(call Package/gnutls/Default/description) | |||
This package contains the GnuTLS certtool utility. | |||
endef | |||
define Package/gnutls-utils | |||
$(call Package/gnutls/Default) | |||
SECTION:=utils | |||
CATEGORY:=Utilities | |||
TITLE+= (utilities) | |||
DEPENDS+= +libgnutls | |||
endef | |||
define Package/gnutls-utils/description | |||
$(call Package/gnutls/Default/description) | |||
This package contains the GnuTLS gnutls-cli, gnutls-serv, psktool, | |||
and srptool utilities. | |||
endef | |||
define Package/libgnutls/config | |||
source "$(SOURCE)/Config.in" | |||
endef | |||
define Package/libgnutls | |||
$(call Package/gnutls/Default) | |||
TITLE+= (library) | |||
DEPENDS+= +libnettle +!LIBNETTLE_MINI:libgmp | |||
endef | |||
define Package/libgnutls/description | |||
$(call Package/gnutls/Default/description) | |||
This package contains the GnuTLS shared library, needed by other programs. | |||
endef | |||
define Package/libgnutls-openssl | |||
$(call Package/gnutls/Default) | |||
TITLE+= (OpenSSL compat library) | |||
DEPENDS+= +libgnutls | |||
endef | |||
define Package/libgnutls-openssl/description | |||
$(call Package/gnutls/Default/description) | |||
This package contains the GnuTLS OpenSSL compatibility layer shared library. | |||
endef | |||
CONFIGURE_ARGS+= \ | |||
--enable-shared \ | |||
--enable-static \ | |||
--disable-libdane \ | |||
--disable-guile \ | |||
--disable-nls \ | |||
--without-zlib \ | |||
--with-included-libtasn1 \ | |||
--enable-local-libopts \ | |||
--disable-doc \ | |||
--disable-tests \ | |||
--disable-rsa-export \ | |||
--disable-crywrap \ | |||
--without-p11-kit | |||
ifeq ($(CONFIG_LIBNETTLE_MINI),y) | |||
CONFIGURE_ARGS += --with-nettle-mini | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_DTLS_SRTP),y) | |||
CONFIGURE_ARGS += --disable-dtls-srtp-support | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_ALPN),y) | |||
CONFIGURE_ARGS += --disable-alpn-support | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_HEARTBEAT),y) | |||
CONFIGURE_ARGS += --disable-heartbeat-support | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_SRP),y) | |||
CONFIGURE_ARGS += --disable-srp-authentication | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_PSK),y) | |||
CONFIGURE_ARGS += --disable-psk-authentication | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_OPENPGP),y) | |||
CONFIGURE_ARGS += --disable-openpgp-authentication | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_ANON),y) | |||
CONFIGURE_ARGS += --disable-anon-authentication | |||
endif | |||
ifneq ($(CONFIG_GNUTLS_OCSP),y) | |||
CONFIGURE_ARGS += --disable-ocsp | |||
endif | |||
ifeq ($(CONFIG_GNUTLS_CRYPTODEV),y) | |||
CONFIGURE_ARGS += --enable-cryptodev | |||
endif | |||
# XXX: AM_CFLAGS duplicates with CFLAGS | |||
MAKE_FLAGS:= \ | |||
AM_CFLAGS="" \ | |||
TARGET_CFLAGS += $(FPIC) | |||
TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib | |||
define Build/Configure | |||
$(SED) 's,-I$$$${includedir},,g' $(PKG_BUILD_DIR)/configure | |||
$(SED) 's,-L$$$${libdir},,g' $(PKG_BUILD_DIR)/configure | |||
$(call Build/Configure/Default) | |||
endef | |||
define Build/InstallDev | |||
$(INSTALL_DIR) $(1)/usr/include $(1)/usr/lib/pkgconfig | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/include/gnutls \ | |||
$(1)/usr/include/ | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/lib/libgnutls{,-openssl}.{a,so*} \ | |||
$(1)/usr/lib/ | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/gnutls.pc \ | |||
$(1)/usr/lib/pkgconfig/ | |||
endef | |||
define Package/certtool/conffiles | |||
/etc/gnutls/certtool.cfg | |||
endef | |||
define Package/certtool/install | |||
$(INSTALL_DIR) $(1)/etc/gnutls | |||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/doc/certtool.cfg $(1)/etc/gnutls/ | |||
$(INSTALL_DIR) $(1)/usr/bin | |||
$(CP) $(PKG_INSTALL_DIR)/usr/bin/certtool $(1)/usr/bin/ | |||
endef | |||
define Package/gnutls-utils/install | |||
$(INSTALL_DIR) $(1)/usr/bin | |||
ifeq ($(CONFIG_GNUTLS_OCSP),y) | |||
ifeq ($(CONFIG_GNUTLS_ANON),y) | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/bin/gnutls-{cli,serv} \ | |||
$(1)/usr/bin/ | |||
endif | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/bin/ocsptool \ | |||
$(1)/usr/bin/ | |||
endif | |||
ifeq ($(CONFIG_GNUTLS_SRP),y) | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/bin/srptool \ | |||
$(1)/usr/bin/ | |||
endif | |||
ifeq ($(CONFIG_GNUTLS_PSK),y) | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/bin/psktool \ | |||
$(1)/usr/bin/ | |||
endif | |||
endef | |||
define Package/libgnutls/install | |||
$(INSTALL_DIR) $(1)/usr/lib | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgnutls.so.* $(1)/usr/lib/ | |||
endef | |||
define Package/libgnutls-openssl/install | |||
$(INSTALL_DIR) $(1)/usr/lib | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libgnutls-openssl.so.* $(1)/usr/lib/ | |||
endef | |||
$(eval $(call BuildPackage,certtool)) | |||
$(eval $(call BuildPackage,gnutls-utils)) | |||
$(eval $(call BuildPackage,libgnutls)) | |||
$(eval $(call BuildPackage,libgnutls-openssl)) |
@ -0,0 +1,9 @@ | |||
# nettle avanced configuration | |||
menu "Configuration" | |||
depends on PACKAGE_libnettle | |||
config LIBNETTLE_MINI | |||
bool "use mini-gmp instead of gmp; the library will be much smaller at a 10x performance penalty. Note that this option may have side effects to programs that link to both nettle and gmp." | |||
endmenu |
@ -0,0 +1,85 @@ | |||
# | |||
# Copyright (C) 2014 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=nettle | |||
PKG_VERSION:=2.7.1 | |||
PKG_RELEASE:=1 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||
PKG_SOURCE_URL:=@GNU/nettle | |||
PKG_MD5SUM:=003d5147911317931dd453520eb234a5 | |||
PKG_MAINTAINER:=Nikos Mavrogiannopoulos <nmav@gnutls.org> | |||
PKG_LICENSE:=LGPLv2 | |||
PKG_LICENSE_FILES:=COPYING | |||
PKG_FIXUP:=autoreconf | |||
PKG_BUILD_PARALLEL:=0 | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/libnettle | |||
SECTION:=libs | |||
CATEGORY:=Libraries | |||
TITLE:=GNU crypto library | |||
URL:=http://www.lysator.liu.se/~nisse/nettle/ | |||
DEPENDS+= +!LIBNETTLE_MINI:libgmp | |||
endef | |||
define Package/libnettle/config | |||
source "$(SOURCE)/Config.in" | |||
endef | |||
TARGET_CFLAGS += $(FPIC) | |||
CONFIGURE_ARGS += \ | |||
--enable-shared \ | |||
--disable-openssl \ | |||
--disable-documentation \ | |||
--enable-static | |||
ifeq ($(CONFIG_LIBNETTLE_MINI),y) | |||
CONFIGURE_ARGS += --enable-mini-gmp | |||
endif | |||
ifeq ($(CONFIG_CPU_SUBTYPE),neon) | |||
CONFIGURE_ARGS += \ | |||
--enable-arm-neon | |||
endif | |||
define Build/Compile | |||
$(call Build/Compile/Default, \ | |||
DESTDIR="$(PKG_INSTALL_DIR)" \ | |||
CC="$(TARGET_CC)" \ | |||
libnettle.so libhogweed.so | |||
+$(MAKE) -i $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ | |||
DESTDIR="$(PKG_INSTALL_DIR)" \ | |||
install) | |||
endef | |||
define Build/InstallDev | |||
$(INSTALL_DIR) $(1)/usr/include/nettle | |||
$(CP) $(PKG_INSTALL_DIR)/usr/include/nettle/*.h $(1)/usr/include/nettle/ | |||
$(INSTALL_DIR) $(1)/usr/lib | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libnettle.{a,so*} $(1)/usr/lib/ | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libhogweed.{a,so*} $(1)/usr/lib/ | |||
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig | |||
$(CP) \ | |||
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/nettle.pc \ | |||
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/hogweed.pc \ | |||
$(1)/usr/lib/pkgconfig/ | |||
endef | |||
define Package/libnettle/install | |||
$(INSTALL_DIR) $(1)/usr/lib | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libnettle.so.* $(1)/usr/lib/ | |||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libhogweed.so.* $(1)/usr/lib/ | |||
endef | |||
$(eval $(call BuildPackage,libnettle)) |
@ -0,0 +1,463 @@ | |||
From 8d5360e3e5eea3c9dbfd44f9b981f18a41605e45 Mon Sep 17 00:00:00 2001 | |||
From: Nikos Mavrogiannopoulos <nmav@gnutls.org> | |||
Date: Sun, 9 Mar 2014 11:30:25 +0100 | |||
Subject: [PATCH 2/5] Added option to use mini-gmp in hogweed. | |||
--- | |||
Makefile.in | 8 +++-- | |||
bignum.h | 6 +++- | |||
configure.ac | 76 +++++++++++++++++++++++++++++++++++------------- | |||
dsa.h | 2 +- | |||
ecc-internal.h | 2 +- | |||
ecc.h | 2 +- | |||
eccdata.c | 12 +++++++- | |||
examples/Makefile.in | 2 +- | |||
examples/ecc-benchmark.c | 2 ++ | |||
gmp-glue.c | 1 + | |||
gmp-glue.h | 2 +- | |||
hogweed.pc.in | 2 +- | |||
mini-gmp.c | 2 +- | |||
mini-gmp.h | 9 ++++++ | |||
pkcs1.h | 2 +- | |||
rsa.h | 2 +- | |||
testsuite/Makefile.in | 4 +-- | |||
testsuite/testutils.h | 5 ++-- | |||
18 files changed, 102 insertions(+), 39 deletions(-) | |||
diff --git a/Makefile.in b/Makefile.in | |||
index 3b0e1cb..42be3a9 100644 | |||
--- a/Makefile.in | |||
+++ b/Makefile.in | |||
@@ -16,6 +16,10 @@ MKDIR_P = @MKDIR_P@ | |||
OPT_ASM_SOURCES = @OPT_ASM_SOURCES@ | |||
+OPT_HOGWEED_SOURCES = @OPT_HOGWEED_SOURCES@ | |||
+ | |||
+OPT_HOGWEED_HEADERS = @OPT_HOGWEED_HEADERS@ | |||
+ | |||
SUBDIRS = tools testsuite examples | |||
include config.make | |||
@@ -106,7 +110,7 @@ nettle_SOURCES = aes-decrypt-internal.c aes-decrypt.c \ | |||
nettle-meta-armors.c \ | |||
write-be32.c write-le32.c write-le64.c | |||
-hogweed_SOURCES = sexp.c sexp-format.c \ | |||
+hogweed_SOURCES = $(OPT_HOGWEED_SOURCES) sexp.c sexp-format.c \ | |||
sexp-transport.c sexp-transport-format.c \ | |||
bignum.c bignum-next-prime.c \ | |||
bignum-random.c bignum-random-prime.c \ | |||
@@ -156,7 +160,7 @@ HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \ | |||
pgp.h pkcs1.h realloc.h ripemd160.h rsa.h rsa-compat.h \ | |||
salsa20.h sexp.h \ | |||
serpent.h sha.h sha1.h sha2.h sha3.h twofish.h \ | |||
- umac.h yarrow.h | |||
+ umac.h yarrow.h $(OPT_HOGWEED_HEADERS) | |||
INSTALL_HEADERS = $(HEADERS) nettle-stdint.h | |||
diff --git a/bignum.h b/bignum.h | |||
index 746b21f..1f2ff07 100644 | |||
--- a/bignum.h | |||
+++ b/bignum.h | |||
@@ -28,7 +28,11 @@ | |||
#include "nettle-meta.h" | |||
-#include <gmp.h> | |||
+#ifdef USE_MINI_GMP | |||
+# include "mini-gmp.h" | |||
+#else | |||
+# include <gmp.h> | |||
+#endif | |||
#include "nettle-types.h" | |||
#ifdef __cplusplus | |||
diff --git a/configure.ac b/configure.ac | |||
index 78a3d4e..93eb09a 100644 | |||
--- a/configure.ac | |||
+++ b/configure.ac | |||
@@ -72,6 +72,16 @@ AC_ARG_ENABLE(arm-neon, | |||
AC_HELP_STRING([--enable-arm-neon], [Enable ARM Neon assembly. (default=auto)]),, | |||
[enable_arm_neon=auto]) | |||
+AC_ARG_ENABLE(mini-gmp, | |||
+ AC_HELP_STRING([--enable-mini-gmp], [Disable gmp support and enable mini-gmp. (default=disabled)]),, | |||
+ [enable_mini_gmp=no]) | |||
+ | |||
+if test "x$enable_mini_gmp" = xyes ; then | |||
+GMP_LIBS="" | |||
+else | |||
+GMP_LIBS="-lgmp" | |||
+fi | |||
+ | |||
LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \ | |||
`echo $exec_prefix | sed "s@^NONE@$prefix/lib@g" | sed "s@^NONE@$ac_default_prefix/lib@g"` \ | |||
/usr/local/lib /sw/local/lib /sw/lib \ | |||
@@ -409,7 +419,7 @@ case "$host_os" in | |||
LIBHOGWEED_SONAME='libhogweed.$(LIBHOGWEED_MAJOR).dylib' | |||
LIBHOGWEED_FILE='libhogweed.$(LIBHOGWEED_MAJOR).$(LIBHOGWEED_MINOR).dylib' | |||
LIBHOGWEED_LINK='$(CC) $(CFLAGS) -dynamiclib -L. $(LDFLAGS) -install_name ${libdir}/$(LIBHOGWEED_SONAME) -compatibility_version $(LIBHOGWEED_MAJOR) -current_version $(LIBHOGWEED_MAJOR).$(LIBHOGWEED_MINOR)' | |||
- LIBHOGWEED_LIBS='-lnettle -lgmp' | |||
+ LIBHOGWEED_LIBS='-lnettle $(GMP_LIBS)' | |||
;; | |||
solaris*) | |||
# Sun's ld uses -h to set the soname, and this option is passed | |||
@@ -425,7 +435,7 @@ case "$host_os" in | |||
LIBHOGWEED_SONAME='$(LIBHOGWEED_FORLINK).$(LIBHOGWEED_MAJOR)' | |||
LIBHOGWEED_FILE='$(LIBHOGWEED_SONAME).$(LIBHOGWEED_MINOR)' | |||
LIBHOGWEED_LINK='$(CC) $(CFLAGS) $(LDFLAGS) -L. -G -h $(LIBHOGWEED_SONAME)' | |||
- LIBHOGWEED_LIBS='-lnettle -lgmp' | |||
+ LIBHOGWEED_LIBS='-lnettle $(GMP_LIBS)' | |||
;; | |||
*) | |||
LIBNETTLE_FORLINK=libnettle.so | |||
@@ -443,7 +453,7 @@ case "$host_os" in | |||
# -lhogweed -lgmp -lnettle are still required). Also makes dlopen | |||
# of libhogweed.so work, without having to use RTLD_GLOBAL. | |||
# Depends on -L. above, to locate nettle.so. | |||
- LIBHOGWEED_LIBS='-lnettle -lgmp' | |||
+ LIBHOGWEED_LIBS='-lnettle $(GMP_LIBS)' | |||
;; | |||
esac | |||
@@ -644,32 +654,55 @@ if test "x$nettle_cv_fcntl_locking" = "xyes" ; then | |||
AC_DEFINE(HAVE_FCNTL_LOCKING) | |||
fi | |||
-# Checks for libraries | |||
-AC_CHECK_LIB(gmp, __gmpz_getlimbn,, | |||
- [AC_MSG_WARN( | |||
+TESTSUITE_LIBS="" | |||
+ | |||
+OPT_HOGWEED_SOURCES="" | |||
+OPT_HOGWEED_HEADERS="" | |||
+if test "x$enable_mini_gmp" = xyes ; then | |||
+ OPT_HOGWEED_SOURCES="$OPT_HOGWEED_SOURCES mini-gmp.c" | |||
+ OPT_HOGWEED_HEADERS="$OPT_HOGWEED_HEADERS mini-gmp.h" | |||
+ AC_DEFINE([USE_MINI_GMP], 1, [Use mini-gmp instead of gmp]) | |||
+ IF_NOT_MINI_GMP='#' | |||
+ GMP_NUMB_BITS="0" | |||
+else | |||
+ | |||
+ # Checks for libraries | |||
+ AC_CHECK_LIB(gmp, __gmpz_getlimbn,, | |||
+ [AC_MSG_WARN( | |||
[GNU MP not found, or not 3.1 or up, see http://gmplib.org/. | |||
Support for public key algorithms will be unavailable.])] | |||
- enable_public_key=no) | |||
+ enable_public_key=no) | |||
-# Add -R flags needed to run programs linked with gmp | |||
-LSH_RPATH_FIX | |||
+ # Add -R flags needed to run programs linked with gmp | |||
+ LSH_RPATH_FIX | |||
-# Check for gmp limb size | |||
-nettle_cv_gmp_numb_bits=0 | |||
-if test "$enable_public_key" = yes; then | |||
- AC_MSG_CHECKING([for GMP limb size]) | |||
- AC_COMPUTE_INT(nettle_cv_gmp_numb_bits, [GMP_NUMB_BITS], | |||
- [#include <gmp.h>], | |||
- [AC_MSG_FAILURE([cannot find value of GMP_NUMB_BITS])]) | |||
+ # Check for gmp limb size | |||
+ nettle_cv_gmp_numb_bits=0 | |||
+ if test "$enable_public_key" = yes; then | |||
+ AC_MSG_CHECKING([for GMP limb size]) | |||
+ AC_COMPUTE_INT(nettle_cv_gmp_numb_bits, [GMP_NUMB_BITS], | |||
+ [#include <gmp.h>], | |||
+ [AC_MSG_FAILURE([cannot find value of GMP_NUMB_BITS])]) | |||
- AC_MSG_RESULT([$nettle_cv_gmp_numb_bits bits]) | |||
+ AC_MSG_RESULT([$nettle_cv_gmp_numb_bits bits]) | |||
+ fi | |||
+ | |||
+ GMP_NUMB_BITS="$nettle_cv_gmp_numb_bits" | |||
+ | |||
+ AH_TEMPLATE([HAVE_MPZ_POWM_SEC], [Define if mpz_powm_sec is available (appeared in GMP-5)]) | |||
+ AC_CHECK_FUNC(__gmpz_powm_sec, [AC_DEFINE(HAVE_MPZ_POWM_SEC)]) | |||
+ | |||
+ IF_NOT_MINI_GMP='' | |||
+ TESTSUITE_LIBS="-lgmp" | |||
fi | |||
-GMP_NUMB_BITS="$nettle_cv_gmp_numb_bits" | |||
-AC_SUBST([GMP_NUMB_BITS]) | |||
+AC_SUBST([GMP_LIBS]) | |||
-AH_TEMPLATE([HAVE_MPZ_POWM_SEC], [Define if mpz_powm_sec is available (appeared in GMP-5)]) | |||
-AC_CHECK_FUNC(__gmpz_powm_sec, [AC_DEFINE(HAVE_MPZ_POWM_SEC)]) | |||
+dnl The testsuite requires gmp | |||
+AC_SUBST([TESTSUITE_LIBS]) | |||
+AC_SUBST([GMP_NUMB_BITS]) | |||
+AC_SUBST([OPT_HOGWEED_SOURCES]) | |||
+AC_SUBST([OPT_HOGWEED_HEADERS]) | |||
AH_TEMPLATE([WITH_HOGWEED], [Defined if public key features are enabled]) | |||
@@ -714,6 +747,7 @@ else | |||
IF_DOCUMENTATION='#' | |||
fi | |||
+AC_SUBST(IF_NOT_MINI_GMP) | |||
AC_SUBST(IF_HOGWEED) | |||
AC_SUBST(IF_STATIC) | |||
AC_SUBST(IF_SHARED) | |||
diff --git a/dsa.h b/dsa.h | |||
index 7ee2624..478e4fc 100644 | |||
--- a/dsa.h | |||
+++ b/dsa.h | |||
@@ -26,7 +26,7 @@ | |||
#ifndef NETTLE_DSA_H_INCLUDED | |||
#define NETTLE_DSA_H_INCLUDED | |||
-#include <gmp.h> | |||
+#include "bignum.h" | |||
#include "nettle-types.h" | |||
diff --git a/ecc-internal.h b/ecc-internal.h | |||
index e8974fe..5cdd0e1 100644 | |||
--- a/ecc-internal.h | |||
+++ b/ecc-internal.h | |||
@@ -25,7 +25,7 @@ | |||
#ifndef NETTLE_ECC_INTERNAL_H_INCLUDED | |||
#define NETTLE_ECC_INTERNAL_H_INCLUDED | |||
-#include <gmp.h> | |||
+#include "bignum.h" | |||
#include "nettle-types.h" | |||
#include "ecc-curve.h" | |||
diff --git a/ecc.h b/ecc.h | |||
index 609d246..924f8ec 100644 | |||
--- a/ecc.h | |||
+++ b/ecc.h | |||
@@ -25,7 +25,7 @@ | |||
#ifndef NETTLE_ECC_H_INCLUDED | |||
#define NETTLE_ECC_H_INCLUDED | |||
-#include <gmp.h> | |||
+#include "bignum.h" | |||
#include "nettle-types.h" | |||
diff --git a/eccdata.c b/eccdata.c | |||
index 466753c..24f64e3 100644 | |||
--- a/eccdata.c | |||
+++ b/eccdata.c | |||
@@ -24,11 +24,14 @@ | |||
/* Development of Nettle's ECC support was funded by the .SE Internet Fund. */ | |||
+#include "config.h" | |||
+ | |||
#include <assert.h> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
#include <string.h> | |||
+#include "mini-gmp.h" | |||
#include "mini-gmp.c" | |||
/* Affine coordinates, for simplicity. Infinity point represented as x | |||
@@ -895,6 +898,7 @@ int | |||
main (int argc, char **argv) | |||
{ | |||
struct ecc_curve ecc; | |||
+ unsigned bits; | |||
if (argc < 4) | |||
{ | |||
@@ -902,6 +906,7 @@ main (int argc, char **argv) | |||
return EXIT_FAILURE; | |||
} | |||
+ bits = atoi(argv[4]); | |||
ecc_curve_init (&ecc, atoi(argv[1])); | |||
ecc_pippenger_precompute (&ecc, atoi(argv[2]), atoi(argv[3])); | |||
@@ -912,7 +917,12 @@ main (int argc, char **argv) | |||
ecc_curve_check (&ecc); | |||
if (argc > 4) | |||
- output_curve (&ecc, atoi(argv[4])); | |||
+ { | |||
+ /* when using mini-gmp we cannot estimate it on configure */ | |||
+ if (bits == 0) | |||
+ bits = GMP_NUMB_BITS; | |||
+ output_curve (&ecc, bits); | |||
+ } | |||
return EXIT_SUCCESS; | |||
} | |||
diff --git a/examples/Makefile.in b/examples/Makefile.in | |||
index 563d0dc..2bb0436 100644 | |||
--- a/examples/Makefile.in | |||
+++ b/examples/Makefile.in | |||
@@ -11,7 +11,7 @@ PRE_CPPFLAGS = -I.. -I$(top_srcdir) | |||
PRE_LDFLAGS = -L.. | |||
OPENSSL_LIBFLAGS = @OPENSSL_LIBFLAGS@ | |||
-BENCH_LIBS = @BENCH_LIBS@ -lm | |||
+BENCH_LIBS = @BENCH_LIBS@ $(TESTSUITE_LIBS) -lm | |||
HOGWEED_TARGETS = rsa-keygen$(EXEEXT) rsa-sign$(EXEEXT) \ | |||
rsa-verify$(EXEEXT) rsa-encrypt$(EXEEXT) rsa-decrypt$(EXEEXT) \ | |||
diff --git a/examples/ecc-benchmark.c b/examples/ecc-benchmark.c | |||
index 1faf6dc..16a1fd6 100644 | |||
--- a/examples/ecc-benchmark.c | |||
+++ b/examples/ecc-benchmark.c | |||
@@ -37,6 +37,8 @@ | |||
#include "timing.h" | |||
+#undef USE_MINI_GMP | |||
+#include <gmp.h> | |||
#include "../ecc.h" | |||
#include "../ecc-internal.h" | |||
#include "../gmp-glue.h" | |||
diff --git a/gmp-glue.c b/gmp-glue.c | |||
index a2633a5..d76fdea 100644 | |||
--- a/gmp-glue.c | |||
+++ b/gmp-glue.c | |||
@@ -239,3 +239,4 @@ gmp_free_limbs (mp_limb_t *p, mp_size_t n) | |||
free_func (p, (size_t) n * sizeof(mp_limb_t)); | |||
} | |||
+ | |||
diff --git a/gmp-glue.h b/gmp-glue.h | |||
index 269667f..f51b5b5 100644 | |||
--- a/gmp-glue.h | |||
+++ b/gmp-glue.h | |||
@@ -23,7 +23,7 @@ | |||
#ifndef NETTLE_GMP_GLUE_H_INCLUDED | |||
#define NETTLE_GMP_GLUE_H_INCLUDED | |||
-#include <gmp.h> | |||
+#include "bignum.h" | |||
#include "nettle-stdint.h" | |||
diff --git a/hogweed.pc.in b/hogweed.pc.in | |||
index 457f5f2..9a9dea0 100644 | |||
--- a/hogweed.pc.in | |||
+++ b/hogweed.pc.in | |||
@@ -13,6 +13,6 @@ URL: http://www.lysator.liu.se/~nisse/nettle | |||
Version: @PACKAGE_VERSION@ | |||
Requires.private: nettle | |||
Libs: -L${libdir} -lhogweed | |||
-Libs.private: -lgmp | |||
+Libs.private: @GMP_LIBS@ | |||
Cflags: -I${includedir} | |||
diff --git a/mini-gmp.c b/mini-gmp.c | |||
index 766df30..cf76a2a 100644 | |||
--- a/mini-gmp.c | |||
+++ b/mini-gmp.c | |||
@@ -1388,7 +1388,7 @@ mpz_clear (mpz_t r) | |||
gmp_free (r->_mp_d); | |||
} | |||
-static void * | |||
+void * | |||
mpz_realloc (mpz_t r, mp_size_t size) | |||
{ | |||
size = GMP_MAX (size, 1); | |||
diff --git a/mini-gmp.h b/mini-gmp.h | |||
index d8f691f..dac7d1e 100644 | |||
--- a/mini-gmp.h | |||
+++ b/mini-gmp.h | |||
@@ -70,6 +70,11 @@ typedef struct | |||
mp_limb_t *_mp_d; /* Pointer to the limbs. */ | |||
} __mpz_struct; | |||
+typedef __mpz_struct MP_INT; | |||
+ | |||
+#define GMP_NUMB_BITS (SIZEOF_LONG*8) | |||
+#define GMP_NUMB_MASK (~0) | |||
+ | |||
typedef __mpz_struct mpz_t[1]; | |||
typedef __mpz_struct *mpz_ptr; | |||
@@ -119,6 +124,10 @@ void mpz_init (mpz_t); | |||
void mpz_init2 (mpz_t, mp_bitcnt_t); | |||
void mpz_clear (mpz_t); | |||
+void * | |||
+mpz_realloc (mpz_t r, mp_size_t size); | |||
+#define _mpz_realloc mpz_realloc | |||
+ | |||
#define mpz_odd_p(z) (((z)->_mp_size != 0) & (int) (z)->_mp_d[0]) | |||
#define mpz_even_p(z) (! mpz_odd_p (z)) | |||
diff --git a/pkcs1.h b/pkcs1.h | |||
index fa27225..f402688 100644 | |||
--- a/pkcs1.h | |||
+++ b/pkcs1.h | |||
@@ -26,7 +26,7 @@ | |||
#ifndef NETTLE_PKCS1_H_INCLUDED | |||
#define NETTLE_PKCS1_H_INCLUDED | |||
-#include <gmp.h> | |||
+#include "bignum.h" | |||
#include "nettle-types.h" | |||
#ifdef __cplusplus | |||
diff --git a/rsa.h b/rsa.h | |||
index 4226f38..c293cd1 100644 | |||
--- a/rsa.h | |||
+++ b/rsa.h | |||
@@ -26,7 +26,7 @@ | |||
#ifndef NETTLE_RSA_H_INCLUDED | |||
#define NETTLE_RSA_H_INCLUDED | |||
-#include <gmp.h> | |||
+#include "bignum.h" | |||
#include "nettle-types.h" | |||
#include "md5.h" | |||
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in | |||
index 91f6e2a..c8ab5f6 100644 | |||
--- a/testsuite/Makefile.in | |||
+++ b/testsuite/Makefile.in | |||
@@ -47,7 +47,7 @@ TS_HOGWEED = $(TS_HOGWEED_SOURCES:.c=$(EXEEXT)) | |||
TS_C = $(TS_NETTLE) @IF_HOGWEED@ $(TS_HOGWEED) | |||
TS_CXX = @IF_CXX@ $(CXX_SOURCES:.cxx=$(EXEEXT)) | |||
TARGETS = $(TS_C) $(TS_CXX) | |||
-TS_SH = sexp-conv-test pkcs1-conv-test symbols-test | |||
+TS_SH = sexp-conv-test pkcs1-conv-test @IF_NOT_MINI_GMP@ symbols-test | |||
TS_ALL = $(TARGETS) $(TS_SH) | |||
EXTRA_SOURCES = sha1-huge-test.c | |||
EXTRA_TARGETS = $(EXTRA_SOURCES:.c=$(EXEEXT)) | |||
@@ -75,7 +75,7 @@ all: $(TARGETS) $(EXTRA_TARGETS) | |||
LIB_HOGWEED = @IF_HOGWEED@ -lhogweed | |||
TEST_OBJS = testutils.$(OBJEXT) ../nettle-internal.$(OBJEXT) \ | |||
- $(LIB_HOGWEED) -lnettle $(LIBS) | |||
+ $(LIB_HOGWEED) -lnettle $(LIBS) $(TESTSUITE_LIBS) | |||
../nettle-internal.$(OBJEXT): | |||
( cd .. && $(MAKE) nettle-internal.$(OBJEXT) ) | |||
diff --git a/testsuite/testutils.h b/testsuite/testutils.h | |||
index 123bae2..a677a2a 100644 | |||
--- a/testsuite/testutils.h | |||
+++ b/testsuite/testutils.h | |||
@@ -12,11 +12,10 @@ | |||
#include <stdio.h> | |||
#include <string.h> | |||
-#if HAVE_LIBGMP | |||
-# include "bignum.h" | |||
-#endif | |||
#if WITH_HOGWEED | |||
+# include <gmp.h> | |||
+# undef USE_MINI_GMP | |||
# include "rsa.h" | |||
# include "dsa.h" | |||
# include "ecc-curve.h" | |||
-- | |||
1.9.2 | |||
@ -0,0 +1,100 @@ | |||
From 7508bb15de94b38402152757f75ff3e2094fdd86 Mon Sep 17 00:00:00 2001 | |||
From: Nikos Mavrogiannopoulos <nmav@gnutls.org> | |||
Date: Sun, 9 Mar 2014 13:27:03 +0100 | |||
Subject: [PATCH 4/5] Added-auto-generated-nettle-config.h | |||
--- | |||
Makefile.in | 4 ++-- | |||
bignum.h | 1 + | |||
configure.ac | 1 + | |||
examples/ecc-benchmark.c | 1 + | |||
nettle-config.h.in | 6 ++++++ | |||
testsuite/testutils.h | 1 + | |||
7 files changed, 13 insertions(+), 2 deletions(-) | |||
create mode 100644 nettle-config.h.in | |||
diff --git a/Makefile.in b/Makefile.in | |||
index 42be3a9..280dd30 100644 | |||
--- a/Makefile.in | |||
+++ b/Makefile.in | |||
@@ -151,7 +151,7 @@ HEADERS = aes.h arcfour.h arctwo.h asn1.h bignum.h blowfish.h \ | |||
des.h des-compat.h dsa.h ecc-curve.h ecc.h ecdsa.h \ | |||
gcm.h gosthash94.h hmac.h \ | |||
knuth-lfib.h \ | |||
- macros.h \ | |||
+ macros.h nettle-config.h \ | |||
md2.h md4.h \ | |||
md5.h md5-compat.h \ | |||
memxor.h \ | |||
@@ -174,7 +174,7 @@ DISTFILES = $(SOURCES) $(HEADERS) getopt.h .bootstrap run-tests \ | |||
config.guess config.sub install-sh texinfo.tex \ | |||
config.h.in config.m4.in config.make.in Makefile.in \ | |||
README AUTHORS COPYING.LIB INSTALL NEWS TODO ChangeLog \ | |||
- nettle.pc.in hogweed.pc.in \ | |||
+ nettle.pc.in hogweed.pc.in nettle-config.h.in \ | |||
memxor.c $(des_headers) descore.README \ | |||
aes-internal.h camellia-internal.h serpent-internal.h \ | |||
cast128_sboxes.h desinfo.h desCode.h \ | |||
diff --git a/bignum.h b/bignum.h | |||
index 1f2ff07..c31ccaa 100644 | |||
--- a/bignum.h | |||
+++ b/bignum.h | |||
@@ -26,6 +26,7 @@ | |||
#ifndef NETTLE_BIGNUM_H_INCLUDED | |||
#define NETTLE_BIGNUM_H_INCLUDED | |||
+#include "nettle-config.h" | |||
#include "nettle-meta.h" | |||
#ifdef USE_MINI_GMP | |||
diff --git a/configure.ac b/configure.ac | |||
index c24f954..cb65bcd 100644 | |||
--- a/configure.ac | |||
+++ b/configure.ac | |||
@@ -10,6 +10,7 @@ AC_CONFIG_AUX_DIR([.]) | |||
AC_CONFIG_MACRO_DIR([.]) | |||
AC_CONFIG_HEADER([config.h]) | |||
+AC_CONFIG_HEADER([nettle-config.h]) | |||
LIBNETTLE_MAJOR=4 | |||
LIBNETTLE_MINOR=7 | |||
diff --git a/examples/ecc-benchmark.c b/examples/ecc-benchmark.c | |||
index 16a1fd6..eaaf3a5 100644 | |||
--- a/examples/ecc-benchmark.c | |||
+++ b/examples/ecc-benchmark.c | |||
@@ -38,6 +38,7 @@ | |||
#include "timing.h" | |||
#undef USE_MINI_GMP | |||
+#define NETTLE_CONFIG_H_INCLUDED | |||
#include <gmp.h> | |||
#include "../ecc.h" | |||
#include "../ecc-internal.h" | |||
diff --git a/nettle-config.h.in b/nettle-config.h.in | |||
new file mode 100644 | |||
index 0000000..11330ff | |||
--- /dev/null | |||
+++ b/nettle-config.h.in | |||
@@ -0,0 +1,6 @@ | |||
+#ifndef NETTLE_CONFIG_H_INCLUDED | |||
+#define NETTLE_CONFIG_H_INCLUDED | |||
+ | |||
+#undef USE_MINI_GMP | |||
+ | |||
+#endif | |||
diff --git a/testsuite/testutils.h b/testsuite/testutils.h | |||
index a677a2a..6e9b30c 100644 | |||
--- a/testsuite/testutils.h | |||
+++ b/testsuite/testutils.h | |||
@@ -15,6 +15,7 @@ | |||
#if WITH_HOGWEED | |||
# include <gmp.h> | |||
+# define NETTLE_CONFIG_H_INCLUDED | |||
# undef USE_MINI_GMP | |||
# include "rsa.h" | |||
# include "dsa.h" | |||
-- | |||
1.9.2 | |||
@ -0,0 +1,34 @@ | |||
From d71b3138cbdc3852c96a2639995f2d7f44b1c76c Mon Sep 17 00:00:00 2001 | |||
From: Nikos Mavrogiannopoulos <nmav@gnutls.org> | |||
Date: Sat, 29 Mar 2014 09:12:41 +0100 | |||
Subject: [PATCH 5/5] allow der-iterator to be used with mini-gmp | |||
--- | |||
der-iterator.c | 4 ++-- | |||
1 file changed, 2 insertions(+), 2 deletions(-) | |||
diff --git a/der-iterator.c b/der-iterator.c | |||
index 2e6efd5..5ab15b9 100644 | |||
--- a/der-iterator.c | |||
+++ b/der-iterator.c | |||
@@ -30,7 +30,7 @@ | |||
#include <assert.h> | |||
#include <stdlib.h> | |||
-#if HAVE_LIBGMP | |||
+#if defined(HAVE_LIBGMP) || defined(USE_MINI_GMP) | |||
#include "bignum.h" | |||
#endif | |||
@@ -246,7 +246,7 @@ asn1_der_get_uint32(struct asn1_der_iterator *i, | |||
return 1; | |||
} | |||
-#if HAVE_LIBGMP | |||
+#if defined(HAVE_LIBGMP) || defined(USE_MINI_GMP) | |||
int | |||
asn1_der_get_bignum(struct asn1_der_iterator *i, | |||
mpz_t x, unsigned max_bits) | |||
-- | |||
1.9.2 | |||
@ -0,0 +1,14 @@ | |||
# ocserv avanced configuration | |||
menu "Configuration" | |||
depends on PACKAGE_ocserv | |||
config OCSERV_PAM | |||
bool "enable PAM" | |||
default n | |||
config OCSERV_PROTOBUF | |||
bool "use external libprotobuf" | |||
default n | |||
endmenu |
@ -0,0 +1,77 @@ | |||
# | |||
# Copyright (C) 2007-2011 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=ocserv | |||
PKG_VERSION:=0.8.0 | |||
PKG_RELEASE:=2 | |||
PKG_BUILD_DIR :=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | |||
PKG_SOURCE_URL :=ftp://ftp.infradead.org/pub/ocserv/ | |||
PKG_MD5SUM:=6383535a21f8eecfb1bbb7f7ac99c41f | |||
PKG_LICENSE:=GPLv3 | |||
PKG_LICENSE_FILES:=COPYING | |||
PKG_FIXUP:=autoreconf | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/ocserv/config | |||
source "$(SOURCE)/Config.in" | |||
endef | |||
define Package/ocserv | |||
SECTION:=net | |||
CATEGORY:=Network | |||
SUBMENU:=VPN | |||
TITLE:=OpenConnect VPN server | |||
URL:=http://www.infradead.org/ocserv/ | |||
MAINTAINER:=Nikos Mavrogiannopoulos <n.mavrogiannopoulos@gmail.com> | |||
DEPENDS:= +libgnutls +libncurses +libreadline +OCSERV_PAM:libpam +OCSERV_PROTOBUF:libprotobuf-c | |||
endef | |||
define Package/ocserv/description | |||
OpenConnect server (ocserv) is an SSL VPN server. Its purpose is to be | |||
a secure, small, fast and configurable VPN server. It implements the | |||
OpenConnect SSL VPN protocol, and has also (currently experimental) | |||
compatibility with clients using the AnyConnect SSL VPN protocol. The | |||
OpenConnect VPN protocol uses the standard IETF security protocols such | |||
as TLS 1.2, and Datagram TLS to provide the secure VPN service. | |||
endef | |||
EXTRA_CPPFLAGS+=-I$(STAGING_DIR)/usr/include/readline/ | |||
EXTRA_LDFLAGS+=-lncurses | |||
CONFIGURE_ARGS+= \ | |||
--enable-local-libopts \ | |||
--with-libreadline-prefix="$(STAGING_DIR)/" \ | |||
ifneq ($(CONFIG_OCSERV_PAM),y) | |||
CONFIGURE_ARGS += --without-pam | |||
endif | |||
ifneq ($(CONFIG_OCSERV_PROTOBUF),y) | |||
CONFIGURE_ARGS += --without-protobuf | |||
endif | |||
define Package/ocserv/install | |||
$(INSTALL_DIR) $(1)/usr/sbin | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ocserv $(1)/usr/sbin/ | |||
$(INSTALL_DIR) $(1)/usr/bin | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ocpasswd $(1)/usr/bin/ | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/occtl $(1)/usr/bin/ | |||
$(INSTALL_DIR) $(1)/etc/init.d | |||
$(INSTALL_BIN) ./files/ocserv.init $(1)/etc/init.d/ocserv | |||
$(INSTALL_DIR) $(1)/etc/ocserv | |||
$(INSTALL_CONF) ./files/ocserv.conf.template $(1)/etc/ocserv/ocserv.conf.template | |||
$(INSTALL_DIR) $(1)/etc/config | |||
$(INSTALL_CONF) ./files/config $(1)/etc/config/ocserv | |||
endef | |||
$(eval $(call BuildPackage,ocserv)) |
@ -0,0 +1,17 @@ | |||
config ocserv 'config' | |||
option port '4443' | |||
option dpd '180' | |||
option max_clients '8' | |||
option max_same '2' | |||
option enable '0' | |||
option zone 'lan' | |||
config ocservusers | |||
config dns | |||
option ip '8.8.8.8' | |||
config routes | |||
option ip '192.168.1.0' | |||
option netmask '255.255.255.0' |
@ -0,0 +1,11 @@ | |||
#!/bin/sh | |||
ZONE=`uci get ocserv.config.ZONE` | |||
if [ "$REASON" = "connect" ];then | |||
env -i ACTION=ifup INTERFACE="$ZONE" DEVICE=$DEVICE /sbin/hotplug-call "iface" | |||
else | |||
env -i ACTION=ifdown INTERFACE="$ZONE" DEVICE=$DEVICE /sbin/hotplug-call "iface" | |||
fi | |||
exit 0 |
@ -0,0 +1,339 @@ | |||
# User authentication method. Could be set multiple times and in that case | |||
# all should succeed. | |||
# Options: certificate, pam. | |||
#auth = "certificate" | |||
#auth = "pam" | |||
# The gid-min option is used by auto-select-group option, in order to | |||
# select the minimum group ID. | |||
#auth = "pam[gid-min=1000]" | |||
# The plain option requires specifying a password file which contains | |||
# entries of the following format. | |||
# "username:groupname:encoded-password" | |||
# One entry must be listed per line, and 'ocpasswd' can be used | |||
# to generate password entries. | |||
auth = "|AUTH|" | |||
# A banner to be displayed on clients | |||
banner = "Welcome to OpenWRT" | |||
# Use listen-host to limit to specific IPs or to the IPs of a provided | |||
# hostname. | |||
#listen-host = [IP|HOSTNAME] | |||
# Limit the number of clients. Unset or set to zero for unlimited. | |||
#max-clients = 1024 | |||
max-clients = |MAX_CLIENTS| | |||
# Limit the number of client connections to one every X milliseconds | |||
# (X is the provided value). Set to zero for no limit. | |||
#rate-limit-ms = 100 | |||
# Limit the number of identical clients (i.e., users connecting | |||
# multiple times). Unset or set to zero for unlimited. | |||
max-same-clients = |MAX_SAME| | |||
# TCP and UDP port number | |||
tcp-port = |PORT| | |||
|UDP|udp-port = |PORT| | |||
# Keepalive in seconds | |||
keepalive = 32400 | |||
# Dead peer detection in seconds. | |||
dpd = |DPD| | |||
# Dead peer detection for mobile clients. The needs to | |||
# be much higher to prevent such clients being awaken too | |||
# often by the DPD messages, and save battery. | |||
# (clients that send the X-AnyConnect-Identifier-DeviceType) | |||
#mobile-dpd = 1800 | |||
# MTU discovery (DPD must be enabled) | |||
try-mtu-discovery = false | |||
# The key and the certificates of the server | |||
# The key may be a file, or any URL supported by GnuTLS (e.g., | |||
# tpmkey:uuid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx;storage=user | |||
# or pkcs11:object=my-vpn-key;object-type=private) | |||
# | |||
# There may be multiple certificate and key pairs and each key | |||
# should correspond to the preceding certificate. | |||
server-cert = /etc/ocserv/server-cert.pem | |||
server-key = /etc/ocserv/server-key.pem | |||
# Diffie-Hellman parameters. Only needed if you require support | |||
# for the DHE ciphersuites (by default this server supports ECDHE). | |||
# Can be generated using: | |||
# certtool --generate-dh-params --outfile /path/to/dh.pem | |||
#dh-params = /path/to/dh.pem | |||
# If you have a certificate from a CA that provides an OCSP | |||
# service you may provide a fresh OCSP status response within | |||
# the TLS handshake. That will prevent the client from connecting | |||
# independently on the OCSP server. | |||
# You can update this response periodically using: | |||
# ocsptool --ask --load-cert=your_cert --load-issuer=your_ca --outfile response | |||
# Make sure that you replace the following file in an atomic way. | |||
#ocsp-response = /path/to/ocsp.der | |||
# In case PKCS #11 or TPM keys are used the PINs should be available | |||
# in files. The srk-pin-file is applicable to TPM keys only, and is the | |||
# storage root key. | |||
#pin-file = /path/to/pin.txt | |||
#srk-pin-file = /path/to/srkpin.txt | |||
# The Certificate Authority that will be used to verify | |||
# client certificates (public keys) if certificate authentication | |||
# is set. | |||
#ca-cert = /etc/ocserv/ca.pem | |||
# The object identifier that will be used to read the user ID in the client | |||
# certificate. The object identifier should be part of the certificate's DN | |||
# Useful OIDs are: | |||
# CN = 2.5.4.3, UID = 0.9.2342.19200300.100.1.1 | |||
#cert-user-oid = 0.9.2342.19200300.100.1.1 | |||
# The object identifier that will be used to read the user group in the | |||
# client certificate. The object identifier should be part of the certificate's | |||
# DN. Useful OIDs are: | |||
# OU (organizational unit) = 2.5.4.11 | |||
#cert-group-oid = 2.5.4.11 | |||
# The revocation list of the certificates issued by the 'ca-cert' above. | |||
#crl = /etc/ocserv/crl.pem | |||
# GnuTLS priority string | |||
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT" | |||
# To enforce perfect forward secrecy (PFS) on the main channel. | |||
#tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA" | |||
# The time (in seconds) that a client is allowed to stay connected prior | |||
# to authentication | |||
auth-timeout = 40 | |||
# The time (in seconds) that a client is allowed to stay idle (no traffic) | |||
# before being disconnected. Unset to disable. | |||
#idle-timeout = 1200 | |||
# The time (in seconds) that a mobile client is allowed to stay idle (no | |||
# traffic) before being disconnected. Unset to disable. | |||
#mobile-idle-timeout = 2400 | |||
# The time (in seconds) that a client is not allowed to reconnect after | |||
# a failed authentication attempt. | |||
#min-reauth-time = 2 | |||
# Cookie timeout (in seconds) | |||
# which he can reconnect. That cookie will be invalided if not | |||
# used within this timeout value. On a user disconnection, that | |||
# cookie will also be active for this time amount prior to be | |||
# invalid. That should allow a reasonable amount of time for roaming | |||
# between different networks. | |||
cookie-timeout = 300 | |||
# Whether roaming is allowed, i.e., if true a cookie is | |||
# restricted to a single IP address and cannot be re-used | |||
# from a different IP. | |||
deny-roaming = false | |||
# ReKey time (in seconds) | |||
# ocserv will ask the client to refresh keys periodically once | |||
# this amount of seconds is elapsed. Set to zero to disable. | |||
rekey-time = 172800 | |||
# ReKey method | |||
# Valid options: ssl, new-tunnel | |||
# ssl: Will perform an efficient rehandshake on the channel allowing | |||
# a seamless connection during rekey. | |||
# new-tunnel: Will instruct the client to discard and re-establish the channel. | |||
# Use this option only if the connecting clients have issues with the ssl | |||
# option. | |||
rekey-method = ssl | |||
# Script to call when a client connects and obtains an IP | |||
# Parameters are passed on the environment. | |||
# REASON, USERNAME, GROUPNAME, HOSTNAME (the hostname selected by client), | |||
# DEVICE, IP_REAL (the real IP of the client), IP_LOCAL (the local IP | |||
# in the P-t-P connection), IP_REMOTE (the VPN IP of the client), | |||
# ID (a unique numeric ID); REASON may be "connect" or "disconnect". | |||
connect-script = /usr/bin/ocserv-script | |||
disconnect-script = /usr/bin/ocserv-script | |||
# UTMP | |||
use-utmp = false | |||
# Whether to enable support for the occtl tool (i.e., either through D-BUS, | |||
# or via a unix socket). | |||
use-occtl = true | |||
# socket file used for IPC with occtl. You only need to set that, | |||
# if you use more than a single servers. | |||
occtl-socket-file = /var/run/occtl.socket | |||
# PID file. It can be overriden in the command line. | |||
pid-file = /var/run/ocserv.pid | |||
# The default server directory. Does not require any devices present. | |||
chroot-dir = /var/lib/ocserv | |||
# socket file used for IPC, will be appended with .PID | |||
# It must be accessible within the chroot environment (if any) | |||
#socket-file = /var/run/ocserv-socket | |||
socket-file = ocserv-socket | |||
# The user the worker processes will be run as. It should be | |||
# unique (no other services run as this user). | |||
run-as-user = ocserv | |||
run-as-group = ocserv | |||
# Set the protocol-defined priority (SO_PRIORITY) for packets to | |||
# be sent. That is a number from 0 to 6 with 0 being the lowest | |||
# priority. Alternatively this can be used to set the IP Type- | |||
# Of-Service, by setting it to a hexadecimal number (e.g., 0x20). | |||
# This can be set per user/group or globally. | |||
#net-priority = 3 | |||
# Set the VPN worker process into a specific cgroup. This is Linux | |||
# specific and can be set per user/group or globally. | |||
#cgroup = "cpuset,cpu:test" | |||
# | |||
# Network settings | |||
# | |||
# The name of the tun device | |||
device = vpns | |||
# Whether the generated IPs will be predictable, i.e., IP stays the | |||
# same for the same user when possible. | |||
predictable-ips = |PREDICTABLE_IPS| | |||
# The default domain to be advertised | |||
default-domain = example.com | |||
# The pool of addresses that leases will be given from. | |||
ipv4-network = |IPV4ADDR| | |||
ipv4-netmask = |NETMASK| | |||
# The advertized DNS server. Use multiple lines for | |||
# multiple servers. | |||
# dns = fc00::4be0 | |||
#dns = 192.168.1.2 | |||
# The NBNS server (if any) | |||
#nbns = 192.168.1.3 | |||
# The IPv6 subnet that leases will be given from. | |||
|ENABLE_IPV6|ipv6-network = |IPV6ADDR| | |||
|ENABLE_IPV6|ipv6-prefix = |IPV6PREFIX| | |||
# The domains over which the provided DNS should be used. Use | |||
# multiple lines for multiple domains. | |||
#split-dns = example.com | |||
# Prior to leasing any IP from the pool ping it to verify that | |||
# it is not in use by another (unrelated to this server) host. | |||
ping-leases = false | |||
# Unset to assign the default MTU of the device | |||
# mtu = | |||
# Unset to enable bandwidth restrictions (in bytes/sec). The | |||
# setting here is global, but can also be set per user or per group. | |||
#rx-data-per-sec = 40000 | |||
#tx-data-per-sec = 40000 | |||
# The number of packets (of MTU size) that are available in | |||
# the output buffer. The default is low to improve latency. | |||
# Setting it higher will improve throughput. | |||
#output-buffer = 10 | |||
# Routes to be forwarded to the client. If you need the | |||
# client to forward routes to the server, you may use the | |||
# config-per-user/group or even connect and disconnect scripts. | |||
# | |||
# To set the server as the default gateway for the client just | |||
# comment out all routes from the server. | |||
#route = 192.168.1.0/255.255.255.0 | |||
#route = 192.168.5.0/255.255.255.0 | |||
#route = fef4:db8:1000:1001::/64 | |||
# Configuration files that will be applied per user connection or | |||
# per group. Each file name on these directories must match the username | |||
# or the groupname. | |||
# The options allowed in the configuration files are dns, nbns, | |||
# ipv?-network, ipv4-netmask, ipv6-prefix, rx/tx-per-sec, iroute, route, | |||
# net-priority and cgroup. | |||
# | |||
# Note that the 'iroute' option allows to add routes on the server | |||
# based on a user or group. The syntax depends on the input accepted | |||
# by the commands route-add-cmd and route-del-cmd (see below). | |||
#config-per-user = /etc/ocserv/config-per-user/ | |||
#config-per-group = /etc/ocserv/config-per-group/ | |||
# When config-per-xxx is specified and there is no group or user that | |||
# matches, then utilize the following configuration. | |||
#default-user-config = /etc/ocserv/defaults/user.conf | |||
#default-group-config = /etc/ocserv/defaults/group.conf | |||
# Groups that a client is allowed to select from. | |||
# A client may belong in multiple groups, and in certain use-cases | |||
# it is needed to switch between them. For these cases the client can | |||
# select prior to authentication. Add multiple entries for multiple groups. | |||
#select-group = group1 | |||
#select-group = group2[My group 2] | |||
#select-group = tost[The tost group] | |||
# The name of the group that if selected it would allow to use | |||
# the assigned by default group. | |||
#default-select-group = DEFAULT | |||
# Instead of specifying manually all the allowed groups, you may instruct | |||
# ocserv to scan all available groups and include the full list. That | |||
# option is only functional on plain authentication. | |||
#auto-select-group = true | |||
# The system command to use to setup a route. %{R} will be replaced with the | |||
# route/mask and %{D} with the (tun) device. | |||
# | |||
# The following example is from linux systems. %{R} should be something | |||
# like 192.168.2.0/24 | |||
#route-add-cmd = "ip route add %{R} dev %{D}" | |||
#route-del-cmd = "ip route delete %{R} dev %{D}" | |||
# This option allows to forward a proxy. The special strings '%{U}' | |||
# and '%{G}', if present will be replaced by the username and group name. | |||
#proxy-url = http://example.com/ | |||
#proxy-url = http://example.com/%{U}/%{G}/hello | |||
# | |||
# The following options are for (experimental) AnyConnect client | |||
# compatibility. | |||
# Client profile xml. A sample file exists in doc/profile.xml. | |||
# This file must be accessible from inside the worker's chroot. | |||
# It is not used by the openconnect client. | |||
#user-profile = profile.xml | |||
# Binary files that may be downloaded by the CISCO client. Must | |||
# be within any chroot environment. | |||
#binary-files = /path/to/binaries | |||
# Unless set to false it is required for clients to present their | |||
# certificate even if they are authenticating via a previously granted | |||
# cookie and complete their authentication in the same TCP connection. | |||
# Legacy CISCO clients do not do that, and thus this option should be | |||
# set for them. | |||
cisco-client-compat = |CISCO_COMPAT| | |||
#Advanced options | |||
# Option to allow sending arbitrary custom headers to the client after | |||
# authentication and prior to VPN tunnel establishment. | |||
#custom-header = "X-My-Header: hi there" |
@ -0,0 +1,187 @@ | |||
#!/bin/sh /etc/rc.common | |||
SERVICE_USE_PID=1 | |||
START=50 | |||
setup_firewall() { | |||
local port fw | |||
config_get port $1 port | |||
test -z "$port" && return | |||
config_get fwport $1 "fwport" | |||
test "$fwport" = "$port" && return | |||
#can we remove the old rule? | |||
uci add firewall rule | |||
uci set firewall.@rule[-1].src=wan | |||
uci set firewall.@rule[-1].target=ACCEPT | |||
uci set firewall.@rule[-1].proto=tcpudp | |||
uci set firewall.@rule[-1].dest_port=$port | |||
uci commit firewall | |||
/etc/init.d/firewall restart | |||
uci set ocserv.config.fwport="$port" | |||
uci commit ocserv | |||
} | |||
clear_firewall() { | |||
iptables-save | grep -v ocserv-rule | iptables-restore | |||
} | |||
setup_config() { | |||
config_get port $1 port "4443" | |||
config_get max_clients $1 max_clients "8" | |||
config_get max_same $1 max_same "2" | |||
config_get dpd $1 dpd "120" | |||
config_get predictable_ips $1 predictable_ips "1" | |||
config_get udp $1 udp "1" | |||
config_get auth $1 auth "plain" | |||
config_get cisco_compat $1 cisco_compat "1" | |||
config_get ipaddr $1 ipaddr "192.168.100.0" | |||
config_get netmask $1 netmask "255.255.255.0" | |||
config_get ip6addr $1 ip6addr "" | |||
test $predictable_ips = "0" && predictable_ips="false" | |||
test $predictable_ips = "1" && predictable_ips="true" | |||
test $cisco_compat = "0" && cisco_compat="false" | |||
test $cisco_compat = "1" && cisco_compat="true" | |||
test $udp = "0" && udp="#" | |||
test $udp = "1" && udp="" | |||
test -z $ip6addr && enable_ipv6="#" | |||
ipv6_addr=`echo $ip6addr|cut -d '/' -f 1` | |||
ipv6_prefix=`echo $ip6addr|cut -d '/' -f 2` | |||
test $auth = "plain" && authsuffix="[/var/etc/ocpasswd]" | |||
mkdir -p /var/etc | |||
sed -e "s/|PORT|/$port/g" \ | |||
-e "s/|MAX_CLIENTS|/$max_clients/g" \ | |||
-e "s/|MAX_SAME|/$max_same/g" \ | |||
-e "s/|DPD|/$dpd/g" \ | |||
-e "s/|AUTH|/$auth$authsuffix/g" \ | |||
-e "s/|PREDICTABLE_IPS|/$predictable_ips/g" \ | |||
-e "s/|CISCO_COMPAT|/$cisco_compat/g" \ | |||
-e "s/|UDP|/$udp/g" \ | |||
-e "s/|IPV4ADDR|/$ipaddr/g" \ | |||
-e "s/|NETMASK|/$netmask/g" \ | |||
-e "s/|IPV6ADDR|/$ipv6_addr/g" \ | |||
-e "s/|IPV6PREFIX|/$ipv6_prefix/g" \ | |||
-e "s/|ENABLE_IPV6|/$enable_ipv6/g" \ | |||
/etc/ocserv/ocserv.conf.template > /var/etc/ocserv.conf | |||
} | |||
setup_users() { | |||
local name | |||
local password | |||
config_get name $1 name | |||
config_get password $1 password | |||
[ -z "$name" -o -z "$password" ] && return | |||
echo "$password"|ocpasswd -c /var/etc/ocpasswd "$name" | |||
} | |||
setup_routes() { | |||
local routes | |||
config_get ip $1 ip | |||
config_get netmask $1 netmask | |||
[ -z "$ip" -o -z "$netmask" ] && return | |||
echo "route = $ip/$netmask" >> /var/etc/ocserv.conf | |||
} | |||
setup_dns() { | |||
local routes | |||
config_get ip $1 ip | |||
[ -z "$ip" ] && return | |||
echo "dns = $ip" >> /var/etc/ocserv.conf | |||
} | |||
start() { | |||
local hostname iface | |||
user_exists ocserv 72 || user_add ocserv 72 72 /var/lib/ocserv | |||
group_exists ocserv 72 || group_add ocserv 72 | |||
hostname=`uci get ddns.myddns.domain` | |||
[ -z "$hostname" ] && hostname=`uci get system.@system[0].hostname` | |||
[ ! -f /etc/ocserv/ca-key.pem ] && [ -x /usr/bin/certtool ] && { | |||
echo "Generating CA certificate..." | |||
mkdir -p /etc/ocserv/pki/ | |||
certtool --bits 2048 --generate-privkey --outfile /etc/ocserv/ca-key.pem >/dev/null 2>&1 | |||
echo "cn=$hostname CA" >/etc/ocserv/pki/ca.tmpl | |||
echo "expiration_days=-1" >>/etc/ocserv/pki/ca.tmpl | |||
echo "serial=1" >>/etc/ocserv/pki/ca.tmpl | |||
echo "ca" >>/etc/ocserv/pki/ca.tmpl | |||
echo "cert_signing_key" >>/etc/ocserv/pki/ca.tmpl | |||
certtool --template /etc/ocserv/pki/ca.tmpl \ | |||
--generate-self-signed --load-privkey /etc/ocserv/ca-key.pem \ | |||
--outfile /etc/ocserv/ca.pem >/dev/null 2>&1 | |||
} | |||
#generate server certificate/key | |||
[ ! -f /etc/ocserv/server-key.pem ] && [ -x /usr/bin/certtool ] && { | |||
echo "Generating server certificate..." | |||
mkdir -p /etc/ocserv/pki/ | |||
certtool --bits 2048 --generate-privkey --outfile /etc/ocserv/server-key.pem >/dev/null 2>&1 | |||
echo "cn=$hostname" >/etc/ocserv/pki/server.tmpl | |||
echo "serial=2" >>/etc/ocserv/pki/server.tmpl | |||
echo "expiration_days=-1" >>/etc/ocserv/pki/server.tmpl | |||
echo "signing_key" >>/etc/ocserv/pki/server.tmpl | |||
echo "encryption_key" >>/etc/ocserv/pki/server.tmpl | |||
certtool --template /etc/ocserv/pki/server.tmpl \ | |||
--generate-certificate --load-privkey /etc/ocserv/server-key.pem \ | |||
--load-ca-certificate /etc/ocserv/ca.pem --load-ca-privkey \ | |||
/etc/ocserv/ca-key.pem --outfile /etc/ocserv/server-cert.pem >/dev/null 2>&1 | |||
} | |||
[ -f /var/run/ocserv.pid ] || { | |||
touch /var/run/ocserv.pid | |||
chown ocserv:ocserv /var/run/ocserv.pid | |||
} | |||
[ -d /var/lib/ocserv ] || { | |||
mkdir -m 0755 -p /var/lib/ocserv | |||
chmod 0700 /var/lib/ocserv | |||
chown ocserv:ocserv /var/lib/ocserv | |||
} | |||
config_load "ocserv" | |||
rm -f /var/etc/ocserv.conf | |||
touch /var/etc/ocserv.conf | |||
setup_config config | |||
config_foreach setup_routes routes | |||
config_foreach setup_dns dns | |||
rm -f /var/etc/ocpasswd | |||
touch /var/etc/ocpasswd | |||
config_foreach setup_users ocservusers | |||
setup_firewall config | |||
service_start /usr/sbin/ocserv -c /var/etc/ocserv.conf | |||
} | |||
stop() { | |||
service_stop /usr/sbin/ocserv | |||
clear_firewall | |||
} | |||
reload() { | |||
/usr/bin/occtl show status >/dev/null 2>&1 | |||
if test $? != 0;then | |||
start | |||
else | |||
/usr/bin/occtl reload | |||
fi | |||
} |
@ -0,0 +1,70 @@ | |||
diff --git a/src/main-ctl-unix.c b/src/main-ctl-unix.c | |||
index b4da5eb..90d604f 100644 | |||
--- a/src/main-ctl-unix.c | |||
+++ b/src/main-ctl-unix.c | |||
@@ -629,7 +629,7 @@ static void ctl_handle_commands(main_server_st * s) | |||
} | |||
goto cleanup; | |||
} | |||
- length = (buffer[2] << 8) | buffer[1]; | |||
+ memcpy(&length, &buffer[1], 2); | |||
buffer_size = ret - 3; | |||
if (length != buffer_size) { | |||
diff --git a/src/occtl-unix.c b/src/occtl-unix.c | |||
index 183825d..0c1b3e1 100644 | |||
--- a/src/occtl-unix.c | |||
+++ b/src/occtl-unix.c | |||
@@ -83,15 +83,14 @@ int send_cmd(struct unix_ctx *ctx, unsigned cmd, const void *data, | |||
struct iovec iov[2]; | |||
unsigned iov_len = 1; | |||
int e, ret; | |||
- unsigned length = 0; | |||
+ uint16_t length = 0; | |||
void *packed = NULL; | |||
if (get_size) | |||
length = get_size(data); | |||
header[0] = cmd; | |||
- header[1] = length; | |||
- header[2] = length >> 8; | |||
+ memcpy(&header[1], &length, 2); | |||
iov[0].iov_base = header; | |||
iov[0].iov_len = 3; | |||
@@ -145,7 +144,7 @@ int send_cmd(struct unix_ctx *ctx, unsigned cmd, const void *data, | |||
goto fail; | |||
} | |||
- length = (header[2] << 8) | header[1]; | |||
+ memcpy(&length, &header[1], 2); | |||
rep->data_size = length; | |||
rep->data = talloc_size(ctx, length); | |||
diff --git a/src/sec-mod.c b/src/sec-mod.c | |||
index 15ee32a..c3d4bad 100644 | |||
--- a/src/sec-mod.c | |||
+++ b/src/sec-mod.c | |||
@@ -354,6 +354,7 @@ void sec_mod_server(void *main_pool, struct cfg_st *config, const char *socket_f | |||
unsigned cmd, length; | |||
unsigned i, buffer_size; | |||
uint8_t *buffer, *tpool; | |||
+ uint16_t l16; | |||
struct pin_st pins; | |||
int sd; | |||
sec_mod_st *sec; | |||
@@ -538,10 +539,11 @@ void sec_mod_server(void *main_pool, struct cfg_st *config, const char *socket_f | |||
} | |||
cmd = buffer[0]; | |||
- length = buffer[1] | buffer[2] << 8; | |||
+ memcpy(&l16, &buffer[1], 2); | |||
+ length = l16; | |||
if (length > buffer_size - 4) { | |||
- seclog(LOG_INFO, "too big message"); | |||
+ seclog(LOG_INFO, "too big message (%d)", length); | |||
goto cont; | |||
} | |||
@ -0,0 +1,18 @@ | |||
# openconnect avanced configuration | |||
menu "Configuration" | |||
depends on PACKAGE_openconnect | |||
choice | |||
prompt "SSL library" | |||
default OPENCONNECT_GNUTLS | |||
config OPENCONNECT_GNUTLS | |||
bool "GnuTLS support" | |||
config OPENCONNECT_OPENSSL | |||
bool "OpenSSL" | |||
endchoice | |||
endmenu |
@ -0,0 +1,58 @@ | |||
# | |||
# Copyright (C) 2006 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
include $(TOPDIR)/rules.mk | |||
PKG_NAME:=openconnect | |||
PKG_VERSION:=5.03 | |||
PKG_RELEASE:=1 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||
PKG_SOURCE_URL:=ftp://ftp.infradead.org/pub/openconnect/ | |||
PKG_MD5SUM:=ff43ed1dbaccd2537fd7c5bfb04295a6 | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/openconnect/config | |||
source "$(SOURCE)/Config.in" | |||
endef | |||
define Package/openconnect | |||
SECTION:=net | |||
CATEGORY:=Network | |||
DEPENDS:=+libxml2 +kmod-tun +resolveip +OPENCONNECT_OPENSSL:libopenssl +OPENCONNECT_GNUTLS:libgnutls | |||
TITLE:=VPN client for Cisco's AnyConnect SSL VPN | |||
URL:=http://www.infradead.org/openconnect/ | |||
SUBMENU:=VPN | |||
endef | |||
define Package/openconnect/description | |||
A VPN client compatible with Cisco's AnyConnect SSL VPN and ocserv. | |||
OpenConnect is a client for Cisco's AnyConnect SSL VPN, which is | |||
supported by IOS 12.4(9)T or later on Cisco SR500, 870, 880, 1800, 2800, | |||
3800, 7200 Series and Cisco 7301 Routers. | |||
endef | |||
CONFIGURE_ARGS += \ | |||
--disable-shared \ | |||
--with-vpnc-script=/lib/netifd/vpnc-script | |||
ifeq ($(CONFIG_OPENCONNECT_OPENSSL),y) | |||
CONFIGURE_ARGS += \ | |||
--without-gnutls | |||
endif | |||
define Package/openconnect/install | |||
$(INSTALL_DIR) $(1)/lib/netifd/proto | |||
$(INSTALL_BIN) ./files/openconnect.sh $(1)/lib/netifd/proto/ | |||
$(INSTALL_BIN) ./files/vpnc-script $(1)/lib/netifd/ | |||
$(INSTALL_DIR) $(1)/usr/sbin | |||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/openconnect $(1)/usr/sbin/ | |||
endef | |||
$(eval $(call BuildPackage,openconnect)) |
@ -0,0 +1,56 @@ | |||
#!/bin/sh | |||
. /lib/functions.sh | |||
. ../netifd-proto.sh | |||
init_proto "$@" | |||
proto_openconnect_init_config() { | |||
proto_config_add_string "server" | |||
proto_config_add_int "port" | |||
proto_config_add_string "username" | |||
proto_config_add_string "cookie" | |||
proto_config_add_string "password" | |||
no_device=1 | |||
available=1 | |||
} | |||
proto_openconnect_setup() { | |||
local config="$1" | |||
json_get_vars server port username cookie password | |||
grep -q tun /proc/modules || insmod tun | |||
serv_addr= | |||
for ip in $(resolveip -t 5 "$server"); do | |||
proto_add_host_dependency "$config" "$server" | |||
serv_addr=1 | |||
done | |||
[ -n "$serv_addr" ] || { | |||
echo "Could not resolve server address" | |||
sleep 5 | |||
proto_setup_failed "$config" | |||
exit 1 | |||
} | |||
[ -n "$port" ] && port=":$port" | |||
cmdline="$server$port -i vpn-$config --no-cert-check --non-inter --syslog --script /lib/netifd/vpnc-script" | |||
[ -n "$cookie" ] && append cmdline "-C $cookie" | |||
[ -n "$username" ] && append cmdline "-u $username" | |||
[ -n "$password" ] && { | |||
umask 077 | |||
pwfile="/var/run/openconnect-$config.passwd" | |||
echo "$password" > "$pwfile" | |||
append cmdline "--passwd-on-stdin" | |||
} | |||
proto_export INTERFACE="$config" | |||
proto_run_command "$config" /usr/sbin/openconnect $cmdline <$pwfile | |||
} | |||
proto_openconnect_teardown() { | |||
proto_kill_command "$config" | |||
} | |||
add_protocol openconnect |
@ -0,0 +1,156 @@ | |||
#!/bin/sh | |||
# List of parameters passed through environment | |||
#* reason -- why this script was called, one of: pre-init connect disconnect | |||
#* VPNGATEWAY -- vpn gateway address (always present) | |||
#* TUNDEV -- tunnel device (always present) | |||
#* INTERNAL_IP4_ADDRESS -- address (always present) | |||
#* INTERNAL_IP4_MTU -- mtu (often unset) | |||
#* INTERNAL_IP4_NETMASK -- netmask (often unset) | |||
#* INTERNAL_IP4_NETMASKLEN -- netmask length (often unset) | |||
#* INTERNAL_IP4_NETADDR -- address of network (only present if netmask is set) | |||
#* INTERNAL_IP4_DNS -- list of dns servers | |||
#* INTERNAL_IP4_NBNS -- list of wins servers | |||
#* INTERNAL_IP6_ADDRESS -- IPv6 address | |||
#* INTERNAL_IP6_NETMASK -- IPv6 netmask | |||
#* INTERNAL_IP6_DNS -- IPv6 list of dns servers | |||
#* CISCO_DEF_DOMAIN -- default domain name | |||
#* CISCO_BANNER -- banner from server | |||
#* CISCO_SPLIT_INC -- number of networks in split-network-list | |||
#* CISCO_SPLIT_INC_%d_ADDR -- network address | |||
#* CISCO_SPLIT_INC_%d_MASK -- subnet mask (for example: 255.255.255.0) | |||
#* CISCO_SPLIT_INC_%d_MASKLEN -- subnet masklen (for example: 24) | |||
#* CISCO_SPLIT_INC_%d_PROTOCOL -- protocol (often just 0) | |||
#* CISCO_SPLIT_INC_%d_SPORT -- source port (often just 0) | |||
#* CISCO_SPLIT_INC_%d_DPORT -- destination port (often just 0) | |||
#* CISCO_IPV6_SPLIT_INC -- number of networks in IPv6 split-network-list | |||
#* CISCO_IPV6_SPLIT_INC_%d_ADDR -- IPv6 network address | |||
#* CISCO_IPV6_SPLIT_INC_$%d_MASKLEN -- IPv6 subnet masklen | |||
# FIXMEs: | |||
# Section A: route handling | |||
# 1) The 3 values CISCO_SPLIT_INC_%d_PROTOCOL/SPORT/DPORT are currently being ignored | |||
# In order to use them, we'll probably need os specific solutions | |||
# * Linux: iptables -t mangle -I PREROUTING <conditions> -j ROUTE --oif $TUNDEV | |||
# This would be an *alternative* to changing the routes (and thus 2) and 3) | |||
# shouldn't be relevant at all) | |||
# 2) There are two different functions to set routes: generic routes and the | |||
# default route. Why isn't the defaultroute handled via the generic route case? | |||
# 3) In the split tunnel case, all routes but the default route might get replaced | |||
# without getting restored later. We should explicitely check and save them just | |||
# like the defaultroute | |||
# 4) Replies to a dhcp-server should never be sent into the tunnel | |||
# Section B: Split DNS handling | |||
# 1) Maybe dnsmasq can do something like that | |||
# 2) Parse dns packets going out via tunnel and redirect them to original dns-server | |||
do_connect() { | |||
if [ -n "$CISCO_BANNER" ]; then | |||
echo "Connect Banner:" | |||
echo "$CISCO_BANNER" | while read LINE ; do echo "|" "$LINE" ; done | |||
echo | |||
fi | |||
proto_init_update "$TUNDEV" 1 | |||
if [ -n "$INTERNAL_IP4_MTU" ]; then | |||
MTU=$INTERNAL_IP4_MTU | |||
fi | |||
if [ -z "$MTU" ]; then | |||
MTU=1412 | |||
fi | |||
proto_add_ipv4_address "$INTERNAL_IP4_ADDRESS" 32 "" "$INTERNAL_IP4_ADDRESS" | |||
if [ -n "$INTERNAL_IP4_NETMASKLEN" ]; then | |||
proto_add_ipv4_route "$INTERNAL_IP4_NETADDR" "$INTERNAL_IP4_NETMASKLEN" | |||
fi | |||
# If the netmask is provided, it contains the address _and_ netmask | |||
if [ -n "$INTERNAL_IP6_ADDRESS" ] && [ -z "$INTERNAL_IP6_NETMASK" ]; then | |||
INTERNAL_IP6_NETMASK="$INTERNAL_IP6_ADDRESS/128" | |||
fi | |||
if [ -n "$INTERNAL_IP6_NETMASK" ]; then | |||
addr="${INTERNAL_IP6_NETMASK%%/*}" | |||
mask="${INTERNAL_IP6_NETMASK##*/}" | |||
[[ "$addr" != "$mask" ]] && proto_add_ipv6_address "$addr" "$mask" | |||
fi | |||
[ -n "$INTERNAL_IP4_DNS" ] && proto_add_dns_server "$INTERNAL_IP4_DNS" | |||
[ -n "$CISCO_DEF_DOMAIN" ] && proto_add_dns_search "$CISCO_DEF_DOMAIN" | |||
if [ -n "$CISCO_SPLIT_INC" ]; then | |||
i=0 | |||
while [ $i -lt $CISCO_SPLIT_INC ] ; do | |||
eval NETWORK="\${CISCO_SPLIT_INC_${i}_ADDR}" | |||
eval NETMASK="\${CISCO_SPLIT_INC_${i}_MASK}" | |||
eval NETMASKLEN="\${CISCO_SPLIT_INC_${i}_MASKLEN}" | |||
if [ $NETWORK != "0.0.0.0" ]; then | |||
proto_add_ipv4_route "$NETWORK" "$NETMASKLEN" | |||
else | |||
proto_add_ipv4_route "0.0.0.0" 0 | |||
fi | |||
i=$(($i + 1)) | |||
done | |||
elif [ -n "$INTERNAL_IP4_ADDRESS" ]; then | |||
proto_add_ipv4_route "0.0.0.0" 0 | |||
fi | |||
if [ -n "$CISCO_IPV6_SPLIT_INC" ]; then | |||
i=0 | |||
while [ $i -lt $CISCO_IPV6_SPLIT_INC ] ; do | |||
eval NETWORK="\${CISCO_IPV6_SPLIT_INC_${i}_ADDR}" | |||
eval NETMASKLEN="\${CISCO_IPV6_SPLIT_INC_${i}_MASKLEN}" | |||
if [ $NETMASKLEN -lt 128 ]; then | |||
proto_add_ipv6_route "$NETWORK" "$NETMASKLEN" | |||
else | |||
proto_add_ipv6_route "::0" 0 | |||
fi | |||
i=$(($i + 1)) | |||
done | |||
elif [ -n "$INTERNAL_IP6_NETMASK" -o -n "$INTERNAL_IP6_ADDRESS" ]; then | |||
proto_add_ipv6_route "::0" 0 | |||
fi | |||
proto_send_update "$INTERFACE" | |||
} | |||
do_disconnect() { | |||
proto_init_update "$TUNDEV" 0 | |||
proto_send_update "$INTERFACE" | |||
} | |||
#### Main | |||
if [ -z "$reason" ]; then | |||
echo "this script must be called from vpnc" 1>&2 | |||
exit 1 | |||
fi | |||
if [ -z "$INTERFACE" ]; then | |||
echo "this script must be called for an active interface" | |||
exit 1 | |||
fi | |||
. /lib/netifd/netifd-proto.sh | |||
case "$reason" in | |||
pre-init) | |||
;; | |||
connect) | |||
do_connect | |||
;; | |||
disconnect) | |||
do_disconnect | |||
;; | |||
reconnect) | |||
;; | |||
*) | |||
echo "unknown reason '$reason'. Maybe vpnc-script is out of date" 1>&2 | |||
exit 1 | |||
;; | |||
esac | |||
exit 0 |
@ -0,0 +1,74 @@ | |||
# | |||
# Copyright (C) 2014 OpenWrt.org | |||
# | |||
# This is free software, licensed under the GNU General Public License v2. | |||
# See /LICENSE for more information. | |||
# | |||
# $Id$ | |||
include $(TOPDIR)/rules.mk | |||
include $(INCLUDE_DIR)/kernel.mk | |||
PKG_NAME:=cryptodev-linux | |||
PKG_VERSION:=1.6 | |||
PKG_RELEASE:=1 | |||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz | |||
PKG_SOURCE_URL:=http://download.gna.org/cryptodev-linux/ | |||
PKG_MD5SUM:=eade38998313c25fd7934719cdf8a2ea | |||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) | |||
include $(INCLUDE_DIR)/package.mk | |||
CRYPTODEV_AUTOLOAD:= \ | |||
cryptodev | |||
define KernelPackage/cryptodev | |||
SUBMENU:=Cryptographic API modules | |||
DEFAULT:=m if ALL | |||
TITLE:=Driver for cryptographic acceleration | |||
URL:=http://cryptodev-linux.org/ | |||
VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE) | |||
DEPENDS:=+kmod-crypto-core +kmod-crypto-authenc +kmod-crypto-hash | |||
FILES:= \ | |||
$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX) | |||
AUTOLOAD:=$(call AutoLoad,50,$(CRYPTODEV_AUTOLOAD)) | |||
endef | |||
define KernelPackage/cryptodev/description | |||
This is a driver for that allows to use the Linux kernel supported | |||
hardware ciphers by user-space applications. | |||
endef | |||
CRYPTODEV_MAKEOPTS= -C $(PKG_BUILD_DIR) \ | |||
PATH="$(TARGET_PATH)" \ | |||
ARCH="$(LINUX_KARCH)" \ | |||
CROSS_COMPILE="$(TARGET_CROSS)" \ | |||
TOOLPREFIX="$(KERNEL_CROSS)" \ | |||
TOOLPATH="$(KERNEL_CROSS)" \ | |||
KERNEL_DIR="$(LINUX_DIR)" \ | |||
LDOPTS=" " \ | |||
DOMULTI=1 | |||
define Build/Compile/cryptodev | |||
$(MAKE) $(CRYPTODEV_MAKEOPTS) | |||
endef | |||
define Build/Compile | |||
$(call Build/Compile/cryptodev) | |||
endef | |||
define Build/InstallDev | |||
$(INSTALL_DIR) $(STAGING_DIR)/usr/include/crypto | |||
$(CP) $(PKG_BUILD_DIR)/crypto/cryptodev.h $(STAGING_DIR)/usr/include/crypto/ | |||
endef | |||
define KernelPackage/cryptodev/install | |||
$(INSTALL_DIR) $(1)/etc/modules.d | |||
$(INSTALL_DATA) ./files/cryptodev.modules $(1)/etc/modules.d/80-cryptodev | |||
$(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION) | |||
$(INSTALL_DIR) $(1)/usr/sbin | |||
endef | |||
$(eval $(call KernelPackage,cryptodev)) |
@ -0,0 +1 @@ | |||
cryptodev |