Skip to content

Commit 4904bd5

Browse files
authored
CPP-791 - Process creds.zip for automatic cloud secure connection configuration (#269)
- Ensuring zlib is on by default and adding zlib to CI - Read cloud secure connection config from zip file in memory - Exposing unzip implementation for driver use - Exposing zip implementation for unit test use - Vendoring minizip from zlib repository - Patched minizip for C90 compliant code and fixed missing typedef for older zlib versions
1 parent ca16ca8 commit 4904bd5

44 files changed

Lines changed: 8527 additions & 6 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ option(DSE_USE_SPARSEHASH "Use sparsehash" OFF)
5353
option(DSE_USE_STATIC_LIBS "Link static libraries when building executables" OFF)
5454
option(DSE_USE_STD_ATOMIC "Use C++11 atomics library" OFF)
5555
option(DSE_USE_TCMALLOC "Use tcmalloc" OFF)
56-
option(DSE_USE_ZLIB "Use zlib" OFF)
56+
option(DSE_USE_ZLIB "Use zlib" ON)
5757
option(DSE_USE_TIMERFD "Use timerfd (Linux only)" ON)
5858

5959
# Handle testing dependencies

appveyor.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ environment:
4545
LIBUV_VERSION: 1.29.1
4646
OPENSSL_1_0_VERSION: 1.0.2s
4747
OPENSSL_1_1_VERSION: 1.1.1c
48+
ZLIB_VERSION: 1.2.11
4849
matrix:
4950
- CMAKE_GENERATOR: Visual Studio 10 2010
5051
OPENSSL_MAJOR_MINOR: 1.0

cpp-driver/.build.linux.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ install_openssl() {
5454
true # Already installed on image
5555
}
5656

57+
install_zlib() {
58+
true # Already installed on image
59+
}
60+
5761
install_driver() {(
5862
cd packaging
5963

cpp-driver/.build.osx.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ install_openssl() {
3939
fi
4040
}
4141

42+
install_zlib() {
43+
if brew ls --versions zlib > /dev/null; then
44+
if ! brew outdated zlib; then
45+
brew upgrade zlib
46+
fi
47+
else
48+
brew install zlib
49+
fi
50+
}
51+
4252
install_driver() {
4353
true
4454
}

cpp-driver/.build.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ get_driver_version() {
6161
install_dependencies() {
6262
install_libuv
6363
install_openssl
64+
install_zlib
6465
}
6566

6667
build_driver() {

cpp-driver/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ option(CASS_USE_OPENSSL "Use OpenSSL" ON)
4343
option(CASS_USE_STATIC_LIBS "Link static libraries when building executables" OFF)
4444
option(CASS_USE_STD_ATOMIC "Use C++11 atomics library" OFF)
4545
option(CASS_USE_TCMALLOC "Use tcmalloc" OFF)
46-
option(CASS_USE_ZLIB "Use zlib" OFF)
46+
option(CASS_USE_ZLIB "Use zlib" ON)
4747
option(CASS_USE_TIMERFD "Use timerfd (Linux only)" ON)
4848

4949
# Handle testing dependencies

cpp-driver/appveyor.ps1

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Boost: v$($Env:BOOST_VERSION)
5555
libssh2: v$($Env:LIBSSH2_VERSION)
5656
libuv: v$($Env:LIBUV_VERSION)
5757
OpenSSL: v$(Get-OpenSSL-Version)
58+
zlib: v$($Env:ZLIB_VERSION)
5859
Build Number: $($Env:APPVEYOR_BUILD_NUMBER)
5960
Branch: $($Env:APPVEYOR_REPO_BRANCH)
6061
SHA: $(Get-Commit-Sha)
@@ -104,6 +105,7 @@ Function Initialize-Build-Environment {
104105
$libuv_version = $Env:LIBUV_VERSION
105106
$openssl_version = Get-OpenSSL-Version
106107
$Env:OPENSSL_VERSION = $openssl_version
108+
$zlib_version = $Env:ZLIB_VERSION
107109
$kerberos_version = "4.1"
108110
$bison_version = "2.4.1"
109111
$perl_version = "5.26.2.1"
@@ -149,13 +151,15 @@ Function Initialize-Build-Environment {
149151
$Env:LIBUV_ROOT_DIR = "$($dependencies_location_prefix)/libuv-$($libuv_version)"
150152
$Env:OPENSSL_BASE_DIR = "$($dependencies_location_prefix)/openssl-$($openssl_version)"
151153
$Env:OPENSSL_ROOT_DIR = "$($Env:OPENSSL_BASE_DIR)/shared"
154+
$Env:ZLIB_ROOT_DIR = "$($dependencies_location_prefix)/zlib-$($zlib_version)"
152155
$Env:DRIVER_INSTALL_DIR = "C:/projects/driver/lib"
153156
$Env:DRIVER_ARTIFACTS_DIR = "C:/projects/driver/artifacts"
154157
$Env:DRIVER_ARTIFACTS_LOGS_DIR = "$($Env:DRIVER_ARTIFACTS_DIR)/logs"
155158

156159
# Generate the environment variables for the third party archives
157160
$Env:LIBUV_ARTIFACT_ARCHIVE = "libuv-$($libuv_version)-win$($architecture)-msvc$($Env:VISUAL_STUDIO_INTERNAL_VERSION).zip"
158161
$Env:OPENSSL_ARTIFACT_ARCHIVE = "openssl-$($openssl_version)-win$($architecture)-msvc$($Env:VISUAL_STUDIO_INTERNAL_VERSION).zip"
162+
$Env:ZLIB_ARTIFACT_ARCHIVE = "zlib-$($zlib_version)-win$($architecture)-msvc$($Env:VISUAL_STUDIO_INTERNAL_VERSION).zip"
159163

160164
# Generate DataStax Enterprise specific environment variables
161165
If ($Env:DRIVER_TYPE -Like "dse") {
@@ -423,6 +427,53 @@ add_dependencies(`${PROJECT_NAME} `${OPENSSL_LIBRARY_NAME})
423427
}
424428
}
425429

430+
If (-Not (Test-Path -Path "$($Env:ZLIB_ROOT_DIR)/lib")) {
431+
New-Item -ItemType Directory -Force -Path "$($dependencies_build_location_prefix)/zlib" | Out-Null
432+
Push-Location -Path "$($dependencies_build_location_prefix)/zlib"
433+
434+
$cmakelists_contents = @"
435+
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
436+
project(zlib)
437+
set(PROJECT_DISPLAY_NAME "AppVeyor CI Build for zlib")
438+
set(PROJECT_MODULE_DIR $cmake_modules_dir)
439+
set(CMAKE_MODULE_PATH `${CMAKE_MODULE_PATH} `${PROJECT_MODULE_DIR})
440+
include(ExternalProject-zlib)
441+
set(GENERATED_SOURCE_FILE `${CMAKE_CURRENT_BINARY_DIR}/main.cpp)
442+
file(REMOVE `${GENERATED_SOURCE_FILE})
443+
file(WRITE `${GENERATED_SOURCE_FILE} "int main () { return 0; }")
444+
add_executable(`${PROJECT_NAME} `${GENERATED_SOURCE_FILE})
445+
add_dependencies(`${PROJECT_NAME} `${ZLIB_LIBRARY_NAME})
446+
"@
447+
$cmakelists_contents | Out-File -FilePath "CMakeLists.txt" -Encoding Utf8 -Force
448+
449+
Write-Host "Configuring zlib"
450+
cmake -G "$($cmake_generator)" -DBUILD_SHARED_LIBS=On "-DZLIB_VERSION=$($Env:ZLIB_VERSION)" "-DZLIB_INSTALL_PREFIX=$($Env:ZLIB_ROOT_DIR)" .
451+
If ($LastExitCode -ne 0) {
452+
If (Test-Path -Path "build/CMakeFiles/CMakeOutput.log") {
453+
Push-AppveyorArtifact "build/CMakeFiles/CMakeOutput.log" -DeploymentName "zlib Output Log"
454+
}
455+
If (Test-Path -Path "build/CMakeFiles/CMakeError.log") {
456+
Push-AppveyorArtifact "build/CMakeFiles/CMakeError.log" -DeploymentName "zlib Error Log"
457+
}
458+
Pop-Location
459+
Throw "Failed to configure zlib for MSVC $($Env:VISUAL_STUDIO_INTERNAL_VERSION)-$($Env:Platform)"
460+
}
461+
Write-Host "Building and Installing zlib"
462+
cmake --build . --config RelWithDebInfo
463+
If ($LastExitCode -ne 0) {
464+
If (Test-Path -Path "build/CMakeFiles/CMakeOutput.log") {
465+
Push-AppveyorArtifact "build/CMakeFiles/CMakeOutput.log" -DeploymentName "zlib Output Log"
466+
}
467+
If (Test-Path -Path "build/CMakeFiles/CMakeError.log") {
468+
Push-AppveyorArtifact "build/CMakeFiles/CMakeError.log" -DeploymentName "zlib Error Log"
469+
}
470+
Pop-Location
471+
Throw "Failed to build zlib for MSVC $($Env:VISUAL_STUDIO_INTERNAL_VERSION)-$($Env:Platform)"
472+
}
473+
474+
Pop-Location
475+
}
476+
426477
# Handle installation of DataStax Enterprise dependencies
427478
If ($Env:DRIVER_TYPE -Like "dse") {
428479
# Determine if Kerberos for Windows should be installed (cached)
@@ -583,7 +634,7 @@ Function Build-Driver {
583634
New-Item -ItemType Directory -Force -Path "$($Env:APPVEYOR_BUILD_FOLDER)/build"
584635
Push-Location "$($Env:APPVEYOR_BUILD_FOLDER)/build"
585636
Write-Host "Configuring DataStax C/C++ $($driver_type) Driver"
586-
cmake -G "$($cmake_generator)" "-D$($Env:DRIVER_TYPE)_MULTICORE_COMPILATION=On" "-D$($Env:DRIVER_TYPE)_USE_OPENSSL=On" "-D$($Env:DRIVER_TYPE)_USE_BOOST_ATOMIC=$($use_boost_atomic)" "-D$($Env:DRIVER_TYPE)_BUILD_EXAMPLES=On" "-D$($Env:DRIVER_TYPE)_BUILD_TESTS=On" "-D$($Env:DRIVER_TYPE)_USE_LIBSSH2=On" "-DCMAKE_INSTALL_PREFIX=`"$($Env:DRIVER_INSTALL_DIR)`"" ..
637+
cmake -G "$($cmake_generator)" "-D$($Env:DRIVER_TYPE)_MULTICORE_COMPILATION=On" "-D$($Env:DRIVER_TYPE)_USE_OPENSSL=On" "-D$($Env:DRIVER_TYPE)_USE_ZLIB=On" "-D$($Env:DRIVER_TYPE)_USE_BOOST_ATOMIC=$($use_boost_atomic)" "-D$($Env:DRIVER_TYPE)_BUILD_EXAMPLES=On" "-D$($Env:DRIVER_TYPE)_BUILD_TESTS=On" "-D$($Env:DRIVER_TYPE)_USE_LIBSSH2=On" "-DCMAKE_INSTALL_PREFIX=`"$($Env:DRIVER_INSTALL_DIR)`"" ..
587638
If ($LastExitCode -ne 0) {
588639
Pop-Location
589640
Throw "Failed to configure DataStax C/C++ $($driver_type) Driver for MSVC $($Env:VISUAL_STUDIO_INTERNAL_VERSION)-$($Env:Platform)"
@@ -707,6 +758,17 @@ a -tzip "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:OPENSSL_ARTIFACT_ARCHIVE)" -r "$($E
707758
If ($process.ExitCode -ne 0) {
708759
Throw "Failed to archive OpenSSL for MSVC $($Env:VISUAL_STUDIO_INTERNAL_VERSION)-$($Env:Platform)"
709760
}
761+
762+
# Clean up the library dependency directories for zlib packaging
763+
New-Item -ItemType Directory -Force -Path "$($Env:DRIVER_ARTIFACTS_DIR)/zlib" | Out-Null
764+
Copy-Item -Force -Recurse -Path "$($Env:ZLIB_ROOT_DIR)/*" "$($Env:DRIVER_ARTIFACTS_DIR)/zlib" | Out-Null
765+
$argument_list = @"
766+
a -tzip "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:ZLIB_ARTIFACT_ARCHIVE)" -r "$($Env:DRIVER_ARTIFACTS_DIR)/zlib/*"
767+
"@
768+
$process = Start-Process -FilePath 7z -ArgumentList $argument_list -PassThru -Wait -NoNewWindow
769+
If ($process.ExitCode -ne 0) {
770+
Throw "Failed to archive zlib for MSVC $($Env:VISUAL_STUDIO_INTERNAL_VERSION)-$($Env:Platform)"
771+
}
710772
}
711773

712774
Function Push-Artifacts {
@@ -721,6 +783,7 @@ Function Push-Artifacts {
721783
Push-AppveyorArtifact "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:DRIVER_ARTIFACT_TESTS_ARCHIVE)" -DeploymentName "DataStax C/C++ $($driver_type) Driver Tests"
722784
Push-AppveyorArtifact "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:LIBUV_ARTIFACT_ARCHIVE)" -DeploymentName "libuv v$($Env:LIBUV_VERSION)"
723785
Push-AppveyorArtifact "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:OPENSSL_ARTIFACT_ARCHIVE)" -DeploymentName "OpenSSL v$($Env:OPENSSL_VERSION)"
786+
Push-AppveyorArtifact "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:ZLIB_ARTIFACT_ARCHIVE)" -DeploymentName "zlib v$($Env:ZLIB_VERSION)"
724787
}
725788
}
726789

@@ -781,6 +844,8 @@ Function Publish-Artifacts {
781844
#TODO: Need to handle OpenSSL v1.1.x if enabled
782845
$openssl_uri = "$($base_uri)/dependencies/openssl/v$($Env:OPENSSL_VERSION)/$($Env:OPENSSL_ARTIFACT_ARCHIVE)"
783846
$openssl_archive = "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:OPENSSL_ARTIFACT_ARCHIVE)"
847+
$zlib_uri = "$($base_uri)/dependencies/zlib/v$($Env:ZLIB_VERSION)/$($Env:ZLIB_ARTIFACT_ARCHIVE)"
848+
$zlib_archive = "$($Env:DRIVER_ARTIFACTS_DIR)/$($Env:ZLIB_ARTIFACT_ARCHIVE)"
784849

785850
# Publish/Upload the driver and it dependencies to Artifactory
786851
$is_failure = $False
@@ -798,6 +863,10 @@ Function Publish-Artifacts {
798863
$is_failure = $True
799864
$failed_upload += "OpenSSL"
800865
}
866+
If ((Publish-Artifact-To-Artifactory -Uri "$($zlib_uri)" -FilePath "$($zlib_archive)") -ne 0) {
867+
$is_failure = $True
868+
$failed_upload += "zlib"
869+
}
801870

802871
# Check to see if there was a failure uploading the artifacts
803872
If ($is_failure) {

cpp-driver/appveyor.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ environment:
4444
LIBUV_VERSION: 1.29.1
4545
OPENSSL_1_0_VERSION: 1.0.2s
4646
OPENSSL_1_1_VERSION: 1.1.1c
47+
ZLIB_VERSION: 1.2.11
4748
matrix:
4849
- CMAKE_GENERATOR: Visual Studio 10 2010
4950
OPENSSL_MAJOR_MINOR: 1.0

cpp-driver/cmake/modules/CppDriver.cmake

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,29 @@ macro(CassRapidJson)
459459
include_directories(${RAPID_JSON_INCLUDE_DIR})
460460
endmacro()
461461

462+
#------------------------
463+
# CassMiniZip
464+
#
465+
# Set some MINIZIP_* variables, set up some source_group's, and add the
466+
# MINIZIP include dir to our list of include dirs.
467+
#
468+
# Input: CASS_SRC_DIR
469+
# Output: MINIZIP_INCLUDE_DIR, MINIZIP_HEADER_FILES, MINIZIP_SOURCE_FILES
470+
#------------------------
471+
macro(CassMiniZip)
472+
if (ZLIB_FOUND)
473+
set(MINIZIP_INCLUDE_DIR "${CASS_SRC_DIR}/third_party/minizip")
474+
set(MINIZIP_HEADER_FILES ${MINIZIP_INCLUDE_DIR}/crypt.h
475+
${MINIZIP_INCLUDE_DIR}/ioapi.h
476+
${MINIZIP_INCLUDE_DIR}/unzip.h)
477+
set(MINIZIP_SOURCE_FILES ${MINIZIP_INCLUDE_DIR}/ioapi.c
478+
${MINIZIP_INCLUDE_DIR}/unzip.c)
479+
source_group("Header Files\\minizip" FILES ${MINIZIP_HEADER_FILES})
480+
source_group("Source Files\\minizip" FILES ${MINIZIP_SOURCE_FILES})
481+
include_directories(${MINIZIP_INCLUDE_DIR})
482+
endif()
483+
endmacro()
484+
462485
#------------------------
463486
# CassSimulacron
464487
#
@@ -687,6 +710,7 @@ macro(CassUseZlib)
687710
# Assign zlib properties
688711
set(CASS_INCLUDES ${CASS_INCLUDES} ${ZLIB_INCLUDE_DIRS})
689712
set(CASS_LIBS ${CASS_LIBS} ${ZLIB_LIBRARIES})
713+
set(HAVE_ZLIB On)
690714
else()
691715
message(WARNING "Could not find zlib, try to set the path to zlib root folder in the system variable ZLIB_ROOT_DIR")
692716
message(WARNING "zlib libraries will not be linked into build")
@@ -986,6 +1010,10 @@ macro(CassFindSourceFiles)
9861010
${CASS_SRC_DIR}/ssl/ssl_no_impl.cpp)
9871011
endif()
9881012

1013+
CassMiniZip()
1014+
set(CASS_INC_FILES ${CASS_INC_FILES} ${MINIZIP_HEADER_FILES})
1015+
set(CASS_SRC_FILES ${CASS_SRC_FILES} ${MINIZIP_SOURCE_FILES})
1016+
9891017
set(CASS_ALL_SOURCE_FILES ${CASS_SRC_FILES} ${CASS_API_HEADER_FILES} ${CASS_INC_FILES})
9901018
endmacro()
9911019

cpp-driver/driver_config.hpp.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
#cmakedefine HAVE_ARC4RANDOM
1313
#cmakedefine HAVE_GETRANDOM
1414
#cmakedefine HAVE_TIMERFD
15+
#cmakedefine HAVE_ZLIB
1516

1617
#endif

0 commit comments

Comments
 (0)