Security note: can run arbitrary ruby code by evaluating passenger.conf
# File lib/phusion_passenger/standalone/app_finder.rb, line 33 def self.looks_like_app_directory?(dir) return File.exist?("#{dir}/config.ru") || File.exist?("#{dir}/config/environment.rb") || File.exist?("#{dir}/passenger_wsgi.py") || File.exist?("#{dir}/passenger_node.js") end
# File lib/phusion_passenger/standalone/app_finder.rb, line 78 def monitor(termination_pipe) raise "You must call #scan first" if !@apps watcher = PhusionPassenger::Utils::FileSystemWatcher.new(@watchlist, termination_pipe) if wait_on_io(termination_pipe, 3) return end while true changed = watcher.wait_for_change watcher.close if changed old_apps = @apps # The change could be caused by a write to some passenger.conf file. # Wait for a short period so that the write has a chance to finish. if wait_on_io(termination_pipe, 0.25) return end new_apps = scan watcher = PhusionPassenger::Utils::FileSystemWatcher.new(@watchlist, termination_pipe) if old_apps != new_apps yield(new_apps) end # Don't process change events again for a short while, # but do detect changes while waiting. if wait_on_io(termination_pipe, 3) return end else return end end ensure watcher.close if watcher end
# File lib/phusion_passenger/standalone/app_finder.rb, line 45 def scan apps = [] watchlist = [] app_root = find_app_root apps << { :server_names => ["_"], :root => app_root } watchlist << app_root watchlist << "#{app_root}/config" if File.exist?("#{app_root}/config") watchlist << "#{app_root}/passenger.conf" if File.exist?("#{app_root}/passenger.conf") apps.sort! do |a, b| a[:root] <=> b[:root] end apps.map! do |app| config_filename = File.join(app[:root], "passenger.conf") if File.exist?(config_filename) local_options = load_config_file(:local_config, config_filename) merged_options = @options.merge(app) merged_options.merge!(local_options) merged_options else @options.merge(app) end end @apps = apps @watchlist = watchlist return apps end
Generated with the Darkfish Rdoc Generator 2.