Skip to content

Commit 20c6dfb

Browse files
authored
[r1.20] MONGOCRYPT-956 error if "kmip" configured twice (#1204)
1 parent ca84ead commit 20c6dfb

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

src/mongocrypt-opts.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -984,6 +984,10 @@ bool _mongocrypt_parse_kms_providers(mongocrypt_binary_t *kms_providers_definiti
984984
} else if (0 == strcmp(field_name, "kmip") && bson_empty(&field_bson)) {
985985
kms_providers->need_credentials |= MONGOCRYPT_KMS_PROVIDER_KMIP;
986986
} else if (0 == strcmp(field_name, "kmip")) {
987+
if (0 != (kms_providers->configured_providers & MONGOCRYPT_KMS_PROVIDER_KMIP)) {
988+
CLIENT_ERR("kmip KMS provider already set");
989+
return false;
990+
}
987991
if (!_mongocrypt_opts_kms_provider_kmip_parse(&kms_providers->kmip_mut, field_name, &field_bson, status)) {
988992
return false;
989993
}

test/test-mongocrypt.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,16 @@ static void _test_setopt_kms_providers(_mongocrypt_tester_t *tester) {
906906
ASSERT_FAILS(mongocrypt_setopt_kms_providers(crypt, more), crypt, "already set");
907907
mongocrypt_destroy(crypt);
908908
}
909+
910+
// Errors if followed by call to `mongocrypt_setopt_kms_providers` configuring "kmip".
911+
// This is a regression test for: MONGOCRYPT-956
912+
{
913+
mongocrypt_binary_t *kms_providers = TEST_BSON("{'kmip' : {'endpoint' : 'localhost'}}");
914+
mongocrypt_t *crypt = mongocrypt_new();
915+
ASSERT_OK(mongocrypt_setopt_kms_providers(crypt, kms_providers), crypt);
916+
ASSERT_FAILS(mongocrypt_setopt_kms_providers(crypt, kms_providers), crypt, "already set");
917+
mongocrypt_destroy(crypt);
918+
}
909919
}
910920

911921
static void test_tmp_bsonf(_mongocrypt_tester_t *tester) {

0 commit comments

Comments
 (0)