diff --git a/Library/Homebrew/cask/artifact/abstract_uninstall.rb b/Library/Homebrew/cask/artifact/abstract_uninstall.rb index 97b6e1cd99..c23be839d5 100644 --- a/Library/Homebrew/cask/artifact/abstract_uninstall.rb +++ b/Library/Homebrew/cask/artifact/abstract_uninstall.rb @@ -105,42 +105,46 @@ module Cask all_services.each do |service| ohai "Removing launchctl service #{service}" - booleans.each do |with_sudo| - sudo_user = with_sudo ? "root" : nil + booleans.each do |sudo| plist_status = command.run( "/bin/launchctl", args: ["list", service], - sudo: with_sudo, - sudo_user: sudo_user, + sudo: sudo, + sudo_as_root: sudo, print_stderr: false, ).stdout if plist_status.start_with?("{") - command.run!("/bin/launchctl", args: ["remove", service], sudo: sudo_user) + command.run!( + "/bin/launchctl", + args: ["remove", service], + sudo: sudo, + sudo_as_root: sudo, + ) sleep 1 end paths = [ +"/Library/LaunchAgents/#{service}.plist", +"/Library/LaunchDaemons/#{service}.plist", ] - paths.each { |elt| elt.prepend(Dir.home).freeze } unless with_sudo + paths.each { |elt| elt.prepend(Dir.home).freeze } unless sudo paths = paths.map { |elt| Pathname(elt) }.select(&:exist?) paths.each do |path| - command.run!("/bin/rm", args: ["-f", "--", path], sudo: with_sudo, sudo_user: sudo_user) + command.run!("/bin/rm", args: ["-f", "--", path], sudo: sudo, sudo_as_root: sudo) end # undocumented and untested: pass a path to uninstall :launchctl next unless Pathname(service).exist? command.run!( "/bin/launchctl", - args: ["unload", "-w", "--", service], - sudo: with_sudo, - sudo_user: sudo_user, + args: ["unload", "-w", "--", service], + sudo: sudo, + sudo_as_root: sudo, ) command.run!( "/bin/rm", - args: ["-f", "--", service], - sudo: with_sudo, - sudo_user: sudo_user, + args: ["-f", "--", service], + sudo: sudo, + sudo_as_root: sudo, ) sleep 1 end @@ -316,32 +320,32 @@ module Cask ohai "Unloading kernel extension #{kext}" is_loaded = system_command!( "/usr/sbin/kextstat", - args: ["-l", "-b", kext], - sudo: true, - sudo_user: "root", + args: ["-l", "-b", kext], + sudo: true, + sudo_as_root: true, ).stdout if is_loaded.length > 1 system_command!( "/sbin/kextunload", - args: ["-b", kext], - sudo: true, - sudo_user: "root", + args: ["-b", kext], + sudo: true, + sudo_as_root: true, ) sleep 1 end - kexts = system_command!( + found_kexts = system_command!( "/usr/sbin/kextfind", - args: ["-b", kext], - sudo: true, - sudo_user: "root", - ).stdout - kexts.chomp.lines.each do |kext_path| + args: ["-b", kext], + sudo: true, + sudo_as_root: true, + ).stdout.chomp.lines + found_kexts.each do |kext_path| ohai "Removing kernel extension #{kext_path}" system_command!( "/bin/rm", - args: ["-rf", kext_path], - sudo: true, - sudo_user: "root", + args: ["-rf", kext_path], + sudo: true, + sudo_as_root: true, ) end end diff --git a/Library/Homebrew/cask/artifact/keyboard_layout.rb b/Library/Homebrew/cask/artifact/keyboard_layout.rb index c7d549be00..608279d2e2 100644 --- a/Library/Homebrew/cask/artifact/keyboard_layout.rb +++ b/Library/Homebrew/cask/artifact/keyboard_layout.rb @@ -22,7 +22,12 @@ module Cask private def delete_keyboard_layout_cache(command: nil, **_) - command.run!("/bin/rm", args: ["-f", "--", "/System/Library/Caches/com.apple.IntlDataCache.le*"], sudo: true) + command.run!( + "/bin/rm", + args: ["-f", "--", "/System/Library/Caches/com.apple.IntlDataCache.le*"], + sudo: true, + sudo_as_root: true, + ) end end end diff --git a/Library/Homebrew/cask/artifact/pkg.rb b/Library/Homebrew/cask/artifact/pkg.rb index b8a000a5b8..61cd142ec0 100644 --- a/Library/Homebrew/cask/artifact/pkg.rb +++ b/Library/Homebrew/cask/artifact/pkg.rb @@ -62,7 +62,14 @@ module Cask "USER" => User.current, "USERNAME" => User.current, } - command.run!("/usr/sbin/installer", sudo: true, sudo_user: "root", args: args, print_stdout: true, env: env) + command.run!( + "/usr/sbin/installer", + sudo: true, + sudo_as_root: true, + args: args, + print_stdout: true, + env: env, + ) end end diff --git a/Library/Homebrew/cask/pkg.rb b/Library/Homebrew/cask/pkg.rb index 6cbda0c9d3..a71e0eb17b 100644 --- a/Library/Homebrew/cask/pkg.rb +++ b/Library/Homebrew/cask/pkg.rb @@ -30,10 +30,10 @@ module Cask odebug "Deleting pkg files" @command.run!( "/usr/bin/xargs", - args: ["-0", "--", "/bin/rm", "--"], - input: pkgutil_bom_files.join("\0"), - sudo: true, - sudo_user: "root", + args: ["-0", "--", "/bin/rm", "--"], + input: pkgutil_bom_files.join("\0"), + sudo: true, + sudo_as_root: true, ) end @@ -41,10 +41,10 @@ module Cask odebug "Deleting pkg symlinks and special files" @command.run!( "/usr/bin/xargs", - args: ["-0", "--", "/bin/rm", "--"], - input: pkgutil_bom_specials.join("\0"), - sudo: true, - sudo_user: "root", + args: ["-0", "--", "/bin/rm", "--"], + input: pkgutil_bom_specials.join("\0"), + sudo: true, + sudo_as_root: true, ) end @@ -61,7 +61,12 @@ module Cask sig { void } def forget odebug "Unregistering pkg receipt (aka forgetting)" - @command.run!("/usr/sbin/pkgutil", args: ["--forget", package_id], sudo: true, sudo_user: "root") + @command.run!( + "/usr/sbin/pkgutil", + args: ["--forget", package_id], + sudo: true, + sudo_as_root: true, + ) end sig { returns(T::Array[Pathname]) } @@ -114,10 +119,10 @@ module Cask def rmdir(path) @command.run!( "/usr/bin/xargs", - args: ["-0", "--", RMDIR_SH.to_s], - input: Array(path).join("\0"), - sudo: true, - sudo_user: "root", + args: ["-0", "--", RMDIR_SH.to_s], + input: Array(path).join("\0"), + sudo: true, + sudo_as_root: true, ) end diff --git a/Library/Homebrew/sorbet/rbi/parlour.rbi b/Library/Homebrew/sorbet/rbi/parlour.rbi index 803e17a5cb..d6bf8bb460 100644 --- a/Library/Homebrew/sorbet/rbi/parlour.rbi +++ b/Library/Homebrew/sorbet/rbi/parlour.rbi @@ -107,6 +107,9 @@ class SystemCommand sig { returns(T::Boolean) } def sudo?; end + sig { returns(T::Boolean) } + def sudo_as_root?; end + sig { returns(T::Boolean) } def print_stdout?; end diff --git a/Library/Homebrew/system_command.rb b/Library/Homebrew/system_command.rb index a285e6663e..2a2d7bd6b6 100644 --- a/Library/Homebrew/system_command.rb +++ b/Library/Homebrew/system_command.rb @@ -65,7 +65,7 @@ class SystemCommand executable: T.any(String, Pathname), args: T::Array[T.any(String, Integer, Float, URI::Generic)], sudo: T::Boolean, - sudo_user: T.nilable(String), + sudo_as_root: T::Boolean, env: T::Hash[String, String], input: T.any(String, T::Array[String]), must_succeed: T::Boolean, @@ -82,7 +82,7 @@ class SystemCommand executable, args: [], sudo: false, - sudo_user: nil, + sudo_as_root: false, env: {}, input: [], must_succeed: false, @@ -98,10 +98,10 @@ class SystemCommand @executable = executable @args = args - raise ArgumentError, "sudo_user cannot be set if sudo is false" if !sudo && !sudo_user.nil? + raise ArgumentError, "sudo_as_root cannot be set if sudo is false" if !sudo && sudo_as_root @sudo = sudo - @sudo_user = sudo_user + @sudo_as_root = sudo_as_root env.each_key do |name| next if /^[\w&&\D]\w*$/.match?(name) @@ -128,7 +128,7 @@ class SystemCommand attr_reader :executable, :args, :input, :chdir, :env - attr_predicate :sudo?, :print_stdout?, :print_stderr?, :must_succeed? + attr_predicate :sudo?, :sudo_as_root?, :print_stdout?, :print_stderr?, :must_succeed? sig { returns(T::Boolean) } def debug? @@ -159,7 +159,8 @@ class SystemCommand sig { returns(T::Array[String]) } def sudo_prefix - user_flags = @sudo_user.nil? ? [] : ["-u", @sudo_user] + user_flags = [] + user_flags += ["-u", "root"] if sudo_as_root? askpass_flags = ENV.key?("SUDO_ASKPASS") ? ["-A"] : [] ["/usr/bin/sudo", *user_flags, *askpass_flags, "-E", *env_args, "--"] end