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
5 changes: 4 additions & 1 deletion src/libmongoc/src/mongoc/mongoc-uri.c
Original file line number Diff line number Diff line change
Expand Up @@ -1504,7 +1504,6 @@ mongoc_uri_finalize_auth(mongoc_uri_t *uri, bson_error_t *error)

bson_iter_t iter;

const char *const mechanism = mongoc_uri_get_auth_mechanism(uri);
const char *const username = mongoc_uri_get_username(uri);
const char *const password = mongoc_uri_get_password(uri);
const char *const source =
Expand All @@ -1517,6 +1516,9 @@ mongoc_uri_finalize_auth(mongoc_uri_t *uri, bson_error_t *error)
return false;
}

// Copy `mechanism` to avoid invalidation by updates to `uri->credentials`.
char *const mechanism = bson_strdup(mongoc_uri_get_auth_mechanism(uri));

// Authentication spec: The presence of a credential delimiter (i.e. '@') in the URI connection string is
// evidence that the user has unambiguously specified user information and MUST be interpreted as a user
// configuring authentication credentials (even if the username and/or password are empty strings).
Expand Down Expand Up @@ -1781,6 +1783,7 @@ mongoc_uri_finalize_auth(mongoc_uri_t *uri, bson_error_t *error)

fail:
bson_destroy(&mechanism_properties_owner);
bson_free(mechanism);

return ret;
}
Expand Down
16 changes: 16 additions & 0 deletions src/libmongoc/tests/test-mongoc-uri.c
Original file line number Diff line number Diff line change
Expand Up @@ -3289,6 +3289,21 @@ test_uri_uri_in_options(void)
#undef TEST_QUERY
}

// test_uri_bad_oidc is a regression test for CDRIVER-6137
static void
test_uri_bad_oidc(void)
{
bson_error_t error;
mongoc_uri_t *uri = mongoc_uri_new_with_error(
"mongodb://localhost/?authMechanism=MONGODB-OIDC&authMechanismProperties=ENVIRONMENT:test,TOKEN_RESOURCE:foo",
&error);
ASSERT(!uri);
ASSERT_ERROR_CONTAINS(error,
MONGOC_ERROR_COMMAND,
MONGOC_ERROR_COMMAND_INVALID_ARG,
"'MONGODB-OIDC' authentication with test environment does not accept a TOKEN_RESOURCE");
}

void
test_uri_install(TestSuite *suite)
{
Expand Down Expand Up @@ -3318,4 +3333,5 @@ test_uri_install(TestSuite *suite)
TestSuite_Add(suite, "/Uri/parses_long_ipv6", test_parses_long_ipv6);
TestSuite_Add(suite, "/Uri/depr", test_uri_depr);
TestSuite_Add(suite, "/Uri/uri_in_options", test_uri_uri_in_options);
TestSuite_Add(suite, "/Uri/bad_oidc", test_uri_bad_oidc);
}