gitlab-net-dns 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da76ca67ffda2850455d743e3485328b73296a7cfdca4808e8540fc0ba4b2593
4
- data.tar.gz: c854da335de562911f61a177047bdcda77541be3c8647be8bc78a10ca0918f62
3
+ metadata.gz: 74ee6c4e55aca3a4b262ef65ed15aa7eb4faefba46e236581313e600f488d4fb
4
+ data.tar.gz: c0737bd705ee060cb3e0cabd8f16985e24cbc9c32435ab7287435075a70c4532
5
5
  SHA512:
6
- metadata.gz: 2262bc9366375314c0119d96f2163f658b181d0b6bb1e6044aee62707ccf4da1c89ab8da66c508f3b0155d7fa240c583697cf4b4431b3bfe4bf04057b08a7628
7
- data.tar.gz: 1a157339c0ee195365c5aa20692c8496d1401a7eb2a0fb6f48db3ecbc346f42ab7ff8e3bf3c454f851554234a66bcd83dd2d4d1568f22a989ba61812be716562
6
+ metadata.gz: 88cc517f05b54349d8cc62a597415e395888398e9d4557b1f9c8176b7dc1b98ab6b4683a82ca50909c37054c1e9bee076648eb637242db69d2ab94899577ea71
7
+ data.tar.gz: 9e4bfdd6c46a3e1e48449aa384561cd158c4e7580e01593d24f860900ffc708d789fbdfbc5f6b39ba35fdeccc2d5d3971e4f482e158792e16d56509d2d5b200d
@@ -1642,13 +1642,14 @@ module Net
1642
1642
  socket.bind(Socket.pack_sockaddr_in(@config[:source_port], @config[:source_address].to_s))
1643
1643
 
1644
1644
  sockaddr = Socket.pack_sockaddr_in(ns_port, ns.to_s)
1645
+ success = false
1645
1646
 
1646
1647
  @config[:tcp_timeout].timeout do
1647
1648
  socket.connect(sockaddr)
1648
1649
  @logger.info "Contacting nameserver #{ns} port #{ns_port}"
1649
1650
  socket.write(length + packet_data)
1650
1651
  ans = socket.recv(Net::DNS::INT16SZ)
1651
- len = ans.unpack("n")[0]
1652
+ len = ans.unpack("n")[0].to_i
1652
1653
 
1653
1654
  @logger.info "Receiving #{len} bytes..."
1654
1655
 
@@ -1667,8 +1668,16 @@ module Net
1667
1668
  @logger.warn "Malformed packet from nameserver #{ns}, trying next."
1668
1669
  next
1669
1670
  end
1671
+
1672
+ success = true
1670
1673
  end
1671
- return [buffer, ["", ns_port, ns.to_s, ns.to_s]]
1674
+
1675
+ # Return buffer and the socket "from" data:
1676
+ # from[0] - Address family as a string (e.g., "AF_INET" or "AF_INET6")
1677
+ # from[1] - Port number as an integer
1678
+ # from[2] - IP address as a string (e.g., "192.168.1.1" or "::1")
1679
+ # from[3] - IP address as a string (same as from[2])
1680
+ return [buffer, ["", ns_port, ns.to_s, ns.to_s]] if success
1672
1681
  rescue Timeout::Error
1673
1682
  @logger.warn "Nameserver #{ns} not responding within TCP timeout, trying next one"
1674
1683
  next
@@ -1676,7 +1685,8 @@ module Net
1676
1685
  socket.close
1677
1686
  end
1678
1687
  end
1679
- ans
1688
+
1689
+ nil
1680
1690
  end
1681
1691
 
1682
1692
  def query_udp(packet, packet_data)
@@ -3,6 +3,6 @@
3
3
  module Net
4
4
  module DNS
5
5
  # The current library version.
6
- VERSION = "0.13.0"
6
+ VERSION = "0.15.0"
7
7
  end
8
8
  end
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+ require 'net/dns/resolver'
3
+
4
+ class TestDNSResolver < Minitest::Test
5
+ def setup
6
+ @resolver = Net::DNS::Resolver.new(
7
+ nameservers: ['8.8.8.8'],
8
+ port: 53,
9
+ source_address: IPAddr.new('0.0.0.0'),
10
+ tcp_timeout: 5,
11
+ udp_timeout: 5
12
+ )
13
+
14
+ # Sample DNS packet data
15
+ @packet_data = "\x12\x34\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03www\x06google\x03com\x00\x00\x01\x00\x01"
16
+ end
17
+
18
+ # Tests for query_tcp
19
+ def test_query_tcp_successful_response
20
+ mock_socket = Minitest::Mock.new
21
+
22
+ Socket.stub(:new, mock_socket) do
23
+ mock_socket.expect(:bind, nil, [String])
24
+ mock_socket.expect(:connect, nil, [String])
25
+ mock_socket.expect(:write, @packet_data.size + 2, [String])
26
+ mock_socket.expect(:recv, "\x00\x20", [2]) # Length = 32 bytes
27
+ mock_socket.expect(:recvfrom, ["A" * 32, nil], [32])
28
+ mock_socket.expect(:close, nil)
29
+
30
+ Socket.stub(:pack_sockaddr_in, "mock_sockaddr") do
31
+ result = @resolver.send(:query_tcp, @packet, @packet_data)
32
+
33
+ refute_nil result
34
+ assert_equal 2, result.size
35
+ assert_equal "A" * 32, result[0] # Response data
36
+ assert_equal ["", 53, "8.8.8.8", "8.8.8.8"], result[1] # From info
37
+ end
38
+ end
39
+
40
+ mock_socket.verify
41
+ end
42
+
43
+ def test_query_tcp_zero_length_response
44
+ mock_socket = Minitest::Mock.new
45
+
46
+ Socket.stub(:new, mock_socket) do
47
+ mock_socket.expect(:bind, nil, [String])
48
+ mock_socket.expect(:connect, nil, [String])
49
+ mock_socket.expect(:write, @packet_data.size + 2, [String])
50
+ mock_socket.expect(:recv, "\x00\x00", [2]) # Length = 0 bytes
51
+ mock_socket.expect(:close, nil)
52
+
53
+ Socket.stub(:pack_sockaddr_in, "mock_sockaddr") do
54
+ result = @resolver.send(:query_tcp, @packet, @packet_data)
55
+ assert_nil result # Should return nil for zero-length response
56
+ end
57
+ end
58
+
59
+ mock_socket.verify
60
+ end
61
+
62
+ def test_query_tcp_bogus_response
63
+ mock_socket = Minitest::Mock.new
64
+
65
+ Socket.stub(:new, mock_socket) do
66
+ mock_socket.expect(:bind, nil, [String])
67
+ mock_socket.expect(:connect, nil, [String])
68
+ mock_socket.expect(:write, @packet_data.size + 2, [String])
69
+ mock_socket.expect(:recv, "0", [2]) # Length = 0 bytes
70
+ mock_socket.expect(:close, nil)
71
+
72
+ Socket.stub(:pack_sockaddr_in, "mock_sockaddr") do
73
+ result = @resolver.send(:query_tcp, @packet, @packet_data)
74
+ assert_nil result # Should return nil for zero-length response
75
+ end
76
+ end
77
+
78
+ mock_socket.verify
79
+ end
80
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-net-dns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Ceresa
8
8
  - Simone Carletti
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-10 00:00:00.000000000 Z
11
+ date: 2025-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -124,6 +124,7 @@ files:
124
124
  - spec/unit/resolver/udp_timeout_spec.rb
125
125
  - spec/unit/resolver_spec.rb
126
126
  - test/test_helper.rb
127
+ - test/unit/dns_resolver_test.rb
127
128
  - test/unit/header_test.rb
128
129
  - test/unit/names_test.rb
129
130
  - test/unit/packet_test.rb
@@ -168,6 +169,7 @@ test_files:
168
169
  - spec/unit/resolver/udp_timeout_spec.rb
169
170
  - spec/unit/resolver_spec.rb
170
171
  - test/test_helper.rb
172
+ - test/unit/dns_resolver_test.rb
171
173
  - test/unit/header_test.rb
172
174
  - test/unit/names_test.rb
173
175
  - test/unit/packet_test.rb