This file is indexed.

/usr/lib/ruby/vendor_ruby/cheffish.rb is in ruby-cheffish 4.0.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
module Cheffish
  NAME_REGEX = /^[.\-[:alnum:]_]+$/

  def self.inline_resource(provider, provider_action, *resources, &block)
    BasicChefClient.inline_resource(provider, provider_action, *resources, &block)
  end

  def self.default_chef_server(config = profiled_config)
    {
      :chef_server_url => config[:chef_server_url],
      :options => {
        :client_name => config[:node_name],
        :signing_key_filename => config[:client_key]
      }
    }
  end

  def self.chef_server_api(chef_server = default_chef_server)
    # Pin the server api version to 0 until https://github.com/chef/cheffish/issues/56
    # gets the correct compatibility fix.
    chef_server[:options] ||= {}
    chef_server[:options].merge!(api_version: "0")
    Cheffish::ServerAPI.new(chef_server[:chef_server_url], chef_server[:options])
  end

  def self.profiled_config(config = Chef::Config)
    if config.profile && config.profiles && config.profiles[config.profile]
      MergedConfig.new(config.profiles[config.profile], config)
    else
      config
    end
  end

  def self.load_chef_config(chef_config = Chef::Config)
    if ::Gem::Version.new(::Chef::VERSION) >= ::Gem::Version.new('12.0.0')
      chef_config.config_file = ::Chef::Knife.chef_config_dir
    else
      chef_config.config_file = ::Chef::Knife.locate_config_file
    end
    config_fetcher = Chef::ConfigFetcher.new(chef_config.config_file, chef_config.config_file_jail)
    if chef_config.config_file.nil?
      Chef::Log.warn("No config file found or specified on command line, using command line options.")
    elsif config_fetcher.config_missing?
      Chef::Log.warn("Did not find config file: #{chef_config.config_file}, using command line options.")
    else
      config_content = config_fetcher.read_config
      config_file_path = chef_config.config_file
      begin
        chef_config.from_string(config_content, config_file_path)
      rescue Exception => error
        Chef::Log.fatal("Configuration error #{error.class}: #{error.message}")
        filtered_trace = error.backtrace.grep(/#{Regexp.escape(config_file_path)}/)
        filtered_trace.each {|line| Chef::Log.fatal("  " + line )}
        Chef::Application.fatal!("Aborting due to error in '#{config_file_path}'", 2)
      end
    end
    Cheffish.profiled_config(chef_config)
  end

  def self.honor_local_mode(local_mode_default = true, &block)
    if !Chef::Config.has_key?(:local_mode) && !local_mode_default.nil?
      Chef::Config.local_mode = local_mode_default
    end
    if Chef::Config.local_mode && !Chef::Config.has_key?(:cookbook_path) && !Chef::Config.has_key?(:chef_repo_path)
      Chef::Config.chef_repo_path = Chef::Config.find_chef_repo_path(Dir.pwd)
    end
    begin
      require 'chef/local_mode'
      Chef::LocalMode.with_server_connectivity(&block)

    rescue LoadError
      Chef::Application.setup_server_connectivity
      if block_given?
        begin
          yield
        ensure
          Chef::Application.destroy_server_connectivity
        end
      end
    end
  end

  def self.get_private_key(name, config = profiled_config)
    key, key_path = get_private_key_with_path(name, config)
    key
  end

  def self.get_private_key_with_path(name, config = profiled_config)
    if config[:private_keys] && config[:private_keys][name]
      named_key = config[:private_keys][name]
      if named_key.is_a?(String)
        Chef::Log.info("Got key #{name} from Chef::Config.private_keys.#{name}, which points at #{named_key}.  Reading key from there ...")
        return [ IO.read(named_key), named_key]
      else
        Chef::Log.info("Got key #{name} raw from Chef::Config.private_keys.#{name}.")
        return [ named_key.to_pem, nil ]
      end
    elsif config[:private_key_paths]
      config[:private_key_paths].each do |private_key_path|
        next unless File.exist?(private_key_path)
        Dir.entries(private_key_path).sort.each do |key|
          ext = File.extname(key)
          if key == name || ext == '' || ext == '.pem'
            key_name = key[0..-(ext.length+1)]
            if key_name == name || key == name
              Chef::Log.info("Reading key #{name} from file #{private_key_path}/#{key}")
              return [ IO.read("#{private_key_path}/#{key}"), "#{private_key_path}/#{key}" ]
            end
          end
        end
      end
    end
    nil
  end

  def self.node_attributes(klass)
    klass.include Cheffish::NodeProperties
  end
end

# Include all recipe objects so require 'cheffish' brings in the whole recipe DSL

require 'chef/run_list/run_list_item'
require 'cheffish/basic_chef_client'
require 'cheffish/server_api'
require 'chef/knife'
require 'chef/config_fetcher'
require 'chef/log'
require 'chef/application'
require 'cheffish/recipe_dsl'
require 'cheffish/node_properties'