Sha256: dd8752fdcbca71fa7c6ad87b26b018f0c0628fe8732dcff2989d2af12a82c000

Contents?: true

Size: 1.6 KB

Versions: 39

Compression:

Stored size: 1.6 KB

Contents

module Facter
  module Core
    module Execution
      class Posix < Facter::Core::Execution::Base
        DEFAULT_SEARCH_PATHS = ['/sbin', '/usr/sbin'].freeze

        def search_paths
          # Make sure custom_facts is usable even for non-root users. Most commands
          # in /sbin (like ifconfig) can be run as non privileged users as
          # long as they do not modify anything - which we do not do with custom_facts
          ENV['PATH'].split(File::PATH_SEPARATOR) + DEFAULT_SEARCH_PATHS
        end

        def which(bin)
          if absolute_path?(bin)
            return bin if File.executable?(bin) && FileTest.file?(bin)
          else
            search_paths.each do |dir|
              dest = File.join(dir, bin)
              return dest if File.executable?(dest) && FileTest.file?(dest)
            end
          end
          nil
        end

        ABSOLUTE_PATH_REGEX = %r{^/}.freeze

        def absolute_path?(path)
          !!(path =~ ABSOLUTE_PATH_REGEX)
        end

        DOUBLE_QUOTED_COMMAND = /^"(.+?)"(?:\s+(.*))?/.freeze
        SINGLE_QUOTED_COMMAND = /^'(.+?)'(?:\s+(.*))?/.freeze

        def expand_command(command)
          exe = nil
          args = nil

          if (match = (command.match(DOUBLE_QUOTED_COMMAND) || command.match(SINGLE_QUOTED_COMMAND)))
            exe, args = match.captures
          else
            exe, args = command.split(/ /, 2)
          end

          return unless exe && (expanded = which(exe))

          expanded = "'#{expanded}'" if expanded =~ /\s/
          expanded << " #{args}" if args

          expanded
        end
      end
    end
  end
end

Version data entries

39 entries across 39 versions & 1 rubygems

Version Path
facter-4.0.33 lib/facter/custom_facts/core/execution/posix.rb
facter-4.0.32 lib/facter/custom_facts/core/execution/posix.rb
facter-4.0.31 lib/facter/custom_facts/core/execution/posix.rb
facter-4.0.30 lib/facter/custom_facts/core/execution/posix.rb
facter-4.0.29 lib/custom_facts/core/execution/posix.rb
facter-4.0.28 lib/custom_facts/core/execution/posix.rb
facter-4.0.26 lib/custom_facts/core/execution/posix.rb
facter-4.0.25 lib/custom_facts/core/execution/posix.rb
facter-4.0.24 lib/custom_facts/core/execution/posix.rb
facter-4.0.23 lib/custom_facts/core/execution/posix.rb
facter-4.0.22 lib/custom_facts/core/execution/posix.rb
facter-4.0.21 lib/custom_facts/core/execution/posix.rb
facter-4.0.20 lib/custom_facts/core/execution/posix.rb
facter-4.0.19 lib/custom_facts/core/execution/posix.rb
facter-4.0.18 lib/custom_facts/core/execution/posix.rb
facter-4.0.17 lib/custom_facts/core/execution/posix.rb
facter-4.0.16 lib/custom_facts/core/execution/posix.rb
facter-4.0.15 lib/custom_facts/core/execution/posix.rb
facter-4.0.14 lib/custom_facts/core/execution/posix.rb