9: def parse
10: raise("File server configuration %s does not exist" % self.file) unless FileTest.exists?(self.file)
11: raise("Cannot read file server configuration %s" % self.file) unless FileTest.readable?(self.file)
12:
13: @mounts = {}
14: @count = 0
15:
16: File.open(self.file) { |f|
17: mount = nil
18: f.each { |line|
19:
20: @count += 1
21:
22: case line
23: when /^\s*#/; next
24: when /^\s*$/; next
25: when /\[([-\w]+)\]/
26: mount = newmount($1)
27: when /^\s*(\w+)\s+(.+)$/
28: var = $1
29: value = $2
30: raise(ArgumentError, "Fileserver configuration file does not use '=' as a separator") if value =~ /^=/
31: case var
32: when "path"
33: path(mount, value)
34: when "allow"
35: allow(mount, value)
36: when "deny"
37: deny(mount, value)
38: else
39: raise ArgumentError.new("Invalid argument '%s'" % var,
40: @count, file)
41: end
42: else
43: raise ArgumentError.new("Invalid line '%s'" % line.chomp,
44: @count, file)
45: end
46: }
47: }
48:
49: validate()
50:
51: return @mounts
52: end