dansguardian 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Changelog +5 -0
- data/README.rdoc +38 -0
- data/example.rb +38 -0
- data/lib/dansguardian.rb +13 -0
- data/lib/dansguardian/config.rb +69 -0
- data/lib/dansguardian/config/constants.rb +27 -0
- data/lib/dansguardian/config/filtergroup.rb +181 -0
- data/lib/dansguardian/config/main.rb +268 -0
- data/lib/dansguardian/extensions/float.rb +3 -0
- data/lib/dansguardian/inclusion.rb +16 -0
- data/lib/dansguardian/parser.rb +43 -0
- metadata +87 -0
data/README.rdoc
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
===DansGuardian
|
2
|
+
|
3
|
+
A Ruby library to manage DansGuardian configuration. Based on ConfigFiles by
|
4
|
+
the same author.
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'pp'
|
8
|
+
require 'configfiles'
|
9
|
+
require 'dansguardian'
|
10
|
+
|
11
|
+
file = '/etc/dansguardian/dansguardian.conf'
|
12
|
+
|
13
|
+
#dgm = DansGuardian::Config::Main.new
|
14
|
+
#dgp = DansGuardian::Parser.read_file file
|
15
|
+
#dgm.load dgp
|
16
|
+
#pp dgm
|
17
|
+
|
18
|
+
dgconf = DansGuardian::Config.new(:mainfile => file)
|
19
|
+
|
20
|
+
dgconf.main
|
21
|
+
|
22
|
+
dgconf.filtergroup(1, :cached => true)
|
23
|
+
|
24
|
+
wfl = dgconf.filtergroup(1)[:weightedphraselist]
|
25
|
+
|
26
|
+
p wfl
|
27
|
+
|
28
|
+
pp DansGuardian::Inclusion.get(wfl)
|
29
|
+
|
30
|
+
#dg.config.filtergroup(1).inclusiontree('weightedphraselist')
|
31
|
+
|
32
|
+
== License
|
33
|
+
|
34
|
+
Same of Ruby
|
35
|
+
|
36
|
+
Copyright (c) 2010 Guido De Rosa <guido.derosa at vemarsas.it>
|
37
|
+
|
38
|
+
|
data/example.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
$dg_library_path = File.expand_path File.join File.dirname(__FILE__), 'lib'
|
2
|
+
|
3
|
+
unless $LOAD_PATH.include? $dg_library_path
|
4
|
+
$LOAD_PATH.unshift $dg_library_path
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'pp'
|
9
|
+
require 'configfiles'
|
10
|
+
require 'dansguardian'
|
11
|
+
|
12
|
+
file = '/etc/dansguardian/dansguardian.conf'
|
13
|
+
|
14
|
+
#dgm = DansGuardian::Config::Main.new
|
15
|
+
#dgp = DansGuardian::Parser.read_file file
|
16
|
+
#dgm.load dgp
|
17
|
+
#pp dgm
|
18
|
+
|
19
|
+
dgconf = DansGuardian::Config.new(:mainfile => file)
|
20
|
+
|
21
|
+
dgconf.main
|
22
|
+
|
23
|
+
dgconf.filtergroup(1, :cached => true)
|
24
|
+
|
25
|
+
wfl = dgconf.filtergroup(1)[:weightedphraselist]
|
26
|
+
|
27
|
+
p wfl
|
28
|
+
|
29
|
+
pp DansGuardian::Inclusion.get(wfl)
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
#dg.config.filtergroup(1).inclusiontree('weightedphraselist')
|
36
|
+
|
37
|
+
|
38
|
+
|
data/lib/dansguardian.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
autoload :IPAddr, 'ipaddr'
|
2
|
+
autoload :URI, 'uri'
|
3
|
+
autoload :Set, 'set'
|
4
|
+
|
5
|
+
require 'configfiles'
|
6
|
+
|
7
|
+
module DansGuardian
|
8
|
+
VERSION = '0.0.2'
|
9
|
+
|
10
|
+
autoload :Config, 'dansguardian/config'
|
11
|
+
autoload :Parser, 'dansguardian/parser'
|
12
|
+
autoload :Inclusion, 'dansguardian/inclusion'
|
13
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'dansguardian/config/main'
|
2
|
+
require 'dansguardian/config/filtergroup'
|
3
|
+
|
4
|
+
module DansGuardian
|
5
|
+
class Config
|
6
|
+
# +arg+ May be +String+-like (the main config file name) or +Hash+-like :
|
7
|
+
#
|
8
|
+
# DansGuardian::Config.new('path/to/dansguardian.conf')
|
9
|
+
#
|
10
|
+
# DansGuardian::Config.new(:mainfile => '/path/to/dansguardian.conf')
|
11
|
+
#
|
12
|
+
def initialize(arg='/etc/dansguardian/dansguardian.conf')
|
13
|
+
h = {}
|
14
|
+
if arg.respond_to? :[]
|
15
|
+
h = arg
|
16
|
+
else # String-like assumed
|
17
|
+
h = {:mainfile => arg}
|
18
|
+
end
|
19
|
+
@mainfile = h[:mainfile]
|
20
|
+
@mainconfig = nil
|
21
|
+
@filtergroups = []
|
22
|
+
end
|
23
|
+
|
24
|
+
# get data from the main configuration file
|
25
|
+
def main(opt_h={:cached => false})
|
26
|
+
if opt_h[:cached]
|
27
|
+
if @mainconfig
|
28
|
+
return @mainconfig
|
29
|
+
else
|
30
|
+
get_main
|
31
|
+
end
|
32
|
+
else
|
33
|
+
get_main
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# get filtergroup configuration data
|
38
|
+
def filtergroup(n=1, opt_h={:cached => false})
|
39
|
+
if opt_h[:cached]
|
40
|
+
if @filtergroups[n]
|
41
|
+
return @filtergroups[n]
|
42
|
+
else
|
43
|
+
get_filtergroup n
|
44
|
+
end
|
45
|
+
else
|
46
|
+
get_filtergroup n
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def filtergroupfile(n=1)
|
51
|
+
File.join File.dirname(@mainfile), "dansguardianf#{n}.conf"
|
52
|
+
end
|
53
|
+
|
54
|
+
protected
|
55
|
+
|
56
|
+
def get_main
|
57
|
+
dgmain = DansGuardian::Config::Main.new
|
58
|
+
parsedata = DansGuardian::Parser.read_file @mainfile
|
59
|
+
@mainconfig = dgmain.load parsedata
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_filtergroup(n)
|
63
|
+
dgf = DansGuardian::Config::FilterGroup.new
|
64
|
+
parsedata = DansGuardian::Parser.read_file filtergroupfile(n)
|
65
|
+
@filtergroups[n] = dgf.load parsedata
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'configfiles'
|
2
|
+
|
3
|
+
module DansGuardian
|
4
|
+
class Config
|
5
|
+
|
6
|
+
# Useful constants
|
7
|
+
INFINITY = ::Float::INFINITY
|
8
|
+
|
9
|
+
# Recurring converters
|
10
|
+
BOOL = {
|
11
|
+
'on' => true,
|
12
|
+
'off' => false
|
13
|
+
}
|
14
|
+
REPORTING_LEVEL = {
|
15
|
+
'-1' => :log_only,
|
16
|
+
'0' => :access_denied_only,
|
17
|
+
'1' => :why_but_not_what,
|
18
|
+
'2' => :full,
|
19
|
+
'3' => :html_template
|
20
|
+
}
|
21
|
+
|
22
|
+
# Exceptions
|
23
|
+
class ValidationFailed < ::ConfigFiles::Base::ValidationFailed; end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,181 @@
|
|
1
|
+
autoload :URI, 'uri'
|
2
|
+
|
3
|
+
require 'dansguardian/config/constants'
|
4
|
+
|
5
|
+
module DansGuardian
|
6
|
+
class Config
|
7
|
+
class FilterGroup < ::ConfigFiles::Base
|
8
|
+
|
9
|
+
on :unknown_parameter do |s|
|
10
|
+
"FIXME: unknown parameter: value = #{s}"
|
11
|
+
end
|
12
|
+
|
13
|
+
parameter :groupmode,
|
14
|
+
'0' => :banned,
|
15
|
+
'1' => :filtered,
|
16
|
+
'2' => :unfiltered
|
17
|
+
|
18
|
+
parameter :groupname
|
19
|
+
|
20
|
+
[
|
21
|
+
:bannedphraselist,
|
22
|
+
:bannedsitelist,
|
23
|
+
:bannedurllist,
|
24
|
+
:bannedregexpurllist,
|
25
|
+
:bannedextensionlist,
|
26
|
+
:bannedregexpheaderlist,
|
27
|
+
:bannedmimetypelist,
|
28
|
+
:headerregexplist, # ban
|
29
|
+
|
30
|
+
:weightedphraselist,
|
31
|
+
|
32
|
+
:greysitelist,
|
33
|
+
:greyurllist,
|
34
|
+
|
35
|
+
:contentregexplist, # modify
|
36
|
+
:urlregexplist, # modify
|
37
|
+
|
38
|
+
:exceptionextensionlist,
|
39
|
+
:exceptionmimetypelist,
|
40
|
+
:exceptionfilesitelist,
|
41
|
+
:exceptionfileurllist,
|
42
|
+
:exceptionphraselist,
|
43
|
+
:exceptionsitelist,
|
44
|
+
:exceptionurllist,
|
45
|
+
:exceptionregexpurllist,
|
46
|
+
|
47
|
+
:logsitelist,
|
48
|
+
:logurllist,
|
49
|
+
:logregexpurllist,
|
50
|
+
|
51
|
+
:picsfile,
|
52
|
+
|
53
|
+
].each do |name|
|
54
|
+
parameter name
|
55
|
+
end
|
56
|
+
|
57
|
+
parameter :naughtynesslimit, :to_i
|
58
|
+
|
59
|
+
virtual :naughtyness do |confdata|
|
60
|
+
case confdata[:naughtynesslimit]
|
61
|
+
when 0..50
|
62
|
+
:young_children
|
63
|
+
when 51..100
|
64
|
+
:old_children
|
65
|
+
when 101..150 # sure of 150 ?
|
66
|
+
:young_adults
|
67
|
+
when 150..INFINITY
|
68
|
+
:adults
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
parameter :categorydisplaythreshold do |str|
|
73
|
+
case str
|
74
|
+
when '-1'
|
75
|
+
:highest_only
|
76
|
+
when '0'
|
77
|
+
:all
|
78
|
+
else
|
79
|
+
n = str.to_i
|
80
|
+
if n > 0
|
81
|
+
n
|
82
|
+
else
|
83
|
+
# 'eager' validation ;-)
|
84
|
+
raise ValidationFailed, "found an invalid value '#{str}' for parameter :categorydisplaythreshold"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
default :categorydisplaythreshold, :all
|
89
|
+
|
90
|
+
parameter :embeddedurlweight, :to_i
|
91
|
+
default :embeddedurlweight, 0
|
92
|
+
|
93
|
+
parameter :blockdownloads, BOOL
|
94
|
+
default :blockdownloads, false
|
95
|
+
|
96
|
+
parameter :enablepics, BOOL
|
97
|
+
default :blockdownloads, false
|
98
|
+
|
99
|
+
[:bypass, :infectionbypass].each do |name|
|
100
|
+
parameter name do |str|
|
101
|
+
case str
|
102
|
+
when '-1'
|
103
|
+
:require_separate_program
|
104
|
+
when '0'
|
105
|
+
:disable
|
106
|
+
else
|
107
|
+
seconds = str.to_i
|
108
|
+
if seconds > 0
|
109
|
+
seconds
|
110
|
+
else
|
111
|
+
# 'eager' validation...
|
112
|
+
raise ValidationFailed, "found an invalid value '#{str}' for parameter '#{name}'"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
default name, :disable
|
117
|
+
end
|
118
|
+
|
119
|
+
[:bypasskey, :infectionbypasskey].each do |name|
|
120
|
+
parameter name do |str|
|
121
|
+
case str
|
122
|
+
when /^\s*$/
|
123
|
+
:generate_random
|
124
|
+
else
|
125
|
+
str
|
126
|
+
end
|
127
|
+
end
|
128
|
+
default name, :generate_random
|
129
|
+
end
|
130
|
+
|
131
|
+
parameter :infectionbypasserrorsonly, BOOL
|
132
|
+
default :infectionbypasserrorsonly, true
|
133
|
+
|
134
|
+
parameter :disablecontentscan, BOOL
|
135
|
+
default :disablecontentscan, false
|
136
|
+
virtual(:contentscan) {|conf| !conf[:disablecontentscan]}
|
137
|
+
|
138
|
+
parameter :deepurlanalysis, BOOL
|
139
|
+
default :deepurlanalysis, false
|
140
|
+
|
141
|
+
parameter :reportinglevel, REPORTING_LEVEL
|
142
|
+
|
143
|
+
parameter(:accessdeniedaddress) {|s| URI.parse s}
|
144
|
+
|
145
|
+
parameter :htmltemplate
|
146
|
+
|
147
|
+
parameter :usesmtp, BOOL
|
148
|
+
default :usesmtp, false
|
149
|
+
|
150
|
+
[:mailfrom, :avadmin, :contentadmin, :avsubject, :contentsubject].each do |name|
|
151
|
+
parameter name do |str|
|
152
|
+
case str
|
153
|
+
when /^\s*$/
|
154
|
+
nil
|
155
|
+
else
|
156
|
+
str
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
[:notifyav, :notifycontent, :thresholdbyuser].each do |name|
|
162
|
+
parameter name, BOOL
|
163
|
+
end
|
164
|
+
|
165
|
+
parameter :violations, :to_i
|
166
|
+
virtual :violations_before_notification do |cfdata|
|
167
|
+
case cfdata[:violations]
|
168
|
+
when 0
|
169
|
+
:never
|
170
|
+
else
|
171
|
+
cfdata[:violations]
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
parameter :threshold, :to_i
|
176
|
+
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
|
@@ -0,0 +1,268 @@
|
|
1
|
+
autoload :IPAddr, 'ipaddr'
|
2
|
+
autoload :URI, 'uri'
|
3
|
+
autoload :Set, 'set'
|
4
|
+
|
5
|
+
require 'dansguardian/extensions/float'
|
6
|
+
require 'dansguardian/config/constants'
|
7
|
+
|
8
|
+
module DansGuardian
|
9
|
+
class Config
|
10
|
+
class Main < ::ConfigFiles::Base
|
11
|
+
|
12
|
+
# Useful constants
|
13
|
+
INFINITY = ::Float::INFINITY
|
14
|
+
|
15
|
+
# Recurring converters
|
16
|
+
BOOL = {'on' => true, 'off' => false}
|
17
|
+
|
18
|
+
# Exceptions
|
19
|
+
class ValidationFailed < ValidationFailed; end
|
20
|
+
|
21
|
+
on :unknown_parameter do |s|
|
22
|
+
"FIXME: unknown parameter: value = #{s}"
|
23
|
+
end
|
24
|
+
|
25
|
+
parameter :reportinglevel, REPORTING_LEVEL
|
26
|
+
|
27
|
+
parameter :languagedir
|
28
|
+
|
29
|
+
parameter :language
|
30
|
+
|
31
|
+
parameter :loglevel,
|
32
|
+
'0' => :none,
|
33
|
+
'1' => :just_denied,
|
34
|
+
'2' => :all_text_based,
|
35
|
+
'3' => :all_requests
|
36
|
+
|
37
|
+
parameter :logexceptionhits,
|
38
|
+
'0' => :never,
|
39
|
+
'1' => :log,
|
40
|
+
'2' => :log_and_mark
|
41
|
+
default :logexceptionhits, :log_and_mark
|
42
|
+
|
43
|
+
parameter :logfileformat,
|
44
|
+
'1' => :dansguardian,
|
45
|
+
'2' => :csv,
|
46
|
+
'3' => :squid,
|
47
|
+
'4' => :tabs
|
48
|
+
|
49
|
+
parameter :maxlogitemlength, :to_i
|
50
|
+
|
51
|
+
parameter :anonymizelogs, BOOL
|
52
|
+
|
53
|
+
parameter :syslog, BOOL
|
54
|
+
|
55
|
+
parameter :loglocation
|
56
|
+
|
57
|
+
parameter :statlocation
|
58
|
+
|
59
|
+
parameter :filterip do |str|
|
60
|
+
if str == ''
|
61
|
+
:any
|
62
|
+
else
|
63
|
+
IPAddr.new str # in case of invalid str, rely on IPAddr exceptions
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
parameter :filterport, :to_i
|
68
|
+
|
69
|
+
parameter :proxyip do |str|
|
70
|
+
IPAddr.new str
|
71
|
+
end
|
72
|
+
default :proxyip, IPAddr.new('127.0.0.1')
|
73
|
+
|
74
|
+
parameter :proxyport, :to_i
|
75
|
+
|
76
|
+
parameter :accessdeniedaddress do |str|
|
77
|
+
URI.parse str
|
78
|
+
end
|
79
|
+
|
80
|
+
parameter :nonstandarddelimiter, BOOL
|
81
|
+
default :nonstandarddelimiter, true
|
82
|
+
|
83
|
+
parameter :usecustombannedimage, BOOL
|
84
|
+
default :usecustombannedimage, true
|
85
|
+
|
86
|
+
parameter :custombannedimagefile
|
87
|
+
|
88
|
+
parameter :filtergroups, :to_i
|
89
|
+
|
90
|
+
parameter :filtergroupslist
|
91
|
+
|
92
|
+
parameter :bannediplist
|
93
|
+
|
94
|
+
parameter :exceptioniplist
|
95
|
+
|
96
|
+
parameter :showweightedfound, BOOL
|
97
|
+
|
98
|
+
parameter :weightedphrasemode,
|
99
|
+
'0' => false,
|
100
|
+
'1' => :normal,
|
101
|
+
'2' => :singular
|
102
|
+
|
103
|
+
parameter :urlcachenumber, :to_i
|
104
|
+
|
105
|
+
parameter :urlcacheage, :to_i
|
106
|
+
# seconds, TODO: class Time::Interval ?
|
107
|
+
|
108
|
+
parameter :scancleancache, BOOL
|
109
|
+
default :scancleancache, true
|
110
|
+
|
111
|
+
parameter :phrasefiltermode,
|
112
|
+
'0' => Set.new([:meta, :title, :raw]),
|
113
|
+
'1' => Set.new([:meta, :title, :smart ]),
|
114
|
+
'2' => Set.new([:meta, :title, :smart, :raw]),
|
115
|
+
'3' => Set.new([:meta, :title ])
|
116
|
+
default :phrasefiltermode,
|
117
|
+
Set.new([:meta, :title, :smart, :raw])
|
118
|
+
|
119
|
+
parameter :preservecase,
|
120
|
+
'0' => Set.new([:lower ]),
|
121
|
+
'1' => Set.new([ :original ]),
|
122
|
+
'2' => Set.new([:lower, :original ])
|
123
|
+
default :preservecase,
|
124
|
+
Set.new([:lower ])
|
125
|
+
|
126
|
+
parameter :hexdecodecontent, BOOL
|
127
|
+
default :hexdecodecontent, false
|
128
|
+
|
129
|
+
parameter :forcequicksearch, BOOL
|
130
|
+
default :forcequicksearch, false
|
131
|
+
|
132
|
+
parameter :reverseaddresslookups, BOOL
|
133
|
+
|
134
|
+
parameter :reverseclientiplookups, BOOL
|
135
|
+
|
136
|
+
parameter :logclienthostnames, BOOL
|
137
|
+
|
138
|
+
parameter :createlistcachefiles, BOOL
|
139
|
+
|
140
|
+
parameter :maxuploadsize do |str|
|
141
|
+
case str
|
142
|
+
when '-1'
|
143
|
+
INFINITY
|
144
|
+
else
|
145
|
+
str.to_i * 1024
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
parameter :maxcontentfiltersize do |str|
|
150
|
+
case str
|
151
|
+
when '0'
|
152
|
+
lambda {|confdata| confdata[:maxcontentramcachescansize]}
|
153
|
+
else
|
154
|
+
str.to_i * 1024
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
parameter :maxcontentramcachescansize do |str|
|
159
|
+
case str
|
160
|
+
when '0'
|
161
|
+
lambda {|confdata| confdata[:maxcontentfilecachescansize]}
|
162
|
+
else
|
163
|
+
str.to_i * 1024
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
parameter :maxcontentfilecachescansize do |str|
|
168
|
+
str.to_i * 1024
|
169
|
+
end
|
170
|
+
|
171
|
+
parameter :filecachedir
|
172
|
+
|
173
|
+
parameter :deletedownloadedtempfiles, BOOL
|
174
|
+
default :deletedownloadedtempfiles, true
|
175
|
+
|
176
|
+
parameter :initialtrickledelay, :to_i
|
177
|
+
|
178
|
+
parameter :trickledelay, :to_i
|
179
|
+
|
180
|
+
# You don't really need to lazy-evaluate (short) Arrays
|
181
|
+
#
|
182
|
+
parameter :downloadmanager # Array
|
183
|
+
parameter :contentscanner # Array
|
184
|
+
parameter :authplugin # Array
|
185
|
+
|
186
|
+
parameter :contentscannertimeout, :to_i
|
187
|
+
default :contentscannertimeout, 60
|
188
|
+
|
189
|
+
parameter :contentscanexceptions, BOOL
|
190
|
+
default :contentscanexceptions, false
|
191
|
+
|
192
|
+
parameter :recheckreplacedurls, BOOL
|
193
|
+
default :recheckreplacedurls, false
|
194
|
+
|
195
|
+
[
|
196
|
+
:forwardedfor,
|
197
|
+
:usexforwardedfor,
|
198
|
+
:logconnectionhandlingerrors
|
199
|
+
].each do |par|
|
200
|
+
parameter par, BOOL
|
201
|
+
end
|
202
|
+
|
203
|
+
parameter :logchildprocesshandling, BOOL
|
204
|
+
|
205
|
+
[
|
206
|
+
:maxchildren,
|
207
|
+
:minchildren,
|
208
|
+
:minsparechildren,
|
209
|
+
:preforkchildren,
|
210
|
+
:maxsparechildren,
|
211
|
+
:maxagechildren
|
212
|
+
].each do |par|
|
213
|
+
parameter par, :to_i
|
214
|
+
end
|
215
|
+
|
216
|
+
parameter :maxips do |str|
|
217
|
+
if str == '0'
|
218
|
+
INFINITY
|
219
|
+
else
|
220
|
+
str.to_i
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
[:ipcfilename, :urlipcfilename, :ipipcfilename, :pidfilename].each do |p|
|
225
|
+
parameter p
|
226
|
+
end
|
227
|
+
default :pidfilename, '/var/run/dansguardian.pid'
|
228
|
+
|
229
|
+
[:nodaemon, :nologger, :logadblocks, :loguseragent].each do |p|
|
230
|
+
parameter p, BOOL
|
231
|
+
default p, false
|
232
|
+
end
|
233
|
+
|
234
|
+
[:daemon, :logger].each do |name|
|
235
|
+
virtual name do |confdata|
|
236
|
+
not(confdata["no#{name}".to_sym])
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
[:daemonuser, :daemongroup].each do |name|
|
241
|
+
parameter name
|
242
|
+
default name, :set_at_compile_time
|
243
|
+
end
|
244
|
+
|
245
|
+
parameter :softrestart, BOOL
|
246
|
+
default :softrestart, false
|
247
|
+
|
248
|
+
parameter :mailer
|
249
|
+
|
250
|
+
validate do |conf|
|
251
|
+
raise ValidationFailed, "maxcontentfiltersize must be not higher than maxcontentramcachescansize" unless
|
252
|
+
conf[:maxcontentfiltersize] <=
|
253
|
+
conf[:maxcontentramcachescansize]
|
254
|
+
|
255
|
+
raise ValidationFailed, "maxcontentramcachescansize must be not higher than maxcontentfilecachescansize" unless
|
256
|
+
conf[:maxcontentramcachescansize] <=
|
257
|
+
conf[:maxcontentfilecachescansize]
|
258
|
+
|
259
|
+
raise ValidationFailed, "maxcontentfilecachescansize must be greater or equal to maxcontentramcachescansize" unless
|
260
|
+
conf[:maxcontentfilecachescansize] >=
|
261
|
+
conf[:maxcontentramcachescansize]
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DansGuardian
|
2
|
+
module Inclusion
|
3
|
+
# no distinction between text parser and ConfigFile conversion here ...
|
4
|
+
def self.get(filename)
|
5
|
+
all = {}
|
6
|
+
File.foreach filename do |line|
|
7
|
+
if line =~ /^\s*\.Include\s*<(.*)>/
|
8
|
+
all[$1] = {:active => true}
|
9
|
+
elsif line =~ /^\s*#+\s*\.Include\s*<(.*)>/
|
10
|
+
all[$1] = {:active => false}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
return all
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module DansGuardian
|
2
|
+
module Parser
|
3
|
+
|
4
|
+
def self.read(io)
|
5
|
+
h = {}
|
6
|
+
may_appear_multiple_times = [
|
7
|
+
:downloadmanager, :contentscanner, :authplugin]
|
8
|
+
io.each_line do |line|
|
9
|
+
line.sub! /#.*$/, ''
|
10
|
+
line.strip!
|
11
|
+
match = false
|
12
|
+
case line
|
13
|
+
when /^([^=\s]+)\s*=\s*([^=\s']*)$/
|
14
|
+
key = $1.to_sym
|
15
|
+
value = $2
|
16
|
+
match = true
|
17
|
+
when /^([^=\s]+)\s*=\s*'(.*)'$/
|
18
|
+
key = $1.to_sym
|
19
|
+
value = $2.gsub(/\\'/, "'")
|
20
|
+
match = true
|
21
|
+
end
|
22
|
+
if match
|
23
|
+
if may_appear_multiple_times.include? key
|
24
|
+
h[key] ||= []
|
25
|
+
h[key] << value
|
26
|
+
else
|
27
|
+
h[key] = value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return h
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.read_file(filepath)
|
35
|
+
File.open filepath, 'r' do |f|
|
36
|
+
read f
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dansguardian
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Guido De Rosa
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-02-03 00:00:00 +00:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: configfiles
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: Manage DansGuardian configuration from Ruby -- http:/dansguardian.org/
|
34
|
+
email: guido.derosa@vemarsas.it
|
35
|
+
executables: []
|
36
|
+
|
37
|
+
extensions: []
|
38
|
+
|
39
|
+
extra_rdoc_files:
|
40
|
+
- README.rdoc
|
41
|
+
files:
|
42
|
+
- Changelog
|
43
|
+
- README.rdoc
|
44
|
+
- example.rb
|
45
|
+
- lib/dansguardian.rb
|
46
|
+
- lib/dansguardian/config/constants.rb
|
47
|
+
- lib/dansguardian/config/filtergroup.rb
|
48
|
+
- lib/dansguardian/config/main.rb
|
49
|
+
- lib/dansguardian/extensions/float.rb
|
50
|
+
- lib/dansguardian/config.rb
|
51
|
+
- lib/dansguardian/inclusion.rb
|
52
|
+
- lib/dansguardian/parser.rb
|
53
|
+
has_rdoc: true
|
54
|
+
homepage: http://github.com/gderosa/dansguardian.rb
|
55
|
+
licenses: []
|
56
|
+
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options:
|
59
|
+
- --main
|
60
|
+
- README.rdoc
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
requirements: []
|
80
|
+
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.3.7
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: Manage DansGuardian configuration from Ruby -- http:/dansguardian.org/
|
86
|
+
test_files: []
|
87
|
+
|