Преглед на файлове

Use OpenSSL 1.1 API as default (instead of OpenSSL 1.0 API)

bel2125 преди 4 години
родител
ревизия
a25fd04248
променени са 7 файла, в които са добавени 88 реда и са изтрити 25 реда
  1. 27 1
      .travis.yml
  2. 13 1
      CMakeLists.txt
  3. 3 0
      Makefile
  4. 1 0
      VisualStudio/civetweb_lua/civetweb_lua.vcxproj
  5. 3 0
      VisualStudio/civetweb_lua/civetweb_lua.vcxproj.filters
  6. 2 0
      appveyor.yml
  7. 39 23
      src/civetweb.c

+ 27 - 1
.travis.yml

@@ -77,6 +77,7 @@ before_script:
     -DCIVETWEB_DISABLE_CGI=${NO_CGI}
     -DCIVETWEB_SERVE_NO_FILES=${NO_FILES}
     -DCIVETWEB_ENABLE_SSL_DYNAMIC_LOADING=${ENABLE_SSL_DYNAMIC_LOADING}
+    -DCIVETWEB_SSL_OPENSSL_API_1_0=${OPENSSL_1_0}
     -DCIVETWEB_SSL_OPENSSL_API_1_1=${OPENSSL_1_1}
     -DCIVETWEB_ENABLE_WEBSOCKETS=${ENABLE_WEBSOCKETS}
     -DCIVETWEB_ENABLE_CXX=${ENABLE_CXX}
@@ -182,6 +183,7 @@ matrix:
       MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
       BUILD_TYPE=Debug
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=NO
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -216,6 +218,7 @@ matrix:
       MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -251,6 +254,7 @@ matrix:
       MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -285,6 +289,7 @@ matrix:
       MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -319,6 +324,7 @@ matrix:
       MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -344,6 +350,7 @@ matrix:
       N=GCCAnyVersion-Linux-Coverage
       BUILD_TYPE=Coverage
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -369,6 +376,7 @@ matrix:
       N=Clang-OSX-Complete-NoLua-Release
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -395,6 +403,7 @@ matrix:
       N=Clang-OSX-Complete-NoLua-Release-OpenSSL_1_1_NoDynLoad
       BUILD_TYPE=OSX_OPENSSL_1_1
       ENABLE_SSL_DYNAMIC_LOADING=NO
+      OPENSSL_1_0=NO
       OPENSSL_1_1=YES
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -434,6 +443,7 @@ matrix:
       N=Clang50-Linux-Default-Shared
       BUILD_TYPE=Debug
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -462,6 +472,7 @@ matrix:
       N=Precise-Clang-Linux-Default
       BUILD_TYPE=Debug
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -488,6 +499,7 @@ matrix:
       N=OSX-Package
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -523,6 +535,7 @@ matrix:
       ARCH=x86
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -555,6 +568,7 @@ matrix:
       N=NoSslDynamicLoading
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=NO
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       C_STANDARD=auto
@@ -580,6 +594,7 @@ matrix:
       N=GCCLinuxDefault_Debug
       BUILD_TYPE=Debug
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -604,6 +619,7 @@ matrix:
       N=GCCLinuxDefault_RelWithDebInfo
       BUILD_TYPE=RelWithDebInfo
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -628,6 +644,7 @@ matrix:
       N=GCCLinuxDefault_MinSizeRel
       BUILD_TYPE=MinSizeRel
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -652,6 +669,7 @@ matrix:
       N=GCCLinuxDefault_None
       BUILD_TYPE=None
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -677,6 +695,7 @@ matrix:
       MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
       BUILD_TYPE=Debug
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=YES
@@ -711,6 +730,7 @@ matrix:
       MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0"
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=YES
       ENABLE_LUA_SHARED=YES
@@ -737,6 +757,7 @@ matrix:
       N=GCCLinuxDefault_xenial
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=YES
       OPENSSL_1_1=NO
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -762,6 +783,7 @@ matrix:
       N=GCCLinuxDefault_bionic
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=NO
       OPENSSL_1_1=YES
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -787,6 +809,7 @@ matrix:
       N=GCCLinuxDefault_eoan
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=NO
       OPENSSL_1_1=YES
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -816,6 +839,7 @@ matrix:
       N=GCCLinuxDefault_focal
       BUILD_TYPE=Release
       ENABLE_SSL_DYNAMIC_LOADING=YES
+      OPENSSL_1_0=NO
       OPENSSL_1_1=YES
       ENABLE_CXX=NO
       ENABLE_LUA_SHARED=NO
@@ -883,7 +907,8 @@ matrix:
 #      MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
 #      BUILD_TYPE=Debug
 #      ENABLE_SSL_DYNAMIC_LOADING=YES
-#      OPENSSL_1_1=NO
+#      OPENSSL_1_0=NO
+#      OPENSSL_1_1=YES
 #      ENABLE_CXX=NO
 #      ENABLE_LUA_SHARED=YES
 #      C_STANDARD=auto
@@ -896,6 +921,7 @@ matrix:
 #      ENABLE_WEBSOCKETS=YES
 #      ENABLE_SERVER_STATS=YES
 #      ENABLE_LUA=YES
+#      ENABLE_LUA_SHARED=YES
 #      ENABLE_DUKTAPE=NO
 #      NO_CACHING=YES
 #      ALLOW_WARNINGS=YES

+ 13 - 1
CMakeLists.txt

@@ -219,8 +219,12 @@ message(STATUS "Duktape CGI support - ${CIVETWEB_ENABLE_DUKTAPE}")
 option(CIVETWEB_ENABLE_SSL "Enables the secure socket layer" ON)
 message(STATUS "SSL support - ${CIVETWEB_ENABLE_SSL}")
 
+# OpenSSL 1.0 API
+option(CIVETWEB_SSL_OPENSSL_API_1_0 "Use the OpenSSL 1.0 API" OFF)
+message(STATUS "Compile for OpenSSL 1.0 API - ${CIVETWEB_SSL_OPENSSL_API_1_0}")
+
 # OpenSSL 1.1 API
-option(CIVETWEB_SSL_OPENSSL_API_1_1 "Use the OpenSSL 1.1 API" OFF)
+option(CIVETWEB_SSL_OPENSSL_API_1_1 "Use the OpenSSL 1.1 API" ON)
 message(STATUS "Compile for OpenSSL 1.1 API - ${CIVETWEB_SSL_OPENSSL_API_1_1}")
 
 # Dynamically load or link the SSL libraries
@@ -519,9 +523,17 @@ else()
     add_definitions(-DCRYPTO_LIB="${CIVETWEB_SSL_CRYPTO_LIB}")
   endif()
 endif()
+
+if(CIVETWEB_SSL_OPENSSL_API_1_0)
+  add_definitions(-DOPENSSL_API_1_0)
+endif()
 if(CIVETWEB_SSL_OPENSSL_API_1_1)
   add_definitions(-DOPENSSL_API_1_1)
 endif()
+if(CIVETWEB_SSL_OPENSSL_API_1_0 AND CIVETWEB_SSL_OPENSSL_API_1_1)
+  message(FATAL_ERROR "Multiple SSL API versions defined")
+endif()
+
 add_definitions(-DUSE_STACK_SIZE=${CIVETWEB_THREAD_STACK_SIZE})
 
 # Set 32 or 64 bit environment

+ 3 - 0
Makefile

@@ -93,6 +93,9 @@ endif
 
 ifdef NO_SSL
   CFLAGS += -DNO_SSL
+else
+  #Use OpenSSL 1.1 API version as default
+  CFLAGS += -DOPENSSL_API_1_1
 endif
 ifdef NO_CGI
   CFLAGS += -DNO_CGI

+ 1 - 0
VisualStudio/civetweb_lua/civetweb_lua.vcxproj

@@ -209,6 +209,7 @@
     <None Include="..\..\src\md5.inl" />
     <None Include="..\..\src\mod_http2.inl" />
     <None Include="..\..\src\mod_lua_shared.inl" />
+    <None Include="..\..\src\mod_zlib.inl" />
     <None Include="..\..\src\sha1.inl" />
     <None Include="..\..\src\mod_duktape.inl" />
     <None Include="..\..\src\mod_lua.inl" />

+ 3 - 0
VisualStudio/civetweb_lua/civetweb_lua.vcxproj.filters

@@ -74,5 +74,8 @@
     <None Include="..\..\src\mod_http2.inl">
       <Filter>inl files</Filter>
     </None>
+    <None Include="..\..\src\mod_zlib.inl">
+      <Filter>inl files</Filter>
+    </None>
   </ItemGroup>
 </Project>

+ 2 - 0
appveyor.yml

@@ -438,6 +438,8 @@ before_build:
     -DCIVETWEB_DISABLE_CACHING=%no_caching%
     -DCIVETWEB_C_STANDARD=%c_standard%
     -DCIVETWEB_CXX_STANDARD=%cxx_standard%
+    -DCIVETWEB_SSL_OPENSSL_API_1_0=NO
+    -DCIVETWEB_SSL_OPENSSL_API_1_1=YES
     "%source_path%"
   - powershell Push-AppveyorArtifact CMakeCache.txt
   - cd "%source_path%"

+ 39 - 23
src/civetweb.c

@@ -579,38 +579,38 @@ typedef long off_t;
 #define ERRNO ((int)(GetLastError()))
 #define NO_SOCKLEN_T
 
+
 #if defined(_WIN64) || defined(__MINGW64__)
 #if !defined(SSL_LIB)
+
 #if defined(OPENSSL_API_1_1)
 #define SSL_LIB "libssl-1_1-x64.dll"
-#else /* OPENSSL_API_1_1 */
-#define SSL_LIB "ssleay64.dll"
-#endif /* OPENSSL_API_1_1 */
-#endif /* SSL_LIB */
-#if !defined(CRYPTO_LIB)
-#if defined(OPENSSL_API_1_1)
 #define CRYPTO_LIB "libcrypto-1_1-x64.dll"
-#else /* OPENSSL_API_1_1 */
-#define CRYPTO_LIB "libeay64.dll"
 #endif /* OPENSSL_API_1_1 */
-#endif /* CRYPTO_LIB */
-#else  /* defined(_WIN64) || defined(__MINGW64__) */
+
+#if defined(OPENSSL_API_1_0)
+#define SSL_LIB "ssleay64.dll"
+#define CRYPTO_LIB "libeay64.dll"
+#endif /* OPENSSL_API_1_0 */
+
+#endif
+#else /* defined(_WIN64) || defined(__MINGW64__) */
 #if !defined(SSL_LIB)
+
 #if defined(OPENSSL_API_1_1)
 #define SSL_LIB "libssl-1_1.dll"
-#else
-#define SSL_LIB "ssleay32.dll"
-#endif
-#endif /* SSL_LIB */
-#if !defined(CRYPTO_LIB)
-#if defined(OPENSSL_API_1_1)
 #define CRYPTO_LIB "libcrypto-1_1.dll"
-#else
+#endif /* OPENSSL_API_1_1 */
+
+#if defined(OPENSSL_API_1_0)
+#define SSL_LIB "ssleay32.dll"
 #define CRYPTO_LIB "libeay32.dll"
-#endif
-#endif /* CRYPTO_LIB */
+#endif /* OPENSSL_API_1_0 */
+
+#endif /* SSL_LIB */
 #endif /* defined(_WIN64) || defined(__MINGW64__) */
 
+
 #define O_NONBLOCK (0)
 #if !defined(W_OK)
 #define W_OK (2) /* http://msdn.microsoft.com/en-us/library/1w06ktdy.aspx */
@@ -1336,7 +1336,7 @@ mg_atomic_add(volatile ptrdiff_t *addr, ptrdiff_t value)
 static void
 mg_atomic_max(volatile ptrdiff_t *addr, ptrdiff_t value)
 {
-	ptrdiff_t register tmp = *addr;
+	register ptrdiff_t tmp = *addr;
 
 #if defined(_WIN64) && !defined(NO_ATOMICS)
 	while (tmp < value) {
@@ -1361,6 +1361,7 @@ mg_atomic_max(volatile ptrdiff_t *addr, ptrdiff_t value)
 #endif
 }
 
+
 static int64_t
 mg_atomic_add64(volatile int64_t *addr, int64_t value)
 {
@@ -1671,7 +1672,17 @@ static int mg_init_library_called = 0;
 
 #if !defined(NO_SSL)
 static int mg_ssl_initialized = 0;
+
+
+/* TODO: Selection of SSL library and version */
+#if !defined(OPENSSL_API_1_0) && !defined(OPENSSL_API_1_1)
+#error "Please define OPENSSL_API_1_0 or OPENSSL_API_1_1"
+#endif
+#if defined(OPENSSL_API_1_0) && defined(OPENSSL_API_1_1)
+#error "Multiple OPENSSL_API versions defined"
 #endif
+#endif /* NO_SSL */
+
 
 static pthread_key_t sTlsKey; /* Thread local storage index */
 static volatile ptrdiff_t thread_idx_max = 0;
@@ -1870,16 +1881,21 @@ typedef struct SSL_CTX SSL_CTX;
 #define ENGINE_cleanup() ((void)0)
 #endif
 
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+
 /* If OpenSSL headers are included, automatically select the API version */
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
 #if !defined(OPENSSL_API_1_1)
 #define OPENSSL_API_1_1
 #endif
 #define OPENSSL_REMOVE_THREAD_STATE()
 #else
+#if !defined(OPENSSL_API_1_0)
+#define OPENSSL_API_1_0
+#endif
 #define OPENSSL_REMOVE_THREAD_STATE() ERR_remove_thread_state(NULL)
 #endif
 
+
 #else
 
 /* SSL loaded dynamically from DLL.
@@ -20636,11 +20652,11 @@ mg_get_context_info(const struct mg_context *ctx, char *buffer, int buflen)
 		            block,
 		            sizeof(block),
 		            ",%s\"requests\" : {%s"
-		            "\"total\" : %i%s"
+		            "\"total\" : %lu%s"
 		            "}",
 		            eol,
 		            eol,
-		            ctx->total_requests,
+		            (unsigned long)ctx->total_requests,
 		            eol);
 		context_info_length += mg_str_append(&buffer, end, block);