@@ -50,6 +50,9 @@ typedef void (*event_serialize_func_t) (bson_t *bson, const void *event);
50
50
static void
51
51
entity_destroy (entity_t * entity );
52
52
53
+ static bool
54
+ _parse_and_set_auto_encryption_opts (mongoc_client_t * client , bson_t * opts , bson_error_t * error );
55
+
53
56
entity_map_t *
54
57
entity_map_new (void )
55
58
{
@@ -923,7 +926,7 @@ entity_client_new (entity_map_t *em, bson_t *bson, bson_error_t *error)
923
926
}
924
927
925
928
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 );
927
930
}
928
931
929
932
ret = true;
@@ -1063,24 +1066,6 @@ _parse_kms_provider_aws (
1063
1066
return true;
1064
1067
}
1065
1068
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
-
1084
1069
static bool
1085
1070
_parse_kms_provider_azure (
1086
1071
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 (
1263
1248
}
1264
1249
1265
1250
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 )
1267
1252
{
1268
1253
/* Map provider to corresponding KMS parser. */
1269
1254
typedef struct _prov_map_t {
@@ -1275,8 +1260,6 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
1275
1260
const prov_map_t prov_map [] = {{.provider = "aws" , .parse = _parse_kms_provider_aws },
1276
1261
{.provider = "aws:name1" , .parse = _parse_kms_provider_aws },
1277
1262
{.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 },
1280
1263
{.provider = "azure" , .parse = _parse_kms_provider_azure },
1281
1264
{.provider = "azure:name1" , .parse = _parse_kms_provider_azure },
1282
1265
{.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 *
1288
1271
{.provider = "local:name2" , .parse = _parse_kms_provider_local }};
1289
1272
1290
1273
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 ;
1295
1274
bson_iter_t iter ;
1296
1275
1297
1276
BSON_FOREACH (kms_from_file , iter )
@@ -1303,12 +1282,12 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
1303
1282
1304
1283
if (!bson_init_from_value (& kms_doc , bson_iter_value (& iter ))) {
1305
1284
test_set_error (error , "kmsProviders field '%s' is not a valid document" , provider );
1306
- goto done ;
1285
+ return false ;
1307
1286
}
1308
1287
1309
1288
for (i = 0u ; i < prov_map_size ; ++ i ) {
1310
1289
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 );
1312
1291
goto parsed ;
1313
1292
}
1314
1293
}
@@ -1319,13 +1298,117 @@ _parse_and_set_kms_providers (mongoc_client_encryption_opts_t *ce_opts, bson_t *
1319
1298
bson_destroy (& kms_doc );
1320
1299
1321
1300
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 )) {
1322
1348
goto done ;
1323
1349
}
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 );
1324
1388
}
1325
1389
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
+ }
1326
1410
mongoc_client_encryption_opts_set_kms_providers (ce_opts , & kms_providers );
1327
1411
mongoc_client_encryption_opts_set_tls_opts (ce_opts , & tls_opts );
1328
-
1329
1412
ret = true;
1330
1413
1331
1414
done :
0 commit comments