def initialize( name = nil, prefix = "/srv" )
@prefix = File.expand_path(prefix)
raise Errno::ENOENT, @prefix unless File.directory?(@prefix)
if name.nil?
@name = random_string(10).downcase+".test"
else
@name = name
end
unless @name =~ NAME_REGEXP
raise ArgumentError, "Bad name '#{@name.inspect}'"
end
@directory = File.join(@prefix, @name)
@symlink = nil
if File.directory?(@directory)
directory_stat = File.stat(@directory)
if File.lstat(@directory).ino != directory_stat.ino
target_inode = directory_stat.ino
new_directory = Dir.glob( File.join(@prefix,"*") ).find do |entry|
File.lstat(entry).ino == target_inode
end
unless new_directory.nil?
@symlink = @directory
@directory = new_directory
directory_stat = File.stat(@directory)
end
end
@uid = directory_stat.uid
@gid = directory_stat.gid
else
if Process.uid < 1000
prefix_stat = File.stat(@prefix)
if prefix_stat.uid < 1000
@uid = Etc.getpwnam("admin").uid
@gid = Etc.getpwnam("admin").gid
else
@uid = prefix_stat.uid
@gid = prefix_stat.gid
end
else
@uid = Process.uid
@gid = Etc.getpwuid(@uid).gid
end
end
@user = Etc.getpwuid(@uid).name
raise ArgumentError, "#{@directory} owned by a system user (UID less than 1000)" if @uid < 1000
@group = Etc.getgrgid(@gid).name
raise ArgumentError, "#{@directory} owned by a system group (GID less than 1000)" if @gid < 1000
end