Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 47 additions & 45 deletions src/libmongoc/examples/parse_handshake_cfg.py
Original file line number Diff line number Diff line change
@@ -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()
2 changes: 1 addition & 1 deletion src/libmongoc/src/mongoc/mongoc-config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
76 changes: 39 additions & 37 deletions src/libmongoc/src/mongoc/mongoc-handshake-private.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions src/libmongoc/tests/test-mongoc-handshake.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down