]> git.ipfire.org Git - ipfire-2.x.git/blob - config/urlfilter/autoupdate.pl
9e61b44c4317a1c072eca2c404178cf690c363f9
[ipfire-2.x.git] / config / urlfilter / autoupdate.pl
1 #!/usr/bin/perl
2
3 #
4 # $Id: autoupdate.pl,v 1.0 2005/06/15 00:00:00 marco Exp $
5 #
6 use strict;
7
8 my $make_clean = 1;
9
10 my $swroot = "/var/ipfire";
11 my $target = "$swroot/urlfilter/download";
12 my $dbdir = "$swroot/urlfilter/blacklists";
13
14 my $sourceurlfile = "$swroot/urlfilter/autoupdate/autoupdate.urls";
15 my $updconffile = "$swroot/urlfilter/autoupdate/autoupdate.conf";
16 my $updflagfile = "$swroot/urlfilter/blacklists/.autoupdate.last";
17
18 my %cgiparams;
19 my %updatesettings;
20 my $blacklist_url;
21 my $blacklist_src;
22 my $source_url;
23 my $source_name;
24 my @source_urllist;
25
26 my $blacklist;
27 my $category;
28
29 my $exitcode = 1;
30
31 if (-e "$sourceurlfile")
32 {
33 open(FILE, $sourceurlfile);
34 @source_urllist = <FILE>;
35 close(FILE);
36 }
37
38 if (-e "$updconffile") { &readhash("$updconffile", \%updatesettings); }
39
40 if (@ARGV[0] =~ m@^(f|h)tt?ps?://@) { $updatesettings{'UPDATE_SOURCE'} = @ARGV[0]; }
41
42 if ($updatesettings{'UPDATE_SOURCE'} eq 'custom')
43 {
44 $blacklist_url=$updatesettings{'CUSTOM_UPDATE_URL'};
45 } else {
46 $blacklist_url=$updatesettings{'UPDATE_SOURCE'};
47 foreach (@source_urllist)
48 {
49 chomp;
50 $source_name = substr($_,0,rindex($_,","));
51 $source_url = substr($_,index($_,",")+1);
52 if ($blacklist_url eq $source_url) { $blacklist_src=$source_name; }
53 }
54 }
55
56 if ($blacklist_src eq '') { $blacklist_src="custom source URL"; }
57
58 $blacklist_url =~ s/\&/\\\&/;
59
60 $blacklist=substr($blacklist_url,rindex($blacklist_url,"/")+1);
61 if (($blacklist =~ /\?/) || (!($blacklist =~ /\.t(ar\.)?gz$/))) { $blacklist = 'blacklist.tar.gz'; }
62 $blacklist=$target.'/'.$blacklist;
63
64 unless ($blacklist_url eq '')
65 {
66
67 if (-d $target) { system("rm -rf $target"); }
68 system("mkdir $target");
69
70 system("/usr/bin/wget -o $target/wget.log -O $blacklist $blacklist_url");
71
72 if (-e $blacklist)
73 {
74 system("/bin/tar --no-same-owner -xzf $blacklist -C $target");
75 if (-d "$target/blacklists")
76 {
77 open(FILE, ">$target/update.conf");
78 flock FILE, 2;
79 print FILE "logdir $target\n";
80 print FILE "dbhome $target/blacklists\n\n";
81
82 foreach (<$target/blacklists/*>)
83 {
84 if ((-d $_) && ((-s "$_/domains") || (-s "$_/urls")))
85 {
86 $category=substr($_,rindex($_,"/")+1);
87 print FILE "dest $category {\n";
88 if (-s "$_/domains") { print FILE " domainlist $category/domains\n"; }
89 if (-s "$_/urls") { print FILE " urllist $category/urls\n"; }
90 print FILE "}\n\n";
91 }
92 }
93 print FILE "acl {\n";
94 print FILE " default {\n";
95 print FILE " pass none\n";
96 print FILE " }\n";
97 print FILE "}\n";
98 close FILE;
99
100 system("/usr/sbin/squidGuard -d -c $target/update.conf -C all");
101
102 system("cp -r $target/blacklists/* $dbdir");
103
104 system("chown -R nobody.nobody $dbdir");
105
106 foreach $category (<$dbdir/*>)
107 {
108 if (-d $category)
109 {
110 system("chmod 755 $category &> /dev/null");
111 foreach $blacklist (<$category/*>)
112 {
113 if (-f $blacklist){ system("chmod 644 $blacklist &> /dev/null"); }
114 if (-d $blacklist){ system("chmod 755 $blacklist &> /dev/null"); }
115 }
116 system("chmod 666 $category/*.db &> /dev/null");
117 }
118 }
119
120 system("touch $updflagfile");
121 system("chown nobody.nobody $updflagfile");
122
123 system("/usr/local/bin/restartsquid");
124
125 system("logger -t installpackage[urlfilter] \"URL filter blacklist - Update from $blacklist_src completed\"");
126
127 $exitcode = 0;
128
129 } else {
130 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: Not a valid URL filter blacklist\"");
131 }
132 } else {
133 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: Unable to retrieve blacklist from $blacklist_src\"");
134 }
135
136 } else {
137 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: No update source defined\"");
138 }
139
140 if ((-d $target) && ($make_clean)) { system("rm -rf $target"); }
141
142 exit $exitcode;
143
144 # -------------------------------------------------------------------
145
146 sub readhash
147 {
148 my $filename = $_[0];
149 my $hash = $_[1];
150 my ($var, $val);
151
152 if (-e $filename)
153 {
154 open(FILE, $filename) or die "Unable to read file $filename";
155 while (<FILE>)
156 {
157 chop;
158 ($var, $val) = split /=/, $_, 2;
159 if ($var)
160 {
161 $val =~ s/^\'//g;
162 $val =~ s/\'$//g;
163
164 # Untaint variables read from hash
165 $var =~ /([A-Za-z0-9_-]*)/; $var = $1;
166 $val =~ /([\w\W]*)/; $val = $1;
167 $hash->{$var} = $val;
168 }
169 }
170 close FILE;
171 }
172 }
173
174 # -------------------------------------------------------------------
175 #!/usr/bin/perl
176
177 #
178 # $Id: autoupdate.pl,v 1.0 2005/06/15 00:00:00 marco Exp $
179 #
180 use strict;
181
182 my $make_clean = 1;
183
184 my $swroot = "/var/ipfire";
185 my $target = "$swroot/urlfilter/download";
186 my $dbdir = "$swroot/urlfilter/blacklists";
187
188 my $sourceurlfile = "$swroot/urlfilter/autoupdate/autoupdate.urls";
189 my $updconffile = "$swroot/urlfilter/autoupdate/autoupdate.conf";
190 my $updflagfile = "$swroot/urlfilter/blacklists/.autoupdate.last";
191
192 my %cgiparams;
193 my %updatesettings;
194 my $blacklist_url;
195 my $blacklist_src;
196 my $source_url;
197 my $source_name;
198 my @source_urllist;
199
200 my $blacklist;
201 my $category;
202
203 my $exitcode = 1;
204
205 if (-e "$sourceurlfile")
206 {
207 open(FILE, $sourceurlfile);
208 @source_urllist = <FILE>;
209 close(FILE);
210 }
211
212 if (-e "$updconffile") { &readhash("$updconffile", \%updatesettings); }
213
214 if (@ARGV[0] =~ m@^(f|h)tt?ps?://@) { $updatesettings{'UPDATE_SOURCE'} = @ARGV[0]; }
215
216 if ($updatesettings{'UPDATE_SOURCE'} eq 'custom')
217 {
218 $blacklist_url=$updatesettings{'CUSTOM_UPDATE_URL'};
219 } else {
220 $blacklist_url=$updatesettings{'UPDATE_SOURCE'};
221 foreach (@source_urllist)
222 {
223 chomp;
224 $source_name = substr($_,0,rindex($_,","));
225 $source_url = substr($_,index($_,",")+1);
226 if ($blacklist_url eq $source_url) { $blacklist_src=$source_name; }
227 }
228 }
229
230 if ($blacklist_src eq '') { $blacklist_src="custom source URL"; }
231
232 $blacklist_url =~ s/\&/\\\&/;
233
234 $blacklist=substr($blacklist_url,rindex($blacklist_url,"/")+1);
235 if (($blacklist =~ /\?/) || (!($blacklist =~ /\.t(ar\.)?gz$/))) { $blacklist = 'blacklist.tar.gz'; }
236 $blacklist=$target.'/'.$blacklist;
237
238 unless ($blacklist_url eq '')
239 {
240
241 if (-d $target) { system("rm -rf $target"); }
242 system("mkdir $target");
243
244 system("/usr/bin/wget -o $target/wget.log -O $blacklist $blacklist_url");
245
246 if (-e $blacklist)
247 {
248 system("/bin/tar --no-same-owner -xzf $blacklist -C $target");
249 if (-d "$target/blacklists")
250 {
251 open(FILE, ">$target/update.conf");
252 flock FILE, 2;
253 print FILE "logdir $target\n";
254 print FILE "dbhome $target/blacklists\n\n";
255
256 foreach (<$target/blacklists/*>)
257 {
258 if ((-d $_) && ((-s "$_/domains") || (-s "$_/urls")))
259 {
260 $category=substr($_,rindex($_,"/")+1);
261 print FILE "dest $category {\n";
262 if (-s "$_/domains") { print FILE " domainlist $category/domains\n"; }
263 if (-s "$_/urls") { print FILE " urllist $category/urls\n"; }
264 print FILE "}\n\n";
265 }
266 }
267 print FILE "acl {\n";
268 print FILE " default {\n";
269 print FILE " pass none\n";
270 print FILE " }\n";
271 print FILE "}\n";
272 close FILE;
273
274 system("/usr/sbin/squidGuard -d -c $target/update.conf -C all");
275
276 system("cp -r $target/blacklists/* $dbdir");
277
278 system("chown -R nobody.nobody $dbdir");
279
280 foreach $category (<$dbdir/*>)
281 {
282 if (-d $category)
283 {
284 system("chmod 755 $category &> /dev/null");
285 foreach $blacklist (<$category/*>)
286 {
287 if (-f $blacklist){ system("chmod 644 $blacklist &> /dev/null"); }
288 if (-d $blacklist){ system("chmod 755 $blacklist &> /dev/null"); }
289 }
290 system("chmod 666 $category/*.db &> /dev/null");
291 }
292 }
293
294 system("touch $updflagfile");
295 system("chown nobody.nobody $updflagfile");
296
297 system("/usr/local/bin/restartsquid");
298
299 system("logger -t installpackage[urlfilter] \"URL filter blacklist - Update from $blacklist_src completed\"");
300
301 $exitcode = 0;
302
303 } else {
304 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: Not a valid URL filter blacklist\"");
305 }
306 } else {
307 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: Unable to retrieve blacklist from $blacklist_src\"");
308 }
309
310 } else {
311 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: No update source defined\"");
312 }
313
314 if ((-d $target) && ($make_clean)) { system("rm -rf $target"); }
315
316 exit $exitcode;
317
318 # -------------------------------------------------------------------
319
320 sub readhash
321 {
322 my $filename = $_[0];
323 my $hash = $_[1];
324 my ($var, $val);
325
326 if (-e $filename)
327 {
328 open(FILE, $filename) or die "Unable to read file $filename";
329 while (<FILE>)
330 {
331 chop;
332 ($var, $val) = split /=/, $_, 2;
333 if ($var)
334 {
335 $val =~ s/^\'//g;
336 $val =~ s/\'$//g;
337
338 # Untaint variables read from hash
339 $var =~ /([A-Za-z0-9_-]*)/; $var = $1;
340 $val =~ /([\w\W]*)/; $val = $1;
341 $hash->{$var} = $val;
342 }
343 }
344 close FILE;
345 }
346 }
347
348 # -------------------------------------------------------------------
349 #!/usr/bin/perl
350
351 #
352 # $Id: autoupdate.pl,v 1.0 2005/06/15 00:00:00 marco Exp $
353 #
354 use strict;
355
356 my $make_clean = 1;
357
358 my $swroot = "/var/ipfire";
359 my $target = "$swroot/urlfilter/download";
360 my $dbdir = "$swroot/urlfilter/blacklists";
361
362 my $sourceurlfile = "$swroot/urlfilter/autoupdate/autoupdate.urls";
363 my $updconffile = "$swroot/urlfilter/autoupdate/autoupdate.conf";
364 my $updflagfile = "$swroot/urlfilter/blacklists/.autoupdate.last";
365
366 my %cgiparams;
367 my %updatesettings;
368 my $blacklist_url;
369 my $blacklist_src;
370 my $source_url;
371 my $source_name;
372 my @source_urllist;
373
374 my $blacklist;
375 my $category;
376
377 my $exitcode = 1;
378
379 if (-e "$sourceurlfile")
380 {
381 open(FILE, $sourceurlfile);
382 @source_urllist = <FILE>;
383 close(FILE);
384 }
385
386 if (-e "$updconffile") { &readhash("$updconffile", \%updatesettings); }
387
388 if (@ARGV[0] =~ m@^(f|h)tt?ps?://@) { $updatesettings{'UPDATE_SOURCE'} = @ARGV[0]; }
389
390 if ($updatesettings{'UPDATE_SOURCE'} eq 'custom')
391 {
392 $blacklist_url=$updatesettings{'CUSTOM_UPDATE_URL'};
393 } else {
394 $blacklist_url=$updatesettings{'UPDATE_SOURCE'};
395 foreach (@source_urllist)
396 {
397 chomp;
398 $source_name = substr($_,0,rindex($_,","));
399 $source_url = substr($_,index($_,",")+1);
400 if ($blacklist_url eq $source_url) { $blacklist_src=$source_name; }
401 }
402 }
403
404 if ($blacklist_src eq '') { $blacklist_src="custom source URL"; }
405
406 $blacklist_url =~ s/\&/\\\&/;
407
408 $blacklist=substr($blacklist_url,rindex($blacklist_url,"/")+1);
409 if (($blacklist =~ /\?/) || (!($blacklist =~ /\.t(ar\.)?gz$/))) { $blacklist = 'blacklist.tar.gz'; }
410 $blacklist=$target.'/'.$blacklist;
411
412 unless ($blacklist_url eq '')
413 {
414
415 if (-d $target) { system("rm -rf $target"); }
416 system("mkdir $target");
417
418 system("/usr/bin/wget -o $target/wget.log -O $blacklist $blacklist_url");
419
420 if (-e $blacklist)
421 {
422 system("/bin/tar --no-same-owner -xzf $blacklist -C $target");
423 if (-d "$target/blacklists")
424 {
425 open(FILE, ">$target/update.conf");
426 flock FILE, 2;
427 print FILE "logdir $target\n";
428 print FILE "dbhome $target/blacklists\n\n";
429
430 foreach (<$target/blacklists/*>)
431 {
432 if ((-d $_) && ((-s "$_/domains") || (-s "$_/urls")))
433 {
434 $category=substr($_,rindex($_,"/")+1);
435 print FILE "dest $category {\n";
436 if (-s "$_/domains") { print FILE " domainlist $category/domains\n"; }
437 if (-s "$_/urls") { print FILE " urllist $category/urls\n"; }
438 print FILE "}\n\n";
439 }
440 }
441 print FILE "acl {\n";
442 print FILE " default {\n";
443 print FILE " pass none\n";
444 print FILE " }\n";
445 print FILE "}\n";
446 close FILE;
447
448 system("/usr/sbin/squidGuard -d -c $target/update.conf -C all");
449
450 system("cp -r $target/blacklists/* $dbdir");
451
452 system("chown -R nobody.nobody $dbdir");
453
454 foreach $category (<$dbdir/*>)
455 {
456 if (-d $category)
457 {
458 system("chmod 755 $category &> /dev/null");
459 foreach $blacklist (<$category/*>)
460 {
461 if (-f $blacklist){ system("chmod 644 $blacklist &> /dev/null"); }
462 if (-d $blacklist){ system("chmod 755 $blacklist &> /dev/null"); }
463 }
464 system("chmod 666 $category/*.db &> /dev/null");
465 }
466 }
467
468 system("touch $updflagfile");
469 system("chown nobody.nobody $updflagfile");
470
471 system("/usr/local/bin/restartsquid");
472
473 system("logger -t installpackage[urlfilter] \"URL filter blacklist - Update from $blacklist_src completed\"");
474
475 $exitcode = 0;
476
477 } else {
478 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: Not a valid URL filter blacklist\"");
479 }
480 } else {
481 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: Unable to retrieve blacklist from $blacklist_src\"");
482 }
483
484 } else {
485 system("logger -t installpackage[urlfilter] \"URL filter blacklist - ERROR: No update source defined\"");
486 }
487
488 if ((-d $target) && ($make_clean)) { system("rm -rf $target"); }
489
490 exit $exitcode;
491
492 # -------------------------------------------------------------------
493
494 sub readhash
495 {
496 my $filename = $_[0];
497 my $hash = $_[1];
498 my ($var, $val);
499
500 if (-e $filename)
501 {
502 open(FILE, $filename) or die "Unable to read file $filename";
503 while (<FILE>)
504 {
505 chop;
506 ($var, $val) = split /=/, $_, 2;
507 if ($var)
508 {
509 $val =~ s/^\'//g;
510 $val =~ s/\'$//g;
511
512 # Untaint variables read from hash
513 $var =~ /([A-Za-z0-9_-]*)/; $var = $1;
514 $val =~ /([\w\W]*)/; $val = $1;
515 $hash->{$var} = $val;
516 }
517 }
518 close FILE;
519 }
520 }
521
522 # -------------------------------------------------------------------