From 22a6558f91626659bb0801ae5decb9bc240991ba Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 09:51:40 +0200 Subject: [PATCH 01/15] PHPC-2581: Bump to libmongoc 2.0.1 --- .../generated/build/build-libmongoc.yml | 4 ++-- .../templates/build/build-libmongoc.yml | 4 ++-- Makefile.frag | 2 +- config.m4 | 22 +++++++++---------- config.w32 | 4 ++-- sbom.json | 16 +++++++------- src/LIBMONGOC_VERSION_CURRENT | 2 +- src/libmongoc | 2 +- 8 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.evergreen/config/generated/build/build-libmongoc.yml b/.evergreen/config/generated/build/build-libmongoc.yml index b1e845197..bf8e7c3ba 100644 --- a/.evergreen/config/generated/build/build-libmongoc.yml +++ b/.evergreen/config/generated/build/build-libmongoc.yml @@ -12,7 +12,7 @@ tasks: - func: "compile driver" vars: PHP_VERSION: "8.3" - LIBMONGOC_VERSION: "1.30.1" + LIBMONGOC_VERSION: "2.0.1" - func: "upload build" - name: "build-php-8.3-libmongoc-next-stable" @@ -21,7 +21,7 @@ tasks: - func: "compile driver" vars: PHP_VERSION: "8.3" - LIBMONGOC_VERSION: "r1.30" + LIBMONGOC_VERSION: "r2.0" - func: "upload build" - name: "build-php-8.3-libmongoc-latest" 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/Makefile.frag b/Makefile.frag index 9b181b4a0..258d21121 100644 --- a/Makefile.frag +++ b/Makefile.frag @@ -64,7 +64,7 @@ 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 + cp src/libmongoc/VERSION_CURRENT src/LIBMONGOC_VERSION_CURRENT libmongocrypt-version-current: cd src/libmongocrypt/ && python etc/calc_release_version.py > ../LIBMONGOCRYPT_VERSION_CURRENT diff --git a/config.m4 b/config.m4 index 5a547089a..6edeb4a53 100644 --- a/config.m4 +++ b/config.m4 @@ -240,26 +240,26 @@ 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 @@ -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" @@ -496,8 +496,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..ffcef03d7 100644 --- a/config.w32 +++ b/config.w32 @@ -108,9 +108,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); diff --git a/sbom.json b/sbom.json index cb29e41f0..afab4527e 100644 --- a/sbom.json +++ b/sbom.json @@ -19,22 +19,22 @@ "version": "1.12.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": [ @@ -42,11 +42,11 @@ "ref": "pkg:github/mongodb/libmongocrypt@1.12.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:42:43.900310+00:00", "tools": [ { "externalReferences": [ @@ -90,7 +90,7 @@ ] }, "serialNumber": "urn:uuid:acb30d08-ee47-4ff0-b301-d66ef1f54082", - "version": 12, + "version": 13, "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", "bomFormat": "CycloneDX", "specVersion": "1.5" diff --git a/src/LIBMONGOC_VERSION_CURRENT b/src/LIBMONGOC_VERSION_CURRENT index 593d72103..38f77a65b 100644 --- a/src/LIBMONGOC_VERSION_CURRENT +++ b/src/LIBMONGOC_VERSION_CURRENT @@ -1 +1 @@ -1.30.4 +2.0.1 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 From 603d936b657d72501655b56cf5c68a68965972c7 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 09:58:30 +0200 Subject: [PATCH 02/15] PHPC-2578: Bump to libmongocrypt 1.14.0 --- config.m4 | 6 +++--- config.w32 | 2 +- sbom.json | 16 ++++++++-------- src/LIBMONGOCRYPT_VERSION_CURRENT | 2 +- src/libmongocrypt | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/config.m4 b/config.m4 index 6edeb4a53..fd86012e4 100644 --- a/config.m4 +++ b/config.m4 @@ -263,7 +263,7 @@ if test "$PHP_MONGODB" != "no"; then ]) 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 +271,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 @@ -425,7 +425,7 @@ 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" diff --git a/config.w32 b/config.w32 index ffcef03d7..a7cbb719f 100644 --- a/config.w32 +++ b/config.w32 @@ -270,7 +270,7 @@ 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"; diff --git a/sbom.json b/sbom.json index afab4527e..4d2613351 100644 --- a/sbom.json +++ b/sbom.json @@ -1,22 +1,22 @@ { "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@2.0.1", @@ -39,14 +39,14 @@ ], "dependencies": [ { - "ref": "pkg:github/mongodb/libmongocrypt@1.12.0" + "ref": "pkg:github/mongodb/libmongocrypt@1.14.0" }, { "ref": "pkg:github/mongodb/mongo-c-driver@2.0.1" } ], "metadata": { - "timestamp": "2025-05-21T07:42:43.900310+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": 13, + "version": 14, "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", "bomFormat": "CycloneDX", "specVersion": "1.5" 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/libmongocrypt b/src/libmongocrypt index 085a0ce65..6a3c15ef7 160000 --- a/src/libmongocrypt +++ b/src/libmongocrypt @@ -1 +1 @@ -Subproject commit 085a0ce6538a28179da6bfd2927aea106924443a +Subproject commit 6a3c15ef7502fe67b1f0fe15d817a7762f66fbac From 3d18af2d6f751bb0af286c6e14cc4f8b4a752106 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 10:07:37 +0200 Subject: [PATCH 03/15] Disable deprecations in developer mode --- config.m4 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.m4 b/config.m4 index fd86012e4..4c4a63ab4 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) From 5e27513cb3f5781e02c9c5667b9796a5002426db Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 10:11:08 +0200 Subject: [PATCH 04/15] PHPC-2548: Remove MONGOC_WRITE_CONCERN_W_ERRORS_IGNORED --- src/MongoDB/WriteConcern.c | 4 ++-- src/phongo_client.c | 3 +-- .../manager-ctor-write_concern-001.phpt | 10 -------- .../manager-ctor-write_concern-error-001.phpt | 6 ++--- .../manager-ctor-write_concern-error-005.phpt | 24 ------------------- .../writeconcern-isdefault-001.phpt | 9 ++----- 6 files changed, 8 insertions(+), 48 deletions(-) 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/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/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/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 27b74f01161953dfc38ff1dabc1919065167c882 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 10:12:03 +0200 Subject: [PATCH 05/15] PHPC-2540: Use const for mongoc_host_list_t --- src/MongoDB/Server.c | 6 +++--- src/MongoDB/ServerDescription.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) 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); From 041616d27747f1ae1cd5f0a179d7c6e033b1364f Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 10:18:12 +0200 Subject: [PATCH 06/15] Mark PHP 8.4 as latest release in build config generator --- .evergreen/config/generate-config.php | 4 +-- .../generated/build/build-libmongoc.yml | 18 +++++------ .../generated/test-variant/libmongoc.yml | 30 +++++++++---------- 3 files changed, 25 insertions(+), 27 deletions(-) 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 bf8e7c3ba..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" + 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" + 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" From 586b33bbc46698426c866eced12a451bfa5588c7 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 10:56:18 +0200 Subject: [PATCH 07/15] Remove copying of libmongoc version file --- .evergreen/compile-unix.sh | 5 ----- .evergreen/config/functions.yml | 1 - CONTRIBUTING.md | 29 ++++++++++--------------- Makefile.frag | 5 +---- bin/prep-release.php | 1 - config.w32 | 2 +- scripts/autotools/libbson/Versions.m4 | 2 +- scripts/autotools/libmongoc/Versions.m4 | 2 +- scripts/update-sbom.sh | 2 +- src/LIBMONGOC_VERSION_CURRENT | 1 - 10 files changed, 16 insertions(+), 34 deletions(-) delete mode 100644 src/LIBMONGOC_VERSION_CURRENT 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/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 258d21121..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: - cp src/libmongoc/VERSION_CURRENT src/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..2ffff90e1 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}", diff --git a/config.w32 b/config.w32 index a7cbb719f..22c46fa47 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(); 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/src/LIBMONGOC_VERSION_CURRENT b/src/LIBMONGOC_VERSION_CURRENT deleted file mode 100644 index 38f77a65b..000000000 --- a/src/LIBMONGOC_VERSION_CURRENT +++ /dev/null @@ -1 +0,0 @@ -2.0.1 From 16d6e39f2e7bebe3c7498befe0699c0cccc46bc4 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 11:21:51 +0200 Subject: [PATCH 08/15] Update exception messages in tests --- tests/connect/bug1045.phpt | 2 +- .../manager-ctor-auth_mechanism-error-001.phpt | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) 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..32b9734b5 100644 --- a/tests/manager/manager-ctor-auth_mechanism-error-001.phpt +++ b/tests/manager/manager-ctor-auth_mechanism-error-001.phpt @@ -38,17 +38,17 @@ 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. +Failed to parse MongoDB URI: 'mongodb://localhost:27017/?authMechanism=GSSAPI&authSource=admin'. 'GSSAPI' authentication mechanism requires a username. OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Failed to parse URI options: GSSAPI and X509 require "$external" authSource +Failed to parse URI options: 'GSSAPI' authentication mechanism requires a username 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. +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: GSSAPI and X509 require "$external" authSource +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 MongoDB URI: 'mongodb://@localhost:27017/?authMechanism=SCRAM-SHA-1'. 'SCRAM-SHA-1' authentication mechanism requires username. +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 username +Failed to parse URI options: 'SCRAM-SHA-1' authentication mechanism requires a username OK: Got MongoDB\Driver\Exception\InvalidArgumentException Failed to parse URI options: 'MONGODB-X509' authentication mechanism does not accept a password ===DONE=== From 119ae8960ea76d0b9fe2dc45fe8cb34aa1bb12f5 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 11:24:49 +0200 Subject: [PATCH 09/15] Update test output for libmongoc 2.x --- tests/manager/manager-debug-001.phpt | 2 +- tests/manager/manager-debug-002.phpt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 From e75164b984ef4cfd9beb0f1d79e0b65a929abfad Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 13:11:52 +0200 Subject: [PATCH 10/15] Package new code directories in PECL package --- bin/prep-release.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bin/prep-release.php b/bin/prep-release.php index 2ffff90e1..22887205e 100644 --- a/bin/prep-release.php +++ b/bin/prep-release.php @@ -48,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}", @@ -63,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}", ), From e9f08f62f3ae1059868b0916bac4c52e6c236ed8 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 13:29:33 +0200 Subject: [PATCH 11/15] Add new source folders to config scripts --- config.m4 | 3 +++ config.w32 | 3 +++ scripts/update-submodule-sources.php | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/config.m4 b/config.m4 index 4c4a63ab4..a399dce59 100644 --- a/config.m4 +++ b/config.m4 @@ -431,12 +431,14 @@ if test "$PHP_MONGODB" != "no"; then 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/]) @@ -447,6 +449,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([ diff --git a/config.w32 b/config.w32 index 22c46fa47..864c8815b 100644 --- a/config.w32 +++ b/config.w32 @@ -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 \ @@ -274,12 +275,14 @@ if (PHP_MONGODB != "no") { 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/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 = []; From 4b3f8ded2dae99ec038df66289c95f7f61935ca6 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 14:05:11 +0200 Subject: [PATCH 12/15] PHPC-2547: Remove MONGOC_NO_AUTOMATIC_GLOBALS --- config.m4 | 1 - config.w32 | 1 - 2 files changed, 2 deletions(-) diff --git a/config.m4 b/config.m4 index a399dce59..f8cc0182a 100644 --- a/config.m4 +++ b/config.m4 @@ -332,7 +332,6 @@ if test "$PHP_MONGODB" != "no"; then 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) diff --git a/config.w32 b/config.w32 index 864c8815b..1d86bb75b 100644 --- a/config.w32 +++ b/config.w32 @@ -185,7 +185,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, From 5169bd373273c54dd0e8b40b02d685dd78b6d750 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 14:08:27 +0200 Subject: [PATCH 13/15] PHPC-2549: Remove BSON_EXTRA_ALIGN --- config.m4 | 1 - config.w32 | 1 - 2 files changed, 2 deletions(-) diff --git a/config.m4 b/config.m4 index f8cc0182a..e87b09b3f 100644 --- a/config.m4 +++ b/config.m4 @@ -329,7 +329,6 @@ 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_ENABLE_MONGODB_AWS_AUTH, 0) diff --git a/config.w32 b/config.w32 index 1d86bb75b..06f906c41 100644 --- a/config.w32 +++ b/config.w32 @@ -136,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 From 70e12b15c68a8f4b8f5d6d3da07034ab1a63f001 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Wed, 21 May 2025 17:10:38 +0200 Subject: [PATCH 14/15] PHPC-1548: Add tests for empty authSource URI option --- .../manager-ctor-auth_source_error-001.phpt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/manager/manager-ctor-auth_source_error-001.phpt 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=== From 9e776cdd1a6ab0c707f264957e31e9276a68095a Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Thu, 22 May 2025 09:58:19 +0200 Subject: [PATCH 15/15] PHPC-2542: Add test coverage for auth mechanism errors --- ...manager-ctor-auth_mechanism-error-001.phpt | 38 +++++-------------- ...manager-ctor-auth_mechanism-error-002.phpt | 31 +++++++++++++++ ...manager-ctor-auth_mechanism-error-003.phpt | 36 ++++++++++++++++++ ...manager-ctor-auth_mechanism-error-004.phpt | 36 ++++++++++++++++++ 4 files changed, 113 insertions(+), 28 deletions(-) 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 diff --git a/tests/manager/manager-ctor-auth_mechanism-error-001.phpt b/tests/manager/manager-ctor-auth_mechanism-error-001.phpt index 32b9734b5..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' authentication mechanism requires a username. +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 URI options: 'GSSAPI' authentication mechanism requires a username 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 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 +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===