This file is indexed.

/usr/lib/ruby/vendor_ruby/ohai/plugins/c.rb is in ohai 8.21.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
#
# Author:: Doug MacEachern <dougm@vmware.com>
# Copyright:: Copyright (c) 2010 VMware, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

require "rbconfig"

Ohai.plugin(:C) do
  provides "languages/c"

  depends "languages"

  def collect(cmd, &block)
    so = shell_out(cmd)
    if so.exitstatus == 0
      yield(so)
    else
      Ohai::Log.debug("Plugin C '#{cmd}' failed. Skipping data.")
    end
  rescue Ohai::Exceptions::Exec
    Ohai::Log.debug("Plugin C '#{cmd}' binary could not be found. Skipping data.")
  end

  collect_data do
    c = Mash.new

    #gcc
    collect("gcc -v") do |so|
      # Sample output:
      # Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
      # Apple LLVM version 7.3.0 (clang-703.0.29)
      # Target: x86_64-apple-darwin15.4.0
      # Thread model: posix
      # InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
      description = so.stderr.split($/).last
      output = description.split
      if output.length >= 3
        c[:gcc] = Mash.new
        c[:gcc][:version] = output[2]
        c[:gcc][:description] = description
      end
    end

    #glibc
    ["/lib/libc.so.6", "/lib64/libc.so.6"].each do |glibc|
      collect( Ohai.abs_path( glibc )) do |so|
        description = so.stdout.split($/).first
        if description =~ /(\d+\.\d+\.?\d*)/
          c[:glibc] = Mash.new
          c[:glibc][:version] = $1
          c[:glibc][:description] = description
        end
      end unless c[:glibc] || ::RbConfig::CONFIG["host_os"] =~ /mswin|mingw32|windows/
    end

    #ms cl
    collect("cl /?") do |so|
      description = so.stderr.lines.first.chomp
      if description =~ /Compiler Version ([\d\.]+)/
        c[:cl] = Mash.new
        c[:cl][:version] = $1
        c[:cl][:description] = description
      end
    end

    #ms vs
    collect("devenv.com /?") do |so|
      lines = so.stdout.split($/)
      description = lines[0].length == 0 ? lines[1] : lines[0]
      if description =~ /Visual Studio Version ([\d\.]+)/
        c[:vs] = Mash.new
        c[:vs][:version] = $1.chop
        c[:vs][:description] = description
      end
    end

    #ibm xlc
    begin
      so = shell_out("xlc -qversion")
      if so.exitstatus == 0 || (so.exitstatus >> 8) == 249
        description = so.stdout.split($/).first
        if description =~ /V(\d+\.\d+)/
          c[:xlc] = Mash.new
          c[:xlc][:version] = $1
          c[:xlc][:description] = description.strip
        end
      end
    rescue Ohai::Exceptions::Exec
    end

    #sun pro
    collect("cc -V -flags") do |so|
      output = so.stderr.split
      if so.stderr =~ /^cc: Sun C/ && output.size >= 4
        c[:sunpro] = Mash.new
        c[:sunpro][:version] = output[3]
        c[:sunpro][:description] = so.stderr.chomp
      end
    end

    #hpux cc
    collect("what /opt/ansic/bin/cc") do |so|
      description = so.stdout.split($/).select { |line| line =~ /HP C Compiler/ }.first
      if description
        output = description.split
        c[:hpcc] = Mash.new
        c[:hpcc][:version] = output[1] if output.size >= 1
        c[:hpcc][:description] = description.strip
      end
    end

    languages[:c] = c unless c.empty?
  end
end