Skip to content

Commit 9b6ea84

Browse files
committed
don't use legacy test auto encryption opts parser
1 parent 28ae2c7 commit 9b6ea84

File tree

2 files changed

+118
-31
lines changed

2 files changed

+118
-31
lines changed

src/libmongoc/tests/json/client_side_encryption/unified/kmipKMS.json

+6-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@
1313
"autoEncryptOpts": {
1414
"keyVaultNamespace": "keyvault.datakeys",
1515
"kmsProviders": {
16-
"kmip": {}
16+
"kmip": {
17+
"endpoint": {
18+
"$$placeholder": 1
19+
}
20+
}
1721
}
1822
},
1923
"observeEvents": [
@@ -405,4 +409,4 @@
405409
]
406410
}
407411
]
408-
}
412+
}

src/libmongoc/tests/unified/entity-map.c

+112-29
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ typedef void (*event_serialize_func_t) (bson_t *bson, const void *event);
5050
static void
5151
entity_destroy (entity_t *entity);
5252

53+
static bool
54+
_parse_and_set_auto_encryption_opts (mongoc_client_t *client, bson_t *opts, bson_error_t *error);
55+
5356
entity_map_t *
5457
entity_map_new (void)
5558
{
@@ -923,7 +926,7 @@ entity_client_new (entity_map_t *em, bson_t *bson, bson_error_t *error)
923926
}
924927

925928
if (auto_encryption_opts) {
926-
set_auto_encryption_opts (client, auto_encryption_opts);
929+
_parse_and_set_auto_encryption_opts (client, auto_encryption_opts, error);
927930
}
928931

929932
ret = true;
@@ -1063,24 +1066,6 @@ _parse_kms_provider_aws (
10631066
return true;
10641067
}
10651068

1066-
static bool
1067-
_parse_kms_provider_aws_temp (
1068-
bson_t *kms_providers, bson_t *tls_opts, const char *provider, bson_t *kms_doc, bson_error_t *error)
1069-
{
1070-
bson_t child;
1071-
BSON_UNUSED (tls_opts);
1072-
1073-
BSON_ASSERT (BSON_APPEND_DOCUMENT_BEGIN (kms_providers, provider, &child));
1074-
_append_kms_provider_value_or_getenv (&child, "secretAccessKey", NULL, "MONGOC_TEST_AWS_TEMP_SECRET_ACCESS_KEY", error);
1075-
_append_kms_provider_value_or_getenv (&child, "accessKeyId", NULL, "MONGOC_TEST_AWS_TEMP_ACCESS_KEY_ID", error);
1076-
if (strcmp(provider, "awsTemporaryNoSessionToken") != 0) {
1077-
_append_kms_provider_value_or_getenv (&child, "sessionToken", NULL, "MONGOC_TEST_AWS_TEMP_SESSION_TOKEN", error);
1078-
}
1079-
BSON_ASSERT (bson_append_document_end (kms_providers, &child));
1080-
1081-
return true;
1082-
}
1083-
10841069
static bool
10851070
_parse_kms_provider_azure (
10861071
bson_t *kms_providers, bson_t *tls_opts, const char *provider, bson_t *kms_doc, bson_error_t *error)
@@ -1263,7 +1248,7 @@ _parse_kms_provider_local (
12631248
}
12641249

12651250
static bool
1266-
_parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *kms_from_file, bson_error_t *error)
1251+
_get_kms_providers_docs (bson_t *kms_from_file, bson_t *kms_providers, bson_t *tls_opts, bson_error_t *error)
12671252
{
12681253
/* Map provider to corresponding KMS parser. */
12691254
typedef struct _prov_map_t {
@@ -1275,8 +1260,6 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
12751260
const prov_map_t prov_map[] = {{.provider = "aws", .parse = _parse_kms_provider_aws},
12761261
{.provider = "aws:name1", .parse = _parse_kms_provider_aws},
12771262
{.provider = "aws:name2", .parse = _parse_kms_provider_aws},
1278-
{.provider = "awsTemporary", .parse = _parse_kms_provider_aws_temp},
1279-
{.provider = "awsTemporaryNoSessionToken", .parse = _parse_kms_provider_aws_temp},
12801263
{.provider = "azure", .parse = _parse_kms_provider_azure},
12811264
{.provider = "azure:name1", .parse = _parse_kms_provider_azure},
12821265
{.provider = "gcp", .parse = _parse_kms_provider_gcp},
@@ -1288,10 +1271,6 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
12881271
{.provider = "local:name2", .parse = _parse_kms_provider_local}};
12891272

12901273
const size_t prov_map_size = sizeof (prov_map) / sizeof (prov_map[0]);
1291-
1292-
bool ret = false;
1293-
bson_t kms_providers = BSON_INITIALIZER;
1294-
bson_t tls_opts = BSON_INITIALIZER;
12951274
bson_iter_t iter;
12961275

12971276
BSON_FOREACH (kms_from_file, iter)
@@ -1303,12 +1282,12 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
13031282

13041283
if (!bson_init_from_value (&kms_doc, bson_iter_value (&iter))) {
13051284
test_set_error (error, "kmsProviders field '%s' is not a valid document", provider);
1306-
goto done;
1285+
return false;
13071286
}
13081287

13091288
for (i = 0u; i < prov_map_size; ++i) {
13101289
if (strcmp (provider, prov_map[i].provider) == 0) {
1311-
found = prov_map[i].parse (&kms_providers, &tls_opts, provider, &kms_doc, error);
1290+
found = prov_map[i].parse (kms_providers, tls_opts, provider, &kms_doc, error);
13121291
goto parsed;
13131292
}
13141293
}
@@ -1319,13 +1298,117 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
13191298
bson_destroy (&kms_doc);
13201299

13211300
if (!found) {
1301+
return false;
1302+
}
1303+
}
1304+
return true;
1305+
}
1306+
1307+
static bool
1308+
_parse_and_set_auto_encryption_opts (mongoc_client_t *client, bson_t *opts, bson_error_t *error)
1309+
{
1310+
bool ret = false;
1311+
mongoc_auto_encryption_opts_t *auto_encryption_opts = mongoc_auto_encryption_opts_new ();
1312+
bson_t kms_providers = BSON_INITIALIZER;
1313+
bson_t tls_opts = BSON_INITIALIZER;
1314+
BSON_ASSERT (client);
1315+
1316+
bson_parser_t *const parser = bson_parser_new ();
1317+
1318+
bson_t *kms_providers_raw;
1319+
bson_parser_doc (parser, "kmsProviders", &kms_providers_raw);
1320+
1321+
char *keyvault_ns;
1322+
bson_parser_utf8 (parser, "keyVaultNamespace", &keyvault_ns);
1323+
1324+
bson_t *schema_map;
1325+
bson_parser_doc_optional (parser, "schemaMap", &schema_map);
1326+
1327+
bool *bypass_auto_encryption;
1328+
bson_parser_bool_optional (parser, "bypassAutoEncryption", &bypass_auto_encryption);
1329+
1330+
bool *bypass_query_analysis;
1331+
bson_parser_bool_optional (parser, "bypassQueryAnalysis", &bypass_query_analysis);
1332+
1333+
bson_t *encrypted_fields_map;
1334+
bson_parser_doc_optional (parser, "encryptedFieldsMap", &encrypted_fields_map);
1335+
1336+
int64_t *key_expiration_ms;
1337+
bson_parser_int_optional (parser, "keyExpirationMS", &key_expiration_ms);
1338+
1339+
bson_t *extra_options;
1340+
bson_parser_doc_optional (parser, "extraOptions", &extra_options);
1341+
1342+
if (!bson_parser_parse (parser, opts, error)) {
1343+
goto done;
1344+
}
1345+
1346+
{
1347+
if (!_get_kms_providers_docs (kms_providers_raw, &kms_providers, &tls_opts, error)) {
13221348
goto done;
13231349
}
1350+
mongoc_auto_encryption_opts_set_kms_providers (auto_encryption_opts, &kms_providers);
1351+
mongoc_auto_encryption_opts_set_tls_opts (auto_encryption_opts, &tls_opts);
1352+
}
1353+
1354+
{
1355+
// keyVaultNamespace
1356+
char *dot = strstr (keyvault_ns, ".");
1357+
BSON_ASSERT (dot);
1358+
char *db_name = bson_strndup (keyvault_ns, dot - keyvault_ns);
1359+
char *coll_name = bson_strdup (dot + 1);
1360+
mongoc_auto_encryption_opts_set_keyvault_namespace (auto_encryption_opts, db_name, coll_name);
1361+
1362+
bson_free (db_name);
1363+
bson_free (coll_name);
1364+
}
1365+
1366+
if (schema_map) {
1367+
mongoc_auto_encryption_opts_set_schema_map (auto_encryption_opts, schema_map);
1368+
}
1369+
1370+
if (bypass_auto_encryption) {
1371+
mongoc_auto_encryption_opts_set_bypass_auto_encryption (auto_encryption_opts, *bypass_auto_encryption);
1372+
}
1373+
1374+
if (bypass_query_analysis) {
1375+
mongoc_auto_encryption_opts_set_bypass_query_analysis (auto_encryption_opts, *bypass_query_analysis);
1376+
}
1377+
1378+
if (encrypted_fields_map) {
1379+
mongoc_auto_encryption_opts_set_encrypted_fields_map (auto_encryption_opts, encrypted_fields_map);
1380+
}
1381+
1382+
if (key_expiration_ms) {
1383+
mongoc_auto_encryption_opts_set_key_expiration (auto_encryption_opts, *key_expiration_ms);
1384+
}
1385+
1386+
if (extra_options) {
1387+
mongoc_auto_encryption_opts_set_extra (auto_encryption_opts, extra_options);
13241388
}
13251389

1390+
mongoc_client_enable_auto_encryption(client, auto_encryption_opts, error);
1391+
ret = true;
1392+
1393+
done:
1394+
mongoc_auto_encryption_opts_destroy (auto_encryption_opts);
1395+
bson_destroy (&kms_providers);
1396+
bson_destroy (&tls_opts);
1397+
bson_parser_destroy_with_parsed_fields (parser);
1398+
return ret;
1399+
}
1400+
1401+
static bool
1402+
_parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *kms_from_file, bson_error_t *error)
1403+
{
1404+
bool ret = false;
1405+
bson_t kms_providers = BSON_INITIALIZER;
1406+
bson_t tls_opts = BSON_INITIALIZER;
1407+
if (!_get_kms_providers_docs (kms_from_file, &kms_providers, &tls_opts, error)) {
1408+
goto done;
1409+
}
13261410
mongoc_client_encryption_opts_set_kms_providers (ce_opts, &kms_providers);
13271411
mongoc_client_encryption_opts_set_tls_opts (ce_opts, &tls_opts);
1328-
13291412
ret = true;
13301413

13311414
done:

0 commit comments

Comments
 (0)