Skip to content

Commit ba248f7

Browse files
committed
CDRIVER-4795 restore MONGOC_MD_FLAG_ENABLE_ICU (#1494)
* support Python 3 in `parse_handshake_cfg.py` * add numeric assignments to enum values * format `mongoc-handshake-private.h` * fix reference to test function * restore `MONGOC_MD_FLAG_ENABLE_ICU` * comment about `MONGOC_MD_FLAG_ENABLE_ICU` removal
1 parent 3f2c35d commit ba248f7

File tree

4 files changed

+91
-83
lines changed

4 files changed

+91
-83
lines changed
+47-45
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,62 @@
11
import sys
22

3-
# Should be in EXACT same order as from src/mongoc/mongoc-handshake-private.h.
4-
# The values are implicit (so we assume 1st entry is 1 << 0,
5-
# second entry is 1 << 1 and so on).
6-
MD_FLAGS = [
7-
"MONGOC_MD_FLAG_ENABLE_CRYPTO",
8-
"MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG",
9-
"MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO",
10-
"MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO",
11-
"MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE",
12-
"MONGOC_MD_FLAG_ENABLE_SASL",
13-
"MONGOC_MD_FLAG_ENABLE_SSL",
14-
"MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL",
15-
"MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL",
16-
"MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT",
17-
"MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES",
18-
"MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE",
19-
"MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS",
20-
"MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS",
21-
"MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL",
22-
"MONGOC_MD_FLAG_ENABLE_SASL_CYRUS",
23-
"MONGOC_MD_FLAG_ENABLE_SASL_SSPI",
24-
"MONGOC_MD_FLAG_HAVE_SOCKLEN",
25-
"MONGOC_MD_FLAG_ENABLE_COMPRESSION",
26-
"MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY",
27-
"MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB",
28-
"MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI",
29-
"MONGOC_MD_FLAG_ENABLE_RES_NSEARCH",
30-
"MONGOC_MD_FLAG_ENABLE_RES_NDESTROY",
31-
"MONGOC_MD_FLAG_ENABLE_RES_NCLOSE",
32-
"MONGOC_MD_FLAG_ENABLE_RES_SEARCH",
33-
"MONGOC_MD_FLAG_ENABLE_DNSAPI",
34-
"MONGOC_MD_FLAG_ENABLE_RDTSCP",
35-
"MONGOC_MD_FLAG_HAVE_SCHED_GETCPU",
36-
"MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS",
37-
"MONGOC_MD_FLAG_TRACE",
38-
"MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION",
39-
"MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH",
40-
"MONGOC_MD_FLAG_ENABLE_SRV",
41-
]
3+
# `MD_FLAGS` maps the flag to its bit position.
4+
# The bit positions must match those defined in src/mongoc/mongoc-handshake-private.h
5+
MD_FLAGS = {
6+
"MONGOC_MD_FLAG_ENABLE_CRYPTO": 0,
7+
"MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG": 1,
8+
"MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO": 2,
9+
"MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO": 3,
10+
"MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE": 4,
11+
"MONGOC_MD_FLAG_ENABLE_SASL": 5,
12+
"MONGOC_MD_FLAG_ENABLE_SSL": 6,
13+
"MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL": 7,
14+
"MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL": 8,
15+
"MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT": 9,
16+
"MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES": 10,
17+
"MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE": 11,
18+
"MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS": 12,
19+
"MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS": 13,
20+
"MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL": 14,
21+
"MONGOC_MD_FLAG_ENABLE_SASL_CYRUS": 15,
22+
"MONGOC_MD_FLAG_ENABLE_SASL_SSPI": 16,
23+
"MONGOC_MD_FLAG_HAVE_SOCKLEN": 17,
24+
"MONGOC_MD_FLAG_ENABLE_COMPRESSION": 18,
25+
"MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY": 19,
26+
"MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB": 20,
27+
"MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI": 21,
28+
"MONGOC_MD_FLAG_ENABLE_RES_NSEARCH": 22,
29+
"MONGOC_MD_FLAG_ENABLE_RES_NDESTROY": 23,
30+
"MONGOC_MD_FLAG_ENABLE_RES_NCLOSE": 24,
31+
"MONGOC_MD_FLAG_ENABLE_RES_SEARCH": 25,
32+
"MONGOC_MD_FLAG_ENABLE_DNSAPI": 26,
33+
"MONGOC_MD_FLAG_ENABLE_RDTSCP": 27,
34+
"MONGOC_MD_FLAG_HAVE_SCHED_GETCPU": 28,
35+
"MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS": 29,
36+
"MONGOC_MD_FLAG_TRACE": 30,
37+
# `MONGOC_MD_FLAG_ENABLE_ICU` was accidentally removed in libmongoc 1.25.0-1.25.3.
38+
# 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.
39+
"MONGOC_MD_FLAG_ENABLE_ICU": 31,
40+
"MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION": 32,
41+
"MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH": 33,
42+
"MONGOC_MD_FLAG_ENABLE_SRV": 34,
43+
}
4244

4345
def main():
44-
flag_to_number = {s: 2 ** i for i,s in enumerate(MD_FLAGS)}
46+
flag_to_number = {s: 2 ** i for s,i in MD_FLAGS.items()}
4547

4648
if len(sys.argv) < 2:
47-
print "Usage: python {0} config-bitfield".format(sys.argv[0])
48-
print "Example: python parse_handshake_cfg.py 0x3e65"
49+
print ("Usage: python {0} config-bitfield".format(sys.argv[0]))
50+
print ("Example: python parse_handshake_cfg.py 0x3e65")
4951
return
5052

5153
config_bitfield_string = sys.argv[1]
5254
config_bitfield_num = int(config_bitfield_string, 0)
53-
print "Decimal value: {}".format(config_bitfield_num)
55+
print ("Decimal value: {}".format(config_bitfield_num))
5456

55-
for flag, num in flag_to_number.iteritems():
57+
for flag, num in flag_to_number.items():
5658
v = "true" if config_bitfield_num & num else "false"
57-
print "{:<50}: {}".format(flag, v)
59+
print ("{:<50}: {}".format(flag, v))
5860

5961
if __name__ == "__main__":
6062
main()

src/libmongoc/src/mongoc/mongoc-config.h.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
* o The bitfield in mongoc-handshake-private.h
3232
* o _mongoc_handshake_get_config_hex_string() in mongoc-handshake.c
3333
* o examples/parse_handshake_cfg.py
34-
* o test_handshake_config_string in test-mongoc-handshake.c
34+
* o test_handshake_platform_config in test-mongoc-handshake.c
3535
*/
3636

3737
/* MONGOC_USER_SET_CFLAGS is set from config based on what compiler flags were

src/libmongoc/src/mongoc/mongoc-handshake-private.h

+39-37
Original file line numberDiff line numberDiff line change
@@ -46,41 +46,44 @@ BSON_BEGIN_DECLS
4646

4747
/* When adding a new field to mongoc-config.h.in, update this! */
4848
typedef enum {
49-
/* The bit position (from the RHS) of each config flag. Do not reorder. */
49+
/* The bit position (from the RHS) of each config flag. Do not reorder or
50+
change values. */
5051
MONGOC_MD_FLAG_ENABLE_CRYPTO = 0,
51-
MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG,
52-
MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO,
53-
MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO,
54-
MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE,
55-
MONGOC_MD_FLAG_ENABLE_SASL,
56-
MONGOC_MD_FLAG_ENABLE_SSL,
57-
MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL,
58-
MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL,
59-
MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT,
60-
MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES,
61-
MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE,
62-
MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS,
63-
MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS,
64-
MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL,
65-
MONGOC_MD_FLAG_ENABLE_SASL_CYRUS,
66-
MONGOC_MD_FLAG_ENABLE_SASL_SSPI,
67-
MONGOC_MD_FLAG_HAVE_SOCKLEN,
68-
MONGOC_MD_FLAG_ENABLE_COMPRESSION,
69-
MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY,
70-
MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB,
71-
MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI_UNUSED, /* CDRIVER-2654 removed this . */
72-
MONGOC_MD_FLAG_ENABLE_RES_NSEARCH,
73-
MONGOC_MD_FLAG_ENABLE_RES_NDESTROY,
74-
MONGOC_MD_FLAG_ENABLE_RES_NCLOSE,
75-
MONGOC_MD_FLAG_ENABLE_RES_SEARCH,
76-
MONGOC_MD_FLAG_ENABLE_DNSAPI,
77-
MONGOC_MD_FLAG_ENABLE_RDTSCP,
78-
MONGOC_MD_FLAG_HAVE_SCHED_GETCPU,
79-
MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS,
80-
MONGOC_MD_FLAG_TRACE,
81-
MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION,
82-
MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH,
83-
MONGOC_MD_FLAG_ENABLE_SRV,
52+
MONGOC_MD_FLAG_ENABLE_CRYPTO_CNG = 1,
53+
MONGOC_MD_FLAG_ENABLE_CRYPTO_COMMON_CRYPTO = 2,
54+
MONGOC_MD_FLAG_ENABLE_CRYPTO_LIBCRYPTO = 3,
55+
MONGOC_MD_FLAG_ENABLE_CRYPTO_SYSTEM_PROFILE = 4,
56+
MONGOC_MD_FLAG_ENABLE_SASL = 5,
57+
MONGOC_MD_FLAG_ENABLE_SSL = 6,
58+
MONGOC_MD_FLAG_ENABLE_SSL_OPENSSL = 7,
59+
MONGOC_MD_FLAG_ENABLE_SSL_SECURE_CHANNEL = 8,
60+
MONGOC_MD_FLAG_ENABLE_SSL_SECURE_TRANSPORT = 9,
61+
MONGOC_MD_FLAG_EXPERIMENTAL_FEATURES = 10,
62+
MONGOC_MD_FLAG_HAVE_SASL_CLIENT_DONE = 11,
63+
MONGOC_MD_FLAG_HAVE_WEAK_SYMBOLS = 12,
64+
MONGOC_MD_FLAG_NO_AUTOMATIC_GLOBALS = 13,
65+
MONGOC_MD_FLAG_ENABLE_SSL_LIBRESSL = 14,
66+
MONGOC_MD_FLAG_ENABLE_SASL_CYRUS = 15,
67+
MONGOC_MD_FLAG_ENABLE_SASL_SSPI = 16,
68+
MONGOC_MD_FLAG_HAVE_SOCKLEN = 17,
69+
MONGOC_MD_FLAG_ENABLE_COMPRESSION = 18,
70+
MONGOC_MD_FLAG_ENABLE_COMPRESSION_SNAPPY = 19,
71+
MONGOC_MD_FLAG_ENABLE_COMPRESSION_ZLIB = 20,
72+
MONGOC_MD_FLAG_ENABLE_SASL_GSSAPI_UNUSED =
73+
21, /* CDRIVER-2654 removed this . */
74+
MONGOC_MD_FLAG_ENABLE_RES_NSEARCH = 22,
75+
MONGOC_MD_FLAG_ENABLE_RES_NDESTROY = 23,
76+
MONGOC_MD_FLAG_ENABLE_RES_NCLOSE = 24,
77+
MONGOC_MD_FLAG_ENABLE_RES_SEARCH = 25,
78+
MONGOC_MD_FLAG_ENABLE_DNSAPI = 26,
79+
MONGOC_MD_FLAG_ENABLE_RDTSCP = 27,
80+
MONGOC_MD_FLAG_HAVE_SCHED_GETCPU = 28,
81+
MONGOC_MD_FLAG_ENABLE_SHM_COUNTERS = 29,
82+
MONGOC_MD_FLAG_TRACE = 30,
83+
MONGOC_MD_FLAG_ENABLE_ICU_UNUSED = 31,
84+
MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION = 32,
85+
MONGOC_MD_FLAG_ENABLE_MONGODB_AWS_AUTH = 33,
86+
MONGOC_MD_FLAG_ENABLE_SRV = 34,
8487
/* Add additional config flags here, above LAST_MONGOC_MD_FLAG. */
8588
LAST_MONGOC_MD_FLAG
8689
} mongoc_handshake_config_flag_bit_t;
@@ -109,7 +112,7 @@ typedef struct _mongoc_handshake_t {
109112
char *platform;
110113
char *compiler_info;
111114
char *flags;
112-
115+
113116
mongoc_handshake_env_t env;
114117
optional_int32 env_timeout_sec;
115118
optional_int32 env_memory_mb;
@@ -125,8 +128,7 @@ void
125128
_mongoc_handshake_cleanup (void);
126129

127130
bson_t *
128-
_mongoc_handshake_build_doc_with_application (
129-
const char *application);
131+
_mongoc_handshake_build_doc_with_application (const char *application);
130132

131133
void
132134
_mongoc_handshake_freeze (void);

src/libmongoc/tests/test-mongoc-handshake.c

+4
Original file line numberDiff line numberDiff line change
@@ -1237,6 +1237,10 @@ test_handshake_platform_config (void)
12371237
BSON_ASSERT (_get_bit (config_str, MONGOC_MD_FLAG_TRACE));
12381238
}
12391239

1240+
// Check that `MONGOC_MD_FLAG_ENABLE_ICU` is always unset. libicu dependency
1241+
// was removed in CDRIVER-4680.
1242+
BSON_ASSERT (!_get_bit (config_str, MONGOC_MD_FLAG_ENABLE_ICU_UNUSED));
1243+
12401244
#ifdef MONGOC_ENABLE_CLIENT_SIDE_ENCRYPTION
12411245
BSON_ASSERT (
12421246
_get_bit (config_str, MONGOC_MD_FLAG_ENABLE_CLIENT_SIDE_ENCRYPTION));

0 commit comments

Comments
 (0)