-
Type: Improvement
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
When options are parsed from the connection string passed to mongoc_uri_new, they are internally stored on uri->options after being converted to lowercase in mongoc_uri_split_option here.
However, options that are set via the mongoc_uri_set_option_as_* are not lowercased before being stored in uri->options.
For consistency, let's lowercase options before storing them in the mongoc_uri_set_options_as_* functions. This should allow us to remove a lot of case sensitivity checks in URI related functions.
In addition, there may be a bug caused by the inconsistent casing. Specifying a mongodb+srv URI can result in options being added to a mongoc_uri_t after polling for TXT records in client construction. See the Initial Seedlist Spec for background. TXT records are polled for in mongoc_topology_new here.
mongoc_uri_options_validate_names, is used to check for canonical/non-canonical mismatches between uri->options and options being added. It appears to assume that both cases of the options are the same. So I think this scenario could be a bug:
uri = mongoc_uri_new("mongodb+srv://host") mongoc_uri_set_option_as_bool (uri, "TLS", true) client = mongoc_client_new_from_uri (uri) /* TXT record comes back with option ssl=false. mongoc_uri_options_validate_names does not find the conflicting options because it expects TLS to be stored in lowercase. */
Perhaps adding a test should be a part of this work. We don't have automated SRV tests, but we could simulate the TXT records by calling the private function mongoc_uri_parse_options.
- is related to
-
PHPC-991 Handle duplicates in URI options array
- Closed
- related to
-
CDRIVER-3723 Validate URI options on client/client pool creation
- Closed