diff --git a/src/libmongoc/examples/parse_handshake_cfg.py b/src/libmongoc/examples/parse_handshake_cfg.py index d123fa7ac1c..3712e54d23b 100644 --- a/src/libmongoc/examples/parse_handshake_cfg.py +++ b/src/libmongoc/examples/parse_handshake_cfg.py @@ -1,60 +1,62 @@ import sys -# Should be in EXACT same order as from src/mongoc/mongoc-handshake-private.h. -# The values are implicit (so we assume 1st entry is 1 << 0, -# second entry is 1 << 1 and so on). -MD_FLAGS = [ - "MONGOC_MD_FLAG_ENABLE_CRYPTO", - "MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG", - "MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO", - "MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO", - "MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE", - "MONGOC_MD_FLAG_ENABLE_SASL", - "MONGOC_MD_FLAG_ENABLE_SSL", - "MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL", - "MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL", - "MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT", - "MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES", - "MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE", - "MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS", - "MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS", - "MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL", - "MONGOC_MD_FLAG_ENABLE_SASL_CYRUS", - "MONGOC_MD_FLAG_ENABLE_SASL_SSPI", - "MONGOC_MD_FLAG_HAVE_SOCKLEN", - "MONGOC_MD_FLAG_ENABLE_COMPRESSION", - "MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY", - "MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB", - "MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI", - "MONGOC_MD_FLAG_ENABLE_RES_NSEARCH", - "MONGOC_MD_FLAG_ENABLE_RES_NDESTROY", - "MONGOC_MD_FLAG_ENABLE_RES_NCLOSE", - "MONGOC_MD_FLAG_ENABLE_RES_SEARCH", - "MONGOC_MD_FLAG_ENABLE_DNSAPI", - "MONGOC_MD_FLAG_ENABLE_RDTSCP", - "MONGOC_MD_FLAG_HAVE_SCHED_GETCPU", - "MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS", - "MONGOC_MD_FLAG_TRACE", - "MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION", - "MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH", - "MONGOC_MD_FLAG_ENABLE_SRV", -] +# `MD_FLAGS` maps the flag to its bit position. +# The bit positions must match those defined in src/mongoc/mongoc-handshake-private.h +MD_FLAGS = { + "MONGOC_MD_FLAG_ENABLE_CRYPTO": 0, + "MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG": 1, + "MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO": 2, + "MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO": 3, + "MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE": 4, + "MONGOC_MD_FLAG_ENABLE_SASL": 5, + "MONGOC_MD_FLAG_ENABLE_SSL": 6, + "MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL": 7, + "MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL": 8, + "MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT": 9, + "MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES": 10, + "MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE": 11, + "MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS": 12, + "MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS": 13, + "MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL": 14, + "MONGOC_MD_FLAG_ENABLE_SASL_CYRUS": 15, + "MONGOC_MD_FLAG_ENABLE_SASL_SSPI": 16, + "MONGOC_MD_FLAG_HAVE_SOCKLEN": 17, + "MONGOC_MD_FLAG_ENABLE_COMPRESSION": 18, + "MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY": 19, + "MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB": 20, + "MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI": 21, + "MONGOC_MD_FLAG_ENABLE_RES_NSEARCH": 22, + "MONGOC_MD_FLAG_ENABLE_RES_NDESTROY": 23, + "MONGOC_MD_FLAG_ENABLE_RES_NCLOSE": 24, + "MONGOC_MD_FLAG_ENABLE_RES_SEARCH": 25, + "MONGOC_MD_FLAG_ENABLE_DNSAPI": 26, + "MONGOC_MD_FLAG_ENABLE_RDTSCP": 27, + "MONGOC_MD_FLAG_HAVE_SCHED_GETCPU": 28, + "MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS": 29, + "MONGOC_MD_FLAG_TRACE": 30, + # `MONGOC_MD_FLAG_ENABLE_ICU` was accidentally removed in libmongoc 1.25.0-1.25.3. + # If parsing a config-bitfield produced by libmongoc 1.25.0-1.25.3, use the version of `parse_handshake_cfg.py` from the git tag 1.25.0. + "MONGOC_MD_FLAG_ENABLE_ICU": 31, + "MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION": 32, + "MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH": 33, + "MONGOC_MD_FLAG_ENABLE_SRV": 34, +} def main(): - flag_to_number = {s: 2 ** i for i,s in enumerate(MD_FLAGS)} + flag_to_number = {s: 2 ** i for s,i in MD_FLAGS.items()} if len(sys.argv) < 2: - print "Usage: python {0} config-bitfield".format(sys.argv[0]) - print "Example: python parse_handshake_cfg.py 0x3e65" + print ("Usage: python {0} config-bitfield".format(sys.argv[0])) + print ("Example: python parse_handshake_cfg.py 0x3e65") return config_bitfield_string = sys.argv[1] config_bitfield_num = int(config_bitfield_string, 0) - print "Decimal value: {}".format(config_bitfield_num) + print ("Decimal value: {}".format(config_bitfield_num)) - for flag, num in flag_to_number.iteritems(): + for flag, num in flag_to_number.items(): v = "true" if config_bitfield_num & num else "false" - print "{:<50}: {}".format(flag, v) + print ("{:<50}: {}".format(flag, v)) if __name__ == "__main__": main() diff --git a/src/libmongoc/src/mongoc/mongoc-config.h.in b/src/libmongoc/src/mongoc/mongoc-config.h.in index 7156a30c91d..e4ca7bf6773 100644 --- a/src/libmongoc/src/mongoc/mongoc-config.h.in +++ b/src/libmongoc/src/mongoc/mongoc-config.h.in @@ -31,7 +31,7 @@ * o The bitfield in mongoc-handshake-private.h * o _mongoc_handshake_get_config_hex_string() in mongoc-handshake.c * o examples/parse_handshake_cfg.py - * o test_handshake_config_string in test-mongoc-handshake.c + * o test_handshake_platform_config in test-mongoc-handshake.c */ /* MONGOC_USER_SET_CFLAGS is set from config based on what compiler flags were diff --git a/src/libmongoc/src/mongoc/mongoc-handshake-private.h b/src/libmongoc/src/mongoc/mongoc-handshake-private.h index c1730cc1f0b..d138c91ffe2 100644 --- a/src/libmongoc/src/mongoc/mongoc-handshake-private.h +++ b/src/libmongoc/src/mongoc/mongoc-handshake-private.h @@ -46,41 +46,44 @@ BSON_BEGIN_DECLS /* When adding a new field to mongoc-config.h.in, update this! */ typedef enum { - /* The bit position (from the RHS) of each config flag. Do not reorder. */ + /* The bit position (from the RHS) of each config flag. Do not reorder or + change values. */ MONGOC_MD_FLAG_ENABLE_CRYPTO = 0, - MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG, - MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO, - MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO, - MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE, - MONGOC_MD_FLAG_ENABLE_SASL, - MONGOC_MD_FLAG_ENABLE_SSL, - MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL, - MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL, - MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT, - MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES, - MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE, - MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS, - MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS, - MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL, - MONGOC_MD_FLAG_ENABLE_SASL_CYRUS, - MONGOC_MD_FLAG_ENABLE_SASL_SSPI, - MONGOC_MD_FLAG_HAVE_SOCKLEN, - MONGOC_MD_FLAG_ENABLE_COMPRESSION, - MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY, - MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB, - MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI_UNUSED, /* CDRIVER-2654 removed this . */ - MONGOC_MD_FLAG_ENABLE_RES_NSEARCH, - MONGOC_MD_FLAG_ENABLE_RES_NDESTROY, - MONGOC_MD_FLAG_ENABLE_RES_NCLOSE, - MONGOC_MD_FLAG_ENABLE_RES_SEARCH, - MONGOC_MD_FLAG_ENABLE_DNSAPI, - MONGOC_MD_FLAG_ENABLE_RDTSCP, - MONGOC_MD_FLAG_HAVE_SCHED_GETCPU, - MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS, - MONGOC_MD_FLAG_TRACE, - MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION, - MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH, - MONGOC_MD_FLAG_ENABLE_SRV, + MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG = 1, + MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO = 2, + MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO = 3, + MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE = 4, + MONGOC_MD_FLAG_ENABLE_SASL = 5, + MONGOC_MD_FLAG_ENABLE_SSL = 6, + MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL = 7, + MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL = 8, + MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT = 9, + MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES = 10, + MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE = 11, + MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS = 12, + MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS = 13, + MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL = 14, + MONGOC_MD_FLAG_ENABLE_SASL_CYRUS = 15, + MONGOC_MD_FLAG_ENABLE_SASL_SSPI = 16, + MONGOC_MD_FLAG_HAVE_SOCKLEN = 17, + MONGOC_MD_FLAG_ENABLE_COMPRESSION = 18, + MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY = 19, + MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB = 20, + MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI_UNUSED = + 21, /* CDRIVER-2654 removed this . */ + MONGOC_MD_FLAG_ENABLE_RES_NSEARCH = 22, + MONGOC_MD_FLAG_ENABLE_RES_NDESTROY = 23, + MONGOC_MD_FLAG_ENABLE_RES_NCLOSE = 24, + MONGOC_MD_FLAG_ENABLE_RES_SEARCH = 25, + MONGOC_MD_FLAG_ENABLE_DNSAPI = 26, + MONGOC_MD_FLAG_ENABLE_RDTSCP = 27, + MONGOC_MD_FLAG_HAVE_SCHED_GETCPU = 28, + MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS = 29, + MONGOC_MD_FLAG_TRACE = 30, + MONGOC_MD_FLAG_ENABLE_ICU_UNUSED = 31, + MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION = 32, + MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH = 33, + MONGOC_MD_FLAG_ENABLE_SRV = 34, /* Add additional config flags here, above LAST_MONGOC_MD_FLAG. */ LAST_MONGOC_MD_FLAG } mongoc_handshake_config_flag_bit_t; @@ -109,7 +112,7 @@ typedef struct _mongoc_handshake_t { char *platform; char *compiler_info; char *flags; - + mongoc_handshake_env_t env; optional_int32 env_timeout_sec; optional_int32 env_memory_mb; @@ -125,8 +128,7 @@ void _mongoc_handshake_cleanup (void); bson_t * -_mongoc_handshake_build_doc_with_application ( - const char *application); +_mongoc_handshake_build_doc_with_application (const char *application); void _mongoc_handshake_freeze (void); diff --git a/src/libmongoc/tests/test-mongoc-handshake.c b/src/libmongoc/tests/test-mongoc-handshake.c index 84e6ef464e7..92cfe8b5fe9 100644 --- a/src/libmongoc/tests/test-mongoc-handshake.c +++ b/src/libmongoc/tests/test-mongoc-handshake.c @@ -1237,6 +1237,10 @@ test_handshake_platform_config (void) BSON_ASSERT (_get_bit (config_str, MONGOC_MD_FLAG_TRACE)); } + // Check that `MONGOC_MD_FLAG_ENABLE_ICU` is always unset. libicu dependency + // was removed in CDRIVER-4680. + BSON_ASSERT (!_get_bit (config_str, MONGOC_MD_FLAG_ENABLE_ICU_UNUSED)); + #ifdef MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION BSON_ASSERT ( _get_bit (config_str, MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION));