@@ -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