Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Monkey Patching Ohai to overcome issues with the Resolv class #1820

Closed
wants to merge 20 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions lib/ohai/mixin/network_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,22 @@
require "socket" unless defined?(Socket)
require "resolv" unless defined?(Resolv)

# puts "[1] - I am in the network helper"

# if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
# puts "OOh, just about to load the monkey-patch"
# module Win32
# puts "OOH, autoloading the Registry patch"
# # puts "Here is the contents of the patch"
# # puts File.expand_path("../../monkey_patches/win32/registry", __dir__)
# # puts File.expand_path("../../monkey_patches/win32/registry", __FILE__)
# text = File.read(File.expand_path("../../ohai/monkey_patches/win32/registry.rb", __dir__))
# puts text
# autoload :Registry, File.expand_path("../../ohai/monkey_patches/win32/registry.rb", __dir__)
# puts "OOH, just finished autoloading the Registry patch"
# end
# end

module Ohai
module Mixin
module NetworkHelper
Expand All @@ -31,6 +47,8 @@
}.freeze
end

Registry

Check warning on line 50 in lib/ohai/mixin/network_helper.rb

View workflow job for this annotation

GitHub Actions / chefstyle

Lint/Void: Variable Registry used in void context.

def hex_to_dec_netmask(netmask)
# example 'ffff0000' -> '255.255.0.0'
dec = netmask[0..1].to_i(16).to_s(10)
Expand Down
62 changes: 62 additions & 0 deletions lib/ohai/monkey_patches/win32/registry.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#
# Copyright:: Copyright (c) Chef Software Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# require_relative "../../win32/api/registry"
# require_relative "../../win32/unicode"
require "win32/registry" unless defined?(Win32::Registry)

module Win32
refine Registry do

puts "[2] - I am actually inside the monkey patch now, doing stuff"

# ::Win32::Registry#export_string is used when enumerating child
# keys and values and re encodes a UTF-16LE to the local codepage.
# This can result in encoding incompatibilities if the native codepage
# does not support the characters in the registry. There is an open bug
# in ruby at https://bugs.ruby-lang.org/issues/11410. Rather than converting
# the UTF-16LE originally returned by the win32 api, we encode to UTF-8
# which will likely not result in any conversion error.
def export_string(str, enc = Encoding.default_internal || "utf-8")
str.encode(enc)
end

# module API

# extend Chef::ReservedNames::Win32::API::Registry

# module_function

# # ::Win32::Registry#delete_value uses RegDeleteValue which
# # is not an imported function after bug 10820 was solved. So
# # we overwrite it to call the correct imported function.
# # https://bugs.ruby-lang.org/issues/10820
# # Still a bug in trunk as of March 21, 2016 (Ruby 2.3.0)
# def DeleteValue(hkey, name)
# check RegDeleteValueW(hkey, name.to_wstring)
# end

# # ::Win32::Registry#delete_key uses RegDeleteKeyW. We need to use
# # RegDeleteKeyExW to properly support WOW64 systems.
# # Still a bug in trunk as of March 21, 2016 (Ruby 2.3.0)
# def DeleteKey(hkey, name)
# check RegDeleteKeyExW(hkey, name.to_wstring, 0, 0)
# end

# end
end
end
2 changes: 2 additions & 0 deletions lib/ohai/plugins/azure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ def has_reddog_dhcp_domain?
def tcp_ip_dhcp_domain
return unless RUBY_PLATFORM.match?(/mswin|mingw32|windows/)

puts "[3] - I am in the azure.rb file"

require "win32/registry" unless defined?(Win32::Registry)

begin
Expand Down
1 change: 1 addition & 0 deletions lib/ohai/plugins/packages.rb
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ def collect_programs_from_registry_key(repo, key_path)
end

collect_data(:windows) do
puts "[4] - I am in the packages.rb file"
require "win32/registry" unless defined?(Win32::Registry)
packages Mash.new
collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall')
Expand Down
Loading