Skip to content

Commit e4a3102

Browse files
fix(master): ensure url_parser does not fail on missing txt record (#261)
* fix url parser to avid failing on missing txt record * Fix lookup value parsing * Fix warning * fix comments --------- Co-authored-by: NI\akerezsi <[email protected]>
1 parent c60d7d1 commit e4a3102

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

lib/mongo/url_parser.ex

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ defmodule Mongo.UrlParser do
155155
{:ok, {_, _, _, _, _, srv_record}} <-
156156
:inet_res.getbyname(~c"_mongodb._tcp." ++ url_char, :srv),
157157
{:ok, host} <- get_host_srv(srv_record),
158-
{:ok, {_, _, _, _, _, txt_record}} <- :inet_res.getbyname(url_char, :txt),
159-
txt <- "#{orig_options}&#{txt_record}&ssl=true" do
158+
{:ok, txt_record} <- resolve_txt_record(url_char),
159+
txt <- build_params(orig_options, txt_record) do
160160
frags
161161
|> Map.put("seeds", host)
162162
|> Map.put("options", txt)
@@ -167,6 +167,24 @@ defmodule Mongo.UrlParser do
167167

168168
defp resolve_srv_url(frags), do: frags
169169

170+
defp build_params(orig_options, nil) do
171+
"#{orig_options}&ssl=true"
172+
end
173+
174+
defp build_params(orig_options, txt_record) do
175+
"#{orig_options}&#{txt_record}&ssl=true"
176+
end
177+
178+
defp resolve_txt_record(url_char) do
179+
case :inet_res.lookup(url_char, :in, :txt) do
180+
[[txt_record] | _] ->
181+
{:ok, txt_record}
182+
183+
_other ->
184+
{:ok, nil}
185+
end
186+
end
187+
170188
@spec get_host_srv([{term, term, term, term}]) :: {:ok, String.t()}
171189
defp get_host_srv(srv) when is_list(srv) do
172190
hosts = Enum.map_join(srv, ",", fn {_, _, port, host} -> "#{host}:#{port}" end)

0 commit comments

Comments
 (0)