]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - html/cgi-bin/updatexlrator.cgi
Removed the old svn commands and started with git.
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / updatexlrator.cgi
CommitLineData
46c01c09 1#!/usr/bin/perl
70df8302
MT
2###############################################################################
3# #
4# IPFire.org - A linux based firewall #
5# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
46c01c09
MT
21
22use strict;
23
24# enable only the following on debugging purpose
cb5e9c6c
CS
25#use warnings;
26#use CGI::Carp 'fatalsToBrowser';
46c01c09
MT
27
28use IO::Socket;
29
30require '/var/ipfire/general-functions.pl';
31require "${General::swroot}/lang.pl";
32require "${General::swroot}/header.pl";
33
fe6cda92 34my %color = ();
46c01c09
MT
35my %checked=();
36my %selected=();
37my %netsettings=();
38my %mainsettings=();
39my %proxysettings=();
40my %xlratorsettings=();
41my $id=0;
42my $updatefile='';
43my $shortname='';
44my $vendor='';
45my $time='';
46my $filesize=0;
47my $filedate='';
48my $lastaccess='';
49my $lastcheck='';
50
381f2e71 51my $repository = "/var/updatecache";
46c01c09
MT
52my $hintcolour = '#FFFFCC';
53
54my $sfNoSource='0';
55my $sfOk='1';
56my $sfOutdated='2';
57
58my $not_accessed_last='';
59
60my $errormessage='';
61
62my @repositorylist=();
63my @repositoryfiles=();
64
65my @metadata=();
66
67my $chk_cron_dly = "${General::swroot}/updatexlrator/autocheck/cron.daily";
68my $chk_cron_wly = "${General::swroot}/updatexlrator/autocheck/cron.weekly";
69my $chk_cron_mly = "${General::swroot}/updatexlrator/autocheck/cron.monthly";
70
46c01c09
MT
71&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
72&General::readhash("${General::swroot}/main/settings", \%mainsettings);
73&General::readhash("${General::swroot}/proxy/settings", \%proxysettings);
fe6cda92 74&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
46c01c09
MT
75
76$xlratorsettings{'ACTION'} = '';
77$xlratorsettings{'ENABLE_LOG'} = 'off';
78$xlratorsettings{'CHILDREN'} = '5';
79$xlratorsettings{'PASSIVE_MODE'} = 'off';
381f2e71 80$xlratorsettings{'MAX_DISK_USAGE'} = '95';
46c01c09
MT
81$xlratorsettings{'LOW_DOWNLOAD_PRIORITY'} = 'off';
82$xlratorsettings{'ENABLE_AUTOCHECK'} = 'off';
83$xlratorsettings{'FULL_AUTOSYNC'} = 'off';
84$xlratorsettings{'NOT_ACCESSED_LAST'} = 'month1';
85
86&Header::getcgihash(\%xlratorsettings);
87
88if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr purge'})
89{
90 if (($xlratorsettings{'REMOVE_OBSOLETE'} eq 'on') || ($xlratorsettings{'REMOVE_NOSOURCE'} eq 'on') || ($xlratorsettings{'REMOVE_OUTDATED'} eq 'on'))
91 {
92 @repositorylist = <$repository/*>;
93 foreach (@repositorylist)
94 {
95 if (!-d $_)
96 {
97 $updatefile = substr($_,rindex($_,"/")+1);
98 if (-e "$repository/metadata/$updatefile")
99 {
100 open (FILE,"$repository/metadata/$updatefile");
101 @metadata = <FILE>;
102 close FILE;
103 chomp(@metadata);
104
105 if (($xlratorsettings{'REMOVE_NOSOURCE'} eq 'on') && ($metadata[2] == $sfNoSource))
106 {
107 unlink("$repository/$updatefile");
108 unlink("$repository/metadata/$updatefile");
109 }
110 if (($xlratorsettings{'REMOVE_OUTDATED'} eq 'on') && ($metadata[2] == $sfOutdated))
111 {
112 unlink("$repository/$updatefile");
113 unlink("$repository/metadata/$updatefile");
114 }
115 if ($xlratorsettings{'REMOVE_OBSOLETE'} eq 'on')
116 {
117 if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'week') && ($metadata[-1] < (time - 604800)))
118 {
119 unlink("$repository/$updatefile");
120 unlink("$repository/metadata/$updatefile");
121 }
122 if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month1') && ($metadata[-1] < (time - 2505600)))
123 {
124 unlink("$repository/$updatefile");
125 unlink("$repository/metadata/$updatefile");
126 }
127 if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month3') && ($metadata[-1] < (time - 7516800)))
128 {
129 unlink("$repository/$updatefile");
130 unlink("$repository/metadata/$updatefile");
131 }
132 if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'month6') && ($metadata[-1] < (time - 15033600)))
133 {
134 unlink("$repository/$updatefile");
135 unlink("$repository/metadata/$updatefile");
136 }
137 if (($xlratorsettings{'NOT_ACCESSED_LAST'} eq 'year') && ($metadata[-1] < (time - 31536000)))
138 {
139 unlink("$repository/$updatefile");
140 unlink("$repository/metadata/$updatefile");
141 }
142 }
143 }
144 }
145 }
146 }
147}
148
149if ($xlratorsettings{'ACTION'} eq $Lang::tr{'save'})
150{
151 if (!($xlratorsettings{'CHILDREN'} =~ /^\d+$/) || ($xlratorsettings{'CHILDREN'} < 1))
152 {
153 $errormessage = $Lang::tr{'updxlrtr invalid num of children'};
154 goto ERROR;
155 }
156 if (!($xlratorsettings{'MAX_DISK_USAGE'} =~ /^\d+$/) || ($xlratorsettings{'MAX_DISK_USAGE'} < 1) || ($xlratorsettings{'MAX_DISK_USAGE'} > 100))
157 {
158 $errormessage = $Lang::tr{'updxlrtr invalid disk usage'};
159 goto ERROR;
160 }
161
162 &savesettings;
163}
164
165if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr save and restart'})
166{
167 if (!($xlratorsettings{'CHILDREN'} =~ /^\d+$/) || ($xlratorsettings{'CHILDREN'} < 1))
168 {
169 $errormessage = $Lang::tr{'updxlrtr invalid num of children'};
170 goto ERROR;
171 }
172 if (!($xlratorsettings{'MAX_DISK_USAGE'} =~ /^\d+$/) || ($xlratorsettings{'MAX_DISK_USAGE'} < 1) || ($xlratorsettings{'MAX_DISK_USAGE'} > 100))
173 {
174 $errormessage = $Lang::tr{'updxlrtr invalid disk usage'};
175 goto ERROR;
176 }
177 if (!(-e "${General::swroot}/proxy/enable"))
178 {
179 $errormessage = $Lang::tr{'updxlrtr web proxy service required'};
180 goto ERROR;
181 }
182 if (!($proxysettings{'ENABLE_UPDXLRATOR'} eq 'on'))
183 {
184 $errormessage = $Lang::tr{'updxlrtr not enabled'};
185 goto ERROR;
186 }
187
188 &savesettings;
189
7d3af7f7 190 system('/usr/local/bin/squidctrl restart >/dev/null 2>&1');
46c01c09
MT
191}
192
193if ($xlratorsettings{'ACTION'} eq $Lang::tr{'updxlrtr remove file'})
194{
195 $updatefile = $xlratorsettings{'ID'};
196 if (-e "$repository/$updatefile") { unlink("$repository/$updatefile"); }
197 $updatefile =~ s/^download\///i;
198 if (-e "$repository/metadata/$updatefile") { unlink("$repository/metadata/$updatefile"); }
199}
200
201ERROR:
202
203$not_accessed_last = $xlratorsettings{'NOT_ACCESSED_LAST'};
204undef($xlratorsettings{'NOT_ACCESSED_LAST'});
205
206if (-e "${General::swroot}/updatexlrator/settings") { &General::readhash("${General::swroot}/updatexlrator/settings", \%xlratorsettings); }
207
208if ($xlratorsettings{'NOT_ACCESSED_LAST'} eq '') { $xlratorsettings{'NOT_ACCESSED_LAST'} = $not_accessed_last; } ;
209
210
211$checked{'ENABLE_LOG'}{'off'} = '';
212$checked{'ENABLE_LOG'}{'on'} = '';
213$checked{'ENABLE_LOG'}{$xlratorsettings{'ENABLE_LOG'}} = "checked='checked'";
214$checked{'PASSIVE_MODE'}{'off'} = '';
215$checked{'PASSIVE_MODE'}{'on'} = '';
216$checked{'PASSIVE_MODE'}{$xlratorsettings{'PASSIVE_MODE'}} = "checked='checked'";
217$checked{'LOW_DOWNLOAD_PRIORITY'}{'off'} = '';
218$checked{'LOW_DOWNLOAD_PRIORITY'}{'on'} = '';
219$checked{'LOW_DOWNLOAD_PRIORITY'}{$xlratorsettings{'LOW_DOWNLOAD_PRIORITY'}} = "checked='checked'";
220$checked{'ENABLE_AUTOCHECK'}{'off'} = '';
221$checked{'ENABLE_AUTOCHECK'}{'on'} = '';
222$checked{'ENABLE_AUTOCHECK'}{$xlratorsettings{'ENABLE_AUTOCHECK'}} = "checked='checked'";
223$checked{'FULL_AUTOSYNC'}{'off'} = '';
224$checked{'FULL_AUTOSYNC'}{'on'} = '';
225$checked{'FULL_AUTOSYNC'}{$xlratorsettings{'FULL_AUTOSYNC'}} = "checked='checked'";
226
227$selected{'AUTOCHECK_SCHEDULE'}{$xlratorsettings{'AUTOCHECK_SCHEDULE'}} = "selected='selected'";
228$selected{'NOT_ACCESSED_LAST'}{$xlratorsettings{'NOT_ACCESSED_LAST'}} = "selected='selected'";
229
230# ----------------------------------------------------
231# Settings dialog
232# ----------------------------------------------------
233
234&Header::showhttpheaders();
235
236&Header::openpage($Lang::tr{'updxlrtr configuration'}, 1, '');
237
238&Header::openbigbox('100%', 'left', '', $errormessage);
239
240if ($errormessage) {
241 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
242 print "<font class='base'>$errormessage&nbsp;</font>\n";
243 &Header::closebox();
244}
245
46c01c09
MT
246print "<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>\n";
247
248&Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr update accelerator'}");
249
250print <<END
251<table width='100%'>
252<tr>
253 <td colspan='4'><b>$Lang::tr{'updxlrtr common settings'}</b></td>
254</tr>
255<tr>
256 <td class='base' width='25%'>$Lang::tr{'updxlrtr enable log'}:</td>
257 <td class='base' width='20%'><input type='checkbox' name='ENABLE_LOG' $checked{'ENABLE_LOG'}{'on'} /></td>
258 <td class='base' width='25%'>$Lang::tr{'updxlrtr children'}:</td>
259 <td class='base' width='30%'><input type='text' name='CHILDREN' value='$xlratorsettings{'CHILDREN'}' size='5' /></td>
260</tr>
261<tr>
262 <td class='base'>$Lang::tr{'updxlrtr passive mode'}:</td>
263 <td class='base'><input type='checkbox' name='PASSIVE_MODE' $checked{'PASSIVE_MODE'}{'on'} /></td>
264 <td class='base'>$Lang::tr{'updxlrtr max disk usage'}:</td>
265 <td class='base'><input type='text' name='MAX_DISK_USAGE' value='$xlratorsettings{'MAX_DISK_USAGE'}' size='1' /> %</td>
266</tr>
267<tr>
268 <td class='base'>$Lang::tr{'updxlrtr low download priority'}:</td>
269 <td class='base'><input type='checkbox' name='LOW_DOWNLOAD_PRIORITY' $checked{'LOW_DOWNLOAD_PRIORITY'}{'on'} /></td>
270 <td>&nbsp;</td>
271 <td>&nbsp;</td>
272</tr>
273</table>
274<hr size='1'>
275<table width='100%'>
276<tr>
277 <td colspan='4'><b>$Lang::tr{'updxlrtr source checkup'}</b></td>
278</tr>
279<tr>
280 <td class='base' width='25%'>$Lang::tr{'updxlrtr enable autocheck'}:</td>
281 <td class='base' width='20%'><input type='checkbox' name='ENABLE_AUTOCHECK' $checked{'ENABLE_AUTOCHECK'}{'on'} /></td>
282 <td class='base' width='25%'>$Lang::tr{'updxlrtr source checkup schedule'}:</td>
283 <td class='base' width='30%'>
284 <select name='AUTOCHECK_SCHEDULE'>
285 <option value='daily' $selected{'AUTOCHECK_SCHEDULE'}{'daily'}>$Lang::tr{'updxlrtr daily'}</option>
286 <option value='weekly' $selected{'AUTOCHECK_SCHEDULE'}{'weekly'}>$Lang::tr{'updxlrtr weekly'}</option>
287 <option value='monthly' $selected{'AUTOCHECK_SCHEDULE'}{'monthly'}>$Lang::tr{'updxlrtr monthly'}</option>
288 </select>
289 </td>
290</tr>
291<tr>
292 <td class='base'>$Lang::tr{'updxlrtr full autosync'}:</td>
293 <td class='base'><input type='checkbox' name='FULL_AUTOSYNC' $checked{'FULL_AUTOSYNC'}{'on'} /></td>
294 <td>&nbsp;</td>
295 <td>&nbsp;</td>
296</tr>
297</table>
298<hr size='1'>
299<table width='100%'>
300<tr>
301 <td colspan='6'><b>$Lang::tr{'updxlrtr maintenance'}</b></td>
302</tr>
303<tr>
304 <td class='base' colspan='3'><input type='submit' name='ACTION' value='$Lang::tr{'updxlrtr purge'}' /> &nbsp;$Lang::tr{'updxlrtr all files'}</td>
305 <td class='base' width='25%'><input type='checkbox' name='REMOVE_OBSOLETE' $checked{'REMOVE_OBSOLETE'}{'on'} />&nbsp;$Lang::tr{'updxlrtr not accessed'}</td>
306 <td class='base' colspan='3'><select name='NOT_ACCESSED_LAST'>
307 <option value='week' $selected{'NOT_ACCESSED_LAST'}{'week'}>$Lang::tr{'updxlrtr week'}</option>
308 <option value='month1' $selected{'NOT_ACCESSED_LAST'}{'month1'}>$Lang::tr{'updxlrtr month'}</option>
309 <option value='month3' $selected{'NOT_ACCESSED_LAST'}{'month3'}>$Lang::tr{'updxlrtr 3 months'}</option>
310 <option value='month6' $selected{'NOT_ACCESSED_LAST'}{'month6'}>$Lang::tr{'updxlrtr 6 months'}</option>
311 <option value='year' $selected{'NOT_ACCESSED_LAST'}{'year'}>$Lang::tr{'updxlrtr year'}</option>
312 </select>
313 </td>
314</tr>
315<tr>
316</tr>
317<tr>
318 <td class='base' width='25%'><input type='checkbox' name='REMOVE_NOSOURCE' $checked{'REMOVE_NOSOURCE'}{'on'} />&nbsp;$Lang::tr{'updxlrtr marked as'}</td>
319 <td class='base' width='3%'><img src='/images/updxl-led-yellow.gif' alt='$Lang::tr{'updxlrtr condition nosource'}' /></td>
320 <td class='base' width='17%'>[<i>$Lang::tr{'updxlrtr condition nosource'}</i>]</td>
321 <td class='base' width='25%'><input type='checkbox' name='REMOVE_OUTDATED' $checked{'REMOVE_OUTDATED'}{'on'} />&nbsp;$Lang::tr{'updxlrtr marked as'}</td>
322 <td class='base' width='3%'><img src='/images/updxl-led-red.gif' alt='$Lang::tr{'updxlrtr condition outdated'}' /></td>
323 <td class='base' width='27%'>[<i>$Lang::tr{'updxlrtr condition outdated'}</i>]</td>
324</tr>
325</table>
326<hr size='1'>
327<table width='100%'>
328<tr>
329 <td>&nbsp;</td>
330 <td align='center' width='45%'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>
331 <td align='center' width='45%'><input type='submit' name='ACTION' value='$Lang::tr{'updxlrtr save and restart'}' /></td>
332 <td>&nbsp;</td>
333</tr>
334</table>
335<table width='100%'>
336<tr>
337 <td align='right'>
9fb25b1c 338 &nbsp;
46c01c09
MT
339 </td>
340</tr>
341</table>
342END
343;
344
345&Header::closebox();
346
347print "</form>\n";
348
349# ----------------------------------------------------
350# File list dialog
351# ----------------------------------------------------
352
353&Header::openbox('100%', 'left', "$Lang::tr{'updxlrtr current files'}:");
354
355@repositorylist = <$repository/download/*>;
356
357undef @repositoryfiles;
358foreach (@repositorylist)
359{
360 if (!-d)
361 {
362 $updatefile = substr($_,rindex($_,"/")+1);
363 $updatefile = "download/$updatefile";
364 push(@repositoryfiles,$updatefile);
365 }
366}
367
368@repositorylist = <$repository/*>;
369
370foreach (@repositorylist)
371{
372 if (!-d) { push(@repositoryfiles,substr($_,rindex($_,"/")+1)); }
373}
374
375if (@repositoryfiles)
376{
377 print <<END
378<table width='100%'>
379<colgroup span='2' width='2%'></colgroup>
380<colgroup span='1' width='0*'></colgroup>
381<colgroup span='4' width='5%'></colgroup>
382<colgroup span='1' width='2%'></colgroup>
383<tr>
384 <td class='base' align='center'>&nbsp;</td>
385 <td class='base' align='center'>&nbsp;</td>
386 <td class='base' align='center'><b>$Lang::tr{'updxlrtr filename'}</b></td>
387 <td class='base' align='center'><b>$Lang::tr{'updxlrtr filesize'}</b></td>
388 <td class='base' align='center'><b>$Lang::tr{'date'}</b></td>
389 <td class='base' align='center'><img src='/images/reload.gif' alt='$Lang::tr{'updxlrtr last access'}' /></td>
390 <td class='base' align='center'><img src='/images/floppy.gif' alt='$Lang::tr{'updxlrtr last checkup'}' /></td>
391 <td class='base' align='center'>&nbsp;</td>
392</tr>
393END
394;
395 $id = 0;
396 foreach $updatefile (@repositoryfiles)
397 {
398 $id++;
399 if ($id % 2) {
fe6cda92 400 print "<tr bgcolor='$color{'color20'}'>\n"; }
46c01c09 401 else {
fe6cda92 402 print "<tr bgcolor='$color{'color22'}'>\n"; }
46c01c09
MT
403 $filesize = (-s "$repository/$updatefile");
404 1 while $filesize =~ s/^(-?\d+)(\d{3})/$1.$2/;
405
406 my ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime(&getmtime("$repository/$updatefile"));
407 $DAYdt = sprintf ("%.02d",$DAYdt);
408 $MONTHdt = sprintf ("%.02d",$MONTHdt+1);
409 $YEARdt = sprintf ("%.04d",$YEARdt+1900);
410 $filedate = $YEARdt."-".$MONTHdt."-".$DAYdt;
411
412 $lastaccess = "n/a";
413 $lastcheck = "n/a";
414 undef @metadata;
415
416 $shortname = $updatefile;
417 $shortname =~ s/^download\///i;
418
419 if (-e "$repository/metadata/$shortname")
420 {
421 open (FILE,"$repository/metadata/$shortname");
422 @metadata = <FILE>;
423 close(FILE);
424 chomp @metadata;
425
426 ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($metadata[-1]);
427 $DAYdt = sprintf ("%.02d",$DAYdt);
428 $MONTHdt = sprintf ("%.02d",$MONTHdt+1);
429 $YEARdt = sprintf ("%.04d",$YEARdt+1900);
430 if (($metadata[-1] =~ /^\d+/) && ($metadata[-1] >= 1)) { $lastaccess = $YEARdt."-".$MONTHdt."-".$DAYdt; }
431
432 ($SECdt,$MINdt,$HOURdt,$DAYdt,$MONTHdt,$YEARdt) = localtime($metadata[3]);
433 $DAYdt = sprintf ("%.02d",$DAYdt);
434 $MONTHdt = sprintf ("%.02d",$MONTHdt+1);
435 $YEARdt = sprintf ("%.04d",$YEARdt+1900);
436 if (($metadata[3] =~ /^\d+/) && ($metadata[3] >= 1)) { $lastcheck = $YEARdt."-".$MONTHdt."-".$DAYdt; }
437 }
438
439 print "\t\t<td align='center' nowrap='nowrap'>&nbsp;";
440 if ($metadata[2] eq $sfNoSource)
441 {
442 print "<img src='/images/updxl-led-yellow.gif' alt='$Lang::tr{'updxlrtr condition nosource'}' />&nbsp;</td>\n";
443 }
444 if ($metadata[2] eq $sfOk)
445 {
446 print "<img src='/images/updxl-led-green.gif' alt='$Lang::tr{'updxlrtr condition ok'}' />&nbsp;</td>\n";
447 }
448 if (($metadata[2] eq $sfOutdated) && (!($updatefile =~ /^download\//i)))
449 {
450 print "<img src='/images/updxl-led-red.gif' alt='$Lang::tr{'updxlrtr condition outdated'}' />&nbsp;</td>\n";
451 }
452 if (($metadata[2] eq $sfOutdated) && ($updatefile =~ /^download\//i))
453 {
454 print "<img src='/images/updxl-led-blue.gif' alt='$Lang::tr{'updxlrtr condition download'}' />&nbsp;</td>\n";
455 }
456 if ($metadata[2] eq '')
457 {
458 print "<img src='/images/updxl-led-red.gif' alt='$Lang::tr{'updxlrtr condition outdated'}' />&nbsp;</td>\n";
459 }
460
461 print "\t\t<td align='center' nowrap='nowrap'>&nbsp;";
462 if ($metadata[1] eq 'Adobe')
463 {
d6d6d598 464 print "<img src='/images/updxl-src-adobe.gif' alt='Adobe' />&nbsp;</td>\n";
46c01c09
MT
465 } elsif ($metadata[1] eq 'Microsoft')
466 {
d6d6d598 467 print "<img src='/images/updxl-src-windows.gif' alt='Microsoft' />&nbsp;</td>\n";
46c01c09
MT
468 } elsif ($metadata[1] eq 'Symantec')
469 {
d6d6d598 470 print "<img src='/images/updxl-src-symantec.gif' alt='Symantec' />&nbsp;</td>\n";
5b2a12ff
MT
471 } elsif ($metadata[1] eq 'Avira')
472 {
d6d6d598 473 print "<img src='/images/updxl-src-avira.gif' alt='Avira' />&nbsp;</td>\n";
5b2a12ff
MT
474 } elsif ($metadata[1] eq 'Avast')
475 {
d6d6d598 476 print "<img src='/images/updxl-src-avast.gif' alt='Avast' />&nbsp;</td>\n";
186e3d2c
MT
477 } elsif ($metadata[1] eq 'IPFire')
478 {
d6d6d598
CS
479 print "<img src='/images/IPFire.png' width='18' height='18' alt='IPFire' />&nbsp;</td>\n";
480 } elsif ($metadata[1] eq 'Apple')
2dfb38e6 481 {
d15b4ff7 482 print "<img src='/images/updxl-src-apple.gif' alt='Apple' />&nbsp;</td>\n";
d6d6d598
CS
483 } elsif ($metadata[1] eq 'Kaspersky')
484 {
d15b4ff7 485 print "<img src='/images/updxl-src-kaspersky.gif' alt='Kaspersky' />&nbsp;</td>\n";
186e3d2c
MT
486 } elsif ($metadata[1] eq 'Linux')
487 {
d6d6d598 488 print "<img src='/images/tux.png' alt='Linux' />&nbsp;</td>\n";
46c01c09
MT
489 } else
490 {
491 print "<img src='/images/updxl-src-unknown.gif' alt='$Lang::tr{'updxlrtr unknown'}' />&nbsp;</td>\n";
492 }
493
494 $shortname = $updatefile;
495 $shortname =~ s/(.*)_[\da-f]*(\.(exe|cab|psf)$)/\1_*\2/i;
496 $shortname =~ s/^download\///i;
497
498print <<END
499 <td class='base' align='left' title='$updatefile'>$shortname</td>
500 <td class='base' align='right' nowrap='nowrap'>&nbsp;$filesize&nbsp;</td>
501 <td class='base' align='center' nowrap='nowrap'>&nbsp;$filedate&nbsp;</td>
502 <td class='base' align='center' nowrap='nowrap'>&nbsp;$lastaccess&nbsp;</td>
503 <td class='base' align='center' nowrap='nowrap'>&nbsp;$lastcheck&nbsp;</td>
504 <td align='center'>
505 <form method='post' name='frma$id' action='$ENV{'SCRIPT_NAME'}'>
506 <input type='image' name='$Lang::tr{'updxlrtr remove file'}' src='/images/delete.gif' title='$Lang::tr{'updxlrtr remove file'}' alt='$Lang::tr{'updxlrtr remove file'}' />
507 <input type='hidden' name='ID' value='$updatefile' />
508 <input type='hidden' name='ACTION' value='$Lang::tr{'updxlrtr remove file'}' />
509 </form>
510 </td>
511 </tr>
512END
513;
514 }
515
516print <<END
517</table>
518<br>
519<table>
520 <tr>
521 <td class='boldbase'>&nbsp; <b>$Lang::tr{'legend'}:</b></td>
522 <td class='base'>&nbsp;</td>
523 <td><img src='/images/reload.gif' alt='$Lang::tr{'updxlrtr last access'}' /></td>
524 <td class='base'>$Lang::tr{'updxlrtr last access'}</td>
525 <td class='base'>&nbsp;</td>
526 <td><img src='/images/floppy.gif' alt='$Lang::tr{'updxlrtr last checkup'}' /></td>
527 <td class='base'>$Lang::tr{'updxlrtr last checkup'}</td>
528 <td class='base'>&nbsp;</td>
529 <td><img src='/images/delete.gif' alt='$Lang::tr{'updxlrtr remove file'}' /></td>
530 <td class='base'>$Lang::tr{'updxlrtr remove file'}</td>
531 <td class='base'>&nbsp;</td>
532 <td class='base'>&nbsp;</td>
533 <td class='base'>&nbsp;</td>
534 </tr>
535 <tr>
536 <td colspan='13'></td>
537 </tr>
538 <tr>
539 <td class='base'>&nbsp; $Lang::tr{'status'}:</td>
540 <td class='base'>&nbsp;</td>
541 <td align='center'><img src='/images/updxl-led-green.gif' alt='$Lang::tr{'updxlrtr condition ok'}' /></td>
542 <td class='base'>$Lang::tr{'updxlrtr condition ok'}</td>
543 <td class='base'>&nbsp;</td>
544 <td align='center'><img src='/images/updxl-led-yellow.gif' alt='$Lang::tr{'updxlrtr condition nosource'}' /></td>
545 <td class='base'>$Lang::tr{'updxlrtr condition nosource'}</td>
546 <td class='base'>&nbsp;</td>
547 <td align='center'><img src='/images/updxl-led-red.gif' alt='$Lang::tr{'updxlrtr condition outdated'}' /></td>
548 <td class='base'>$Lang::tr{'updxlrtr condition outdated'}</td>
549 <td class='base'>&nbsp;</td>
550 <td align='center'><img src='/images/updxl-led-blue.gif' alt='$Lang::tr{'updxlrtr condition download'}' /></td>
551 <td class='base'>$Lang::tr{'updxlrtr condition download'}</td>
552 </tr>
553 <tr>
554 <td colspan='13'></td>
555 </tr>
556 <tr>
557 <td class='base'>&nbsp; $Lang::tr{'updxlrtr source'}:</td>
558 <td class='base'>&nbsp;</td>
559 <td align='center'><img src='/images/updxl-src-adobe.gif' alt='Adobe' /></td>
560 <td class='base'>Adobe</td>
561 <td class='base'>&nbsp;</td>
562 <td align='center'><img src='/images/updxl-src-windows.gif' alt='Microsoft' /></td>
563 <td class='base'>Microsoft</td>
564 <td class='base'>&nbsp;</td>
565 <td align='center'><img src='/images/updxl-src-symantec.gif' alt='Symantec' /></td>
566 <td class='base'>Symantec</td>
567 <td class='base'>&nbsp;</td>
186e3d2c
MT
568 <td align='center'><img src='/images/updxl-src-avira.gif' alt='Avira' /></td>
569 <td class='base'>Avira</td>
2dfb38e6
CS
570 <td class='base'>&nbsp;</td>
571 <td align='center'><img src='/images/updxl-src-apple.gif' alt='Apple' /></td>
572 <td class='base'>Apple</td>
573 <td class='base'>&nbsp;</td>
46c01c09 574 </tr>
5b2a12ff
MT
575 <tr>
576 <td class='base' colspan='2'>&nbsp;</td>
a2d5130f 577 <td align='center'><img src='/images/IPFire.png' width='18' height='18' alt='IPFire' /></td>
186e3d2c
MT
578 <td class='base'>IPFire</td>
579 <td class='base'>&nbsp;</td>
a2d5130f 580 <td align='center'><img src='/images/tux.png' alt='Linux' /></td>
186e3d2c
MT
581 <td class='base'>Linux</td>
582 <td class='base'>&nbsp;</td>
5b2a12ff
MT
583 <td align='center'><img src='/images/updxl-src-avast.gif' alt='Avast' /></td>
584 <td class='base'>Avast</td>
585 <td class='base'>&nbsp;</td>
d6d6d598
CS
586 <td align='center'><img src='/images/updxl-src-kaspersky.gif' alt='Kaspersky' /></td>
587 <td class='base'>Kaspersky</td>
588 <td class='base'>&nbsp;</td>
186e3d2c
MT
589 <td align='center'><img src='/images/updxl-src-unknown.gif' alt='$Lang::tr{'updxlrtr unknown'}' /></td>
590 <td class='base'>$Lang::tr{'updxlrtr unknown'}</td>
2dfb38e6 591 <td class='base'>&nbsp;</td>
5b2a12ff 592 </tr>
46c01c09
MT
593</table>
594END
595;
596} else {
597
598 print "<i>$Lang::tr{'updxlrtr empty repository'}</i>\n";
599}
600
601print <<END
602<hr>
603
604<table>
605<tr><td class='boldbase'><b>$Lang::tr{'updxlrtr disk usage'}:</b></td></tr>
606</table>
607
608<table cellpadding='3'>
609END
610;
611open(DF,"/bin/df -h $repository|");
612while(<DF>)
613{
614 if ($_ =~ m/^Filesystem/ )
615 {
616 print <<END
617<tr>
618<td align='left' class='base'><i>$Lang::tr{'updxlrtr cache dir'}</i></td>
619<td align='center' class='base'><i>$Lang::tr{'size'}</i></td>
620<td align='center' class='base'><i>$Lang::tr{'used'}</i></td>
621<td align='center' class='base'><i>$Lang::tr{'free'}</i></td>
622<td align='left' class='base' colspan='2'><i>$Lang::tr{'percentage'}</i></td>
623</tr>
624END
625;
626 }
627 else
628 {
629 my ($device,$size,$used,$free,$percent,$mount) = split;
630 print <<END
631<tr>
632<td>[$repository]</td>
633<td align='right'>$size</td>
634<td align='right'>$used</td>
635<td align='right'>$free</td>
636<td>
637END
638;
639 &percentbar($percent);
640 print <<END
641</td>
642<td align='right'>$percent</td>
643</tr>
644END
645;
646 }
647}
648close DF;
649print "</table>\n";
650
651&Header::closebox();
652
653&Header::closebigbox();
654
655&Header::closepage();
656
657# -------------------------------------------------------------------
658
46c01c09
MT
659sub savesettings
660{
661 if (-e $chk_cron_dly) { unlink($chk_cron_dly); }
662 if (-e $chk_cron_wly) { unlink($chk_cron_wly); }
663 if (-e $chk_cron_mly) { unlink($chk_cron_mly); }
664
665 if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'daily'))
666 {
667 symlink("../bin/checkup",$chk_cron_dly)
668 } else {
669 symlink("/bin/false",$chk_cron_dly)
670 }
671 if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'weekly'))
672 {
673 symlink("../bin/checkup",$chk_cron_wly)
674 } else {
675 symlink("/bin/false",$chk_cron_wly)
676 }
677 if (($xlratorsettings{'ENABLE_AUTOCHECK'} eq 'on') && ($xlratorsettings{'AUTOCHECK_SCHEDULE'} eq 'monthly'))
678 {
679 symlink("../bin/checkup",$chk_cron_mly)
680 } else {
681 symlink("/bin/false",$chk_cron_mly)
682 }
683
684 delete($xlratorsettings{'REMOVE_OBSOLETE'});
685 delete($xlratorsettings{'REMOVE_NOSOURCE'});
686 delete($xlratorsettings{'REMOVE_OUTDATED'});
687
688 &General::writehash("${General::swroot}/updatexlrator/settings", \%xlratorsettings);
689}
690
691# -------------------------------------------------------------------
692
693sub percentbar
694{
695 my $percent = $_[0];
696 my $fg = '#a0a0a0';
697 my $bg = '#e2e2e2';
698
699 if ($percent =~ m/^(\d+)%$/ )
700 {
701 print <<END
702<table width='100' border='1' cellspacing='0' cellpadding='0' style='border-width:1px;border-style:solid;border-color:$fg;width:100px;height:10px;'>
703<tr>
704END
705;
706 if ($percent eq "100%") {
707 print "<td width='100%' bgcolor='$fg' style='background-color:$fg;border-style:solid;border-width:1px;border-color:$bg'>"
708 } elsif ($percent eq "0%") {
709 print "<td width='100%' bgcolor='$bg' style='background-color:$bg;border-style:solid;border-width:1px;border-color:$bg'>"
710 } else {
711 print "<td width='$percent' bgcolor='$fg' style='background-color:$fg;border-style:solid;border-width:1px;border-color:$bg'></td><td width='" . (100-$1) . "%' bgcolor='$bg' style='background-color:$bg;border-style:solid;border-width:1px;border-color:$bg'>"
712 }
713 print <<END
714<img src='/images/null.gif' width='1' height='1' alt='' /></td></tr></table>
715END
716;
717 }
718}
719
720# -------------------------------------------------------------------
721
722sub getmtime
723{
724 my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($_[0]);
725
726 return $mtime;
727}
728
729# -------------------------------------------------------------------