From b5f3c8eb22bfb6f85a53a21a80f3690c3e383ef9 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Thu, 22 May 2025 15:52:23 +0200 Subject: [PATCH 1/6] Bump libmongoc to 2.0.1 and libmongocrypt to 1.14.0 This fixes the following issues: * PHPC-2581: Bump to libmongoc 2.0.1 * PHPC-2578: Bump to libmongocrypt 1.14.0 * PHPC-2548: Remove MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED * PHPC-2540: Use const for mongoc_host_list_t * PHPC-2547: Remove MONGOC_NO_AUTOMATIC_GLOBALS * PHPC-2549: Remove BSON_EXTRA_ALIGN * PHPC-1548: Add tests for empty authSource URI option * PHPC-2542: Add test coverage for auth mechanism errors --- .evergreen/compile-unix.sh | 5 --- .evergreen/config/functions.yml | 1 - .evergreen/config/generate-config.php | 4 +- .../generated/build/build-libmongoc.yml | 22 +++++----- .../generated/test-variant/libmongoc.yml | 30 +++++++------- .../templates/build/build-libmongoc.yml | 4 +- CONTRIBUTING.md | 29 +++++--------- Makefile.frag | 5 +-- bin/prep-release.php | 7 +++- config.m4 | 35 ++++++++-------- config.w32 | 13 +++--- sbom.json | 28 ++++++------- scripts/autotools/libbson/Versions.m4 | 2 +- scripts/autotools/libmongoc/Versions.m4 | 2 +- scripts/update-sbom.sh | 2 +- scripts/update-submodule-sources.php | 4 +- src/LIBMONGOCRYPT_VERSION_CURRENT | 2 +- src/LIBMONGOC_VERSION_CURRENT | 1 - src/MongoDB/Server.c | 6 +-- src/MongoDB/ServerDescription.c | 4 +- src/MongoDB/WriteConcern.c | 4 +- src/libmongoc | 2 +- src/libmongocrypt | 2 +- src/phongo_client.c | 3 +- tests/connect/bug1045.phpt | 2 +- ...manager-ctor-auth_mechanism-error-001.phpt | 40 +++++-------------- ...manager-ctor-auth_mechanism-error-002.phpt | 31 ++++++++++++++ ...manager-ctor-auth_mechanism-error-003.phpt | 36 +++++++++++++++++ ...manager-ctor-auth_mechanism-error-004.phpt | 36 +++++++++++++++++ .../manager-ctor-auth_source_error-001.phpt | 29 ++++++++++++++ .../manager-ctor-write_concern-001.phpt | 10 ----- .../manager-ctor-write_concern-error-001.phpt | 6 +-- .../manager-ctor-write_concern-error-005.phpt | 24 ----------- tests/manager/manager-debug-001.phpt | 2 +- tests/manager/manager-debug-002.phpt | 2 +- .../writeconcern-isdefault-001.phpt | 9 +---- 36 files changed, 254 insertions(+), 190 deletions(-) delete mode 100644 src/LIBMONGOC_VERSION_CURRENT create mode 100644 tests/manager/manager-ctor-auth_mechanism-error-002.phpt create mode 100644 tests/manager/manager-ctor-auth_mechanism-error-003.phpt create mode 100644 tests/manager/manager-ctor-auth_mechanism-error-004.phpt create mode 100644 tests/manager/manager-ctor-auth_source_error-001.phpt diff --git a/.evergreen/compile-unix.sh b/.evergreen/compile-unix.sh index 6d75a70bf..a5047be62 100755 --- a/.evergreen/compile-unix.sh +++ b/.evergreen/compile-unix.sh @@ -72,11 +72,6 @@ if [ -n "$LIBMONGOC_VERSION" ]; then echo "Finding Python3 binary... done." php scripts/update-submodule-sources.php - - # We invoke python manually as it may not be in the path - pushd src/libmongoc/ - $PYTHON build/calc_release_version.py > ../LIBMONGOC_VERSION_CURRENT - popd fi phpize diff --git a/.evergreen/config/functions.yml b/.evergreen/config/functions.yml index 4b66cc675..e5a40634a 100644 --- a/.evergreen/config/functions.yml +++ b/.evergreen/config/functions.yml @@ -140,7 +140,6 @@ functions: echo "Checking out libmongoc version: ${LIBMONGOC_VERSION}" git fetch git checkout ${LIBMONGOC_VERSION} - # Note: compile-unix.sh will run `make libmongoc-version-current` fi - command: subprocess.exec type: test diff --git a/.evergreen/config/generate-config.php b/.evergreen/config/generate-config.php index df700407e..cec13919c 100644 --- a/.evergreen/config/generate-config.php +++ b/.evergreen/config/generate-config.php @@ -21,9 +21,7 @@ '4.2', ]; -// TODO: Change when PHP 8.4 is stable -// $latestPhpVersion = max($phpVersions); -$latestPhpVersion = '8.3'; +$latestPhpVersion = max($phpVersions); // Only test the latest PHP version for libmongoc $libmongocBuildPhpVersions = [ $latestPhpVersion ]; diff --git a/.evergreen/config/generated/build/build-libmongoc.yml b/.evergreen/config/generated/build/build-libmongoc.yml index b1e845197..9c478ea8c 100644 --- a/.evergreen/config/generated/build/build-libmongoc.yml +++ b/.evergreen/config/generated/build/build-libmongoc.yml @@ -6,29 +6,29 @@ tasks: # These tasks are used in the build task group "build-php-libmongoc" defined in .evergreen/config/templates/build-task-groups.yml, # where the "max_hosts" setting must be set to the number of enabled tasks. # Last but not least, make sure the corresponding test variants are enabled in .evergreen/config/templates/test-variant/libmongoc.yml - - name: "build-php-8.3-libmongoc-lowest-supported" - tags: ["build-libmongoc", "php8.3"] + - name: "build-php-8.4-libmongoc-lowest-supported" + tags: ["build-libmongoc", "php8.4"] commands: - func: "compile driver" vars: - PHP_VERSION: "8.3" - LIBMONGOC_VERSION: "1.30.1" + PHP_VERSION: "8.4" + LIBMONGOC_VERSION: "2.0.1" - func: "upload build" - - name: "build-php-8.3-libmongoc-next-stable" - tags: ["build-libmongoc", "php8.3"] + - name: "build-php-8.4-libmongoc-next-stable" + tags: ["build-libmongoc", "php8.4"] commands: - func: "compile driver" vars: - PHP_VERSION: "8.3" - LIBMONGOC_VERSION: "r1.30" + PHP_VERSION: "8.4" + LIBMONGOC_VERSION: "r2.0" - func: "upload build" - - name: "build-php-8.3-libmongoc-latest" - tags: ["build-libmongoc", "php8.3"] + - name: "build-php-8.4-libmongoc-latest" + tags: ["build-libmongoc", "php8.4"] commands: - func: "compile driver" vars: - PHP_VERSION: "8.3" + PHP_VERSION: "8.4" LIBMONGOC_VERSION: "master" - func: "upload build" diff --git a/.evergreen/config/generated/test-variant/libmongoc.yml b/.evergreen/config/generated/test-variant/libmongoc.yml index 3d49b4d76..f7e839552 100644 --- a/.evergreen/config/generated/test-variant/libmongoc.yml +++ b/.evergreen/config/generated/test-variant/libmongoc.yml @@ -1,16 +1,16 @@ # This file is generated automatically - please edit the "templates/test-variant/libmongoc.yml" template file instead. buildvariants: # Variants with different libmongoc - - name: test-debian12-php-8.3-libmongoc-lowest-supported - tags: ["test", "libmongoc", "debian", "x64", "php8.3", "pr", "tag"] - display_name: "Test: Debian 12, PHP 8.3, libmongoc lowest" + - name: test-debian12-php-8.4-libmongoc-lowest-supported + tags: ["test", "libmongoc", "debian", "x64", "php8.4", "pr", "tag"] + display_name: "Test: Debian 12, PHP 8.4, libmongoc lowest" run_on: debian12-small expansions: FETCH_BUILD_VARIANT: "build-debian12" - FETCH_BUILD_TASK: "build-php-8.3-libmongoc-lowest-supported" + FETCH_BUILD_TASK: "build-php-8.4-libmongoc-lowest-supported" depends_on: - variant: "build-debian12" - name: "build-php-8.3-libmongoc-lowest-supported" + name: "build-php-8.4-libmongoc-lowest-supported" tasks: - ".standalone .local !.4.2 !.4.4 !.5.0 !.6.0" - ".replicaset .local !.4.2 !.4.4 !.5.0 !.6.0" @@ -32,16 +32,16 @@ buildvariants: execution_tasks: - ".ocsp .7.0" - - name: test-debian12-php-8.3-libmongoc-next-stable - tags: ["test", "libmongoc", "debian", "x64", "php8.3", "pr", "tag"] - display_name: "Test: Debian 12, PHP 8.3, libmongoc next stable" + - name: test-debian12-php-8.4-libmongoc-next-stable + tags: ["test", "libmongoc", "debian", "x64", "php8.4", "pr", "tag"] + display_name: "Test: Debian 12, PHP 8.4, libmongoc next stable" run_on: debian12-small expansions: FETCH_BUILD_VARIANT: "build-debian12" - FETCH_BUILD_TASK: "build-php-8.3-libmongoc-next-stable" + FETCH_BUILD_TASK: "build-php-8.4-libmongoc-next-stable" depends_on: - variant: "build-debian12" - name: "build-php-8.3-libmongoc-next-stable" + name: "build-php-8.4-libmongoc-next-stable" tasks: - ".standalone .local !.4.2 !.4.4 !.5.0 !.6.0" - ".replicaset .local !.4.2 !.4.4 !.5.0 !.6.0" @@ -63,16 +63,16 @@ buildvariants: execution_tasks: - ".ocsp .7.0" - - name: test-debian12-php-8.3-libmongoc-latest - tags: ["test", "libmongoc", "debian", "x64", "php8.3"] - display_name: "Test: Debian 12, PHP 8.3, libmongoc latest" + - name: test-debian12-php-8.4-libmongoc-latest + tags: ["test", "libmongoc", "debian", "x64", "php8.4"] + display_name: "Test: Debian 12, PHP 8.4, libmongoc latest" run_on: debian12-small expansions: FETCH_BUILD_VARIANT: "build-debian12" - FETCH_BUILD_TASK: "build-php-8.3-libmongoc-latest" + FETCH_BUILD_TASK: "build-php-8.4-libmongoc-latest" depends_on: - variant: "build-debian12" - name: "build-php-8.3-libmongoc-latest" + name: "build-php-8.4-libmongoc-latest" tasks: - ".standalone .local !.4.2 !.4.4 !.5.0 !.6.0" - ".replicaset .local !.4.2 !.4.4 !.5.0 !.6.0" diff --git a/.evergreen/config/templates/build/build-libmongoc.yml b/.evergreen/config/templates/build/build-libmongoc.yml index 3ae136345..f71c06871 100644 --- a/.evergreen/config/templates/build/build-libmongoc.yml +++ b/.evergreen/config/templates/build/build-libmongoc.yml @@ -10,7 +10,7 @@ - func: "compile driver" vars: PHP_VERSION: "%phpVersion%" - LIBMONGOC_VERSION: "1.30.1" + LIBMONGOC_VERSION: "2.0.1" - func: "upload build" - name: "build-php-%phpVersion%-libmongoc-next-stable" @@ -19,7 +19,7 @@ - func: "compile driver" vars: PHP_VERSION: "%phpVersion%" - LIBMONGOC_VERSION: "r1.30" + LIBMONGOC_VERSION: "r2.0" - func: "upload build" - name: "build-php-%phpVersion%-libmongoc-latest" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b7dcb85e4..2dd8ea28b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -203,7 +203,7 @@ always refer to libmongoc. ```shell cd src/libmongoc git fetch -git checkout 1.20.0 +git checkout 2.1.0 ``` During development, it may be necessary to temporarily point the submodule to a @@ -218,24 +218,16 @@ git submodules set-url src/libmongoc https://github.com//.git git submodules set-branch -b src/libmongoc ``` -#### Ensure version information is correct +#### Ensure version information is correct (libmongocrypt only) -Various build processes and tools rely on the version files to infer version -information. This file can be regenerated using Makefile targets: +For libmongocrypt, version information needs to be updated after updating to +a newer submodule version. This can be done by running the corresponding make +target: ```shell -make libmongoc-version-current +make libmongocrypt-version-current ``` -Alternatively, the `build/calc_release_version.py` script in the submodule can -be executed directly. - -Note: If the submodule points to a non-release, non-master branch, the script -may fail to correctly detect the version. This issue is being tracked in -[CDRIVER-3315](https://jira.mongodb.org/browse/CDRIVER-3315) and can be safely ignored since this should only happen -during development (any PHP driver release should point to a tagged submodule -version). - #### Update sources in build configurations The Autotools and Windows build configurations (`config.m4` and `config.w32`, @@ -261,11 +253,11 @@ libmongoc and libbson. For example, the following lines might be updated for libmongoc: ``` -if $PKG_CONFIG libmongoc-1.0 --atleast-version 1.20.0; then +if $PKG_CONFIG mongoc2 --atleast-version 2.1.0; then ... -AC_MSG_ERROR(system libmongoc must be upgraded to version >= 1.20.0) +AC_MSG_ERROR(system libmongoc must be upgraded to version >= 2.1.0) ``` #### Update tested versions in Evergreen configuration (libmongoc only) @@ -277,7 +269,7 @@ information about the build tasks and where they are used. In general, we test against two additional versions of libmongoc: - The upcoming patch release of the current libmongoc minor version (e.g. the - `r1.x` branch) + `r2.x` branch) - The upcoming minor release of libmongoc (e.g. the `master` branch) #### Update sources in PECL package generation script @@ -307,5 +299,6 @@ test suite passes. Once done, commit the changes to all of the above files/paths. For example: ```shell -git commit -m "Bump libmongoc to 1.20.0" config.m4 config.w32 src/libmongoc src/LIBMONGOC_VERSION_CURRENT sbom.json +git commit -m "Bump libmongoc to 2.1.0" config.m4 config.w32 src/libmongoc sbom. +json ``` diff --git a/Makefile.frag b/Makefile.frag index 9b181b4a0..c1f83b808 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -1,4 +1,4 @@ -.PHONY: mv-coverage lcov-coveralls lcov-local coverage coveralls format format-changed format-check test-clean package package.xml libmongoc-version-current libmongocrypt-version-current generate-function-map +.PHONY: mv-coverage lcov-coveralls lcov-local coverage coveralls format format-changed format-check test-clean package package.xml libmongocrypt-version-current generate-function-map ifneq (,$(realpath $(EXTENSION_DIR)/json.so)) PHP_TEST_SHARED_EXTENSIONS := "-d" "extension=$(EXTENSION_DIR)/json.so" $(PHP_TEST_SHARED_EXTENSIONS) @@ -63,9 +63,6 @@ package: package.xml: php bin/prep-release.php $(MONGODB_VERSION) $(MONGODB_STABILITY) $(RELEASE_NOTES_FILE) -libmongoc-version-current: - cd src/libmongoc/ && python build/calc_release_version.py > ../LIBMONGOC_VERSION_CURRENT - libmongocrypt-version-current: cd src/libmongocrypt/ && python etc/calc_release_version.py > ../LIBMONGOCRYPT_VERSION_CURRENT diff --git a/bin/prep-release.php b/bin/prep-release.php index 963794e94..22887205e 100644 --- a/bin/prep-release.php +++ b/bin/prep-release.php @@ -39,7 +39,6 @@ function get_files() { "scripts/autotools/*/*.{m4}", "src/*.{c,h}", - "src/LIBMONGOC_VERSION_CURRENT", "src/LIBMONGOCRYPT_VERSION_CURRENT", "src/MongoDB/*.{c,h}", @@ -49,6 +48,8 @@ function get_files() { "src/contrib/*.{c,h}", "src/libmongoc/src/common/src/*.{c,h,h.in}", + // Note: src/libmongoc/src/common/src/mlib/ does not contain source files (as of libmongoc 2.0.1) + "src/libmongoc/src/common/src/mlib/*.{c,h}", "src/libmongoc/src/kms-message/src/*.{c,h}", "src/libmongoc/src/kms-message/src/kms_message/*.{c,h}", "src/libmongoc/src/libbson/src/bson/*.{c,h,h.in}", @@ -64,10 +65,12 @@ function get_files() { "src/libmongocrypt-compat/mongocrypt/*.{c,h}", "src/libmongocrypt/src/*.{c,h,h.in}", "src/libmongocrypt/src/crypto/*.{c,h}", - // Note: src/libmongocrypt/src/mlib/ does not contain source files (as of libmongocrypt 1.3.1) + "src/libmongocrypt/src/mlib/*.{c,h}", + // Note: src/libmongocrypt/src/mlib/ does not contain source files (as of libmongocrypt 1.14.0) "src/libmongocrypt/src/mlib/*.h", "src/libmongocrypt/src/os_posix/*.{c,h}", "src/libmongocrypt/src/os_win/*.{c,h}", + "src/libmongocrypt/src/unicode/*.{c,h}", "src/libmongocrypt/kms-message/src/*.{c,h}", "src/libmongocrypt/kms-message/src/kms_message/*.{c,h}", ), diff --git a/config.m4 b/config.m4 index 5a547089a..e87b09b3f 100644 --- a/config.m4 +++ b/config.m4 @@ -98,6 +98,8 @@ if test "$PHP_MONGODB" != "no"; then AX_CHECK_COMPILE_FLAG(-Wno-unused-parameter, PHP_MONGODB_DEV_CFLAGS="$PHP_MONGODB_DEV_CFLAGS -Wno-unused-parameter" ,, -Werror) AX_CHECK_COMPILE_FLAG(-Wno-unused-but-set-variable, PHP_MONGODB_DEV_CFLAGS="$PHP_MONGODB_DEV_CFLAGS -Wno-unused-but-set-variable" ,, -Werror) AX_CHECK_COMPILE_FLAG(-Wno-missing-field-initializers, PHP_MONGODB_DEV_CFLAGS="$PHP_MONGODB_DEV_CFLAGS -Wno-missing-field-initializers",, -Werror) + dnl Avoid warnings about deprecated libmongoc features, specifically hedged reads + AX_CHECK_COMPILE_FLAG(-Wno-deprecated-declarations, PHP_MONGODB_DEV_CFLAGS="$PHP_MONGODB_DEV_CFLAGS -Wno-deprecated-declarations" ,, -Werror) if test "$PHP_MONGODB_PHP_VERSION_ID" -ge "80108"; then AX_CHECK_COMPILE_FLAG(-Wstrict-prototypes, PHP_MONGODB_DEV_CFLAGS="$PHP_MONGODB_DEV_CFLAGS -Wstrict-prototypes",, -Werror) @@ -240,30 +242,30 @@ if test "$PHP_MONGODB" != "no"; then PHP_MONGODB_MONGOCRYPT_VERSION_STRING="None" if test "$PHP_MONGODB_SYSTEM_LIBS" != "no"; then - PKG_CHECK_MODULES([PHP_MONGODB_BSON], [libbson-1.0 >= 1.30.4], [ - PHP_MONGODB_BSON_VERSION=`$PKG_CONFIG libbson-1.0 --modversion` + PKG_CHECK_MODULES([PHP_MONGODB_BSON], [bson2 >= 2.0.1], [ + PHP_MONGODB_BSON_VERSION=`$PKG_CONFIG bson2 --modversion` PHP_MONGODB_BSON_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)" PHP_MONGODB_CFLAGS="$PHP_MONGODB_CFLAGS $PHP_MONGODB_BSON_CFLAGS" PHP_EVAL_LIBLINE($PHP_MONGODB_BSON_LIBS, MONGODB_SHARED_LIBADD) AC_DEFINE(HAVE_SYSTEM_LIBBSON, 1, [Use system libbson]) ],[ - AC_MSG_ERROR([Could not find system library for libbson >= 1.30.4]) + AC_MSG_ERROR([Could not find system library for libbson >= 2.0.1]) ]) - PKG_CHECK_MODULES([PHP_MONGODB_MONGOC], [libmongoc-1.0 >= 1.30.4], [ - PHP_MONGODB_BSON_VERSION=`$PKG_CONFIG libbson-1.0 --modversion` - PHP_MONGODB_BSON_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)" + PKG_CHECK_MODULES([PHP_MONGODB_MONGOC], [mongoc2 >= 2.0.1], [ + PHP_MONGODB_MONGOC_VERSION=`$PKG_CONFIG mongoc2 --modversion` + PHP_MONGODB_MONGOC_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)" PHP_MONGODB_CFLAGS="$PHP_MONGODB_CFLAGS $PHP_MONGODB_MONGOC_CFLAGS" PHP_EVAL_LIBLINE($PHP_MONGODB_MONGOC_LIBS, MONGODB_SHARED_LIBADD) AC_DEFINE(HAVE_SYSTEM_LIBMONGOC, 1, [Use system libmongoc]) ],[ - AC_MSG_ERROR(Could not find system library for libmongoc >= 1.30.4) + AC_MSG_ERROR(Could not find system library for libmongoc >= 2.0.1) ]) if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" != "no"; then - PKG_CHECK_MODULES([PHP_MONGODB_MONGOCRYPT], [libmongocrypt >= 1.12.0], [ + PKG_CHECK_MODULES([PHP_MONGODB_MONGOCRYPT], [libmongocrypt >= 1.14.0], [ PHP_MONGODB_MONGOCRYPT_VERSION=`$PKG_CONFIG libmongocrypt --modversion` PHP_MONGODB_MONGOCRYPT_VERSION_STRING="System ($PHP_MONGODB_MONGOCRYPT_VERSION)" @@ -271,7 +273,7 @@ if test "$PHP_MONGODB" != "no"; then PHP_EVAL_LIBLINE($PHP_MONGODB_MONGOCRYPT_LIBS, MONGODB_SHARED_LIBADD) AC_DEFINE(HAVE_SYSTEM_LIBMONGOCRYPT, 1, [Use system libmongocrypt]) ],[ - AC_MSG_ERROR(Could not find system library for libmongocrypt >= 1.12.0) + AC_MSG_ERROR(Could not find system library for libmongocrypt >= 1.14.0) ]) fi fi @@ -327,10 +329,8 @@ if test "$PHP_MONGODB" != "no"; then PHP_MONGODB_BSON_VERSION_STRING="Bundled ($libbson_VERSION_FULL)" PHP_MONGODB_MONGOC_VERSION_STRING="Bundled ($libmongoc_VERSION_FULL)" - AC_SUBST(BSON_EXTRA_ALIGN, 0) AC_SUBST(BSON_OS, 1) - AC_SUBST(MONGOC_NO_AUTOMATIC_GLOBALS, 1) AC_SUBST(MONGOC_ENABLE_MONGODB_AWS_AUTH, 0) AC_SUBST(MONGOC_ENABLE_RDTSCP, 0) AC_SUBST(MONGOC_ENABLE_SHM_COUNTERS, 0) @@ -358,9 +358,9 @@ if test "$PHP_MONGODB" != "no"; then dnl Sources below are updated by scripts/update-submodule-sources.php PHP_MONGODB_COMMON_SOURCES="common-atomic.c common-b64.c common-json.c common-md5.c common-oid.c common-string.c common-thread.c" PHP_MONGODB_KMS_MESSAGE_SOURCES="hexlify.c kms_azure_request.c kms_b64.c kms_caller_identity_request.c kms_crypto_apple.c kms_crypto_libcrypto.c kms_crypto_none.c kms_crypto_windows.c kms_decrypt_request.c kms_encrypt_request.c kms_gcp_request.c kms_kmip_reader_writer.c kms_kmip_request.c kms_kmip_response.c kms_kmip_response_parser.c kms_kv_list.c kms_message.c kms_port.c kms_request.c kms_request_opt.c kms_request_str.c kms_response.c kms_response_parser.c sort.c" - PHP_MONGODB_BSON_SOURCES="bcon.c bson-atomic.c bson.c bson-clock.c bson-context.c bson-decimal128.c bson-error.c bson-iso8601.c bson-iter.c bson-json.c bson-keys.c bson-md5.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-version-functions.c bson-writer.c" + PHP_MONGODB_BSON_SOURCES="bcon.c bson.c bson-clock.c bson-context.c bson-decimal128.c bson-error.c bson-iso8601.c bson-iter.c bson-json.c bson-keys.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-vector.c bson-version-functions.c bson-writer.c" PHP_MONGODB_JSONSL_SOURCES="jsonsl.c" - PHP_MONGODB_MONGOC_SOURCES="mcd-azure.c mcd-nsinfo.c mcd-rpc.c mongoc-aggregate.c mongoc-apm.c mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-bulkwrite.c mongoc-change-stream.c mongoc-client.c mongoc-client-pool.c mongoc-client-session.c mongoc-client-side-encryption.c mongoc-cluster-aws.c mongoc-cluster.c mongoc-cluster-cyrus.c mongoc-cluster-sasl.c mongoc-cluster-sspi.c mongoc-cmd.c mongoc-collection.c mongoc-compression.c mongoc-counters.c mongoc-crypt.c mongoc-crypto.c mongoc-crypto-cng.c mongoc-crypto-common-crypto.c mongoc-crypto-openssl.c mongoc-cursor-array.c mongoc-cursor.c mongoc-cursor-change-stream.c mongoc-cursor-cmd.c mongoc-cursor-cmd-deprecated.c mongoc-cursor-find.c mongoc-cursor-find-cmd.c mongoc-cursor-find-opquery.c mongoc-cursor-legacy.c mongoc-cyrus.c mongoc-database.c mongoc-deprioritized-servers.c mongoc-error.c mongoc-find-and-modify.c mongoc-flags.c mongoc-generation-map.c mongoc-gridfs-bucket.c mongoc-gridfs-bucket-file.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-list.c mongoc-gridfs-file-page.c mongoc-handshake.c mongoc-host-list.c mongoc-http.c mongoc-index.c mongoc-init.c mongoc-interrupt.c mongoc-libressl.c mongoc-linux-distro-scanner.c mongoc-list.c mongoc-log-and-monitor-private.c mongoc-log.c mongoc-matcher.c mongoc-matcher-op.c mongoc-memcmp.c mongoc-ocsp-cache.c mongoc-opcode.c mongoc-openssl.c mongoc-optional.c mongoc-opts.c mongoc-opts-helpers.c mongoc-queue.c mongoc-rand-cng.c mongoc-rand-common-crypto.c mongoc-rand-openssl.c mongoc-read-concern.c mongoc-read-prefs.c mongoc-rpc.c mongoc-sasl.c mongoc-scram.c mongoc-secure-channel.c mongoc-secure-transport.c mongoc-server-api.c mongoc-server-description.c mongoc-server-monitor.c mongoc-server-stream.c mongoc-set.c mongoc-shared.c mongoc-socket.c mongoc-ssl.c mongoc-sspi.c mongoc-stream-buffered.c mongoc-stream.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-gridfs-download.c mongoc-stream-gridfs-upload.c mongoc-stream-socket.c mongoc-stream-tls.c mongoc-stream-tls-libressl.c mongoc-stream-tls-openssl-bio.c mongoc-stream-tls-openssl.c mongoc-stream-tls-secure-channel.c mongoc-stream-tls-secure-transport.c mongoc-structured-log.c mongoc-timeout.c mongoc-topology-background-monitoring.c mongoc-topology.c mongoc-topology-description-apm.c mongoc-topology-description.c mongoc-topology-scanner.c mongoc-ts-pool.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c service-gcp.c" + PHP_MONGODB_MONGOC_SOURCES="mcd-azure.c mcd-nsinfo.c mcd-rpc.c mongoc-aggregate.c mongoc-apm.c mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-bulkwrite.c mongoc-change-stream.c mongoc-client.c mongoc-client-pool.c mongoc-client-session.c mongoc-client-side-encryption.c mongoc-cluster-aws.c mongoc-cluster.c mongoc-cluster-cyrus.c mongoc-cluster-sasl.c mongoc-cluster-sspi.c mongoc-cmd.c mongoc-collection.c mongoc-compression.c mongoc-counters.c mongoc-crypt.c mongoc-crypto.c mongoc-crypto-cng.c mongoc-crypto-common-crypto.c mongoc-crypto-openssl.c mongoc-cursor-array.c mongoc-cursor.c mongoc-cursor-change-stream.c mongoc-cursor-cmd.c mongoc-cursor-cmd-deprecated.c mongoc-cursor-find.c mongoc-cursor-find-cmd.c mongoc-cursor-find-opquery.c mongoc-cursor-legacy.c mongoc-cyrus.c mongoc-database.c mongoc-deprioritized-servers.c mongoc-error.c mongoc-find-and-modify.c mongoc-flags.c mongoc-generation-map.c mongoc-gridfs-bucket.c mongoc-gridfs-bucket-file.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-list.c mongoc-gridfs-file-page.c mongoc-handshake.c mongoc-host-list.c mongoc-http.c mongoc-init.c mongoc-interrupt.c mongoc-linux-distro-scanner.c mongoc-list.c mongoc-log-and-monitor-private.c mongoc-log.c mongoc-memcmp.c mongoc-ocsp-cache.c mongoc-opcode.c mongoc-openssl.c mongoc-optional.c mongoc-opts.c mongoc-opts-helpers.c mongoc-queue.c mongoc-rand-cng.c mongoc-rand-common-crypto.c mongoc-rand-openssl.c mongoc-read-concern.c mongoc-read-prefs.c mongoc-rpc.c mongoc-sasl.c mongoc-scram.c mongoc-secure-channel.c mongoc-secure-transport.c mongoc-server-api.c mongoc-server-description.c mongoc-server-monitor.c mongoc-server-stream.c mongoc-set.c mongoc-shared.c mongoc-socket.c mongoc-ssl.c mongoc-sspi.c mongoc-stream-buffered.c mongoc-stream.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-gridfs-download.c mongoc-stream-gridfs-upload.c mongoc-stream-socket.c mongoc-stream-tls.c mongoc-stream-tls-openssl-bio.c mongoc-stream-tls-openssl.c mongoc-stream-tls-secure-channel.c mongoc-stream-tls-secure-transport.c mongoc-structured-log.c mongoc-timeout.c mongoc-topology-background-monitoring.c mongoc-topology.c mongoc-topology-description-apm.c mongoc-topology-description.c mongoc-topology-scanner.c mongoc-ts-pool.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c service-gcp.c" PHP_MONGODB_UTF8PROC_SOURCES="utf8proc.c" PHP_MONGODB_ZLIB_SOURCES="adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c infback.c inffast.c inflate.c inftrees.c trees.c uncompr.c zutil.c" @@ -425,16 +425,18 @@ if test "$PHP_MONGODB" != "no"; then AC_SUBST(MONGOCRYPT_ENABLE_TRACE, 1) dnl Sources below are updated by scripts/update-submodule-sources.php - PHP_MONGODB_MONGOCRYPT_SOURCES="mc-array.c mc-efc.c mc-fle2-encryption-placeholder.c mc-fle2-find-equality-payload.c mc-fle2-find-equality-payload-v2.c mc-fle2-find-range-payload.c mc-fle2-find-range-payload-v2.c mc-fle2-insert-update-payload.c mc-fle2-insert-update-payload-v2.c mc-fle2-payload-iev.c mc-fle2-payload-iev-v2.c mc-fle2-payload-uev.c mc-fle2-payload-uev-common.c mc-fle2-payload-uev-v2.c mc-fle2-rfds.c mc-fle2-tag-and-encrypted-metadata-block.c mc-range-edge-generation.c mc-range-encoding.c mc-range-mincover.c mc-rangeopts.c mc-reader.c mc-tokens.c mc-writer.c mongocrypt-binary.c mongocrypt-buffer.c mongocrypt.c mongocrypt-cache.c mongocrypt-cache-collinfo.c mongocrypt-cache-key.c mongocrypt-cache-oauth.c mongocrypt-ciphertext.c mongocrypt-crypto.c mongocrypt-ctx.c mongocrypt-ctx-datakey.c mongocrypt-ctx-decrypt.c mongocrypt-ctx-encrypt.c mongocrypt-ctx-rewrap-many-datakey.c mongocrypt-endpoint.c mongocrypt-kek.c mongocrypt-key-broker.c mongocrypt-key.c mongocrypt-kms-ctx.c mongocrypt-log.c mongocrypt-marking.c mongocrypt-opts.c mongocrypt-status.c mongocrypt-traverse-util.c mongocrypt-util.c" + PHP_MONGODB_MONGOCRYPT_SOURCES="mc-array.c mc-efc.c mc-fle2-encryption-placeholder.c mc-fle2-find-equality-payload.c mc-fle2-find-equality-payload-v2.c mc-fle2-find-range-payload.c mc-fle2-find-range-payload-v2.c mc-fle2-find-text-payload.c mc-fle2-insert-update-payload.c mc-fle2-insert-update-payload-v2.c mc-fle2-payload-iev.c mc-fle2-payload-iev-v2.c mc-fle2-payload-uev.c mc-fle2-payload-uev-common.c mc-fle2-payload-uev-v2.c mc-fle2-rfds.c mc-fle2-tag-and-encrypted-metadata-block.c mc-parse-utils.c mc-range-edge-generation.c mc-range-encoding.c mc-range-mincover.c mc-rangeopts.c mc-reader.c mc-schema-broker.c mc-str-encode-string-sets.c mc-text-search-str-encode.c mc-tokens.c mc-writer.c mongocrypt-binary.c mongocrypt-buffer.c mongocrypt.c mongocrypt-cache.c mongocrypt-cache-collinfo.c mongocrypt-cache-key.c mongocrypt-cache-oauth.c mongocrypt-ciphertext.c mongocrypt-crypto.c mongocrypt-ctx.c mongocrypt-ctx-datakey.c mongocrypt-ctx-decrypt.c mongocrypt-ctx-encrypt.c mongocrypt-ctx-rewrap-many-datakey.c mongocrypt-endpoint.c mongocrypt-kek.c mongocrypt-key-broker.c mongocrypt-key.c mongocrypt-kms-ctx.c mongocrypt-log.c mongocrypt-marking.c mongocrypt-opts.c mongocrypt-status.c mongocrypt-traverse-util.c mongocrypt-util.c" PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES="cng.c commoncrypto.c libcrypto.c none.c" PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES="os_dll.c os_mutex.c" PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES="os_dll.c os_mutex.c" + PHP_MONGODB_MONGOCRYPT_UNICODE_SOURCES="case-fold-map.c diacritic-fold-map.c fold.c" PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES="hexlify.c kms_azure_request.c kms_b64.c kms_caller_identity_request.c kms_crypto_apple.c kms_crypto_libcrypto.c kms_crypto_none.c kms_crypto_windows.c kms_decrypt_request.c kms_encrypt_request.c kms_gcp_request.c kms_kmip_reader_writer.c kms_kmip_request.c kms_kmip_response.c kms_kmip_response_parser.c kms_kv_list.c kms_message.c kms_port.c kms_request.c kms_request_opt.c kms_request_str.c kms_response.c kms_response_parser.c sort.c" PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/], $PHP_MONGODB_MONGOCRYPT_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS) PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/crypto/], $PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS) PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/os_posix/], $PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS) PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/os_win/], $PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS) + PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/src/unicode/], $PHP_MONGODB_MONGOCRYPT_UNICODE_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS) PHP_MONGODB_ADD_SOURCES([src/libmongocrypt/kms-message/src/], $PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES, $PHP_MONGODB_LIBMONGOCRYPT_CFLAGS) PHP_MONGODB_ADD_INCLUDE([src/libmongocrypt/src/]) @@ -445,6 +447,7 @@ if test "$PHP_MONGODB" != "no"; then PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/crypto/]) PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/os_posix/]) PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/os_win/]) + PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/src/unicode/]) PHP_MONGODB_ADD_BUILD_DIR([src/libmongocrypt/kms-message/src/]) AC_CONFIG_FILES([ @@ -496,8 +499,8 @@ Build configuration: Extra flags : $PHP_MONGODB_STD_CFLAGS Developer flags (slow) : $PHP_MONGODB_DEV_CFLAGS Code Coverage flags (extra slow) : $PHP_MONGODB_COVERAGE_CFLAGS - libmongoc : $PHP_MONGODB_BSON_VERSION_STRING - libbson : $PHP_MONGODB_MONGOC_VERSION_STRING + libmongoc : $PHP_MONGODB_MONGOC_VERSION_STRING + libbson : $PHP_MONGODB_BSON_VERSION_STRING libmongocrypt : $PHP_MONGODB_MONGOCRYPT_VERSION_STRING LDFLAGS : $LDFLAGS EXTRA_LDFLAGS : $EXTRA_LDFLAGS diff --git a/config.w32 b/config.w32 index fb1f23639..06f906c41 100644 --- a/config.w32 +++ b/config.w32 @@ -25,7 +25,7 @@ function mongodb_generate_header(inpath, outpath, replacements) function mongodb_parse_libmongoc_version_file(prefix) { - var infile = FSO.OpenTextFile(configure_module_dirname + "/src/LIBMONGOC_VERSION_CURRENT", 1); + var infile = FSO.OpenTextFile(configure_module_dirname + "/src/libmongoc/VERSION_CURRENT", 1); var version = infile.ReadLine(); infile.Close(); @@ -94,6 +94,7 @@ if (PHP_MONGODB != "no") { /I" + configure_module_dirname + "/src/MongoDB/Monitoring \ /I" + configure_module_dirname + "/src/contrib \ /I" + configure_module_dirname + "/src/libmongoc/src/common/src \ + /I" + configure_module_dirname + "/src/libmongoc/src/common/src/mlib \ /I" + configure_module_dirname + "/src/libmongoc/src/uthash \ /I" + configure_module_dirname + "/src/libmongoc/src/libbson/src \ /I" + configure_module_dirname + "/src/libmongoc/src/libbson/src/jsonsl \ @@ -108,9 +109,9 @@ if (PHP_MONGODB != "no") { // Sources below are updated by scripts/update-submodule-sources.php var PHP_MONGODB_COMMON_SOURCES="common-atomic.c common-b64.c common-json.c common-md5.c common-oid.c common-string.c common-thread.c" var PHP_MONGODB_KMS_MESSAGE_SOURCES="hexlify.c kms_azure_request.c kms_b64.c kms_caller_identity_request.c kms_crypto_apple.c kms_crypto_libcrypto.c kms_crypto_none.c kms_crypto_windows.c kms_decrypt_request.c kms_encrypt_request.c kms_gcp_request.c kms_kmip_reader_writer.c kms_kmip_request.c kms_kmip_response.c kms_kmip_response_parser.c kms_kv_list.c kms_message.c kms_port.c kms_request.c kms_request_opt.c kms_request_str.c kms_response.c kms_response_parser.c sort.c"; - var PHP_MONGODB_BSON_SOURCES="bcon.c bson-atomic.c bson.c bson-clock.c bson-context.c bson-decimal128.c bson-error.c bson-iso8601.c bson-iter.c bson-json.c bson-keys.c bson-md5.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-version-functions.c bson-writer.c"; + var PHP_MONGODB_BSON_SOURCES="bcon.c bson.c bson-clock.c bson-context.c bson-decimal128.c bson-error.c bson-iso8601.c bson-iter.c bson-json.c bson-keys.c bson-memory.c bson-oid.c bson-reader.c bson-string.c bson-timegm.c bson-utf8.c bson-value.c bson-vector.c bson-version-functions.c bson-writer.c"; var PHP_MONGODB_JSONSL_SOURCES="jsonsl.c"; - var PHP_MONGODB_MONGOC_SOURCES="mcd-azure.c mcd-nsinfo.c mcd-rpc.c mongoc-aggregate.c mongoc-apm.c mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-bulkwrite.c mongoc-change-stream.c mongoc-client.c mongoc-client-pool.c mongoc-client-session.c mongoc-client-side-encryption.c mongoc-cluster-aws.c mongoc-cluster.c mongoc-cluster-cyrus.c mongoc-cluster-sasl.c mongoc-cluster-sspi.c mongoc-cmd.c mongoc-collection.c mongoc-compression.c mongoc-counters.c mongoc-crypt.c mongoc-crypto.c mongoc-crypto-cng.c mongoc-crypto-common-crypto.c mongoc-crypto-openssl.c mongoc-cursor-array.c mongoc-cursor.c mongoc-cursor-change-stream.c mongoc-cursor-cmd.c mongoc-cursor-cmd-deprecated.c mongoc-cursor-find.c mongoc-cursor-find-cmd.c mongoc-cursor-find-opquery.c mongoc-cursor-legacy.c mongoc-cyrus.c mongoc-database.c mongoc-deprioritized-servers.c mongoc-error.c mongoc-find-and-modify.c mongoc-flags.c mongoc-generation-map.c mongoc-gridfs-bucket.c mongoc-gridfs-bucket-file.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-list.c mongoc-gridfs-file-page.c mongoc-handshake.c mongoc-host-list.c mongoc-http.c mongoc-index.c mongoc-init.c mongoc-interrupt.c mongoc-libressl.c mongoc-linux-distro-scanner.c mongoc-list.c mongoc-log-and-monitor-private.c mongoc-log.c mongoc-matcher.c mongoc-matcher-op.c mongoc-memcmp.c mongoc-ocsp-cache.c mongoc-opcode.c mongoc-openssl.c mongoc-optional.c mongoc-opts.c mongoc-opts-helpers.c mongoc-queue.c mongoc-rand-cng.c mongoc-rand-common-crypto.c mongoc-rand-openssl.c mongoc-read-concern.c mongoc-read-prefs.c mongoc-rpc.c mongoc-sasl.c mongoc-scram.c mongoc-secure-channel.c mongoc-secure-transport.c mongoc-server-api.c mongoc-server-description.c mongoc-server-monitor.c mongoc-server-stream.c mongoc-set.c mongoc-shared.c mongoc-socket.c mongoc-ssl.c mongoc-sspi.c mongoc-stream-buffered.c mongoc-stream.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-gridfs-download.c mongoc-stream-gridfs-upload.c mongoc-stream-socket.c mongoc-stream-tls.c mongoc-stream-tls-libressl.c mongoc-stream-tls-openssl-bio.c mongoc-stream-tls-openssl.c mongoc-stream-tls-secure-channel.c mongoc-stream-tls-secure-transport.c mongoc-structured-log.c mongoc-timeout.c mongoc-topology-background-monitoring.c mongoc-topology.c mongoc-topology-description-apm.c mongoc-topology-description.c mongoc-topology-scanner.c mongoc-ts-pool.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c service-gcp.c"; + var PHP_MONGODB_MONGOC_SOURCES="mcd-azure.c mcd-nsinfo.c mcd-rpc.c mongoc-aggregate.c mongoc-apm.c mongoc-array.c mongoc-async.c mongoc-async-cmd.c mongoc-buffer.c mongoc-bulk-operation.c mongoc-bulkwrite.c mongoc-change-stream.c mongoc-client.c mongoc-client-pool.c mongoc-client-session.c mongoc-client-side-encryption.c mongoc-cluster-aws.c mongoc-cluster.c mongoc-cluster-cyrus.c mongoc-cluster-sasl.c mongoc-cluster-sspi.c mongoc-cmd.c mongoc-collection.c mongoc-compression.c mongoc-counters.c mongoc-crypt.c mongoc-crypto.c mongoc-crypto-cng.c mongoc-crypto-common-crypto.c mongoc-crypto-openssl.c mongoc-cursor-array.c mongoc-cursor.c mongoc-cursor-change-stream.c mongoc-cursor-cmd.c mongoc-cursor-cmd-deprecated.c mongoc-cursor-find.c mongoc-cursor-find-cmd.c mongoc-cursor-find-opquery.c mongoc-cursor-legacy.c mongoc-cyrus.c mongoc-database.c mongoc-deprioritized-servers.c mongoc-error.c mongoc-find-and-modify.c mongoc-flags.c mongoc-generation-map.c mongoc-gridfs-bucket.c mongoc-gridfs-bucket-file.c mongoc-gridfs.c mongoc-gridfs-file.c mongoc-gridfs-file-list.c mongoc-gridfs-file-page.c mongoc-handshake.c mongoc-host-list.c mongoc-http.c mongoc-init.c mongoc-interrupt.c mongoc-linux-distro-scanner.c mongoc-list.c mongoc-log-and-monitor-private.c mongoc-log.c mongoc-memcmp.c mongoc-ocsp-cache.c mongoc-opcode.c mongoc-openssl.c mongoc-optional.c mongoc-opts.c mongoc-opts-helpers.c mongoc-queue.c mongoc-rand-cng.c mongoc-rand-common-crypto.c mongoc-rand-openssl.c mongoc-read-concern.c mongoc-read-prefs.c mongoc-rpc.c mongoc-sasl.c mongoc-scram.c mongoc-secure-channel.c mongoc-secure-transport.c mongoc-server-api.c mongoc-server-description.c mongoc-server-monitor.c mongoc-server-stream.c mongoc-set.c mongoc-shared.c mongoc-socket.c mongoc-ssl.c mongoc-sspi.c mongoc-stream-buffered.c mongoc-stream.c mongoc-stream-file.c mongoc-stream-gridfs.c mongoc-stream-gridfs-download.c mongoc-stream-gridfs-upload.c mongoc-stream-socket.c mongoc-stream-tls.c mongoc-stream-tls-openssl-bio.c mongoc-stream-tls-openssl.c mongoc-stream-tls-secure-channel.c mongoc-stream-tls-secure-transport.c mongoc-structured-log.c mongoc-timeout.c mongoc-topology-background-monitoring.c mongoc-topology.c mongoc-topology-description-apm.c mongoc-topology-description.c mongoc-topology-scanner.c mongoc-ts-pool.c mongoc-uri.c mongoc-util.c mongoc-version-functions.c mongoc-write-command.c mongoc-write-concern.c service-gcp.c"; var PHP_MONGODB_UTF8PROC_SOURCES="utf8proc.c"; EXTENSION("mongodb", "php_phongo.c", null, PHP_MONGODB_CFLAGS); @@ -135,7 +136,6 @@ if (PHP_MONGODB != "no") { BSON_HAVE_SNPRINTF: 0, BSON_HAVE_STRLCPY: 0, BSON_HAVE_TIMESPEC: 0, - BSON_EXTRA_ALIGN: 0, BSON_HAVE_GMTIME_R: 0, BSON_HAVE_RAND_R: 0, BSON_HAVE_ALIGNED_ALLOC: 0 @@ -184,7 +184,6 @@ if (PHP_MONGODB != "no") { MONGOC_HAVE_SASL_CLIENT_DONE: 0, MONGOC_HAVE_SCHED_GETCPU: 0, MONGOC_HAVE_SOCKLEN: 1, - MONGOC_NO_AUTOMATIC_GLOBALS: 1, MONGOC_SOCKET_ARG2: "struct sockaddr", MONGOC_SOCKET_ARG3: "socklen_t", MONGOC_TRACE: 1, @@ -270,16 +269,18 @@ if (PHP_MONGODB != "no") { }; // Sources below are updated by scripts/update-submodule-sources.php - var PHP_MONGODB_MONGOCRYPT_SOURCES="mc-array.c mc-efc.c mc-fle2-encryption-placeholder.c mc-fle2-find-equality-payload.c mc-fle2-find-equality-payload-v2.c mc-fle2-find-range-payload.c mc-fle2-find-range-payload-v2.c mc-fle2-insert-update-payload.c mc-fle2-insert-update-payload-v2.c mc-fle2-payload-iev.c mc-fle2-payload-iev-v2.c mc-fle2-payload-uev.c mc-fle2-payload-uev-common.c mc-fle2-payload-uev-v2.c mc-fle2-rfds.c mc-fle2-tag-and-encrypted-metadata-block.c mc-range-edge-generation.c mc-range-encoding.c mc-range-mincover.c mc-rangeopts.c mc-reader.c mc-tokens.c mc-writer.c mongocrypt-binary.c mongocrypt-buffer.c mongocrypt.c mongocrypt-cache.c mongocrypt-cache-collinfo.c mongocrypt-cache-key.c mongocrypt-cache-oauth.c mongocrypt-ciphertext.c mongocrypt-crypto.c mongocrypt-ctx.c mongocrypt-ctx-datakey.c mongocrypt-ctx-decrypt.c mongocrypt-ctx-encrypt.c mongocrypt-ctx-rewrap-many-datakey.c mongocrypt-endpoint.c mongocrypt-kek.c mongocrypt-key-broker.c mongocrypt-key.c mongocrypt-kms-ctx.c mongocrypt-log.c mongocrypt-marking.c mongocrypt-opts.c mongocrypt-status.c mongocrypt-traverse-util.c mongocrypt-util.c"; + var PHP_MONGODB_MONGOCRYPT_SOURCES="mc-array.c mc-efc.c mc-fle2-encryption-placeholder.c mc-fle2-find-equality-payload.c mc-fle2-find-equality-payload-v2.c mc-fle2-find-range-payload.c mc-fle2-find-range-payload-v2.c mc-fle2-find-text-payload.c mc-fle2-insert-update-payload.c mc-fle2-insert-update-payload-v2.c mc-fle2-payload-iev.c mc-fle2-payload-iev-v2.c mc-fle2-payload-uev.c mc-fle2-payload-uev-common.c mc-fle2-payload-uev-v2.c mc-fle2-rfds.c mc-fle2-tag-and-encrypted-metadata-block.c mc-parse-utils.c mc-range-edge-generation.c mc-range-encoding.c mc-range-mincover.c mc-rangeopts.c mc-reader.c mc-schema-broker.c mc-str-encode-string-sets.c mc-text-search-str-encode.c mc-tokens.c mc-writer.c mongocrypt-binary.c mongocrypt-buffer.c mongocrypt.c mongocrypt-cache.c mongocrypt-cache-collinfo.c mongocrypt-cache-key.c mongocrypt-cache-oauth.c mongocrypt-ciphertext.c mongocrypt-crypto.c mongocrypt-ctx.c mongocrypt-ctx-datakey.c mongocrypt-ctx-decrypt.c mongocrypt-ctx-encrypt.c mongocrypt-ctx-rewrap-many-datakey.c mongocrypt-endpoint.c mongocrypt-kek.c mongocrypt-key-broker.c mongocrypt-key.c mongocrypt-kms-ctx.c mongocrypt-log.c mongocrypt-marking.c mongocrypt-opts.c mongocrypt-status.c mongocrypt-traverse-util.c mongocrypt-util.c"; var PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES="cng.c commoncrypto.c libcrypto.c none.c"; var PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES="os_dll.c os_mutex.c"; var PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES="os_dll.c os_mutex.c"; + var PHP_MONGODB_MONGOCRYPT_UNICODE_SOURCES="case-fold-map.c diacritic-fold-map.c fold.c"; var PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES="hexlify.c kms_azure_request.c kms_b64.c kms_caller_identity_request.c kms_crypto_apple.c kms_crypto_libcrypto.c kms_crypto_none.c kms_crypto_windows.c kms_decrypt_request.c kms_encrypt_request.c kms_gcp_request.c kms_kmip_reader_writer.c kms_kmip_request.c kms_kmip_response.c kms_kmip_response_parser.c kms_kv_list.c kms_message.c kms_port.c kms_request.c kms_request_opt.c kms_request_str.c kms_response.c kms_response_parser.c sort.c"; MONGODB_ADD_SOURCES("/src/libmongocrypt/src", PHP_MONGODB_MONGOCRYPT_SOURCES); MONGODB_ADD_SOURCES("/src/libmongocrypt/src/crypto", PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES); MONGODB_ADD_SOURCES("/src/libmongocrypt/src/os_posix", PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES); MONGODB_ADD_SOURCES("/src/libmongocrypt/src/os_win", PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES); + MONGODB_ADD_SOURCES("/src/libmongocrypt/src/unicode", PHP_MONGODB_MONGOCRYPT_UNICODE_SOURCES); MONGODB_ADD_SOURCES("/src/libmongocrypt/kms-message/src", PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES); mongocrypt_opts.MONGOCRYPT_BUILD_VERSION = mongodb_get_libmongocrypt_version(); diff --git a/sbom.json b/sbom.json index cb29e41f0..4d2613351 100644 --- a/sbom.json +++ b/sbom.json @@ -1,52 +1,52 @@ { "components": [ { - "bom-ref": "pkg:github/mongodb/libmongocrypt@1.12.0", + "bom-ref": "pkg:github/mongodb/libmongocrypt@1.14.0", "externalReferences": [ { "type": "distribution", - "url": "https://github.com/mongodb/libmongocrypt/archive/refs/tags/1.12.0.tar.gz" + "url": "https://github.com/mongodb/libmongocrypt/archive/refs/tags/1.14.0.tar.gz" }, { "type": "website", - "url": "https://github.com/mongodb/libmongocrypt/tree/1.12.0" + "url": "https://github.com/mongodb/libmongocrypt/tree/1.14.0" } ], "group": "mongodb", "name": "libmongocrypt", - "purl": "pkg:github/mongodb/libmongocrypt@1.12.0", + "purl": "pkg:github/mongodb/libmongocrypt@1.14.0", "type": "library", - "version": "1.12.0" + "version": "1.14.0" }, { - "bom-ref": "pkg:github/mongodb/mongo-c-driver@1.30.4", + "bom-ref": "pkg:github/mongodb/mongo-c-driver@2.0.1", "externalReferences": [ { "type": "distribution", - "url": "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/1.30.4.tar.gz" + "url": "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/2.0.1.tar.gz" }, { "type": "website", - "url": "https://github.com/mongodb/mongo-c-driver/tree/1.30.4" + "url": "https://github.com/mongodb/mongo-c-driver/tree/2.0.1" } ], "group": "mongodb", "name": "mongo-c-driver", - "purl": "pkg:github/mongodb/mongo-c-driver@1.30.4", + "purl": "pkg:github/mongodb/mongo-c-driver@2.0.1", "type": "library", - "version": "1.30.4" + "version": "2.0.1" } ], "dependencies": [ { - "ref": "pkg:github/mongodb/libmongocrypt@1.12.0" + "ref": "pkg:github/mongodb/libmongocrypt@1.14.0" }, { - "ref": "pkg:github/mongodb/mongo-c-driver@1.30.4" + "ref": "pkg:github/mongodb/mongo-c-driver@2.0.1" } ], "metadata": { - "timestamp": "2025-05-12T09:39:06.555660+00:00", + "timestamp": "2025-05-21T07:55:41.587707+00:00", "tools": [ { "externalReferences": [ @@ -90,7 +90,7 @@ ] }, "serialNumber": "urn:uuid:acb30d08-ee47-4ff0-b301-d66ef1f54082", - "version": 12, + "version": 14, "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", "bomFormat": "CycloneDX", "specVersion": "1.5" diff --git a/scripts/autotools/libbson/Versions.m4 b/scripts/autotools/libbson/Versions.m4 index 6158a80c7..7f07086ef 100644 --- a/scripts/autotools/libbson/Versions.m4 +++ b/scripts/autotools/libbson/Versions.m4 @@ -1,4 +1,4 @@ -BSON_CURRENT_FILE=[]PHP_EXT_SRCDIR(mongodb)[/src/LIBMONGOC_VERSION_CURRENT] +BSON_CURRENT_FILE=[]PHP_EXT_SRCDIR(mongodb)[/src/libmongoc/VERSION_CURRENT] libbson_VERSION_FULL=$(cat $BSON_CURRENT_FILE) dnl Ensure newline for "cut" implementations that need it, e.g. HP-UX. diff --git a/scripts/autotools/libmongoc/Versions.m4 b/scripts/autotools/libmongoc/Versions.m4 index 34ff754fe..3581622dc 100644 --- a/scripts/autotools/libmongoc/Versions.m4 +++ b/scripts/autotools/libmongoc/Versions.m4 @@ -1,4 +1,4 @@ -MONGOC_CURRENT_FILE=[]PHP_EXT_SRCDIR(mongodb)[/src/LIBMONGOC_VERSION_CURRENT] +MONGOC_CURRENT_FILE=[]PHP_EXT_SRCDIR(mongodb)[/src/libmongoc/VERSION_CURRENT] libmongoc_VERSION_FULL=$(cat $MONGOC_CURRENT_FILE) dnl Ensure newline for "cut" implementations that need it, e.g. HP-UX. diff --git a/scripts/update-sbom.sh b/scripts/update-sbom.sh index 7e3477fba..483ced9c4 100755 --- a/scripts/update-sbom.sh +++ b/scripts/update-sbom.sh @@ -4,7 +4,7 @@ SCRIPT_DIR=$(dirname ${BASH_SOURCE[0]}) ROOT_DIR=$(realpath "${SCRIPT_DIR}/../") PURLS_FILE="${ROOT_DIR}/purls.txt" -LIBMONGOC_VERSION=$(cat ${ROOT_DIR}/src/LIBMONGOC_VERSION_CURRENT | tr -d '[:space:]') +LIBMONGOC_VERSION=$(cat ${ROOT_DIR}/src/libmongoc/VERSION_CURRENT | tr -d '[:space:]') LIBMONGOCRYPT_VERSION=$(cat ${ROOT_DIR}/src/LIBMONGOCRYPT_VERSION_CURRENT | tr -d '[:space:]') # Generate purls file from stored versions diff --git a/scripts/update-submodule-sources.php b/scripts/update-submodule-sources.php index 8240fd9e3..d2f28e669 100644 --- a/scripts/update-submodule-sources.php +++ b/scripts/update-submodule-sources.php @@ -15,12 +15,14 @@ 'PHP_MONGODB_MONGOC_SOURCES' => 'src/libmongoc/src/libmongoc/src/mongoc', 'PHP_MONGODB_UTF8PROC_SOURCES' => 'src/libmongoc/src/utf8proc-2.8.0', 'PHP_MONGODB_ZLIB_SOURCES' => 'src/libmongoc/src/zlib-1.3.1', + // Note: src/libmongoc/src/common/src/mlib does not contain source files (as of libmongoc 2.0.1) 'PHP_MONGODB_MONGOCRYPT_SOURCES' => 'src/libmongocrypt/src', 'PHP_MONGODB_MONGOCRYPT_CRYPTO_SOURCES' => 'src/libmongocrypt/src/crypto', 'PHP_MONGODB_MONGOCRYPT_OS_POSIX_SOURCES' => 'src/libmongocrypt/src/os_posix', 'PHP_MONGODB_MONGOCRYPT_OS_WIN_SOURCES' => 'src/libmongocrypt/src/os_win', + 'PHP_MONGODB_MONGOCRYPT_UNICODE_SOURCES' => 'src/libmongocrypt/src/unicode', 'PHP_MONGODB_MONGOCRYPT_KMS_MESSAGE_SOURCES' => 'src/libmongocrypt/kms-message/src', - // Note: src/libmongocrypt/src/mlib does not contain source files (as of libmongocrypt 1.3.2) + // Note: src/libmongocrypt/src/mlib does not contain source files (as of libmongocrypt 1.14.0) ]; $patterns = []; diff --git a/src/LIBMONGOCRYPT_VERSION_CURRENT b/src/LIBMONGOCRYPT_VERSION_CURRENT index 0eed1a29e..850e74240 100644 --- a/src/LIBMONGOCRYPT_VERSION_CURRENT +++ b/src/LIBMONGOCRYPT_VERSION_CURRENT @@ -1 +1 @@ -1.12.0 +1.14.0 diff --git a/src/LIBMONGOC_VERSION_CURRENT b/src/LIBMONGOC_VERSION_CURRENT deleted file mode 100644 index 593d72103..000000000 --- a/src/LIBMONGOC_VERSION_CURRENT +++ /dev/null @@ -1 +0,0 @@ -1.30.4 diff --git a/src/MongoDB/Server.c b/src/MongoDB/Server.c index 24c53a12a..aaff411b5 100644 --- a/src/MongoDB/Server.c +++ b/src/MongoDB/Server.c @@ -619,9 +619,9 @@ void phongo_server_init(zval* return_value, zval* manager, uint32_t server_id) bool php_phongo_server_to_zval(zval* retval, mongoc_client_t* client, mongoc_server_description_t* sd) { - mongoc_host_list_t* host = mongoc_server_description_host(sd); - const bson_t* hello_response = mongoc_server_description_hello_response(sd); - bson_iter_t iter; + const mongoc_host_list_t* host = mongoc_server_description_host(sd); + const bson_t* hello_response = mongoc_server_description_hello_response(sd); + bson_iter_t iter; array_init(retval); diff --git a/src/MongoDB/ServerDescription.c b/src/MongoDB/ServerDescription.c index 1a0516acf..7a21e9e07 100644 --- a/src/MongoDB/ServerDescription.c +++ b/src/MongoDB/ServerDescription.c @@ -194,8 +194,8 @@ HashTable* php_phongo_serverdescription_get_properties_hash(zend_object* object, } { - zval host, port, type; - mongoc_host_list_t* host_list = mongoc_server_description_host(intern->server_description); + zval host, port, type; + const mongoc_host_list_t* host_list = mongoc_server_description_host(intern->server_description); ZVAL_STRING(&host, host_list->host); zend_hash_str_update(props, "host", sizeof("host") - 1, &host); diff --git a/src/MongoDB/WriteConcern.c b/src/MongoDB/WriteConcern.c index 051d51706..c0edb5a05 100644 --- a/src/MongoDB/WriteConcern.c +++ b/src/MongoDB/WriteConcern.c @@ -80,7 +80,7 @@ static bool php_phongo_writeconcern_init_from_hash(php_phongo_writeconcern_t* in if ((j = zend_hash_str_find(props, "j", sizeof("j") - 1))) { if (Z_TYPE_P(j) == IS_TRUE || Z_TYPE_P(j) == IS_FALSE) { - if (zend_is_true(j) && (mongoc_write_concern_get_w(intern->write_concern) == MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED || mongoc_write_concern_get_w(intern->write_concern) == MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED)) { + if (zend_is_true(j) && (mongoc_write_concern_get_w(intern->write_concern) == MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED)) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Cannot enable journaling when using w = 0"); goto failure; } @@ -143,7 +143,7 @@ static PHP_METHOD(MongoDB_Driver_WriteConcern, __construct) switch (ZEND_NUM_ARGS()) { case 3: if (journal && Z_TYPE_P(journal) != IS_NULL) { - if (zend_is_true(journal) && (mongoc_write_concern_get_w(intern->write_concern) == MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED || mongoc_write_concern_get_w(intern->write_concern) == MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED)) { + if (zend_is_true(journal) && (mongoc_write_concern_get_w(intern->write_concern) == MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED)) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Cannot enable journaling when using w = 0"); return; } diff --git a/src/libmongoc b/src/libmongoc index a0132eb79..2a0ea9097 160000 --- a/src/libmongoc +++ b/src/libmongoc @@ -1 +1 @@ -Subproject commit a0132eb79b697add0b80fa3ffaac47bb49e97e63 +Subproject commit 2a0ea9097e938394b3d12e9569c50f48364305d8 diff --git a/src/libmongocrypt b/src/libmongocrypt index 085a0ce65..6a3c15ef7 160000 --- a/src/libmongocrypt +++ b/src/libmongocrypt @@ -1 +1 @@ -Subproject commit 085a0ce6538a28179da6bfd2927aea106924443a +Subproject commit 6a3c15ef7502fe67b1f0fe15d817a7762f66fbac diff --git a/src/phongo_client.c b/src/phongo_client.c index b697d9221..626d8181d 100644 --- a/src/phongo_client.c +++ b/src/phongo_client.c @@ -595,7 +595,6 @@ static bool php_phongo_apply_wc_options_to_uri(mongoc_uri_t* uri, bson_t* option int32_t value = bson_iter_int32(&iter); switch (value) { - case MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED: case MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED: mongoc_write_concern_set_w(new_wc, value); break; @@ -632,7 +631,7 @@ static bool php_phongo_apply_wc_options_to_uri(mongoc_uri_t* uri, bson_t* option if (mongoc_write_concern_get_journal(new_wc)) { int32_t w = mongoc_write_concern_get_w(new_wc); - if (w == MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED || w == MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED) { + if (w == MONGOC_WRITE_CONCERN_W_UNACKNOWLEDGED) { phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Journal conflicts with w value: %d", w); mongoc_write_concern_destroy(new_wc); diff --git a/tests/connect/bug1045.phpt b/tests/connect/bug1045.phpt index 102386ba8..c5c308965 100644 --- a/tests/connect/bug1045.phpt +++ b/tests/connect/bug1045.phpt @@ -18,5 +18,5 @@ echo throws(function() { --EXPECTF-- OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse URI options: 'SCRAM-SHA-1' authentication mechanism requires username +Failed to parse URI options: 'SCRAM-SHA-1' authentication mechanism requires a username ===DONE=== diff --git a/tests/manager/manager-ctor-auth_mechanism-error-001.phpt b/tests/manager/manager-ctor-auth_mechanism-error-001.phpt index 97b9c03b1..648da59e3 100644 --- a/tests/manager/manager-ctor-auth_mechanism-error-001.phpt +++ b/tests/manager/manager-ctor-auth_mechanism-error-001.phpt @@ -1,36 +1,24 @@ --TEST-- -MongoDB\Driver\Manager::__construct(): authentication options are validated +MongoDB\Driver\Manager::__construct(): GSSAPI authentication options are validated --FILE-- 'GSSAPI', 'authSource' => 'admin']); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - -echo throws(function() { - create_test_manager('mongodb://localhost:27017/?authMechanism=MONGODB-X509&authSource=admin'); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - echo throws(function() { - create_test_manager('mongodb://localhost:27017/', ['authMechanism' => 'MONGODB-X509', 'authSource' => 'admin']); + create_test_manager('mongodb://localhost:27017/', ['authMechanism' => 'GSSAPI']); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; +// GSSAPI requires $external auth source echo throws(function() { - create_test_manager('mongodb://@localhost:27017/?authMechanism=SCRAM-SHA-1'); + create_test_manager('mongodb://user@localhost:27017/?authMechanism=GSSAPI&authSource=admin'); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - -echo throws(function() { - create_test_manager('mongodb://localhost:27017/', ['username' => '', 'authMechanism' => 'SCRAM-SHA-1']); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - echo throws(function() { - create_test_manager('mongodb://localhost:27017/', ['password' => 'password', 'authMechanism' => 'MONGODB-X509']); + create_test_manager('mongodb://localhost:27017/', ['authMechanism' => 'GSSAPI', 'authSource' => 'admin', 'username' => 'user']); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; ?> @@ -38,17 +26,11 @@ echo throws(function() { --EXPECT-- OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse MongoDB URI: 'mongodb://localhost:27017/?authMechanism=GSSAPI&authSource=admin'. GSSAPI and X509 require "$external" authSource. -OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse URI options: GSSAPI and X509 require "$external" authSource -OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse MongoDB URI: 'mongodb://localhost:27017/?authMechanism=MONGODB-X509&authSource=admin'. GSSAPI and X509 require "$external" authSource. -OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse URI options: GSSAPI and X509 require "$external" authSource +Failed to parse MongoDB URI: 'mongodb://localhost:27017/?authMechanism=GSSAPI'. 'GSSAPI' authentication mechanism requires a username. OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse MongoDB URI: 'mongodb://@localhost:27017/?authMechanism=SCRAM-SHA-1'. 'SCRAM-SHA-1' authentication mechanism requires username. +Failed to parse URI options: 'GSSAPI' authentication mechanism requires a username OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse URI options: 'SCRAM-SHA-1' authentication mechanism requires username +Failed to parse MongoDB URI: 'mongodb://user@localhost:27017/?authMechanism=GSSAPI&authSource=admin'. 'GSSAPI' authentication mechanism requires "$external" authSource, but "admin" was specified. OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse URI options: 'MONGODB-X509' authentication mechanism does not accept a password +Failed to parse URI options: 'GSSAPI' authentication mechanism requires "$external" authSource, but "admin" was specified ===DONE=== diff --git a/tests/manager/manager-ctor-auth_mechanism-error-002.phpt b/tests/manager/manager-ctor-auth_mechanism-error-002.phpt new file mode 100644 index 000000000..9cb1e0ba0 --- /dev/null +++ b/tests/manager/manager-ctor-auth_mechanism-error-002.phpt @@ -0,0 +1,31 @@ +--TEST-- +MongoDB\Driver\Manager::__construct(): X509 authentication options are validated +--FILE-- + 'MONGODB-X509', 'authSource' => 'admin']); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; + +// X509 does not accept a password +echo throws(function() { + create_test_manager('mongodb://localhost:27017/', ['password' => 'password', 'authMechanism' => 'MONGODB-X509']); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; + +?> +===DONE=== + +--EXPECT-- +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse MongoDB URI: 'mongodb://localhost:27017/?authMechanism=MONGODB-X509&authSource=admin'. 'MONGODB-X509' authentication mechanism requires "$external" authSource, but "admin" was specified. +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: 'MONGODB-X509' authentication mechanism requires "$external" authSource, but "admin" was specified +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: 'MONGODB-X509' authentication mechanism does not accept a password +===DONE=== diff --git a/tests/manager/manager-ctor-auth_mechanism-error-003.phpt b/tests/manager/manager-ctor-auth_mechanism-error-003.phpt new file mode 100644 index 000000000..bdc74169d --- /dev/null +++ b/tests/manager/manager-ctor-auth_mechanism-error-003.phpt @@ -0,0 +1,36 @@ +--TEST-- +MongoDB\Driver\Manager::__construct(): SCRAM-SHA-1 authentication options are validated +--FILE-- + '', 'authMechanism' => 'SCRAM-SHA-1']); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; + +// SCRAM-SHA-1 requires password +echo throws(function() { + create_test_manager('mongodb://user@localhost:27017/?authMechanism=SCRAM-SHA-1'); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; +echo throws(function() { + create_test_manager('mongodb://localhost:27017/', ['username' => 'user', 'authMechanism' => 'SCRAM-SHA-1']); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; + +?> +===DONE=== + +--EXPECT-- +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse MongoDB URI: 'mongodb://@localhost:27017/?authMechanism=SCRAM-SHA-1'. 'SCRAM-SHA-1' authentication mechanism requires a username. +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: 'SCRAM-SHA-1' authentication mechanism requires a username +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse MongoDB URI: 'mongodb://user@localhost:27017/?authMechanism=SCRAM-SHA-1'. 'SCRAM-SHA-1' authentication mechanism requires a password. +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: 'SCRAM-SHA-1' authentication mechanism requires a password +===DONE=== diff --git a/tests/manager/manager-ctor-auth_mechanism-error-004.phpt b/tests/manager/manager-ctor-auth_mechanism-error-004.phpt new file mode 100644 index 000000000..c30daff32 --- /dev/null +++ b/tests/manager/manager-ctor-auth_mechanism-error-004.phpt @@ -0,0 +1,36 @@ +--TEST-- +MongoDB\Driver\Manager::__construct(): MONGODB-AWS authentication options are validated +--FILE-- + '', 'authMechanism' => 'MONGODB-AWS']); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; + +// MONGODB-AWS requires a password +echo throws(function() { + create_test_manager('mongodb://user@localhost:27017/?authMechanism=MONGODB-AWS'); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; +echo throws(function() { + create_test_manager('mongodb://localhost:27017/', ['username' => 'user', 'authMechanism' => 'MONGODB-AWS']); +}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; + +?> +===DONE=== + +--EXPECT-- +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse MongoDB URI: 'mongodb://@localhost:27017/?authMechanism=MONGODB-AWS'. 'MONGODB-AWS' authentication mechanism requires a non-empty username. +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: 'MONGODB-AWS' authentication mechanism requires a non-empty username +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse MongoDB URI: 'mongodb://user@localhost:27017/?authMechanism=MONGODB-AWS'. 'MONGODB-AWS' authentication mechanism does not accept a username or a password without the other. +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: 'MONGODB-AWS' authentication mechanism does not accept a username or a password without the other +===DONE=== diff --git a/tests/manager/manager-ctor-auth_source_error-001.phpt b/tests/manager/manager-ctor-auth_source_error-001.phpt new file mode 100644 index 000000000..03cdeb14b --- /dev/null +++ b/tests/manager/manager-ctor-auth_source_error-001.phpt @@ -0,0 +1,29 @@ +--TEST-- +MongoDB\Driver\Manager::__construct(): empty authSource option causes error +--FILE-- + '']], +]; + +foreach ($tests as $test) { + [$uri, $options] = $test; + + echo throws(function() use ($uri, $options) { + new MongoDB\Driver\Manager($uri, $options); + }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; +} + +?> +===DONE=== + +--EXPECT-- +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse MongoDB URI: 'mongodb://username@127.0.0.1/?authSource='. authSource may not be specified as an empty string. +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Failed to parse URI options: authSource may not be specified as an empty string +===DONE=== diff --git a/tests/manager/manager-ctor-write_concern-001.phpt b/tests/manager/manager-ctor-write_concern-001.phpt index e77335ab8..df6876101 100644 --- a/tests/manager/manager-ctor-write_concern-001.phpt +++ b/tests/manager/manager-ctor-write_concern-001.phpt @@ -4,12 +4,10 @@ MongoDB\Driver\Manager::__construct(): write concern options (w) -1]], [null, ['w' => -0]], [null, ['w' => 1]], [null, ['w' => 'majority']], @@ -27,10 +25,6 @@ foreach ($tests as $test) { ===DONE=== --EXPECTF-- -object(MongoDB\Driver\WriteConcern)#%d (%d) { - ["w"]=> - int(-1) -} object(MongoDB\Driver\WriteConcern)#%d (%d) { ["w"]=> int(0) @@ -47,10 +41,6 @@ object(MongoDB\Driver\WriteConcern)#%d (%d) { ["w"]=> string(12) "customTagSet" } -object(MongoDB\Driver\WriteConcern)#%d (%d) { - ["w"]=> - int(-1) -} object(MongoDB\Driver\WriteConcern)#%d (%d) { ["w"]=> int(0) diff --git a/tests/manager/manager-ctor-write_concern-error-001.phpt b/tests/manager/manager-ctor-write_concern-error-001.phpt index cd651ee5a..0fb872d4c 100644 --- a/tests/manager/manager-ctor-write_concern-error-001.phpt +++ b/tests/manager/manager-ctor-write_concern-error-001.phpt @@ -12,12 +12,12 @@ echo throws(function() { create_test_manager(null, ['w' => 1.0]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; -/* Note: Values of w < -1 are invalid, but libmongoc's URI string parsing only +/* Note: Values of w < 0 are invalid, but libmongoc's URI string parsing only * logs a warning instead of raising an error (see: CDRIVER-2234), so we cannot * test for this. */ echo throws(function() { - create_test_manager(null, ['w' => -2]); + create_test_manager(null, ['w' => -1]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; ?> @@ -27,5 +27,5 @@ echo throws(function() { OK: Got MongoDB\Driver\Exception\InvalidArgumentException Expected 32-bit integer or string for "w" URI option, double given OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Unsupported w value: -2 +Unsupported w value: -1 ===DONE=== diff --git a/tests/manager/manager-ctor-write_concern-error-005.phpt b/tests/manager/manager-ctor-write_concern-error-005.phpt index 5e95c9bf8..6e60088b9 100644 --- a/tests/manager/manager-ctor-write_concern-error-005.phpt +++ b/tests/manager/manager-ctor-write_concern-error-005.phpt @@ -17,34 +17,18 @@ echo throws(function() { // Invalid values (journal conflicts with unacknowledged write concerns) -echo throws(function() { - create_test_manager('mongodb://127.0.0.1/?w=-1&journal=true'); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - echo throws(function() { create_test_manager('mongodb://127.0.0.1/?w=0&journal=true'); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; -echo throws(function() { - create_test_manager('mongodb://127.0.0.1/?w=-1', ['journal' => true]); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - echo throws(function() { create_test_manager('mongodb://127.0.0.1/?w=0', ['journal' => true]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; -echo throws(function() { - create_test_manager('mongodb://127.0.0.1/?journal=true', ['w' => -1]); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - echo throws(function() { create_test_manager('mongodb://127.0.0.1/?journal=true', ['w' => 0]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; -echo throws(function() { - create_test_manager(null, ['w' => -1, 'journal' => true]); -}, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; - echo throws(function() { create_test_manager(null, ['w' => 0, 'journal' => true]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; @@ -58,19 +42,11 @@ Failed to parse MongoDB URI: 'mongodb://127.0.0.1/?journal=invalid'. Unsupported OK: Got MongoDB\Driver\Exception\InvalidArgumentException Expected boolean for "journal" URI option, string given OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse MongoDB URI: 'mongodb://127.0.0.1/?w=-1&journal=true'. Error while parsing the 'w' URI option: Journal conflicts with w value [w=-1]. -OK: Got MongoDB\Driver\Exception\InvalidArgumentException Failed to parse MongoDB URI: 'mongodb://127.0.0.1/?w=0&journal=true'. Error while parsing the 'w' URI option: Journal conflicts with w value [w=0]. OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Journal conflicts with w value: -1 -OK: Got MongoDB\Driver\Exception\InvalidArgumentException Journal conflicts with w value: 0 OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Journal conflicts with w value: -1 -OK: Got MongoDB\Driver\Exception\InvalidArgumentException Journal conflicts with w value: 0 OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Journal conflicts with w value: -1 -OK: Got MongoDB\Driver\Exception\InvalidArgumentException Journal conflicts with w value: 0 ===DONE=== diff --git a/tests/manager/manager-debug-001.phpt b/tests/manager/manager-debug-001.phpt index fa4789740..60ca951d7 100644 --- a/tests/manager/manager-debug-001.phpt +++ b/tests/manager/manager-debug-001.phpt @@ -22,5 +22,5 @@ rmdir($name); --EXPECTF-- %A[%s] PHONGO: DEBUG > Connection string: '%s' -[%s] PHONGO: DEBUG > Creating Manager, phongo-%d.%d.%d%S[%s] - mongoc-1.%s(%s), libbson-1.%s(%s), php-%s +[%s] PHONGO: DEBUG > Creating Manager, phongo-%d.%d.%d%S[%s] - mongoc-2.%s(%s), libbson-2.%s(%s), php-%s %A===DONE===%A diff --git a/tests/manager/manager-debug-002.phpt b/tests/manager/manager-debug-002.phpt index 89e882da2..af683b635 100644 --- a/tests/manager/manager-debug-002.phpt +++ b/tests/manager/manager-debug-002.phpt @@ -12,5 +12,5 @@ $manager = new MongoDB\Driver\Manager; --EXPECTF-- %A[%s] PHONGO: DEBUG > Connection string: '%s' -[%s] PHONGO: DEBUG > Creating Manager, phongo-%d.%d.%d%S[%s] - mongoc-1.%s(%s), libbson-1.%s(%s), php-%s +[%s] PHONGO: DEBUG > Creating Manager, phongo-%d.%d.%d%S[%s] - mongoc-2.%s(%s), libbson-2.%s(%s), php-%s %A===DONE===%A diff --git a/tests/writeConcern/writeconcern-isdefault-001.phpt b/tests/writeConcern/writeconcern-isdefault-001.phpt index 515c64516..54e8d51ff 100644 --- a/tests/writeConcern/writeconcern-isdefault-001.phpt +++ b/tests/writeConcern/writeconcern-isdefault-001.phpt @@ -14,17 +14,14 @@ $tests = [ new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY), // mongoc_uri_parse_option() ignores empty string for w (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w='))->getWriteConcern(), - // Cannot test "w=-3" since libmongoc URI parsing expects integers >= -1 - // Cannot test "w=-2" since libmongoc URI parsing expects integers >= -1, and throws an error otherwise - (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w=-1'))->getWriteConcern(), + // Cannot test "w=-3", "w=-2", and "w=-1" since libmongoc URI parsing expects integers > -1 (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w=0'))->getWriteConcern(), (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w=1'))->getWriteConcern(), (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w=2'))->getWriteConcern(), (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w=tag'))->getWriteConcern(), (new MongoDB\Driver\Manager('mongodb://127.0.0.1/?w=majority'))->getWriteConcern(), // Cannot test ['w' => null] since an integer or string type is expected (PHPC-887) - // Cannot test ['w' => -3] or ['w' => -2] since php_phongo_apply_wc_options_to_uri() expects integers >= -1 - (new MongoDB\Driver\Manager(null, ['w' => -1]))->getWriteConcern(), + // Cannot test ['w' => -3], ['w' => -2], and ['w' => -1] since php_phongo_apply_wc_options_to_uri() expects integers > -1 (new MongoDB\Driver\Manager(null, ['w' => 0]))->getWriteConcern(), (new MongoDB\Driver\Manager(null, ['w' => 1]))->getWriteConcern(), (new MongoDB\Driver\Manager(null, ['w' => 2]))->getWriteConcern(), @@ -60,7 +57,5 @@ bool(false) bool(false) bool(false) bool(false) -bool(false) -bool(false) bool(true) ===DONE=== From 71510e22faf1475e61d77a6a99315f7f89e13820 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Mon, 26 May 2025 09:42:58 +0200 Subject: [PATCH 2/6] PHPC-2584: Run driver test with system libraries (#1831) * Add build action to build libmongoc system libraries * Build driver with system libs * Install libmongocrypt as system library * Run tests with system libs * Move system library tests to tests workflow --- .../actions/linux/build-libmongoc/action.yml | 55 +++++++++++++++++++ .../linux/build-libmongocrypt/action.yml | 29 ++++++++++ .github/actions/linux/build/action.yml | 6 ++ .github/workflows/tests.yml | 51 +++++++++++++++++ Makefile.frag | 24 +++++++- 5 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 .github/actions/linux/build-libmongoc/action.yml create mode 100644 .github/actions/linux/build-libmongocrypt/action.yml diff --git a/.github/actions/linux/build-libmongoc/action.yml b/.github/actions/linux/build-libmongoc/action.yml new file mode 100644 index 000000000..6a804078a --- /dev/null +++ b/.github/actions/linux/build-libmongoc/action.yml @@ -0,0 +1,55 @@ +name: "Build libmongoc" +description: "Builds and install libmongoc" +inputs: + prefix: + description: "Prefix to install libmongoc to" + default: "/usr/local" + version: + description: "Libmongoc version to build" + required: true +runs: + using: composite + + steps: + - name: Download libmongoc + shell: bash + working-directory: /tmp + run: wget "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/${LIBMONGOC_VERSION}.tar.gz" --output-document="mongo-c-driver.tar.gz" + env: + LIBMONGOC_VERSION: ${{ inputs.version }} + + - name: Extract libmongoc + shell: bash + working-directory: /tmp + run: tar xf "mongo-c-driver.tar.gz" + + - name: Configure cmake + shell: bash + working-directory: /tmp + run: | + cmake \ + -S "mongo-c-driver-${LIBMONGOC_VERSION}" \ + -B _build \ + -D CMAKE_BUILD_TYPE=RelWithDebInfo \ + -D BUILD_VERSION="${LIBMONGOC_VERSION}" \ + -D ENABLE_MONGOC=ON \ + -D ENABLE_TRACING=ON \ + -D ENABLE_CLIENT_SIDE_ENCRYPTION=ON + env: + LIBMONGOC_VERSION: ${{ inputs.version }} + + - name: Build libmongoc + shell: bash + working-directory: /tmp + run: cmake --build _build --config RelWithDebInfo --parallel + + - name: Install libmongoc + shell: bash + working-directory: /tmp + run: sudo cmake --install _build --prefix "${PREFIX}" --config RelWithDebInfo + env: + PREFIX: ${{ inputs.prefix }} + + - name: Check pkg-config availability + shell: bash + run: pkg-config --modversion mongoc2 diff --git a/.github/actions/linux/build-libmongocrypt/action.yml b/.github/actions/linux/build-libmongocrypt/action.yml new file mode 100644 index 000000000..04c12509e --- /dev/null +++ b/.github/actions/linux/build-libmongocrypt/action.yml @@ -0,0 +1,29 @@ +name: "Build libmongocrypt" +description: "Installs libmongocrypt" +inputs: + version: + description: "Libmongocrypt version to install (major.minor)" + required: true +runs: + using: composite + + steps: + - name: Add repository key + shell: bash + run: sudo sh -c 'curl -s --location https://pgp.mongodb.com/libmongocrypt.asc | gpg --dearmor >/etc/apt/trusted.gpg.d/libmongocrypt.gpg' + + - name: Add repository + shell: bash + working-directory: /tmp + # Note: no packages for Ubuntu 24.04 noble exist, so we use those for 22.04 + run: echo "deb https://libmongocrypt.s3.amazonaws.com/apt/ubuntu jammy/libmongocrypt/${LIBMONGOCRYPT_VERSION} universe" | sudo tee /etc/apt/sources.list.d/libmongocrypt.list + env: + LIBMONGOCRYPT_VERSION: ${{ inputs.version }} + + - name: Update apt sources + shell: bash + run: sudo apt-get update + + - name: Install libmongocrypt + shell: bash + run: sudo apt-get install -y libmongocrypt-dev diff --git a/.github/actions/linux/build/action.yml b/.github/actions/linux/build/action.yml index a66462268..20378e2a7 100644 --- a/.github/actions/linux/build/action.yml +++ b/.github/actions/linux/build/action.yml @@ -4,6 +4,10 @@ inputs: version: description: "PHP version to build for" required: true + configureOpts: + description: "Extra options to use for the call to ./configure" + default: "" + runs: using: composite steps: @@ -17,6 +21,8 @@ runs: - name: "Configure driver" run: .github/workflows/configure.sh shell: bash + env: + CONFIGURE_OPTS: ${{ inputs.configureOpts }} - name: "Build driver" run: "make all" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ac706fa3e..29c74c922 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -128,3 +128,54 @@ jobs: php: [ "8.1", "8.2", "8.3", "8.4" ] arch: [ x64, x86 ] ts: [ ts, nts ] + + test-system-libs: + name: "System Library Tests" + runs-on: "ubuntu-latest" + env: + PHP_VERSION: "8.3" + LIBMONGOCRYPT_VERSION: "1.14" + LIBMONGOC_VERSION: "2.0.1" + SERVER_VERSION: "8.0" + + steps: + - name: "Checkout" + uses: "actions/checkout@v4" + with: + submodules: true + + - name: "Install libmongocrypt" + uses: ./.github/actions/linux/build-libmongocrypt + with: + version: ${{ env.LIBMONGOCRYPT_VERSION }} + + - name: "Build libmongoc" + uses: ./.github/actions/linux/build-libmongoc + with: + version: ${{ env.LIBMONGOC_VERSION }} + + - name: "Build Driver" + uses: ./.github/actions/linux/build + with: + version: ${{ env.PHP_VERSION }} + configureOpts: "--with-mongodb-system-libs=yes" + + - name: "Check driver version" + shell: bash + run: make show-config + + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Setup MongoDB + id: setup-mongodb + uses: ./tests/drivers-evergreen-tools + with: + version: ${{ ENV.SERVER_VERSION }} + topology: "server" + + - name: "Run Tests" + run: TEST_PHP_ARGS="-q -x --show-diff -g FAIL,XFAIL,BORK,WARN,LEAK,SKIP" make test + env: + MONGODB_URI: ${{ steps.setup-mongodb.outputs.cluster-uri }} diff --git a/Makefile.frag b/Makefile.frag index c1f83b808..46eb786af 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -1,4 +1,4 @@ -.PHONY: mv-coverage lcov-coveralls lcov-local coverage coveralls format format-changed format-check test-clean package package.xml libmongocrypt-version-current generate-function-map +.PHONY: mv-coverage lcov-coveralls lcov-local coverage coveralls format format-changed format-check test-clean package package.xml libmongocrypt-version-current generate-function-map show-config ifneq (,$(realpath $(EXTENSION_DIR)/json.so)) PHP_TEST_SHARED_EXTENSIONS := "-d" "extension=$(EXTENSION_DIR)/json.so" $(PHP_TEST_SHARED_EXTENSIONS) @@ -88,6 +88,28 @@ generate-function-map: all echo "ERROR: Cannot generate function maps without CLI sapi."; \ fi +show-config: all + @if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \ + INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \ + if test "$$INI_FILE"; then \ + $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \ + else \ + echo > $(top_builddir)/tmp-php.ini; \ + fi; \ + INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \ + if test "$$INI_SCANNED_PATH"; then \ + INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \ + $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \ + fi; \ + CC="$(CC)" \ + $(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) --ri mongodb; \ + RESULT_EXIT_CODE=$$?; \ + rm $(top_builddir)/tmp-php.ini; \ + exit $$RESULT_EXIT_CODE; \ + else \ + echo "ERROR: Cannot show config without CLI sapi."; \ + fi + test-no-build: @if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \ INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \ From adfedd2c1798ac95c71df36dcbffb1d65146924c Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Mon, 26 May 2025 15:59:55 +0200 Subject: [PATCH 3/6] PHPC-2545: Drop support for compiling with LibreSSL (#1836) * PHPC-2545: Drop support for compiling with LibreSSL * Warn when explicitly building with libressl --- bin/package.xml.in | 2 +- composer.json | 2 +- config.w32 | 1 - php_phongo.c | 2 - scripts/autotools/libmongoc/CheckSSL.m4 | 71 ++++++--------------- scripts/autotools/libmongocrypt/CheckSSL.m4 | 2 +- src/phongo_client.c | 4 +- tests/manager/manager-ctor-ssl-003.phpt | 2 +- tests/utils/skipif.php | 4 +- 9 files changed, 26 insertions(+), 64 deletions(-) diff --git a/bin/package.xml.in b/bin/package.xml.in index 16b91b283..ea48b83a5 100644 --- a/bin/package.xml.in +++ b/bin/package.xml.in @@ -76,7 +76,7 @@ necessary to build a fully-functional MongoDB driver. - + diff --git a/composer.json b/composer.json index 4036ce0a2..e29e473dc 100644 --- a/composer.json +++ b/composer.json @@ -61,7 +61,7 @@ }, { "name": "with-mongodb-ssl", - "description": "Enable crypto and TLS (auto/openssl/libressl/darwin/no)", + "description": "Enable crypto and TLS (auto/openssl/darwin/no)", "needs-value": true }, { diff --git a/config.w32 b/config.w32 index 06f906c41..f18d4d2bf 100644 --- a/config.w32 +++ b/config.w32 @@ -161,7 +161,6 @@ if (PHP_MONGODB != "no") { // Secure Transport does not apply to Windows MONGOC_ENABLE_SSL_SECURE_TRANSPORT: 0, MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO: 0, - MONGOC_ENABLE_SSL_LIBRESSL: 0, MONGOC_ENABLE_SSL_OPENSSL: 0, MONGOC_ENABLE_CRYPTO_LIBCRYPTO: 0, MONGOC_ENABLE_SSL: 0, diff --git a/php_phongo.c b/php_phongo.c index 98a0b6d0e..6c9bd29fc 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -408,8 +408,6 @@ PHP_MINFO_FUNCTION(mongodb) /* {{{ */ php_info_print_table_row(2, "libmongoc SSL", "enabled"); #if defined(MONGOC_ENABLE_SSL_OPENSSL) php_info_print_table_row(2, "libmongoc SSL library", "OpenSSL"); -#elif defined(MONGOC_ENABLE_SSL_LIBRESSL) - php_info_print_table_row(2, "libmongoc SSL library", "LibreSSL"); #elif defined(MONGOC_ENABLE_SSL_SECURE_TRANSPORT) php_info_print_table_row(2, "libmongoc SSL library", "Secure Transport"); #elif defined(MONGOC_ENABLE_SSL_SECURE_CHANNEL) diff --git a/scripts/autotools/libmongoc/CheckSSL.m4 b/scripts/autotools/libmongoc/CheckSSL.m4 index d5ffecdf1..9a42e88a1 100644 --- a/scripts/autotools/libmongoc/CheckSSL.m4 +++ b/scripts/autotools/libmongoc/CheckSSL.m4 @@ -1,24 +1,32 @@ PHP_ARG_WITH([mongodb-ssl], [whether to enable crypto and TLS], - [AS_HELP_STRING([--with-mongodb-ssl=@<:@auto/openssl/libressl/darwin/no@:>@], + [AS_HELP_STRING([--with-mongodb-ssl=@<:@auto/openssl/darwin/no@:>@], [MongoDB: Enable TLS connections and SCRAM-SHA-1 authentication [default=auto]])], [auto], [no]) +dnl PHP_ARG_WITH without a value assigns "yes". Treat it like "auto" but +dnl require a crypto library. +if test "$PHP_MONGODB_SSL" = "yes"; then + PHP_MONGODB_SSL="auto" +fi + +dnl TODO 3.0: Remove libressl from valid options +PHP_MONGODB_VALIDATE_ARG([PHP_MONGODB_SSL], [auto openssl libressl darwin no]) + +if test "$PHP_MONGODB_SSL" = "libressl"; then + dnl libressl is a valid option, but it is not supported by libmongoc + dnl Warn users that it is not supported and treat it like "auto" + PHP_MONGODB_SSL="auto" + AC_MSG_WARN([Building with libressl is not supported by libmongoc. Falling back to "auto".]) +fi + if test "$PHP_MONGODB_SSL" = "auto" -o "$PHP_MONGODB_SSL" = "no"; then crypto_required="no" else crypto_required="yes" - - dnl PHP_ARG_WITH without a value assigns "yes". Treat it like "auto" but - dnl require a crypto library. - if test "$PHP_MONGODB_SSL" = "yes"; then - PHP_MONGODB_SSL="auto" - fi fi -PHP_MONGODB_VALIDATE_ARG([PHP_MONGODB_SSL], [auto openssl libressl darwin no]) - AS_IF([test "$PHP_MONGODB_SSL" = "openssl" -o "$PHP_MONGODB_SSL" = "auto"],[ found_openssl="no" @@ -130,38 +138,6 @@ AS_IF([test "$PHP_MONGODB_SSL" = "darwin" -o \( "$PHP_MONGODB_SSL" = "auto" -a " PHP_MONGODB_SSL="darwin" ]) -AS_IF([test "$PHP_MONGODB_SSL" = "libressl" -o "$PHP_MONGODB_SSL" = "auto"],[ - found_libressl="no" - - PKG_CHECK_MODULES([PHP_MONGODB_SSL],[libtls libcrypto],[ - PHP_MONGODB_BUNDLED_CFLAGS="$PHP_MONGODB_BUNDLED_CFLAGS $PHP_MONGODB_SSL_CFLAGS" - PHP_EVAL_LIBLINE([$PHP_MONGODB_SSL_LIBS],[MONGODB_SHARED_LIBADD]) - PHP_MONGODB_SSL="libressl" - found_libressl="yes" - ],[ - PHP_CHECK_LIBRARY([crypto], - [EVP_DigestInit_ex], - [have_crypto_lib="yes"], - [have_crypto_lib="no"]) - PHP_CHECK_LIBRARY([tls], - [tls_init], - [have_ssl_lib="yes"], - [have_ssl_lib="no"], - [-lcrypto]) - - if test "$have_ssl_lib" = "yes" -a "$have_crypto_lib" = "yes"; then - PHP_ADD_LIBRARY([tls],,[MONGODB_SHARED_LIBADD]) - PHP_ADD_LIBRARY([crypto],,[MONGODB_SHARED_LIBADD]) - PHP_MONGODB_SSL="libressl" - found_libressl="yes" - fi - ]) - - if test "$PHP_MONGODB_SSL" = "libressl" -a "$found_libressl" != "yes"; then - AC_MSG_ERROR([LibreSSL libraries and development headers could not be found]) - fi -]) - AS_IF([test "$PHP_MONGODB_SSL" = "auto"],[ if test "$crypto_required" = "yes"; then AC_MSG_ERROR([crypto and TLS libraries not found]) @@ -177,12 +153,11 @@ AC_SUBST(MONGOC_ENABLE_SSL_SECURE_CHANNEL, 0) AC_SUBST(MONGOC_ENABLE_CRYPTO_CNG, 0) AC_SUBST(MONGOC_HAVE_BCRYPT_PBKDF2, 0) -if test "$PHP_MONGODB_SSL" = "openssl" -o "$PHP_MONGODB_SSL" = "libressl" -o "$PHP_MONGODB_SSL" = "darwin"; then +if test "$PHP_MONGODB_SSL" = "openssl" -o "$PHP_MONGODB_SSL" = "darwin"; then AC_SUBST(MONGOC_ENABLE_SSL, 1) AC_SUBST(MONGOC_ENABLE_CRYPTO, 1) if test "$PHP_MONGODB_SSL" = "darwin"; then AC_SUBST(MONGOC_ENABLE_SSL_OPENSSL, 0) - AC_SUBST(MONGOC_ENABLE_SSL_LIBRESSL, 0) AC_SUBST(MONGOC_ENABLE_SSL_SECURE_TRANSPORT, 1) AC_SUBST(MONGOC_ENABLE_CRYPTO_LIBCRYPTO, 0) AC_SUBST(MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO, 1) @@ -190,15 +165,6 @@ if test "$PHP_MONGODB_SSL" = "openssl" -o "$PHP_MONGODB_SSL" = "libressl" -o "$P PHP_MONGODB_BUNDLED_CFLAGS="$PHP_MONGODB_BUNDLED_CFLAGS -DKMS_MESSAGE_ENABLE_CRYPTO=1 -DKMS_MESSAGE_ENABLE_CRYPTO_COMMON_CRYPTO=1" elif test "$PHP_MONGODB_SSL" = "openssl"; then AC_SUBST(MONGOC_ENABLE_SSL_OPENSSL, 1) - AC_SUBST(MONGOC_ENABLE_SSL_LIBRESSL, 0) - AC_SUBST(MONGOC_ENABLE_SSL_SECURE_TRANSPORT, 0) - AC_SUBST(MONGOC_ENABLE_CRYPTO_LIBCRYPTO, 1) - AC_SUBST(MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO, 0) - - PHP_MONGODB_BUNDLED_CFLAGS="$PHP_MONGODB_BUNDLED_CFLAGS -DKMS_MESSAGE_ENABLE_CRYPTO=1 -DKMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO=1" - elif test "$PHP_MONGODB_SSL" = "libressl"; then - AC_SUBST(MONGOC_ENABLE_SSL_OPENSSL, 0) - AC_SUBST(MONGOC_ENABLE_SSL_LIBRESSL, 1) AC_SUBST(MONGOC_ENABLE_SSL_SECURE_TRANSPORT, 0) AC_SUBST(MONGOC_ENABLE_CRYPTO_LIBCRYPTO, 1) AC_SUBST(MONGOC_ENABLE_CRYPTO_COMMON_CRYPTO, 0) @@ -207,7 +173,6 @@ if test "$PHP_MONGODB_SSL" = "openssl" -o "$PHP_MONGODB_SSL" = "libressl" -o "$P fi else AC_SUBST(MONGOC_ENABLE_SSL, 0) - AC_SUBST(MONGOC_ENABLE_SSL_LIBRESSL, 0) AC_SUBST(MONGOC_ENABLE_SSL_OPENSSL, 0) AC_SUBST(MONGOC_ENABLE_SSL_SECURE_TRANSPORT, 0) AC_SUBST(MONGOC_ENABLE_CRYPTO, 0) diff --git a/scripts/autotools/libmongocrypt/CheckSSL.m4 b/scripts/autotools/libmongocrypt/CheckSSL.m4 index 704aedb69..dfae099b3 100644 --- a/scripts/autotools/libmongocrypt/CheckSSL.m4 +++ b/scripts/autotools/libmongocrypt/CheckSSL.m4 @@ -11,7 +11,7 @@ if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" != "no"; then AC_SUBST(MONGOCRYPT_ENABLE_CRYPTO, 1) AC_SUBST(MONGOCRYPT_ENABLE_CRYPTO_LIBCRYPTO, 0) AC_SUBST(MONGOCRYPT_ENABLE_CRYPTO_COMMON_CRYPTO, 1) - elif test "$PHP_MONGODB_SSL" = "openssl" -o "$PHP_MONGODB_SSL" = "libressl"; then + elif test "$PHP_MONGODB_SSL" = "openssl"; then PHP_MONGODB_CLIENT_SIDE_ENCRYPTION="yes" AC_SUBST(MONGOCRYPT_ENABLE_CRYPTO, 1) diff --git a/src/phongo_client.c b/src/phongo_client.c index 626d8181d..9968b6486 100644 --- a/src/phongo_client.c +++ b/src/phongo_client.c @@ -708,9 +708,9 @@ static mongoc_ssl_opt_t* php_phongo_make_ssl_opt(mongoc_uri_t* uri, zval* driver } #endif -#if defined(MONGOC_ENABLE_SSL_LIBRESSL) || defined(MONGOC_ENABLE_SSL_SECURE_TRANSPORT) +#if defined(MONGOC_ENABLE_SSL_SECURE_TRANSPORT) if (php_array_existsc(driverOptions, "crl_file")) { - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "\"crl_file\" option is not supported by LibreSSL and Secure Transport"); + phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "\"crl_file\" option is not supported by Secure Transport"); return NULL; } #endif diff --git a/tests/manager/manager-ctor-ssl-003.phpt b/tests/manager/manager-ctor-ssl-003.phpt index 3cbd9689b..6553f0677 100644 --- a/tests/manager/manager-ctor-ssl-003.phpt +++ b/tests/manager/manager-ctor-ssl-003.phpt @@ -2,7 +2,7 @@ MongoDB\Driver\Manager::__construct(): Specifying a driver option implicitly enables TLS --SKIPIF-- - + --FILE-- diff --git a/tests/utils/skipif.php b/tests/utils/skipif.php index 873275314..46c5afe36 100644 --- a/tests/utils/skipif.php +++ b/tests/utils/skipif.php @@ -375,8 +375,8 @@ function skip_if_not_libmongoc_crypto(array $libs = []) * Skips the test if libmongoc does not support SSL. * * If one or more libaries are provided, additionally check that the reported - * library is in that array. Possible values are "OpenSSL", "LibreSSL", - * "Secure Transport", and "Secure Channel". + * library is in that array. Possible values are "OpenSSL", "Secure Transport", + * and "Secure Channel". * * @param array $libs Optional list of SSL libraries to require */ From 6c715e969e02943c9fc258bcbc259a73b450e0df Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Tue, 27 May 2025 13:13:33 +0200 Subject: [PATCH 4/6] Fix usage of wrong version variable --- config.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.m4 b/config.m4 index e87b09b3f..b12d3878d 100644 --- a/config.m4 +++ b/config.m4 @@ -255,7 +255,7 @@ if test "$PHP_MONGODB" != "no"; then PKG_CHECK_MODULES([PHP_MONGODB_MONGOC], [mongoc2 >= 2.0.1], [ PHP_MONGODB_MONGOC_VERSION=`$PKG_CONFIG mongoc2 --modversion` - PHP_MONGODB_MONGOC_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)" + PHP_MONGODB_MONGOC_VERSION_STRING="System ($PHP_MONGODB_MONGOC_VERSION)" PHP_MONGODB_CFLAGS="$PHP_MONGODB_CFLAGS $PHP_MONGODB_MONGOC_CFLAGS" PHP_EVAL_LIBLINE($PHP_MONGODB_MONGOC_LIBS, MONGODB_SHARED_LIBADD) From 51cdb21741bc9820b99b7cd2b43045eafc9de5ed Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Mon, 2 Jun 2025 09:32:19 +0200 Subject: [PATCH 5/6] PHPC-2367: Add SSPI SASL, drop Cyrus on Windows (#1837) * Support building with SSPI support under Windows * Remove support for building with Cyrus SASL on Windows * Apply feedback from Copilot * Apply code review feedback * Fix handling of missing SASL libs when relying on default value for with-mongodb-sasl --- config.w32 | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/config.w32 b/config.w32 index f18d4d2bf..43df7f9cf 100644 --- a/config.w32 +++ b/config.w32 @@ -70,7 +70,7 @@ function MONGODB_ADD_SOURCES(dir, file_list) } ARG_ENABLE("mongodb", "MongoDB support", "no"); -ARG_WITH("mongodb-sasl", "MongoDB: Build against Cyrus-SASL", "yes"); +ARG_WITH("mongodb-sasl", "MongoDB: Build with SSPI SASL (valid values: 'yes' (fallback to SSPI), 'sspi', 'no')", "yes"); ARG_WITH("mongodb-client-side-encryption", "MongoDB: Enable client-side encryption", "yes"); if (PHP_MONGODB != "no") { @@ -232,21 +232,33 @@ if (PHP_MONGODB != "no") { WARNING("mongodb libopenssl support not enabled, libs not found"); } - // TODO: Support building with native GSSAPI (SSPI) on Windows - if (PHP_MONGODB_SASL != "no" && - CHECK_LIB("libsasl.lib", "mongodb", PHP_MONGODB) && - CHECK_HEADER_ADD_INCLUDE("sasl/sasl.h", "CFLAGS_MONGODB")) { - mongoc_opts.MONGOC_ENABLE_SASL = 1; - mongoc_opts.MONGOC_ENABLE_SASL_CYRUS = 1; - - // Referenced by _mongoc_cyrus_verifyfile_cb in mongoc-cyrus.c on Windows - ADD_FLAG("CFLAGS_MONGODB", "/D MONGOC_CYRUS_PLUGIN_PATH_PREFIX=NULL"); - - if (CHECK_FUNC_IN_HEADER("sasl/sasl.h", "sasl_client_done")) { - mongoc_opts.MONGOC_HAVE_SASL_CLIENT_DONE = 1; + has_sasl_libs = CHECK_LIB("libsasl.lib", "mongodb", PHP_MONGODB) && + CHECK_HEADER_ADD_INCLUDE("sasl/sasl.h", "CFLAGS_MONGODB"); + if (PHP_MONGODB_SASL != "no") { + if (has_sasl_libs) { + // TODO 3.0: Remove warning on "yes" as it implies "sspi" + if (PHP_MONGODB_SASL == "yes") { + WARNING("Cyrus SASL support for Windows was removed. Falling back to SSPI; use '--with-mongodb-sasl=sspi' to avoid this warning."); + PHP_MONGODB_SASL = "sspi"; + } + + if (PHP_MONGODB_SASL == "sspi") { + mongoc_opts.MONGOC_ENABLE_SASL = 1; + mongoc_opts.MONGOC_ENABLE_SASL_SSPI = 1; + } else { + ERROR("MongoDB SASL support not enabled, unknown value for --with-mongodb-sasl: " + PHP_MONGODB_SASL); + } + + if (CHECK_FUNC_IN_HEADER("sasl/sasl.h", "sasl_client_done")) { + mongoc_opts.MONGOC_HAVE_SASL_CLIENT_DONE = 1; + } + } else if (PHP_MONGODB_SASL != "yes") { + // If the user explicitly requested SASL support, we error out if the + // necessary libraries are not found. + ERROR("MongoDB SASL support not enabled, libs not found"); + } else { + WARNING("MongoDB SASL support not enabled, libs not found"); } - } else if (PHP_MONGODB_SASL != "no") { - WARNING("mongodb libsasl support not enabled, libs not found"); } if (PHP_MONGODB_CLIENT_SIDE_ENCRYPTION != "no" && mongoc_ssl_found) { From 9090d8481dfba874695b34699e4c21ef84ca75b3 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Mon, 2 Jun 2025 09:36:48 +0200 Subject: [PATCH 6/6] Apply feedback from code review --- bin/prep-release.php | 4 ++-- tests/manager/manager-ctor-write_concern-error-001.phpt | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/bin/prep-release.php b/bin/prep-release.php index 22887205e..81465bdde 100644 --- a/bin/prep-release.php +++ b/bin/prep-release.php @@ -49,7 +49,7 @@ function get_files() { "src/libmongoc/src/common/src/*.{c,h,h.in}", // Note: src/libmongoc/src/common/src/mlib/ does not contain source files (as of libmongoc 2.0.1) - "src/libmongoc/src/common/src/mlib/*.{c,h}", + "src/libmongoc/src/common/src/mlib/*.h", "src/libmongoc/src/kms-message/src/*.{c,h}", "src/libmongoc/src/kms-message/src/kms_message/*.{c,h}", "src/libmongoc/src/libbson/src/bson/*.{c,h,h.in}", @@ -65,7 +65,7 @@ function get_files() { "src/libmongocrypt-compat/mongocrypt/*.{c,h}", "src/libmongocrypt/src/*.{c,h,h.in}", "src/libmongocrypt/src/crypto/*.{c,h}", - "src/libmongocrypt/src/mlib/*.{c,h}", + "src/libmongocrypt/src/mlib/*.h", // Note: src/libmongocrypt/src/mlib/ does not contain source files (as of libmongocrypt 1.14.0) "src/libmongocrypt/src/mlib/*.h", "src/libmongocrypt/src/os_posix/*.{c,h}", diff --git a/tests/manager/manager-ctor-write_concern-error-001.phpt b/tests/manager/manager-ctor-write_concern-error-001.phpt index 0fb872d4c..05d593d28 100644 --- a/tests/manager/manager-ctor-write_concern-error-001.phpt +++ b/tests/manager/manager-ctor-write_concern-error-001.phpt @@ -12,10 +12,6 @@ echo throws(function() { create_test_manager(null, ['w' => 1.0]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n"; -/* Note: Values of w < 0 are invalid, but libmongoc's URI string parsing only - * logs a warning instead of raising an error (see: CDRIVER-2234), so we cannot - * test for this. */ - echo throws(function() { create_test_manager(null, ['w' => -1]); }, "MongoDB\Driver\Exception\InvalidArgumentException"), "\n";