module Rex::Find

Public Class Methods

find(*paths) { |dup.taint| ... } click to toggle source

Identical to Find.find from Ruby, but follows symlinks to directories. See blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/68671

# File lib/rex/file.rb, line 122
def self.find(*paths)
  paths.collect!{|d| d.dup}
  while file = paths.shift
    catch(:prune) do
      yield file.dup.taint
      next unless File.exist? file
      begin
        if File.stat(file).directory? then
          d = Dir.open(file)
          begin
            for f in d
              next if f == "." or f == ".."
              if File::ALT_SEPARATOR and file =~ /^(?:[\/\\]|[A-Za-z]:[\/\\]?)$/ then
                f = file + f
              elsif file == "/" then
                f = "/" + f
              else
                f = File.join(file, f)
              end
              paths.unshift f.untaint
            end
          ensure
            d.close
          end
        end
      rescue Errno::ENOENT, Errno::EACCES
      end
    end
  end
end
prune() click to toggle source
# File lib/rex/file.rb, line 153
def self.prune
  throw :prune
end