Skip to content

Commit 04027c0

Browse files
authored
CDRIVER-5739 do not warn if TXT authSource is ignored (#1741)
* only trace if `authSource` is ignored from TXT record
1 parent c6ea603 commit 04027c0

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

src/libmongoc/src/mongoc/mongoc-uri.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "mongoc-write-concern-private.h"
3737
#include "mongoc-compression-private.h"
3838
#include "utlist.h"
39+
#include "mongoc-trace-private.h"
3940

4041
#include <bson-dsl.h>
4142

@@ -897,7 +898,15 @@ mongoc_uri_split_option (mongoc_uri_t *uri, bson_t *options, const char *str, bo
897898
* through TXT records." So, do NOT override existing options with TXT
898899
* options. */
899900
if (from_dns) {
900-
MONGOC_WARNING ("Cannot override URI option \"%s\" from TXT record \"%s\"", key, str);
901+
if (0 == strcmp (lkey, MONGOC_URI_AUTHSOURCE)) {
902+
// Treat `authSource` as a special case. A server may support authentication with multiple mechanisms.
903+
// MONGODB-X509 requires authSource=$external. SCRAM-SHA-256 requires authSource=admin.
904+
// Only log a trace message since this may be expected.
905+
TRACE ("Ignoring URI option \"%s\" from TXT record \"%s\". Option is already present in URI", key, str);
906+
} else {
907+
MONGOC_WARNING (
908+
"Ignoring URI option \"%s\" from TXT record \"%s\". Option is already present in URI", key, str);
909+
}
901910
ret = true;
902911
goto CLEANUP;
903912
}

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

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,14 +1847,24 @@ test_mongoc_uri_dns_options (void)
18471847
mongoc_uri_destroy (uri);
18481848
uri = mongoc_uri_new ("mongodb+srv://[email protected]/?authSource=db1&replicaSet=rs1");
18491849

1850-
capture_logs (true);
1851-
/* parse_options returns true, but logs warnings */
1852-
BSON_ASSERT (mongoc_uri_parse_options (uri, "authSource=db2&replicaSet=db2", true, NULL));
1853-
ASSERT_CAPTURED_LOG ("parsing TXT record", MONGOC_LOG_LEVEL_WARNING, "Cannot override URI option \"authSource\"");
1854-
ASSERT_CAPTURED_LOG ("parsing TXT record", MONGOC_LOG_LEVEL_WARNING, "Cannot override URI option \"replicaSet\"");
1855-
capture_logs (false);
1856-
ASSERT_MATCH (mongoc_uri_get_credentials (uri), "{'authsource': 'db1'}");
1857-
ASSERT_MATCH (mongoc_uri_get_options (uri), "{'replicaset': 'rs1'}");
1850+
// test that parsing warns if replicaSet is ignored from TXT records.
1851+
{
1852+
capture_logs (true);
1853+
ASSERT (mongoc_uri_parse_options (uri, "replicaSet=db2", true, NULL));
1854+
ASSERT_CAPTURED_LOG (
1855+
"parsing replicaSet from TXT", MONGOC_LOG_LEVEL_WARNING, "Ignoring URI option \"replicaSet\"");
1856+
capture_logs (false);
1857+
ASSERT_MATCH (mongoc_uri_get_options (uri), "{'replicaset': 'rs1'}");
1858+
}
1859+
1860+
// test that parsing does not warn if authSource is ignored from TXT records.
1861+
{
1862+
capture_logs (true);
1863+
ASSERT (mongoc_uri_parse_options (uri, "authSource=db2", true, NULL));
1864+
ASSERT_NO_CAPTURED_LOGS ("parsing authSource from TXT");
1865+
capture_logs (false);
1866+
ASSERT_MATCH (mongoc_uri_get_credentials (uri), "{'authsource': 'db1'}");
1867+
}
18581868

18591869
mongoc_uri_destroy (uri);
18601870
}

0 commit comments

Comments
 (0)