]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - html/cgi-bin/index.cgi
git-svn-id: http://svn.ipfire.org/svn/ipfire/IPFire/source@16 ea5c0bd1-69bd-2848...
[people/teissler/ipfire-2.x.git] / html / cgi-bin / index.cgi
1 #!/usr/bin/perl
2 #
3 # SmoothWall CGIs
4 #
5 # This code is distributed under the terms of the GPL
6 #
7 # (c) The SmoothWall Team
8 #
9 # $Id: index.cgi,v 1.15.2.18 2005/09/17 13:51:47 gespinasse Exp $
10 #
11
12 use strict;
13
14 # enable only the following on debugging purpose
15 #use warnings;
16 #use CGI::Carp 'fatalsToBrowser';
17
18 require 'CONFIG_ROOT/general-functions.pl';
19 require "${General::swroot}/lang.pl";
20 require "${General::swroot}/header.pl";
21
22 my %cgiparams=();
23 my %pppsettings=();
24 my %modemsettings=();
25 my %netsettings=();
26 my %ddnssettings=();
27 my $warnmessage = '';
28 my $refresh = '';
29
30 &Header::showhttpheaders();
31
32 $cgiparams{'ACTION'} = '';
33 &Header::getcgihash(\%cgiparams);
34 $pppsettings{'VALID'} = '';
35 $pppsettings{'PROFILENAME'} = 'None';
36 &General::readhash("${General::swroot}/ppp/settings", \%pppsettings);
37 &General::readhash("${General::swroot}/modem/settings", \%modemsettings);
38 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
39 &General::readhash("${General::swroot}/ddns/settings", \%ddnssettings);
40
41 my $connstate = &Header::connectionstatus();
42 if ($connstate =~ /$Lang::tr{'dod waiting'}/ || -e "${General::swroot}/main/refreshindex") {
43 $refresh = "<meta http-equiv='refresh' content='30;'>";
44 } elsif ($connstate =~ /$Lang::tr{'connecting'}/) {
45 $refresh = "<meta http-equiv='refresh' content='5;'>";
46 }
47
48 &Header::openpage($Lang::tr{'main page'}, 1, $refresh);
49 &Header::openbigbox('', 'center');
50 &Header::openbox('100%', 'center', &Header::cleanhtml(`/bin/uname -n`,"y"));
51
52 # hide buttons only when pppsettings mandatory used and not valid
53 if ( ( $pppsettings{'VALID'} eq 'yes' ) ||
54 ( $netsettings{'CONFIG_TYPE'} =~ /^(2|3|6|7)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ ) ) {
55 print <<END
56 <table border='0'>
57 <tr>
58 <td align='center'><form method='post' action='/cgi-bin/dial.cgi'>
59 <input type='submit' name='ACTION' value='$Lang::tr{'dial'}' />
60 </form></td>
61 <td>&nbsp;&nbsp;</td>
62 <td align='center'><form method='post' action='/cgi-bin/dial.cgi'>
63 <input type='submit' name='ACTION' value='$Lang::tr{'hangup'}' />
64 </form></td>
65 <td>&nbsp;&nbsp;</td>
66 <td align='center'><form method='post' action="$ENV{'SCRIPT_NAME'}">
67 <input type='submit' name='ACTION' value='$Lang::tr{'refresh'}' />
68 </form></td>
69 </tr></table>
70 END
71 ;
72 }
73
74 print "<font face='Helvetica' size='4'><b>";
75 if ( !( $netsettings{'CONFIG_TYPE'} =~ /^(2|3|6|7)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ ) ) {
76 print "<u>$Lang::tr{'current profile'} $pppsettings{'PROFILENAME'}</u><br />\n";
77 }
78
79 if ( ( $pppsettings{'VALID'} eq 'yes'&& $modemsettings{'VALID'} eq 'yes' ) ||
80 ( $netsettings{'CONFIG_TYPE'} =~ /^(2|3|6|7)$/ && $netsettings{'RED_TYPE'} =~ /^(DHCP|STATIC)$/ )) {
81 print $connstate;
82 print "</b></font>\n";
83 if ($connstate =~ /$Lang::tr{'connected'}/) {
84 my $fetch_ip='nothing';
85 if ($ddnssettings{'BEHINDROUTER'} eq 'FETCH_IP') {
86 if (open(IPADDR,"${General::swroot}/ddns/ipcache")) {
87 $fetch_ip = <IPADDR>;
88 close IPADDR;
89 chomp ($fetch_ip);
90 my $host_name = (gethostbyaddr(pack("C4", split(/\./, $fetch_ip)), 2))[0];
91 print "<br />$Lang::tr{'ip address'} (internet): $fetch_ip <br /> $Lang::tr{'ipcops hostname'} (internet): $host_name <br />";
92 }
93 }
94 if (open(IPADDR,"${General::swroot}/red/local-ipaddress")) {
95 my $ipaddr = <IPADDR>;
96 close IPADDR;
97 chomp ($ipaddr);
98 if ($ipaddr ne $fetch_ip){ #do not show info twice
99 my $host_name = (gethostbyaddr(pack("C4", split(/\./, $ipaddr)), 2))[0];
100 print "<br />$Lang::tr{'ip address'}: $ipaddr <br /> $Lang::tr{'ipcops hostname'}: $host_name <br />";
101 }
102 }
103 }
104
105 } elsif ($modemsettings{'VALID'} eq 'no') {
106 print "$Lang::tr{'modem settings have errors'}\n </b></font>\n";
107 } else {
108 print "$Lang::tr{'profile has errors'}\n </b></font>\n";
109 }
110
111
112 # Memory usage warning
113 my @free = `/usr/bin/free`;
114 $free[1] =~ m/(\d+)/;
115 my $mem = $1;
116 $free[2] =~ m/(\d+)/;
117 my $used = $1;
118 my $pct = int 100 * ($mem - $used) / $mem;
119 if ($used / $mem > 90) {
120 $warnmessage .= "<li> $Lang::tr{'high memory usage'}: $pct% !</li>\n";
121 }
122
123 # Diskspace usage warning
124 my @temp=();
125 my $temp2=();
126 my @df = `/bin/df -B M -x rootfs`;
127 foreach my $line (@df) {
128 next if $line =~ m/^Filesystem/;
129 if ($line =~ m/root/ ) {
130 $line =~ m/^.* (\d+)M.*$/;
131 @temp = split(/ +/,$line);
132 if ($1<5) {
133 # available:plain value in MB, and not %used as 10% is too much to waste on small disk
134 # and root size should not vary during time
135 $warnmessage .= "<li> $Lang::tr{'filesystem full'}: $temp[0] <b>$Lang::tr{'free'}=$1M</b> !</li>\n";
136 }
137
138 } else {
139 # $line =~ m/^.* (\d+)m.*$/;
140 $line =~ m/^.* (\d+)\%.*$/;
141 if ($1>90) {
142 @temp = split(/ /,$line);
143 $temp2=int(100-$1);
144 $warnmessage .= "<li> $Lang::tr{'filesystem full'}: $temp[0] <b>$Lang::tr{'free'}=$temp2%</b> !</li>\n";
145 }
146 }
147 }
148
149 # Patches warning
150 open(AV, "<${General::swroot}/patches/available") or die "Could not open available patches database ($!)";
151 my @av = <AV>;
152 close(AV);
153 open(PF, "<${General::swroot}/patches/installed") or die "Could not open installed patches file. ($!)<br />";
154 while(<PF>)
155 {
156 next if $_ =~ m/^#/;
157 @temp = split(/\|/,$_);
158 @av = grep(!/^$temp[0]/, @av);
159 }
160 close(PF);
161
162 if ($#av != -1)
163 {
164 $warnmessage .= "<li> $Lang::tr{'there are updates'}</li>";
165 }
166 my $age = &General::age("/${General::swroot}/patches/available");
167 if ($age =~ m/(\d{1,3})d/) {
168 if ($1 >= 7) {
169 $warnmessage .= "<li>$Lang::tr{'updates is old1'} $age $Lang::tr{'updates is old2'}</li>\n";
170 }
171 }
172
173 if ($warnmessage) {
174 print "<ol>$warnmessage</ol>";
175 }
176
177 print "<p>";
178 system('/usr/bin/uptime');
179 print "</p>\n";
180
181 &Header::closebox();
182
183 # Test browser, and direct User where to turn off Javascript if necessary
184 # only display message if Javascript is currently enabled
185 if (${Header::javascript}) {
186 print <<END
187 <script type='text/javascript'>\n
188 if(navigator.platform.indexOf("MacPPC")>(-1)){
189 document.write(
190 "<center><p>"
191 + "$Lang::tr{'javascript menu error1'}"
192 + " <a href='/cgi-bin/gui.cgi'>$Lang::tr{'gui settings'}</a> "
193 + "$Lang::tr{'javascript menu error2'}"
194 + "</p></center>"
195 )
196 }
197 </script>
198 END
199 ;
200 }
201
202 &Header::closebigbox();
203
204 &Header::closepage();