Skip to content

Commit 078e723

Browse files
committed
Don't use nested registry open for rewriting powershell version
1 parent 02a9c05 commit 078e723

File tree

1 file changed

+53
-41
lines changed

1 file changed

+53
-41
lines changed

ext/win32/lib/win32/resolv.rb

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ def read_s(key)
5959
end
6060
using SZ
6161
rescue LoadError
62+
require "open3"
6263
end
6364

6465
TCPIP_NT = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'
@@ -74,59 +75,70 @@ def get_hosts_dir
7475
def get_info
7576
search = nil
7677
nameserver = get_dns_server_list
77-
Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
78-
begin
79-
slist = reg.read_s('SearchList')
80-
search = slist.split(/,\s*/) unless slist.empty?
81-
rescue Registry::Error
82-
end
78+
slist = Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
79+
reg.read_s('SearchList')
80+
rescue Registry::Error
81+
""
82+
end
83+
search = slist.split(/,\s*/) unless slist.empty?
8384

84-
if add_search = search.nil?
85-
search = []
86-
begin
87-
nvdom = reg.read_s('NV Domain')
88-
unless nvdom.empty?
89-
@search = [ nvdom ]
90-
if reg.read_i('UseDomainNameDevolution') != 0
91-
if /^\w+\./ =~ nvdom
92-
devo = $'
85+
if add_search = search.nil?
86+
search = []
87+
nvdom = Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
88+
reg.read_s('NV Domain')
89+
rescue Registry::Error
90+
""
9391
end
94-
end
92+
93+
unless nvdom.empty?
94+
@search = [ nvdom ]
95+
udmnd = Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg|
96+
reg.read_i('UseDomainNameDevolution')
97+
rescue Registry::Error
98+
0
99+
end
100+
101+
if udmnd != 0
102+
if /^\w+\./ =~ nvdom
103+
devo = $'
95104
end
96-
rescue Registry::Error
97105
end
98106
end
107+
end
99108

100-
reg.open('Interfaces') do |h|
101-
h.each_key do |iface, |
102-
h.open(iface) do |regif|
103-
next unless ns = %w[NameServer DhcpNameServer].find do |key|
104-
begin
105-
ns = regif.read_s(key)
106-
rescue Registry::Error
107-
else
108-
break ns.split(/[,\s]\s*/) unless ns.empty?
109-
end
110-
end
111-
next if (nameserver & ns).empty?
109+
ifs = Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces') do |reg|
110+
reg.keys
111+
rescue Registry::Error
112+
[]
113+
end
114+
115+
ifs.each do |iface|
116+
next unless ns = %w[NameServer DhcpNameServer].find do |key|
117+
ns = Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces' + "\\#{iface}" ) do |regif|
118+
regif.read_s(key)
119+
rescue Registry::Error
120+
""
121+
end
122+
break ns.split(/[,\s]\s*/) unless ns.empty?
123+
end
112124

113-
if add_search
114-
begin
115-
[ 'Domain', 'DhcpDomain' ].each do |key|
116-
dom = regif.read_s(key)
117-
unless dom.empty?
118-
search.concat(dom.split(/,\s*/))
119-
break
120-
end
125+
next if (nameserver & ns).empty?
126+
127+
if add_search
128+
[ 'Domain', 'DhcpDomain' ].each do |key|
129+
dom = Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT + '\Interfaces' + "\\#{iface}" ) do |regif|
130+
regif.read_s(key)
131+
rescue Registry::Error
132+
""
121133
end
122-
rescue Registry::Error
123-
end
124-
end
134+
unless dom.empty?
135+
search.concat(dom.split(/,\s*/))
136+
break
125137
end
126138
end
127139
end
128-
search << devo if add_search and devo
129140
end
141+
search << devo if add_search and devo
130142
[ search.uniq, nameserver.uniq ]
131143
end
132144
end

0 commit comments

Comments
 (0)