class Chef::Provider::WindowsScript
Attributes
script_file_path[RW]
Public Instance Methods
script_extension()
click to toggle source
# File lib/chef/provider/windows_script.rb, line 132 def script_extension raise Chef::Exceptions::Override, "You must override #{__method__} in #{self}" end
Protected Instance Methods
basepath()
click to toggle source
# File lib/chef/provider/windows_script.rb, line 42 def basepath if forced_32bit_override_required?(run_context.node, target_architecture) wow64_directory else run_context.node["kernel"]["os_info"]["system_directory"] end end
command()
click to toggle source
# File lib/chef/provider/windows_script.rb, line 68 def command "\"#{interpreter}\" #{flags} \"#{script_file_path}\"" end
grant_alternate_user_read_access(file_path)
click to toggle source
# File lib/chef/provider/windows_script.rb, line 72 def grant_alternate_user_read_access(file_path) # Do nothing if an alternate user isn't specified -- the file # will already have the correct permissions for the user as part # of the default ACL behavior on Windows. return if new_resource.user.nil? # Duplicate the script file's existing DACL # so we can add an ACE later securable_object = Chef::ReservedNames::Win32::Security::SecurableObject.new(file_path) aces = securable_object.security_descriptor.dacl.reduce([]) { |result, current| result.push(current) } username = new_resource.user if new_resource.domain username = new_resource.domain + "\\" + new_resource.user end # Create an ACE that allows the alternate user read access to the script # file so it can be read and executed. user_sid = Chef::ReservedNames::Win32::Security::SID.from_account(username) read_ace = Chef::ReservedNames::Win32::Security::ACE.access_allowed(user_sid, Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE, 0) aces.push(read_ace) acl = Chef::ReservedNames::Win32::Security::ACL.create(aces) # This actually applies the modified DACL to the file # Use parentheses to bypass RuboCop / ChefStyle warning # about useless setter (securable_object.dacl = acl) end
input()
click to toggle source
# File lib/chef/provider/windows_script.rb, line 118 def input nil end
target_architecture()
click to toggle source
# File lib/chef/provider/windows_script.rb, line 34 def target_architecture @target_architecture ||= if new_resource.architecture.nil? node_windows_architecture(run_context.node) else new_resource.architecture end end
with_temp_script_file() { || ... }
click to toggle source
# File lib/chef/provider/windows_script.rb, line 102 def with_temp_script_file Tempfile.open(["chef-script", script_extension]) do |script_file| script_file.puts(code) script_file.close grant_alternate_user_read_access(script_file.path) # This needs to be set here so that the call to #command in Execute works. self.script_file_path = script_file.path yield self.script_file_path = nil end end
with_wow64_redirection_disabled() { || ... }
click to toggle source
# File lib/chef/provider/windows_script.rb, line 50 def with_wow64_redirection_disabled wow64_redirection_state = nil if wow64_architecture_override_required?(run_context.node, target_architecture) wow64_redirection_state = disable_wow64_file_redirection(run_context.node) end begin yield rescue raise ensure unless wow64_redirection_state.nil? restore_wow64_file_redirection(run_context.node, wow64_redirection_state) end end end