This file is indexed.

/usr/lib/ruby/vendor_ruby/chef_zero/data_store/v1_to_v2_adapter.rb is in chef-zero 4.5.0-2.

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
132
133
134
135
136
137
138
139
140
141
142
require 'chef_zero/data_store/interface_v2'

module ChefZero
  module DataStore
    class V1ToV2Adapter < ChefZero::DataStore::InterfaceV2
      def initialize(real_store, single_org, options = {})
        @real_store = real_store
        @single_org = single_org
        @options = options
        clear
      end

      attr_reader :real_store
      attr_reader :single_org

      def clear
        real_store.clear if real_store.respond_to?(:clear)
      end

      def create_dir(path, name, *options)
        raise DataNotFoundError.new(path) if skip_organizations?(path)
        raise "Cannot create #{name} at #{path} with V1ToV2Adapter: only handles a single org named #{single_org}." if skip_organizations?(path, name)
        raise DataAlreadyExistsError.new(path + [ name ]) if path.size < 2
        fix_exceptions do
          real_store.create_dir(path[2..-1], name, *options)
        end
      end

      def create(path, name, data, *options)
        raise DataNotFoundError.new(path) if skip_organizations?(path)
        raise "Cannot create #{name} at #{path} with V1ToV2Adapter: only handles a single org named #{single_org}." if skip_organizations?(path, name)
        raise DataAlreadyExistsError.new(path + [ name ]) if path.size < 2
        fix_exceptions do
          real_store.create(path[2..-1], name, data, *options)
        end
      end

      def get(path, request=nil)
        raise DataNotFoundError.new(path) if skip_organizations?(path)
        fix_exceptions do
          # Make it so build_uri will include /organizations/ORG inside the V1 data store
          if request && request.rest_base_prefix.size == 0
            old_base_uri = request.base_uri
            request.base_uri = File.join(request.base_uri, 'organizations', single_org)
          end
          begin
            real_store.get(path[2..-1], request)
          ensure
            request.base_uri = old_base_uri if request && request.rest_base_prefix.size == 0
          end
        end
      end

      def set(path, data, *options)
        raise DataNotFoundError.new(path) if skip_organizations?(path)
        fix_exceptions do
          real_store.set(path[2..-1], data, *options)
        end
      end

      def delete(path, *options)
        raise DataNotFoundError.new(path) if skip_organizations?(path) && !options.include?(:recursive)
        fix_exceptions do
          real_store.delete(path[2..-1])
        end
      end

      def delete_dir(path, *options)
        raise DataNotFoundError.new(path) if skip_organizations?(path) && !options.include?(:recursive)
        fix_exceptions do
          real_store.delete_dir(path[2..-1], *options)
        end
      end

      def list(path)
        raise DataNotFoundError.new(path) if skip_organizations?(path)
        if path == []
          [ 'organizations' ]
        elsif path == [ 'organizations' ]
          [ single_org ]
        else
          fix_exceptions do
            real_store.list(path[2..-1])
          end
        end
      end

      def exists?(path)
        return false if skip_organizations?(path)
        fix_exceptions do
          real_store.exists?(path[2..-1])
        end
      end

      def exists_dir?(path)
        return false if skip_organizations?(path)
        if path == []
          true
        elsif path == [ 'organizations' ] || path == [ 'users' ]
          true
        else
          return false if skip_organizations?(path)
          fix_exceptions do
            real_store.exists_dir?(path[2..-1])
          end
        end
      end

      private

      def fix_exceptions
        begin
          yield
        rescue DataAlreadyExistsError => e
          err = DataAlreadyExistsError.new([ 'organizations', single_org ] + e.path, e)
          err.set_backtrace(e.backtrace)
          raise err
        rescue DataNotFoundError => e
          err = DataNotFoundError.new([ 'organizations', single_org ] + e.path, e)
          err.set_backtrace(e.backtrace)
          raise e
        end
      end

      def skip_organizations?(path, name = nil)
        if path == []
          false
        elsif path[0] == 'organizations'
          if path.size == 1
            false
          elsif path.size >= 2 && path[1] != single_org
            true
          else
            false
          end
        else
          true
        end
      end
    end
  end
end