Lowercase options before storing when set via mongoc_uri_set_option_as_*

XMLWordPrintableJSON

    • None
    • None
    • None
    • None
    • None
    • None
    • 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.

              Assignee:
              Andrew Witten (Inactive)
              Reporter:
              Kevin Albertson
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: