Windows: Rebundled Cyrus SASL CRAM MD5 3rdparty library.

This adds a rebundled library for the `sasl2` dependency of Mesos
and patches the bundle with a minimalistic CMake build.  We do not
intend to upstream this CMake build as it only builds a small
subset of the library.

Review: https://reviews.apache.org/r/62105/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/1be4ff75
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/1be4ff75
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/1be4ff75

Branch: refs/heads/master
Commit: 1be4ff755d339b362528739cd27af43a01ab886b
Parents: b722466
Author: John Kordich <[email protected]>
Authored: Mon Oct 2 10:23:28 2017 -0700
Committer: Joseph Wu <[email protected]>
Committed: Mon Oct 2 11:56:40 2017 -0700

----------------------------------------------------------------------
 3rdparty/CMakeLists.txt             |  32 ++++++++
 3rdparty/cmake/Versions.cmake       |   3 +
 3rdparty/cyrus-sasl-2.1.27rc3.patch | 127 +++++++++++++++++++++++++++++++
 3 files changed, 162 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/1be4ff75/3rdparty/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index 2a183a4..b9204c9 100755
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -47,6 +47,7 @@ if (WIN32)
   set(CURL_URL   ${3RDPARTY_DEPENDENCIES}/curl-${CURL_VERSION}.tar.gz)
   set(LIBAPR_URL ${3RDPARTY_DEPENDENCIES}/libapr-${LIBAPR_VERSION}.tar.gz)
   set(ZLIB_URL   ${3RDPARTY_DEPENDENCIES}/zlib-${ZLIB_VERSION}.tar.gz)
+  set(SASL2_URL  ${3RDPARTY_DEPENDENCIES}/cyrus-sasl-${SASL2_VERSION}.tar.gz)
 
   # NOTE: The Windows version of Glog is patched and only available in the
   # 3rdparty repo, not the local repo.
@@ -186,6 +187,37 @@ ExternalProject_Add(
   URL_HASH          ${CONCURRENTQUEUE_HASH})
 
 
+if (WIN32)
+  # Cyrus SASL: Authentication protocol/mechanism interface (Based on IETF RFC 
4422)
+  # https://cyrusimap.org/sasl/
+  
##################################################################################
+  EXTERNAL(sasl2 ${SASL2_VERSION} ${CMAKE_CURRENT_BINARY_DIR})
+  add_library(sasl2 STATIC IMPORTED GLOBAL)
+  add_dependencies(sasl2 ${SASL2_TARGET})
+
+  set_target_properties(
+    sasl2 PROPERTIES
+    IMPORTED_LOCATION_DEBUG ${SASL2_ROOT}-build/Debug/libsasl2${LIBRARY_SUFFIX}
+    IMPORTED_LOCATION_RELEASE 
${SASL2_ROOT}-build/Release/libsasl2${LIBRARY_SUFFIX}
+    INTERFACE_INCLUDE_DIRECTORIES ${SASL2_ROOT}-build/include
+    INTERFACE_COMPILE_DEFINITIONS LIBSASL_EXPORTS=1)
+
+  # Patch SASL to include a minimal CMake build system which encompasses
+  # only the parts that Mesos relies on (CRAM MD5).
+  PATCH_CMD(SASL2_PATCH_CMD cyrus-sasl-${SASL2_VERSION}.patch)
+
+  MAKE_INCLUDE_DIR(sasl2)
+
+  ExternalProject_Add(
+    ${SASL2_TARGET}
+    PREFIX            ${SASL2_CMAKE_ROOT}
+    PATCH_COMMAND     ${SASL2_PATCH_CMD}
+    INSTALL_COMMAND   ${CMAKE_NOOP}
+    URL               ${SASL2_URL}
+    URL_HASH          ${SASL2_HASH})
+endif ()
+
+
 # ELFIO: library for reading and generating ELF files.
 # http://elfio.sourceforge.net
 ######################################################

http://git-wip-us.apache.org/repos/asf/mesos/blob/1be4ff75/3rdparty/cmake/Versions.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/cmake/Versions.cmake b/3rdparty/cmake/Versions.cmake
index 0b62ae9..9a6713d 100644
--- a/3rdparty/cmake/Versions.cmake
+++ b/3rdparty/cmake/Versions.cmake
@@ -41,4 +41,7 @@ else ()
   # we want.
   set(GLOG_VERSION      "da816ea70")
   set(GLOG_HASH         
"SHA256=15338EDBE643F3F9A769FBCA34C3AFDF48D8779D800E7F0878A9649A53339F96")
+
+  set(SASL2_VERSION     "2.1.27rc3")
+  set(SASL2_HASH        
"SHA256=A50F29042AD313A3B8F1EDD1DB6F41BC8D610C00B223EA305D903BA6E6E63B2A")
 endif ()

http://git-wip-us.apache.org/repos/asf/mesos/blob/1be4ff75/3rdparty/cyrus-sasl-2.1.27rc3.patch
----------------------------------------------------------------------
diff --git a/3rdparty/cyrus-sasl-2.1.27rc3.patch 
b/3rdparty/cyrus-sasl-2.1.27rc3.patch
new file mode 100644
index 0000000..e363b9e
--- /dev/null
+++ b/3rdparty/cyrus-sasl-2.1.27rc3.patch
@@ -0,0 +1,127 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+new file mode 100644
+index 0000000..ae81f5c
+--- /dev/null
++++ b/CMakeLists.txt
+@@ -0,0 +1,40 @@
++cmake_minimum_required (VERSION 3.8)
++project (libsasl2)
++
++string(APPEND CMAKE_C_FLAGS_RELEASE " /MT")
++string(APPEND CMAKE_C_FLAGS_DEBUG   " /MTd")
++
++string(APPEND CMAKE_CXX_FLAGS_RELEASE " /MT")
++string(APPEND CMAKE_CXX_FLAGS_DEBUG   " /MTd")
++
++file(COPY
++  include/hmac-md5.h
++  include/md5.h
++  include/md5global.h
++  include/prop.h
++  include/sasl.h
++  include/saslplug.h
++  include/saslutil.h
++  DESTINATION include/sasl)
++
++# Add the minimal set of files required to build CRAM MD5 support.
++add_library(
++  libsasl2 STATIC
++  common/plugin_common.c
++  lib/auxprop.c
++  lib/canonusr.c
++  lib/checkpw.c
++  lib/client.c
++  lib/common.c
++  lib/config.c
++  lib/external.c
++  lib/getsubopt.c
++  lib/md5.c
++  lib/saslutil.c
++  lib/server.c
++  lib/seterror.c
++  lib/windlopen.c
++  plugins/cram.c)
++
++target_compile_definitions(libsasl2 PUBLIC LIBSASL_EXPORTS=1)
++target_include_directories(libsasl2 PUBLIC win32/include include common)
+diff --git a/include/md5global.h b/include/md5global.h
+index 414bac6..c939a22 100644
+--- a/include/md5global.h
++++ b/include/md5global.h
+@@ -18,11 +18,9 @@ typedef unsigned char *POINTER;
+ typedef signed char INT1;             /*  8 bits */
+ typedef short INT2;                   /* 16 bits */
+ typedef int INT4;                     /* 32 bits */
+-typedef long INT8;                    /* 64 bits */
+ typedef unsigned char UINT1;          /*  8 bits */
+ typedef unsigned short UINT2;         /* 16 bits */
+ typedef unsigned int UINT4;           /* 32 bits */
+-typedef unsigned long UINT8;          /* 64 bits */
+ 
+ /* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
+ If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
+diff --git a/lib/windlopen.c b/lib/windlopen.c
+index 70ac6b5..758c934 100644
+--- a/lib/windlopen.c
++++ b/lib/windlopen.c
+@@ -49,6 +49,7 @@
+ #include <config.h>
+ #include <sasl.h>
+ #include "saslint.h"
++#include "staticopen.h"
+ 
+ #define DLL_SUFFIX    ".dll"
+ #define DLL_MASK      "*" DLL_SUFFIX
+@@ -190,6 +191,18 @@ int _sasl_load_plugins(const add_plugin_list_t 
*entrypoints,
+       || ! verifyfile_cb->proc)
+       return SASL_BADPARAM;
+ 
++      for (cur_ep = entrypoints; cur_ep->entryname; cur_ep++)
++      {
++              if (strcmp("sasl_server_plug_init", cur_ep->entryname) == 0)
++              {
++                      sasl_server_add_plugin("CRAM-MD5", 
crammd5_server_plug_init);
++              }
++              else if (strcmp("sasl_client_plug_init", cur_ep->entryname) == 
0)
++              {
++                      sasl_client_add_plugin("CRAM-MD5", 
crammd5_client_plug_init);
++              }
++      }
++
+     /* get the path to the plugins */
+     result = ((sasl_getpath_t *)(getpath_cb->proc))(getpath_cb->context,
+                                                   &path);
+diff --git a/win32/include/config.h b/win32/include/config.h
+index 8d8548e..c0f7236 100644
+--- a/win32/include/config.h
++++ b/win32/include/config.h
+@@ -92,18 +92,9 @@ typedef int             intptr_t;
+ #define SASL_BERKELEYDB 1
+ 
+ /* which mechs can we link statically? */
+-#define STATIC_ANONYMOUS 1
+ #define STATIC_CRAMMD5 1
+-#define STATIC_DIGESTMD5 1
+-#define STATIC_SCRAM 1
+-#define STATIC_GSSAPIV2 1
+ /* #undef STATIC_KERBEROS4 */
+-#define STATIC_LOGIN 1
+ /* #undef STATIC_MYSQL */
+-#define STATIC_OTP 1
+-#define STATIC_PLAIN 1
+-#define STATIC_SASLDB 1
+-#define STATIC_SRP 1
+ 
+ /* ------------------------------------------------------------ */
+ 
+@@ -117,8 +117,8 @@ typedef int                    intptr_t;
+ /* Windows calls these functions something else
+  */
+ #define strcasecmp   stricmp
+-#define snprintf    _snprintf
+-#define strncasecmp  strnicmp
++//#define snprintf    _snprintf
++#define strncasecmp  _strnicmp
+ 
+ #define MAXHOSTNAMELEN 1024
+ 

Reply via email to