]> git.ipfire.org Git - ipfire-2.x.git/blame - src/wio/wio.cgi
WIO - cleaned up language files
[ipfire-2.x.git] / src / wio / wio.cgi
CommitLineData
0d6cc79d
SF
1#!/usr/bin/perl
2#
3###############################################################################
4# #
5# IPFire.org - A linux based firewall #
953882ff 6# Copyright (C) 2017-2020 Stephan Feddersen <sfeddersen@ipfire.org> #
0d6cc79d
SF
7# All Rights Reserved. #
8# #
9# This program is free software: you can redistribute it and/or modify #
10# it under the terms of the GNU General Public License as published by #
11# the Free Software Foundation, either version 3 of the License, or #
12# (at your option) any later version. #
13# #
14# This program is distributed in the hope that it will be useful, #
15# but WITHOUT ANY WARRANTY; without even the implied warranty of #
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
17# GNU General Public License for more details. #
18# #
19# You should have received a copy of the GNU General Public License #
20# along with this program. If not, see <http://www.gnu.org/licenses/>. #
21# #
22###############################################################################
23#
953882ff 24# Version: 2020/26/04 19:35:23
0d6cc79d
SF
25#
26# This wio.cgi is based on the Code from the IPCop WIO Addon
27# and is extremly adapted to work with IPFire.
28#
29# Autor: Stephan Feddersen
30# Co-Autor: Alexander Marx
83596e70 31# Co-Autor: Frank Mainz (for some Code for the IPCop WIO Addon)
0d6cc79d
SF
32#
33
34use strict;
35
36# enable only the following on debugging purpose
37#use warnings;
38#no warnings 'once';
39#use CGI::Carp 'fatalsToBrowser';
40
41my $debug = 0;
42
43use Socket;
44use POSIX qw(strftime);
45use File::Copy;
46use Fatal qw/ open /;
47use Net::Telnet;
48
49require '/var/ipfire/general-functions.pl';
1bee37ba 50require '/var/ipfire/network-functions.pl';
0d6cc79d
SF
51require '/var/ipfire/lang.pl';
52require '/var/ipfire/header.pl';
53require '/usr/lib/wio/wio-lib.pl';
54require '/usr/lib/wio/wio-graphs.pl';
55
56my $logdir = "/var/log/wio";
57
58my ( %mainsettings, %mailsettings, %wiosettings, %cgiparams, %netsettings, %ipshash,
59 %vpnconfighash, %ovpnconfighash, %ovpnccdconfhash, %ovpnsettings, %checked, %selected, %color ) = ();
60
61&General::readhash('/var/ipfire/main/settings', \%mainsettings);
62&General::readhash('/var/ipfire/ethernet/settings', \%netsettings);
63&General::readhash('/var/ipfire/dma/mail.conf', \%mailsettings);
64&General::readhash('/var/ipfire/wio/wio.conf', \%wiosettings);
65&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
66&General::readhasharray('/var/ipfire/ovpn/ovpnconfig', \%ovpnconfighash);
67&General::readhash('/var/ipfire/ovpn/settings', \%ovpnsettings);
68&General::readhasharray('/var/ipfire/ovpn/ccd.conf', \%ovpnccdconfhash);
69&General::readhasharray('/var/ipfire/vpn/config', \%vpnconfighash);
70
71my $ipadrfile = "$logdir/wioips";
72my $onoffip = "$logdir/wioscip";
73my $wiosettings = "/var/ipfire/wio/wio.conf";
74my $dyndnsconfig = "/var/ipfire/ddns/config";
75my $importfile = "$logdir/importfile";
76my $wiofile = "$logdir/wiofile";
77my $editfile = "$logdir/editfile";
78my $hostfile = "/var/ipfire/main/hosts";
79my $dhcpfile = "/var/ipfire/dhcp/fixleases";
80my $imgstatic = "/images/wio";
81my $rrddir = "/var/log/rrd/wio";
82my $refreshbox = '<meta http-equiv="refresh" content="0;url=/cgi-bin/wio.cgi">';
83my $sortstring = '^IPADR|^HOST';
84my $ovpnaddon = "/var/ipfire/ovpn";
85my $ovpnpid = "/var/run/openvpn.pid";
86my $vpnpid = "/var/run/charon.pid";
87my $redactive = "/var/ipfire/red/active";
88my $redip = '-';
89my $now = strftime "%Y-%m-%d", localtime;
90
91if ( -e $redactive ) {
92 open(IPADDR, "/var/ipfire/red/local-ipaddress");
93 $redip = <IPADDR>;
94 close IPADDR;
95 chomp($redip);
96}
97
98my $i = 0;
99my $idarp = 0;
100my $iddyndns = 0;
101my $idvpn = 0;
102my $idovpn = 0;
103my $idsort = 0;
104my $nr = 0;
105my $count = 0;
106my $showcount = 0;
107
a25c95b3 108my $arpbuttontext = "$Lang::tr{'wio_show_table_on'}";
c1fc92a9
SFD
109my $clientimportbuttontext = "$Lang::tr{'wio_show_table_on'}";
110my $networksearchbuttontext = "$Lang::tr{'wio_show_table_on'}";
a25c95b3 111
c1fc92a9 112my ( $message, $infomessage, $errormessage, $importmessage ) = '';
0d6cc79d
SF
113
114my ( $buttontext, $host, $timestamp, $ipadr, $on, $remark, $dyndns, $dyndnsip, $sendemailon, $net, $dev, $iprange, $output, $write, $webinterface,
115 $sendemailoff, $pingmethode, $online, $color, $bgcolor, $exitcode, $id, $line, $interface, $counter, $vpnn2nip, $vpnn2nmask, $ddns, $edc,
116 $edd, $wmon, $wmoff, $ipfqdn, $http, $wioscan, $statustxt, $status, $key, $ic, $text, $image ) = ();
117
118my ( @temp, @dates, @ipaddresses, @names, @remark, @sendemailon, @sendemailoff, @current, @ddns, @match, @webinterface, @arpcache, @arpadd, @line,
119 @hosts, @vpnstatus, @ovpnstatus, @activ, @dyndns, @pingmethode, @status, @id, @write, @log );
120
121my @nosaved = ('ACTION','ID','CLIENTID','TIMESTAMP','IPADR','HOST','REMARK','DYNDNS','SENDEMAILON','SENDEMAILOFF','PINGMETHODE','ONLINE','WEBINTERFACE');
122
123my @devs_color = ('GREEN','BLUE','ORANGE','RED');
124my @devs_net = ('green0','blue0','orange0','red0');
125my @devs_img = ('green.png','blue.png','orange.png','red.png');
126my @devs_alt = ('green','blue','orange','red');
127
128my %ifacecolor = ( GREEN => 'wio_run_green', BLUE => 'wio_run_blue', ORANGE => 'wio_run_orange');
129
130&loadips();
131
132## some wio settings
133
134$wiosettings{'ACTION'} = '';
135$wiosettings{'COUNT'} = '';
136$wiosettings{'ID'} = '';
137$wiosettings{'CLIENTID'} = '';
138$wiosettings{'SORT'} = 'IPADR';
139$wiosettings{'HOST'} = '';
140$wiosettings{'IPADR'} = '';
141$wiosettings{'EN'} = 'on';
142$wiosettings{'REMARK'} = '';
143$wiosettings{'DYNDNS'} = '';
144$wiosettings{'CLIENTREMARK'} = '';
145$wiosettings{'SENDEMAILON'} = '';
146$wiosettings{'SENDEMAILOFF'} = '';
147$wiosettings{'PINGMETHODE'} = 'ip';
148$wiosettings{'WEBINTERFACE'} = '----';
149$wiosettings{'TIMEOUT'} = '1';
150$wiosettings{'TIMESTAMP'} = '';
151$wiosettings{'ONLINE'} = 'off';
152$wiosettings{'CRON'} = '15';
153$wiosettings{'OVPNCRON'} = '5';
154$wiosettings{'ENABLE'} = 'off';
155$wiosettings{'LOGGING'} = 'off';
156$wiosettings{'MAILREMARK'} = 'off';
157$wiosettings{'MAILSTYLE'} = 'email';
158$wiosettings{'OVPNRWMAIL'} = 'off';
159$wiosettings{'SHUTDOWN'} = 'off';
a25c95b3
SFD
160$wiosettings{'WIOGUISHOWARPTABLE'} = '';
161$wiosettings{'WIOGUISHOWCLIENTIMPORTTABLE'} = '';
162$wiosettings{'WIOGUISHOWNETWORKSEARCHTABLE'} = '';
0d6cc79d
SF
163
164&Header::getcgihash(\%wiosettings);
165&Header::getcgihash(\%mainsettings);
166&Header::getcgihash(\%mailsettings);
167&Header::getcgihash(\%netsettings);
168
169if ( $mailsettings{'USEMAIL'} eq 'on' ) { $wiosettings{'SENDEMAIL'} = 'on'; }
170else { $wiosettings{'SENDEMAIL'} = 'off'; }
171
172if ( -e $wiofile ) { goto WIOSCAN; }
173
174## get network ips
175foreach (@devs_color) {
176 if ( $netsettings{"${_}_DEV"} ne '' ) {
1bee37ba
SF
177 $wiosettings{"${_}_IPLOW"} = &Network::find_next_ip_address($netsettings{"${_}_NETADDRESS"}, 1);
178 $wiosettings{"${_}_IPHIGH"} = &Network::find_next_ip_address($netsettings{"${_}_BROADCAST"}, -1);
0d6cc79d
SF
179 }
180}
181
182## save wio settings
183
184if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_save'}.'1' ) {
185 unless ( `ps -A | grep wio.pl` ) {
186 $cgiparams{'SORT'} = $wiosettings{'SORT'};
187 $cgiparams{'CRON'} = $wiosettings{'CRON'};
188 $cgiparams{'OVPNCRON'} = $wiosettings{'OVPNCRON'};
189 $cgiparams{'ENABLE'} = $wiosettings{'ENABLE'};
190 $cgiparams{'LOGGING'} = $wiosettings{'LOGGING'};
191 $cgiparams{'TIMEOUT'} = $wiosettings{'TIMEOUT'};
192 $cgiparams{'ACTION'} = $wiosettings{'ACTION'};
193 $cgiparams{'CLIENTREMARK'} = $wiosettings{'CLIENTREMARK'};
194 $cgiparams{'MAILREMARK'} = $wiosettings{'MAILREMARK'};
195 $cgiparams{'MAILSTYLE'} = $wiosettings{'MAILSTYLE'};
196 $cgiparams{'OVPNRWMAIL'} = $wiosettings{'OVPNRWMAIL'};
197 $cgiparams{'SHUTDOWN'} = $wiosettings{'SHUTDOWN'};
198
199 &General::writehash($wiosettings, \%cgiparams);
200 &General::readhash($wiosettings, \%wiosettings);
201
202 if ( $wiosettings{'ENABLE'} eq 'off' ) {
203 &WIO::clearfile($ipadrfile);
204 unlink glob "$rrddir/*";
205 }
206 }
207 else {
208 $infomessage = "$Lang::tr{'wio_error_function'}";
209 }
210}
211
212## save imported clients
213
214if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_save'}.'2' ) {
215 unless ( `ps -A | grep wio.pl` ) {
216 while ( $count < $wiosettings{'COUNT'} ) {
217 if ( defined($wiosettings{"USE$count"}) && $wiosettings{"USE$count"} eq 'on' ) {
83596e70 218 $wiosettings{'CLIENTID'} = $wiosettings{"CLIENTID$count"};
0d6cc79d
SF
219 $wiosettings{'TIMESTAMP'} = $wiosettings{"TIMESTAMP$count"};
220 $wiosettings{'IPADR'} = $wiosettings{"IPADR$count"};
221 $wiosettings{'HOST'} = $wiosettings{"HOST$count"};
222 $wiosettings{'EN'} = $wiosettings{"EN$count"};
223 $wiosettings{'REMARK'} = $wiosettings{"REMARK$count"};
224 $wiosettings{'DYNDNS'} = $wiosettings{"DYNDNS$count"};
225 $wiosettings{'SENDEMAILON'} = $wiosettings{"SENDEMAILON$count"};
226 $wiosettings{'SENDEMAILOFF'} = $wiosettings{"SENDEMAILOFF$count"};
227 $wiosettings{'PINGMETHODE'} = $wiosettings{"PINGMETHODE$count"};
228 $wiosettings{'ONLINE'} = $wiosettings{"ONLINE$count"};
83596e70 229 $wiosettings{'WEBINTERFACE'} = $wiosettings{"WEBINTERFACE$count"};
0d6cc79d
SF
230
231 &validSave();
232
233 if ($errormessage) {
234 open(FILE, ">> $editfile");
235 print FILE "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n";
236 close(FILE);
237 $importmessage = $errormessage;
238 }
239 else {
240 $wiosettings{'CLIENTID'} = &General::findhasharraykey (\%ipshash);
241 unshift (@current, "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n");
242 &SortDataFile('',@current);
243 }
244 }
245 $count++;
246 }
247
248 map ($wiosettings{$_} = '' ,@nosaved);
249 unlink ($importfile);
250 if ( -e "$editfile" ) { goto EDIT; }
251 }
252 else {
253 $infomessage = "$Lang::tr{'wio_error_function'}";
254 }
255}
256
257## add or update client
258
259if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_client_add'} ) {
260 unless ( `ps -A | grep wio.pl` ) {
261 &validSave();
262
263 unless ($errormessage) {
264 if ( $wiosettings{'ID'} eq '' && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} ) {
265 $wiosettings{'CLIENTID'} = &General::findhasharraykey (\%ipshash);
266 unshift (@current, "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n");
267 }
268 else {
269 @current[$wiosettings{'ID'}] = "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n";
270 }
271 }
272 else { goto ERROR; }
273
274 map ($wiosettings{$_} = '' ,@nosaved);
275 &SortDataFile('',@current);
276 }
277 else {
278 $infomessage = "$Lang::tr{'wio_error_function'}";
279 }
280}
281
a25c95b3
SFD
282## show / hide arptable
283
c1fc92a9 284if ( $wiosettings{'WIOGUISHOWARPTABLE'} eq 'arptable' ) {
83596e70
SF
285 unless ( `ps -A | grep wio.pl` ) {
286 if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_show_table_off'} ) {
287 $wiosettings{'WIOGUISHOWARPTABLE'} = 'off';
288 $arpbuttontext = "$Lang::tr{'wio_show_table_on'}";
289 }
290 else {
291 $wiosettings{'WIOGUISHOWARPTABLE'} = 'on';
292 $arpbuttontext = "$Lang::tr{'wio_show_table_off'}";
293 }
a25c95b3
SFD
294 }
295 else {
83596e70 296 $infomessage = "$Lang::tr{'wio_error_function'}";
a25c95b3
SFD
297 }
298}
299
300## show / hide clientimporttable
301
302if ( $wiosettings{'WIOGUISHOWCLIENTIMPORTTABLE'} eq 'clientimport' ) {
83596e70
SF
303 unless ( `ps -A | grep wio.pl` ) {
304 if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_show_table_off'} ) {
305 $wiosettings{'WIOGUISHOWCLIENTIMPORTTABLE'} = 'off';
306 $clientimportbuttontext = "$Lang::tr{'wio_show_table_on'}";
307 }
308 else {
309 $wiosettings{'WIOGUISHOWCLIENTIMPORTTABLE'} = 'on';
310 $clientimportbuttontext = "$Lang::tr{'wio_show_table_off'}";
311 }
a25c95b3
SFD
312 }
313 else {
83596e70 314 $infomessage = "$Lang::tr{'wio_error_function'}";
a25c95b3
SFD
315 }
316}
317
318## show / hide networksearchtable
319
320if ( $wiosettings{'WIOGUISHOWNETWORKSEARCHTABLE'} eq 'networksearch' ) {
83596e70
SF
321 unless ( `ps -A | grep wio.pl` ) {
322 if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_show_table_off'} ) {
323 $wiosettings{'WIOGUISHOWNETWORKSEARCHTABLE'} = 'off';
324 $networksearchbuttontext = "$Lang::tr{'wio_show_table_on'}";
325 }
326 else {
327 $wiosettings{'WIOGUISHOWNETWORKSEARCHTABLE'} = 'on';
328 $networksearchbuttontext = "$Lang::tr{'wio_show_table_off'}";
329 }
a25c95b3
SFD
330 }
331 else {
83596e70 332 $infomessage = "$Lang::tr{'wio_error_function'}";
a25c95b3
SFD
333 }
334}
335
0d6cc79d
SF
336## add arp client
337
338if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_add'} ) {
339 unless ( `ps -A | grep wio.pl` ) {
340 open(FILE, "$logdir/.arpcache");
341 @arpadd = <FILE>;
342 close (FILE);
343
344 chomp(@arpadd[$wiosettings{'ID'}]);
345 @temp = split (/\,/, @arpadd[$wiosettings{'ID'}]);
346
347 $wiosettings{'CLIENTID'} = &General::findhasharraykey (\%ipshash);
348 $wiosettings{'IPADR'} = $temp[1];
349 $wiosettings{'HOST'} = $temp[2];
350 $wiosettings{'EN'} = 'on';
351
352 $wiosettings{'PINGMETHODE'} = 'ip';
353 $wiosettings{'ONLINE'} = 'off';
354
355 open(FILE, ">> $editfile");
356 print FILE "$wiosettings{'CLIENTID'},$wiosettings{'TIMESTAMP'},$wiosettings{'IPADR'},$wiosettings{'HOST'},$wiosettings{'EN'},$wiosettings{'REMARK'},$wiosettings{'DYNDNS'},$wiosettings{'SENDEMAILON'},$wiosettings{'SENDEMAILOFF'},$wiosettings{'PINGMETHODE'},$wiosettings{'ONLINE'},$wiosettings{'WEBINTERFACE'}\n";
357 close(FILE);
358
359 goto EDIT;
360 }
361 else {
362 undef($wiosettings{'ID'});
363 $infomessage = "$Lang::tr{'wio_error_function'}";
364 }
365}
366
c1fc92a9 367## enable / disable client || enable / disable dyndns || enable / disable sendemailon || enable / disable sendemailoff || change ip / fqdn
0d6cc79d
SF
368
369if ( $wiosettings{'ACTION'} eq $Lang::tr{'enable disable client'} ) { $edc = 'on'; }
370if ( $wiosettings{'ACTION'} eq $Lang::tr{'enable disable dyndns'} ) { $edd = 'on'; }
371if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_mail_online'} ) { $wmon = 'on'; }
372if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_mail_offline'} ) { $wmoff = 'on'; }
373if (( $wiosettings{'ACTION'} eq $Lang::tr{'wio_ip_on'} ) || ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_fqdn_on'} )) { $ipfqdn = 'on'; }
374
375if ( defined($edc) || defined($edd) || defined($wmon) || defined($wmoff) || defined($ipfqdn) ) {
376 unless ( `ps -A | grep wio.pl` ) {
377 chomp(@current[$wiosettings{'ID'}]);
378 @temp = split (/\,/, @current[$wiosettings{'ID'}]);
379
380 if ( $edc eq 'on' ) {
381 $temp[4] = $temp[4] ne '' ? '' : 'on';
382 $temp[10] = '';
383 $temp[11] = '';
384 $temp[1] = '';
385 unlink "$rrddir/$temp[0].rrd";
386 }
387 elsif ( $edd eq 'on' ) { $temp[6] = $temp[6] ne '' ? '' : 'on'; }
388 elsif ( $wmon eq 'on' ) { $temp[7] = $temp[7] ne '' ? '' : 'on'; }
389 elsif ( $wmoff eq 'on' ) { $temp[8] = $temp[8] ne '' ? '' : 'on'; }
390 elsif ( $ipfqdn eq 'on' ) { $temp[9] = $temp[9] eq 'fqdn' ? 'ip' : 'fqdn'; }
391
392 @current[$wiosettings{'ID'}] = join (',', @temp)."\n";
393 undef($wiosettings{'ID'});
394
395 &writeips();
396 }
397 else {
398 undef($wiosettings{'ID'});
399 $infomessage = "$Lang::tr{'wio_error_function'}";
400 }
401}
402
403## refresh wio status || refresh single client status
404
405if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_refresh'} || $wiosettings{'ACTION'} eq $Lang::tr{'wio_sc_refresh'} ) {
406
83596e70
SF
407unless ( `ps -A | grep wio.pl` ) {
408
0d6cc79d
SF
409 if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_sc_refresh'} ) {
410 open(FILE, "> $onoffip");
411 print FILE @current[$wiosettings{'ID'}];
412 close(FILE);
413
414 undef($wiosettings{'ID'});
415 }
416
0d6cc79d
SF
417&Header::showhttpheaders();
418&Header::openpage($Lang::tr{'wio'}, 1, $refreshbox);
419&Header::openbigbox('100%', 'left', '');
420&Header::openbox('100%', 'left', $Lang::tr{'wio_info'});
421
422print"
423<table align='center' width='100%'>
424 <tr><td align='center'>$Lang::tr{'wio_msg'}</td></tr>
425 <tr><td>&nbsp;</td></tr>
426 <tr><td align='center'><img align='middle' src='/images/indicator.gif' /></td></tr>
427</table>
428";
429
430&Header::closebox();
431&Header::closebigbox();
432&Header::closepage();
433
434while ( system("/usr/local/bin/wiohelper", "&") ) {}
435
83596e70 436exit 0;
0d6cc79d
SF
437}
438else {
439 $infomessage = "$Lang::tr{'wio_already_running'}";
a25c95b3 440 unlink($onoffip);
0d6cc79d
SF
441}
442
443}
444
445## refresh dyndns ip
446
447if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_dyndns_refresh'} ) {
448 unless ( `ps -A | grep wio.pl` ) {
449 chomp(@current[$wiosettings{'ID'}]);
450 @temp = split (/\,/, @current[$wiosettings{'ID'}]);
451
452 ($temp[2], $infomessage) = &WIO::getdyndnsip($temp[2], $temp[3]);
453
454 @current[$wiosettings{'ID'}] = join (',', @temp)."\n";
455
456 &writeips();
457
458 undef($wiosettings{'ID'});
459 }
460 else {
461 $infomessage = "$Lang::tr{'wio_error_function'}";
462 }
463}
464
465## edit client
466
467if ( $wiosettings{'ACTION'} eq $Lang::tr{'edit'} ) {
468 unless ( `ps -A | grep wio.pl` ) {
469 chomp(@current[$wiosettings{'ID'}]);
470 @temp = split (/\,/, @current[$wiosettings{'ID'}]);
471
472 $wiosettings{'CLIENTID'} = $temp[0];
473 $wiosettings{'TIMESTAMP'} = $temp[1];
474 $wiosettings{'IPADR'} = $temp[2];
475 $wiosettings{'HOST'} = $temp[3];
476 $wiosettings{'EN'} = $temp[4];
477 $wiosettings{'REMARK'} = $temp[5];
478 $wiosettings{'DYNDNS'} = $temp[6];
479 $wiosettings{'SENDEMAILON'} = $temp[7];
480 $wiosettings{'SENDEMAILOFF'} = $temp[8];
481 $wiosettings{'PINGMETHODE'} = $temp[9];
482 $wiosettings{'ONLINE'} = $temp[10];
483 $wiosettings{'WEBINTERFACE'} = $temp[11];
484 }
485 else {
486 undef($wiosettings{'ACTION'});
487 $infomessage = "$Lang::tr{'wio_error_function'}";
488 }
489}
490
491## remove client
492
493if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_remove_client'} ) {
494 unless ( `ps -A | grep wio.pl` ) {
495 chomp(@current[$wiosettings{'ID'}]);
496
497 @temp = split (/\,/, @current[$wiosettings{'ID'}]);
498
499 unlink "$rrddir/$temp[0].rrd";
500
501 splice (@current,$wiosettings{'ID'},1);
502
503 &writeips();
504
505 undef($wiosettings{'ID'});
506 }
507 else {
508 undef($wiosettings{'ID'});
509 $infomessage = "$Lang::tr{'wio_error_function'}";
510 }
511}
512
513## remove all clients
514
515if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_remove_all'} ) {
516 unless ( `ps -A | grep wio.pl` ) {
517 &WIO::clearfile($ipadrfile);
518 unlink glob "$rrddir/*";
519 undef(@current);
520 }
521 else {
522 $infomessage = "$Lang::tr{'wio_error_function'}";
523 }
524}
525
526## back function
527
528if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_back'} ) {
529 if ( -e "$importfile" ) { unlink ($importfile); }
530 map ($wiosettings{$_} = '' ,@nosaved);
531 undef($errormessage);
532}
533
534## import hosts, fixleases or csv file || scan networks (green/blue/orange)
535
536if ( $wiosettings{'ACTION'} eq 'wio_run_green' ||
537 $wiosettings{'ACTION'} eq 'wio_run_blue' ||
538 $wiosettings{'ACTION'} eq 'wio_run_orange') { $wioscan = 'on'; }
539
540if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' ||
541 $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ||
542 $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'3' ||
543 defined($wioscan) || defined($importmessage) ) {
544
545unless ( `ps -A | grep wio.pl` ) {
546 if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' && $importmessage eq '' ) {
547
548 &Header::getcgihash(\%wiosettings, {'wantfile' => 1, 'filevar' => 'CSVFILE'});
549
550 if ( $wiosettings{'CSVFILE'} eq '' ) {
551 $errormessage = $Lang::tr{'wio_no_file_selected'};
552 $message = 2; goto ERROR;
553 }
554
555 if ( $wiosettings{'CSVFILE'} =~ /[^a-z0-9A-Z\ \.\-\_\:\\]+/ ) {
556 $errormessage = $Lang::tr{'wio_no_csv_error'};
557 $message = 2; goto ERROR;
558 }
559
560 if ( !($wiosettings{'CSVFILE'} =~ /.csv$/) ) {
561 $errormessage = $Lang::tr{'wio_no_csv'};
562 $message = 2; goto ERROR;
563 }
564
565 if (copy($wiosettings{'CSVFILE'}, "$logdir/importfile") != 1) {
566 $errormessage = $!;
567 $message = 2; goto ERROR;
568 }
569 }
570
571EDIT:
572
573&General::readhash($wiosettings, \%wiosettings);
574
575&Header::showhttpheaders();
576&Header::openpage($Lang::tr{'wio'}, 1, '');
577&Header::openbigbox('100%', 'left');
578
579if ($importmessage) {
580 &Header::openbox('100%', 'left', $Lang::tr{'wio_error'}, 'error');
581 print" <table width='100%'><tr><td><font class='base'>$importmessage</font></td></tr></table>";
582 &Header::closebox();
583}
584
585if ( -e "$editfile" ) {
586 open(FILE, "< $editfile" ); }
587elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' ) {
588 open(FILE, "< $importfile" ); }
589elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
590 open(FILE, "< $hostfile" ); }
591elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'3' ) {
592 open(FILE, "< $dhcpfile" ); }
593elsif ( $wioscan eq 'on' ) {
594
595 foreach (keys(%ifacecolor)) {
596 if ( $netsettings{"${_}_DEV"} eq $wiosettings{'ID'} ) {
597 $dev = $netsettings{"${_}_DEV"};
598 $iprange = $wiosettings{"${_}_IPLOW"} . "-" . $wiosettings{"${_}_IPHIGH"};
599
600 if ( $_ eq 'GREEN' ) { $color = "$Header::colourgreen"; $net = $Lang::tr{'wio_msg_green'}; }
601 elsif ( $_ eq 'BLUE' ) { $color = "$Header::colourblue"; $net = $Lang::tr{'wio_msg_blue'}; }
602 else { $color = "$Header::colourorange"; $net = $Lang::tr{'wio_msg_orange'}; }
603 }
604 }
605
606&Header::openbox('100%', 'left', $Lang::tr{'wio_info'});
607 print"<table width='100%'>
608 <tr><td align='center'><font class='base'>$Lang::tr{'wio_msg_left'} </font><font class='base' color='$color'><b>$net</b></font> $Lang::tr{'wio_msg_center'} <font class='base' color='$color'><b>$dev</b></font><font class='base'> $Lang::tr{'wio_msg_right'} $Lang::tr{'wio_msg_hint'}</font></td></tr>
609 <tr><td>&nbsp;</td></tr>
610 <tr><td align='center'><img align='middle' src='/images/indicator.gif' /></td></tr>
611 </table>";
612&Header::closebox();
613&Header::closebigbox();
614
615 open(FILE, "/usr/local/bin/wioscan -wsa $dev $iprange |" );
616
617}
618
619@hosts = <FILE>;
620close(FILE);
621
622if ( $wioscan ne 'on' && ! -e $wiofile ) { @hosts = sort @hosts; }
623else {
624 open(FILE, "> $wiofile");
625 print FILE @hosts;
626 close(FILE);
627
628 print"<meta http-equiv=\"refresh\" content=\"0; URL=$ENV{'SCRIPT_NAME'}\">";
629 exit 0;
630}
631
632WIOSCAN:
633
634if ( -e $wiofile ) {
635 open(FILE, "< $wiofile");
636 @hosts = <FILE>;
637 close (FILE);
638
639 &General::readhash($wiosettings, \%wiosettings);
640
641 &Header::showhttpheaders();
642 &Header::openpage($Lang::tr{'wio'}, 1, '');
643 &Header::openbigbox('100%', 'left');
644}
645
646foreach (@hosts) {
647 chomp;
648
649 @line = split (/\,/, $_);
650
651 if ( -e $editfile || -e $importfile ) {
652 $wiosettings{'CLIENTID$count'} = $line[0];
653 $wiosettings{'TIMESTAMP$count'} = $line[1];
654 $wiosettings{'IPADR$count'} = $line[2];
655 $wiosettings{'HOST$count'} = $line[3];
656 $wiosettings{'EN$count'} = $line[4];
657 $wiosettings{'REMARK$count'} = $line[5];
658 $wiosettings{'DYNDNS$count'} = $line[6];
659 $wiosettings{'SENDEMAILON$count'} = $line[7];
660 $wiosettings{'SENDEMAILOFF$count'} = $line[8];
661 $wiosettings{'PINGMETHODE$count'} = $line[9];
662 $wiosettings{'ONLINE$count'} = $line[10];
663 $wiosettings{'WEBINTERFACE$count'} = $line[11];
664 $wiosettings{'USE$count'} = 'on';
665 }
666 else {
667 $wiosettings{'IPADR$count'} = $line[1];
668 $wiosettings{'EN$count'} = 'on';
669 $wiosettings{'PINGMETHODE$count'} = 'ip';
670 $wiosettings{'USE$count'} = 'on';
671
672 if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
673 $wiosettings{'HOST$count'} = $line[2];
674 $wiosettings{'DOM$count'} = $line[3];
675 $wiosettings{'REMARK$count'} = '';
676 }
677 elsif ( $wioscan eq 'on' || -e $wiofile ) {
678 $wiosettings{'HOST$count'} = gethostbyaddr(inet_aton($line[1]), AF_INET);
679 if ($wiosettings{'HOST$count'} eq '') { $wiosettings{'HOST$count'} = $line[1]; }
680 $wiosettings{'REMARK$count'} = '';
0d6cc79d
SF
681 }
682 else {
683 $wiosettings{'HOST$count'} = $line[7];
684 $wiosettings{'REMARK$count'} = $line[6];
685 }
686 }
687
688 $checked{'EN$count'}{'on'} = ($wiosettings{'EN$count'} eq '' ) ? '' : "checked='checked'";
689
690 $checked{'DYNDNS$count'}{'on'} = ($wiosettings{'DYNDNS$count'} eq '' ) ? '' : "checked='checked'";
691 $checked{'SENDEMAILON$count'}{'on'} = ($wiosettings{'SENDEMAILON$count'} eq '' ) ? '' : "checked='checked'";
692 $checked{'SENDEMAILOFF$count'}{'on'} = ($wiosettings{'SENDEMAILOFF$count'} eq '' ) ? '' : "checked='checked'";
693
694 $checked{'PINGMETHODE$count'}{'ip'} = $checked{'PINGMETHODE$count'}{'fqdn'} = '';
695 $checked{'PINGMETHODE$count'}{$wiosettings{'PINGMETHODE$count'}} = "checked='checked'";
696
697 $checked{'USE$count'}{'on'} = ($wiosettings{'USE$count'} eq '' ) ? '' : "checked='checked'";
698
699 $selected{'WEBINTERFACE$count'}{'----'} = '';
700 $selected{'WEBINTERFACE$count'}{'HTTP'} = '';
701 $selected{'WEBINTERFACE$count'}{'HTTPS'} = '';
702 $selected{'WEBINTERFACE$count'}{$wiosettings{'WEBINTERFACE$count'}} = "selected='selected'";
703
704if (! &WIO::checkinto($wiosettings{'IPADR$count'}, $wiosettings{'HOST$count'}, @current) ) {
705
706if ( $importmessage ) {
707 &Header::openbox('100%', 'left', "$Lang::tr{'wio_import_data'}'$wiosettings{'HOST$count'}'$Lang::tr{'wio_import_data1'}");
708}
709elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'1' || $wioscan eq 'on' || -e $wiofile || -e $editfile ) {
710 &Header::openbox('100%', 'left', "$Lang::tr{'wio_import_data'}'$wiosettings{'HOST$count'}'$Lang::tr{'wio_import_data2'}");
711}
712elsif ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
713 &Header::openbox('100%', 'left', "$Lang::tr{'wio_import_data'}'$wiosettings{'HOST$count'}.$wiosettings{'DOM$count'}'$Lang::tr{'wio_import_data2'}");
714}
715else {
716 &Header::openbox('100%', 'left', $Lang::tr{'wio_import_leases'});
717}
718
719print"
720<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
721<input type='hidden' name='ONLINE$count' value='$wiosettings{'ONLINE$count'}' />
722
723<table width='100%'>
724<tr>
725 <td>$Lang::tr{'wio_use'}</td>
726 <td><input type='checkbox' name='USE$count' $checked{'USE$count'}{'on'} /></td>
727</tr>
728<tr>
729 <td>$Lang::tr{'wio_client_enable'}</td>
730 <td><input type='checkbox' name='EN$count' $checked{'EN$count'}{'on'} /></td>
731</tr>
732<tr>
733 <td>$Lang::tr{'host ip'}:</td>
734 <td><input type='text' name='IPADR$count' value='$wiosettings{'IPADR$count'}' size='18' /></td>
735 <td>$Lang::tr{'hostname'}:</td>
736";
737
738if ( $wiosettings{'ACTION'} eq $Lang::tr{'wio_import'}.'2' ) {
739 print"<td><input type='text' name='HOST$count' size='18' value='$wiosettings{'HOST$count'}.$wiosettings{'DOM$count'}' /></td>";
740}
741else {
742 print"<td><input type='text' name='HOST$count' size='18' value='$wiosettings{'HOST$count'}' /></td>";
743}
744
745print"
746 <td>$Lang::tr{'remark'}:</td>
747 <td><input type='text' name='REMARK$count' value='$wiosettings{'REMARK$count'}' size='18' /></td>
748</tr>
749<tr>
750 <td class='base'>$Lang::tr{'wio_ping_send'}:</td>
751 <td align='left'><input type='radio' name='PINGMETHODE$count' value='ip' $checked{'PINGMETHODE$count'}{'ip'} />&nbsp;IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='PINGMETHODE$count' value='fqdn' $checked{'PINGMETHODE$count'}{'fqdn'} />&nbsp;FQDN</td>
752 <td>$Lang::tr{'wio_dyndns'}:</td>
753 <td><input type='checkbox' name='DYNDNS$count' $checked{'DYNDNS$count'}{'on'} /></td>
754";
755
756if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
757 print"<td>$Lang::tr{'wio_sendemail'}:</td>
758 <td><input type='checkbox' name='SENDEMAILON$count' $checked{'SENDEMAILON$count'}{'on'} />&nbsp;$Lang::tr{'wio_online'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='SENDEMAILOFF$count' $checked{'SENDEMAILOFF$count'}{'on'} />&nbsp;$Lang::tr{'wio_offline'}</td>";
759}
760else {
761 print"<td colspan='2'>&nbsp;</td>";
762}
763
764print"
765</tr>
766<tr>
1bee37ba 767 <td height='30'>$Lang::tr{'wio_link_open'}:</td>
0d6cc79d
SF
768 <td align='left' colspan='5'>
769 <select size='1' name='WEBINTERFACE$count' width='80' style='width: 80px'>
770 <option value='----' $selected{'WEBINTERFACE$count'}{'----'}>----</option>
771 <option value='HTTP' $selected{'WEBINTERFACE$count'}{'HTTP'}>HTTP</option>
772 <option value='HTTPS' $selected{'WEBINTERFACE$count'}{'HTTPS'}>HTTPS</option>
773 </select>
774 </td>
775</tr>
776</table>
777";
778
779&Header::closebox();
780$showcount++;
781}
782$count++;
783}
784
785if ( $showcount gt 0 ) {
786&Header::openbox('100%', 'left', $Lang::tr{'wio_import_infos'});
787
788print"
789<table width='100%'>
790<tr>
791";
792
793if ($importmessage) { print"<td>&nbsp;</td>"; }
794else { print"<td><font color='$color{'color11'}'>$Lang::tr{'wio_import_infos_csv'}</font></td>"; }
795
796print"
797</tr>
798<tr><td colspan='4'>&nbsp;</td></tr>
799</table>
800<table width='100%'>
801<tr>
802 <td width='25%'>&nbsp;</td>
803 <td width='25%'><input type='hidden' name='COUNT' value='$count' /><input type='hidden' name='ACTION' value='$Lang::tr{'wio_save'}2' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_save'}' /></form></td>
804 <td width='25%'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='submit' name='ACTION' value='$Lang::tr{'wio_back'}' /></form></td>
805 <td width='25%'>&nbsp;</td>
806</tr>
807</table>
808";
809
810&Header::closebox();
811&Header::closebigbox();
812&Header::closepage();
813}
814else {
815 print"<meta http-equiv=\"refresh\" content=\"0; URL=$ENV{'SCRIPT_NAME'}?INFO\">";
816}
817
818if ( -e "$editfile" ) { unlink ($editfile); }
819if ( -e "$wiofile" ) { unlink($wiofile); }
820exit 0;
821}
822else {
823 $infomessage = "$Lang::tr{'wio_error_function'}";
824}
825}
826
827## skript function
828
829if ($ENV{'QUERY_STRING'} =~ /$sortstring/ ) {
830 my $string = $ENV{'QUERY_STRING'};
831
832 if ( $string eq 'INFO' ) {
833 $infomessage = $Lang::tr{'wio_import_info_csv'};
834 }
835 else {
836 &General::readhash($wiosettings, \%wiosettings);
837
838 my $actual = $wiosettings{'SORT'};
839
840 if ($actual =~ $string) {
841 my $Rev = '';
842 if ($actual !~ 'Rev') { $Rev = 'Rev'; }
843 $string.=$Rev;
844 }
845
846 system("/bin/sed -i 's#$wiosettings{'SORT'}#$string#g' $wiosettings");
847
848 $wiosettings{'SORT'} = $string;
849 map ($wiosettings{$_} = '' ,@nosaved);
850 &SortDataFile('',@current);
851 }
852}
853
854## main part
855
856ERROR:
857
858unless($message == 1) { &General::readhash($wiosettings, \%wiosettings); }
859
860for ($i=5; $i<=60; $i+=5) { $selected{'CRON'}{$i} = ''; }
861
862$selected{'CRON'}{$wiosettings{'CRON'}} = "selected='selected'";
863
864for ($i=1; $i<=15; $i++) {
865 $selected{'TIMEOUT'}{$i} = '';
866 $selected{'OVPNCRON'}{$i} = '';
867}
868
869$selected{'TIMEOUT'}{$wiosettings{'TIMEOUT'}} = "selected='selected'";
870$selected{'OVPNCRON'}{$wiosettings{'OVPNCRON'}} = "selected='selected'";
871
872$checked{'ENABLE'}{'off'} = $checked{'ENABLE'}{'on'} = '';
873$checked{'ENABLE'}{$wiosettings{'ENABLE'}} = "checked='checked'";
874
875$checked{'LOGGING'}{'off'} = $checked{'LOGGING'}{'on'} = '';
876$checked{'LOGGING'}{$wiosettings{'LOGGING'}} = "checked='checked'";
877
878$checked{'CLIENTREMARK'}{'off'} = $checked{'CLIENTREMARK'}{'on'} = '';
879$checked{'CLIENTREMARK'}{$wiosettings{'CLIENTREMARK'}} = "checked='checked'";
880
881$checked{'MAILREMARK'}{'off'} = $checked{'MAILREMARK'}{'on'} = '';
882$checked{'MAILREMARK'}{$wiosettings{'MAILREMARK'}} = "checked='checked'";
883
884$checked{'OVPNRWMAIL'}{'off'} = $checked{'OVPNRWMAIL'}{'on'} = '';
885$checked{'OVPNRWMAIL'}{$wiosettings{'OVPNRWMAIL'}} = "checked='checked'";
886
887$checked{'SHUTDOWN'}{'off'} = $checked{'SHUTDOWN'}{'on'} = '';
888$checked{'SHUTDOWN'}{$wiosettings{'SHUTDOWN'}} = "checked='checked'";
889
890$checked{'MAILSTYLE'}{'smail'} = $checked{'MAILSTYLE'}{'email'} = '';
891$checked{'MAILSTYLE'}{$wiosettings{'MAILSTYLE'}} = "checked='checked'";
892
893&Header::showhttpheaders();
894&Header::openpage($Lang::tr{'wio'}, 1, "<meta http-equiv='expires' content='-1'><meta http-equiv='cache-control' content='no-store, no-cache, must-revalidate'><meta http-equiv='pragma' content='no-cache'>");
895&Header::openbigbox('100%', 'left', '');
896
897## DEBUG / ERROR / INFO / UPDATE
898
899if ( $debug ) {
900 &Header::openbox('100%', 'left', 'DEBUG', 'warning');
901
902 print"errormessage: $errormessage<br />\n";
903 print"infomessage: $infomessage<br />\n";
904
905 &hrline();
a25c95b3 906
0d6cc79d
SF
907 my $wiodebug = 0;
908 foreach (sort keys %wiosettings) {
909 print"$_ = $wiosettings{$_}<br />\n";
910 $wiodebug++;
911 }
912
913 &hrline();
914
915 my $netdebug = 0;
916 foreach (sort keys %netsettings) {
917 print"$_ = $netsettings{$_}<br />\n";
918 $netdebug++;
919 }
920 &Header::closebox();
921}
922
923if ( $errormessage ) {
924 &Header::openbox('100%', 'left', $Lang::tr{'wio_error'}, 'error');
925 print"<table width='100%'><tr><td><font class='base'><b>$errormessage</b></font></td></tr></table>";
926 &Header::closebox();
927}
928
929if ( $infomessage ) {
930 &Header::openbox('100%', 'left', $Lang::tr{'wio_info'}, 'warning');
931 print"<table width='100%'><tr><td><font class='base'><b>$infomessage</b></font></td></tr></table>";
932 &Header::closebox();
933}
934
935## wio configuration
936
937if ( $wiosettings{'ACTION'} eq $Lang::tr{'edit'}.'1' || $message == 1 || $wiosettings{'ENABLE'} eq 'off' ) {
938
939&Header::openbox('100%', 'left', $Lang::tr{'wio settings'});
940
941print"
942<form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
943<table width='100%'>
944<tr>
a25c95b3 945 <td width='55%' bgcolor='$color{'color20'}' align='left' height='20'><b>&nbsp;$Lang::tr{'wio_settings_msg'}</b></td>
0d6cc79d 946 <td width='2%'>&nbsp;</td>
a25c95b3 947 <td width='43%'>&nbsp;</td>
0d6cc79d
SF
948</tr>
949<tr><td colspan='3'>&nbsp;</td></tr>
950<tr>
951 <td colspan='3'>$Lang::tr{'wio_settings_msg_hint'}</td>
952</tr>
953<tr><td colspan='3'>&nbsp;</td></tr>
954<tr>
955 <td align='right'>$Lang::tr{'wio enabled'}</td>
956";
957
958print"<td>&nbsp;</td>";
959
960if ( $wiosettings{'ENABLE'} eq 'on' ) {
961 print"<td align='left'><input type='checkbox' onClick=\"return confirm('$Lang::tr{'wio_disable_hint'}')\" name='ENABLE' $checked{'ENABLE'}{'on'} /></td>";
962}
963else {
964 print"<td align='left'><input type='checkbox' name='ENABLE' $checked{'ENABLE'}{'on'} /></td>";
965}
966print"
967</tr>
968<tr><td colspan='3'>&nbsp;</td></tr>
969<tr>
970 <td align='right'>$Lang::tr{'wio_shutdown'}</td>
971 <td>&nbsp;</td>
972 <td align='left'><input type='checkbox' name='SHUTDOWN' $checked{'SHUTDOWN'}{'on'} /></td>
973</tr>
974<tr><td colspan='3'>&nbsp;</td></tr>
975<tr>
976 <td align='right'>$Lang::tr{'wio cron'}</td>
977 <td>&nbsp;</td>
978 <td align='left'><select size='1' name='CRON' size='5'>
979";
980
fe6f676b
SF
981for ($i=5; $i<=60; $i+=5) {
982 $_ = sprintf("%02s",$i);
983 print "<option $selected{'CRON'}{$_}>$_</option>\n";
984}
0d6cc79d
SF
985
986print"
987 </select>&nbsp;$Lang::tr{'wio min'}</td>
988</tr>
989<tr><td colspan='3'>&nbsp;</td></tr>
990<tr>
991 <td align='right'>$Lang::tr{'wio timeout'}</td>
992 <td>&nbsp;</td>
993 <td align='left'><select size='1' name='TIMEOUT' size='5'>
994";
995
fe6f676b
SF
996for ($i=1; $i<=15; $i++) {
997 $_ = sprintf("%02s",$i);
998 print "<option $selected{'TIMEOUT'}{$_}>$_</option>\n";
999}
0d6cc79d 1000
c1fc92a9 1001print"
0d6cc79d
SF
1002 </select>&nbsp;$Lang::tr{'wio sec'}</td>
1003</tr>
1004<tr><td colspan='3'>&nbsp;</td></tr>
1005<tr>
1006 <td align='right'>$Lang::tr{'wio_logging'}</td>
1007 <td>&nbsp;</td>
1008 <td align='left'><input type='checkbox' name='LOGGING' $checked{'LOGGING'}{'on'} /></td>
1009</tr>
1010<tr><td colspan='3'>&nbsp;</td></tr>
1011<tr>
1012 <td align='right'>$Lang::tr{'wio_clientremark'}</td>
1013 <td>&nbsp;</td>
1014 <td align='left'><input type='checkbox' name='CLIENTREMARK' $checked{'CLIENTREMARK'}{'on'} /></td>
1015</tr>
1016<tr><td colspan='3'>&nbsp;</td></tr>
0d6cc79d
SF
1017";
1018
1019if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
1020print"
1021<tr>
1022 <td align='right'>$Lang::tr{'wio_mail_style'}:</td>
1023 <td>&nbsp;</td>
1024 <td align='left'><input type='radio' name='MAILSTYLE' value='smail' $checked{'MAILSTYLE'}{'smail'} />&nbsp;$Lang::tr{'wio_mail_smail'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='MAILSTYLE' value='email' $checked{'MAILSTYLE'}{'email'} />&nbsp;$Lang::tr{'wio_mail_email'}</td>
1025</tr>
1026<tr><td colspan='3'>&nbsp;</td></tr>
1027<tr>
1028 <td align='right'>$Lang::tr{'wio_mailremark_enabled'}</td>
1029 <td>&nbsp;</td>
1030 <td align='left'><input type='checkbox' name='MAILREMARK' $checked{'MAILREMARK'}{'on'}></td>
1031</tr>
1032<tr><td colspan='3'>&nbsp;</td></tr>
1033";
1034}
1035if ( -e "$ovpnaddon" || ! -z "/var/ipfire/vpn/config" ) {
1036print"
1037<tr>
1038 <td align='right'>$Lang::tr{'wio_mail_ovpnrw'}</td>
1039 <td>&nbsp;</td>
1040 <td align='left'><input type='checkbox' name='OVPNRWMAIL' $checked{'OVPNRWMAIL'}{'on'}></td>
1041</tr>
1042<tr><td colspan='3'>&nbsp;</td></tr>
1043<tr>
1044 <td align='right'>$Lang::tr{'wio_ovpn_cron'}</td>
1045 <td>&nbsp;</td>
1046 <td align='left'><select size='1' name='OVPNCRON' size='5'>
1047";
1048
fe6f676b
SF
1049for ($i=1; $i<=15; $i++) {
1050 $_ = sprintf("%02s",$i);
1051 print "<option $selected{'OVPNCRON'}{$_}>$_</option>\n";
1052}
0d6cc79d
SF
1053
1054print"
1055 </select>&nbsp;$Lang::tr{'wio min'}</td>
1056</tr>
1057<tr><td colspan='3'>&nbsp;</td></tr>
1058";
1059}
1060print"
1061<tr><td colspan='3'>&nbsp;</td></tr>
1062<tr>
1063 <td colspan='2'>&nbsp;</td>
1064 <td align='left'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_save'}1' /><input type='submit' name='submit' value='$Lang::tr{'wio_save'}' />"
1065 .($wiosettings{'ENABLE'} ne 'off' ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='button' onClick='location.href=\"/cgi-bin/wio.cgi\"' value='$Lang::tr{'wio_back'}'>" : "")
1066 ."</td>
1067</tr>
1068</table>
1069</form>
1070";
1071
1072&Header::closebox();
1073&Header::closebigbox();
1074&Header::closepage();
1075exit 0;
1076}
1077
1078## wio client status
1079
1080if ( $wiosettings{'ENABLE'} eq 'on') {
1081 if ( !$errormessage && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} || $message == 2 ) {
1082 &Header::openbox('100%', 'left', $Lang::tr{'wio stat'});
1083
1084 foreach (@current) {
1085 chomp;
1086
1087 ($id,$timestamp,$ipadr,$host,$on,$remark,$dyndns,$sendemailon,$sendemailoff,$pingmethode,$online,$webinterface) = split (/\,/, $_);
1088
1089 if ( defined($dyndns) && ( $dyndns =~ 'on' ) ) {
1090 ($dyndnsip, $infomessage) = &WIO::getdyndnsip($ipadr, $host);
1091
1092 if ( $dyndnsip ne $ipadr ) {
1093 $ipadr = $dyndnsip;
1094 $write = 'on';
1095 }
1096 }
1097
1098 push (@id,($id));
1099
1100 if ( $on eq 'on' ) { push (@dates,($timestamp)); }
1101 else { push (@dates,('-')); }
1102
1103 push (@ipaddresses,($ipadr));
1104 push (@names,($host));
1105 push (@activ,($on));
1106 push (@remark,($remark));
1107 push (@dyndns,($dyndns));
1108 push (@sendemailon,($sendemailon));
1109 push (@sendemailoff,($sendemailoff));
1110 push (@pingmethode,($pingmethode));
1111 push (@status,($online));
1112 push (@webinterface,($webinterface));
1113
1114 push (@write, "$id,$timestamp,$ipadr,$host,$on,$remark,$dyndns,$sendemailon,$sendemailoff,$pingmethode,$online,$webinterface\n");
1115
1116 $nr++;
1117 }
1118
1119 if ( defined($write) ) { &writeips(); }
1120
1121## wan connection
1122
1123print"
1124<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
a25c95b3
SFD
1125<tr height='25'>
1126 <td width='33%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_wan_con'}</b></td>
1127 <td width='67%' align='right'>&nbsp;</td>
0d6cc79d
SF
1128</tr>
1129<tr><td colspan='2'>&nbsp;</td></tr>
1130</table>
1131
1132<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1133<tr bgcolor='$color{'color20'}' height='20'>
1134 <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
1135 <td width='15%' align='center'><b>$Lang::tr{'wio ipadress'}</b></td>
1136 <td width='3%' align='center'><b>$Lang::tr{'wio network'}</b></td>
1137 <td width='15%' align='center'><b>$Lang::tr{'wio_lanname'}</b></td>
1138 <td width='15%' align='center'><b>$Lang::tr{'wio_wanname'}</b></td>
1139 <td width='24%' align='center'><b>$Lang::tr{'wio_dyndns_hosts'}</b></td>
1140 <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
c1fc92a9 1141 <td width='14%' align='center'><b>$Lang::tr{'wio_connected'}</b></td>
0d6cc79d
SF
1142</tr>
1143<tr bgcolor='$color{'color22'}' height='20'>
1144 <td align='center'>01</td>
1145 <td align='center'><font color='$Header::colourred'>$redip</b></font></td>
1146 <td align='center'><img align='middle' src='$imgstatic/red.png' alt='$Lang::tr{'internet'}' title='$Lang::tr{'internet'}' /></td>
1147 <td align='center'><font color='$Header::colourgreen'>".$mainsettings{'HOSTNAME'}.".".$mainsettings{'DOMAINNAME'}."</font></td>
1148 <td align='center'><font color='$Header::colourred'>".( $redip ne '-' ? (gethostbyaddr(pack("C4", split (/\./, $redip)), 2))[0] : '-' )."</font></td>
1149 <td align='center'>
1150";
1151
1152if ( -s "$dyndnsconfig" ) {
1153
1154open(FILE, "< $dyndnsconfig");
1155@ddns = <FILE>;
1156close (FILE);
1157
1158$ddns = @ddns;
1159$bgcolor = "blue";
1160
1161 foreach (@ddns) {
1162 chomp;
1163
1164 @temp = split (/\,/, $_);
1165
1166 if ( $temp[7] eq "on" ) { $bgcolor = ( &General::DyndnsServiceSync (&General::GetDyndnsRedIP,$temp[1],$temp[2]) ? "$Header::colourgreen" : "$Header::colourred" ); }
1167
1168 print"<font color='$bgcolor'>$temp[1].$temp[2]</font>";
1169
1170 if ( $iddyndns++ ne ($ddns-1) ) { print"<b>, </b>"; }
1171 }
1172}
1173else { print"<b> - </b>"; }
1174
1175print"
1176 </td>
1177 <td align='center'>
1178 <table bgcolor='".( -e $redactive ? "${Header::colourgreen}" : "${Header::colourred}" )."' cellpadding='2' cellspacing='0' width='100%'>
1179 <tr height='20'>
1180 <td align='center'><font color='white'><b>".( -e $redactive ? $Lang::tr{'wio_wan_up'} : $Lang::tr{'wio_wan_down'} )."</b></font></td>
1181 </tr>
1182 </table>
1183 </td>
1184 <td align='center'><font color='$Header::colourred'>".( -e "$redactive" ? &General::age("$redactive") : '-' )."</font></td>
1185</tr>
1186<tr height='1'><td colspan='9' bgcolor='#696565'></td></tr>
1187</table>
1188";
1189
1190&hrline();
1191
1192## vpn connection(s)
1193
1194if ( -e "$vpnpid" ) {
1195
1196@vpnstatus = `/usr/local/bin/ipsecctrl I`;
1197
1198print"
1199<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
a25c95b3
SFD
1200<tr height='25'>
1201 <td width='33%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_vpn_con'}</b></td>
1202 <td width='67%'>&nbsp;</td>
0d6cc79d
SF
1203</tr>
1204<tr><td colspan='2'>&nbsp;</td></tr>
1205</table>
1206<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1207<tr bgcolor='$color{'color20'}' height='20'>
1208 <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
1209 <td width='19%' align='center'><b>$Lang::tr{'wio checked'}</b></td>
1210 <td width='20%' align='center'><b>$Lang::tr{'name'}</b></td>
1211 <td width='8%' align='center'><b>$Lang::tr{'type'}</b></td>
1212 <td width='25%' align='center'><b>$Lang::tr{'wio_common_name'}</b></td>
1213 <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
c1fc92a9 1214 <td width='14%' align='center'><b>$Lang::tr{'wio_connected'}</b></td>
0d6cc79d
SF
1215</tr>
1216";
1217
1218foreach $key (sort SortByTunnelName (keys(%vpnconfighash))) {
1219
953882ff 1220my ( $vpncheck, $vpntime, $vpnclient ) = '';
0d6cc79d
SF
1221
1222if ( -e '/var/log/wio/.vpncache' ) {
1223 $vpncheck = strftime("%d.%m.%Y - %H:%M:%S",localtime(((stat('/var/log/wio/.vpncache'))[9])));
1224}
1225
1226$status = "bgcolor='${Header::colourred}'";
1227$statustxt = "$Lang::tr{'capsclosed'}";
953882ff 1228$vpnclient = $vpnconfighash{$key}[1];
0d6cc79d
SF
1229
1230 if ($vpnconfighash{$key}[0] eq 'off') {
1231 $status = "bgcolor='${Header::colourblue}'";
1232 $statustxt = "$Lang::tr{'capsclosed'}";
1233 }
1234
1235 foreach (@vpnstatus) {
953882ff 1236 if ($_ =~ /$vpnclient.*ESTABLISHED/) {
0d6cc79d
SF
1237 $status = "bgcolor='${Header::colourgreen}'";
1238 $statustxt = "$Lang::tr{'capsopen'}";
953882ff
SF
1239 $vpntime = `/usr/local/bin/ipsecctrl I | grep $vpnclient.*ESTABLISHED | sed 's/^[ \t]*//' | cut -d " " -f 3-4`;
1240 $vpntime = &WIO::contime($vpntime, "ipsec");
0d6cc79d
SF
1241 last;
1242 }
1243 }
1244
1245 print"<tr".($idvpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
1246
1247 my $vpnnr = $idvpn+1;
1248
953882ff 1249 printf ("<td align='center'>%02d</td>", $vpnnr);
0d6cc79d
SF
1250
1251 print"<td align='center'>$vpncheck</td>
953882ff
SF
1252 <td align='center'>$vpnclient</td>
1253 <td align='center'><img align='middle' src='$imgstatic/".($vpnconfighash{$key}[3] eq 'host' ? "vpnrw.png' alt='$Lang::tr{'wio_rw'}' title='$Lang::tr{'wio_rw'}'" : "vpnn2n.png' alt='$Lang::tr{'wio_n2n'}' title='$Lang::tr{'wio_n2n'}'")." /></td>
0d6cc79d
SF
1254 <td align='center'>".($vpnconfighash{$key}[2] eq '%auth-dn' ? "$vpnconfighash{$key}[9]" : ($vpnconfighash{$key}[4] eq 'cert' ? "$vpnconfighash{$key}[2]" : ($vpnconfighash{$key}[8] ne '' ? "$vpnconfighash{$key}[10]" : "&nbsp;")))."</td>
1255 <td align='center'>
1256 <table $status cellpadding='2' cellspacing='0' width='100%'>
1257 <tr height='20'>
1258 <td align='center'><font color='white'><b>$statustxt</b></font></td>
1259 </tr>
1260 </table>
1261 </td>
953882ff 1262 <td align='center' height='20'>".(defined($vpntime)? "$vpntime" : "-")."</td>
0d6cc79d
SF
1263 </tr>
1264";
c1fc92a9 1265
0d6cc79d
SF
1266if ($vpnconfighash{$key}[25] && $wiosettings{'CLIENTREMARK'} eq 'on') {
1267 print"<tr".($idvpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td>&nbsp;</td><td colspan='16' align='left'>$vpnconfighash{$key}[25]</td></tr>";
1268}
1269 print"<tr height='1'><td colspan='7' bgcolor='#696565'></td></tr>";
1270 $idvpn++
1271}
1272
1273print"</table>";
1274&hrline();
1275}
1276
1277## openvpn connection(s)
1278
1279if ( -e "$ovpnpid" ) {
1280
1281@ovpnstatus = `cat /var/run/ovpnserver.log`;
1282
1283print"
1284<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
a25c95b3
SFD
1285<tr height='25'>
1286 <td width='33%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_ovpn_con'}</b></td>
1287 <td width='67%'>&nbsp;</td>
0d6cc79d
SF
1288</tr>
1289<tr><td colspan='2'>&nbsp;</td></tr>
1290</table>
1291<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1292<tr bgcolor='$color{'color20'}' height='20'>
1293 <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
1294 <td width='19%' align='center'><b>$Lang::tr{'wio checked'}</b></td>
1295 <td width='20%' align='center'><b>$Lang::tr{'wio ipadress'}</b></td>
1296 <td width='8%' align='center'><b>$Lang::tr{'type'}</b></td>
1297 <td width='25%' align='center'><b>$Lang::tr{'common name'}</b></td>
1298 <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
c1fc92a9 1299 <td width='14%' align='center'><b>$Lang::tr{'wio_connected'}</b></td>
0d6cc79d
SF
1300</tr>
1301";
1302
1303 foreach $key (keys %ovpnconfighash) {
1304
1305 my ( $ovpnclt, $ovpntime, $ovpnrwip, $ovpncheck ) = '';
1306
1307 if ( -e '/var/log/wio/.ovpncache' ) {
1308 $ovpncheck = strftime("%d.%m.%Y - %H:%M:%S",localtime(((stat('/var/log/wio/.ovpncache'))[9])));
1309 }
1310
1311 print"<tr".($idovpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
1312
1313 my $ovpnnr = $idovpn+1;
1314
1315 printf ("<td align='center' height='20'> %02d</td>", $ovpnnr);
1316
1317 if ($ovpnconfighash{$key}[3] eq 'net') {
1318 $image = "$imgstatic/ovpnn2n.png";
1319 $text = "$Lang::tr{'wio_n2n'}";
1320 }
1321 else {
1322 $image = "$imgstatic/ovpnrw.png";
1323 $text = "$Lang::tr{'wio_rw'}";
1324 }
1325
1326 if ( $ovpnconfighash{$key}[0] eq 'off' ) {
1327 $status = "${Header::colourblue}";
1328 $statustxt = "$Lang::tr{'capsclosed'}";
1329 }
1330 else {
0d6cc79d
SF
1331 if ($ovpnconfighash{$key}[3] eq 'net') {
1332 if (-e "/var/run/$ovpnconfighash{$key}[1]n2n.pid") {
1333 my @output = "";
1334 my @tustate = "";
1335 my $tport = $ovpnconfighash{$key}[22];
1336 my $tnet = new Net::Telnet ( Timeout=>5, Errmode=>'return', Port=>$tport);
1337 if ($tport ne '') {
1338 $tnet->open('127.0.0.1');
1339 @output = $tnet->cmd(String => 'state', Prompt => '/(END.*\n|ERROR:.*\n)/');
1340 @tustate = split(/\,/, $output[1]);
953882ff 1341 $ovpntime = &WIO::contime(scalar localtime($tustate[0]), "ovpn");
0d6cc79d
SF
1342
1343 if (($tustate[1] eq 'CONNECTED')) {
1344 $status = "${Header::colourgreen}";
1345 $statustxt = "$Lang::tr{'capsopen'}";
1346 }else {
1347 $status = "${Header::colourred}";
1348 $statustxt = "$tustate[1]";
1349 }
1350 }
1351 }
1352 }
1353 else {
1354 foreach (@ovpnstatus) {
1355 if ( $_ =~ /^(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(\d+),(\d+),(.+)/ ) {
1356 @match = split (m/^(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(\d+),(\d+),(.+)/, $_);
1357 $match[1] =~ s/[_]/ /g;
1358 }
1359
1360 if ( $match[1] ne "Common Name" && ($match[1] eq $ovpnconfighash{$key}[2]) ) {
1361 $ovpnclt = $match[1];
953882ff 1362 $ovpntime = &WIO::contime($match[5], "ovpn");
0d6cc79d
SF
1363 }
1364
1365 if ( $_ =~ /^(\d+\.\d+\.\d+\.\d+),(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(.+)/ ) {
1366 @match = split(m/^(\d+\.\d+\.\d+\.\d+),(.+),(\d+\.\d+\.\d+\.\d+\:\d+),(.+)/, $_);
1367 }
1368
1369 if ( $match[1] ne "Virtual Address" && $match[2] eq $ovpnclt ) {
1370 $ovpnrwip = $match[1];
1371 $ovpncheck = &WIO::statustime($match[4]);
1372 }
1373
1374 if ( $ovpnclt eq $ovpnconfighash{$key}[2] ) {
1375 $status = "${Header::colourgreen}";
1376 $statustxt = "$Lang::tr{'capsopen'}";
1377 }
1378 else {
1379 $status = "${Header::colourred}";
1380 $statustxt = "$Lang::tr{'capsclosed'}";
1381 }
1382 }
1383 }
1384}
1385
1386 print"
953882ff
SF
1387 <td align='center'>".(defined($ovpncheck)? "$ovpncheck" : "-")."</td>
1388 <td align='center'>".(defined($ovpnrwip)? "$ovpnrwip" : "-")."</td>
0d6cc79d
SF
1389 <td align='center'><img align='middle' src='$image' alt='$text' title='$text' /></td>
1390 <td align='center'>".($ovpnconfighash{$key}[2] eq '%auth-dn' ? "$ovpnconfighash{$key}[9]" : ($ovpnconfighash{$key}[4] eq 'cert' ? "$ovpnconfighash{$key}[2]": "&nbsp;"))."</td>
1391 <td align='center'><table bgcolor='$status' cellpadding='2' cellspacing='0' width='100%'><tr height='20'><td align='center'><font color='white'><b>$statustxt</b></font></td></tr></table></td>
953882ff 1392 <td align='center'>".(defined($ovpntime)? "$ovpntime" : "-")."</td>
0d6cc79d
SF
1393</tr>
1394";
1395 if ($ovpnconfighash{$key}[25] && $wiosettings{'CLIENTREMARK'} eq 'on') {
1396 print"<tr".($idovpn % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td>&nbsp;</td><td colspan='16' align='left'>$ovpnconfighash{$key}[25]</td></tr>";
1397 }
c1fc92a9 1398
0d6cc79d
SF
1399 print"<tr height='1'><td colspan='17' bgcolor='#696565'></td></tr>";
1400 $idovpn++
1401 }
1402 print"</table>";
1403 &hrline();
1404}
1405#}
1406
1407## client status
1408
1409print"
1410<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
a25c95b3
SFD
1411<tr height='25'>
1412 <td width='33%' bgcolor='$color{'color20'}' align='left'><b>&nbsp;$Lang::tr{'wio_clients'}</b></td>
1413 <td width='67%'>&nbsp;</td>
0d6cc79d
SF
1414</tr>
1415<tr><td colspan='2'>&nbsp;</td></tr>
1416</table>
1417
1418<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1419<tr bgcolor='$color{'color20'}' height='20'>
1420 <td width='3%' align='center'><b>$Lang::tr{'wio_id'}</b></td>
1421 <td width='4%' align='center'><b>$Lang::tr{'wio_activ'}</b></td>
1422 <td width='5%' align='center'><b>$Lang::tr{'wio_check'}</b></td>
1423 <td width='15%' align='center'><b>$Lang::tr{'wio checked'}</b></td>
1424 <td width='4%' align='center'><b>$Lang::tr{'wio_webinterface'}</b></td>
1425 <td width='11%' align='center'><a href='$ENV{'SCRIPT_NAME'}?IPADR'><b>$Lang::tr{'wio ipadress'}</b></a></td>
1426 <td width='5%' align='center'><b>$Lang::tr{'wio network'}</b></td>
1427 <td width='20%' align='center'><a href='$ENV{'SCRIPT_NAME'}?HOST'><b>$Lang::tr{'wio name'}</b></a></td>
1428 <td width='11%' align='center'><b>$Lang::tr{'wio image'}</b></td>
1429 <td width='4%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_refresh'}' /><input type='image' name='$Lang::tr{'wio_refresh'}' src='$imgstatic/refresh.png' align='middle' alt='$Lang::tr{'wio_refresh'}' title='$Lang::tr{'wio_refresh'}' /></form></td>
1430 <td width='4%' colspan='2' align='center'><b>$Lang::tr{'wio_dyndns'}</b></td>
1431 <td width='12%' colspan='4' align='center'><b>$Lang::tr{'action'}</b></td>
1432 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_remove_all'}' /><input type='image' name='$Lang::tr{'wio_remove_all'}' src='/images/delete.gif' align='middle' alt='$Lang::tr{'wio_remove_all'}' title='$Lang::tr{'wio_remove_all'}' onClick=\"return confirm('$Lang::tr{'wio_remove_all_hint'}')\"/></form></td>
1433</tr>
1434";
1435
1436for (my $a=0; $a<$nr; $a++) {
1437
1438my $gif = 'off.gif';
1439my $gdesc = $Lang::tr{'wio_client_off'};
1440my $dyndnsimg = 'on.gif';
1441my $dyndnsimgtxt = $Lang::tr{'wio_dyndns_on'};
1442my $mailonimg = 'wio/mailgreenon.png';
1443my $mailonimgtxt = $Lang::tr{'wio_mail_online_on'};
1444my $mailoffimg = 'wio/mailredon.png';
1445my $mailoffimgtxt = $Lang::tr{'wio_mail_offline_on'};
1446my $pingimg = '';
1447my $pingtxt = '';
1448my $webimg = '';
1449
1450if ( $activ[$a] eq 'on' ) {
1451 $gif = 'on.gif';
1452 $gdesc = $Lang::tr{'wio_client_on'};
1453}
1454
1455if ( $dyndns[$a] ne 'on' ) {
1456 $dyndnsimg = 'off.gif';
1457 $dyndnsimgtxt = $Lang::tr{'wio_dyndns_off'};
1458}
1459
1460if ( $sendemailon[$a] ne 'on' ) {
1461 $mailonimg = 'wio/mailgreenoff.png';
1462 $mailonimgtxt = $Lang::tr{'wio_mail_online_off'};
1463}
1464
1465if ( $sendemailoff[$a] ne 'on' ) {
1466 $mailoffimg = 'wio/mailredoff.png';
1467 $mailoffimgtxt = $Lang::tr{'wio_mail_offline_off'};
1468}
1469
1470if ( $webinterface[$a] eq 'HTTP' ) {
1471 $webimg = 'wio/http.png';
1472}
1473elsif ( $webinterface[$a] eq 'HTTPS' ) {
1474 $webimg = 'wio/https.png';
1475}
1476else {
1477 $webimg = 'wio/none.png';
1478}
1479
1480$bgcolor = $status[$a] eq "on" ? "${Header::colourgreen}" : ($status[$a] eq "off" && $dates[$a] eq "") ? "${Header::colourblue}" : "${Header::colourred}";
1481$statustxt = $status[$a] eq "on" ? "$Lang::tr{'wio up'}" : ($status[$a] eq "off" && $dates[$a] eq "") ? "$Lang::tr{'wio_no_image'}" : "$Lang::tr{'wio down'}";
1482
1483print"<tr".($a % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
1484printf ("<td align='center'> %02d</td>", $a+1);
1485
1486print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1487 <input type='hidden' name='ACTION' value='$Lang::tr{'enable disable client'}' />
1488 <input type='image' name='$Lang::tr{'enable disable client'}' src='/images/$gif' align='middle' alt='$gdesc' title='$gdesc' />
1489 <input type='hidden' name='ID' value='$a' /></form></td>";
1490
1491if ( $pingmethode[$a] eq 'ip') {
1492 print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1493 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_ip_on'}' />
1494 <input type='image' name='$Lang::tr{'wio_ip_on'}' src='/images/wio/ip.png' align='middle' alt='$Lang::tr{'wio_ip_on'}' title='$Lang::tr{'wio_ip_on'}' />
1495 <input type='hidden' name='ID' value='$a' /></form></td>";
1496}
1497else {
1498 print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1499 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_fqdn_on'}' />
1500 <input type='image' name='$Lang::tr{'wio_fqdn_on'}' src='/images/wio/fqdn.png' align='middle' alt='$Lang::tr{'wio_fqdn_on'}' title='$Lang::tr{'wio_fqdn_on'}' />
1501 <input type='hidden' name='ID' value='$a' /></form></td>";
1502}
1503
1504print"<td align='center'>$dates[$a]</td>";
1505
1506print"<td align='center'><img align='middle' src='/images/$webimg' /></td>";
1507
1508if ( $webinterface[$a] eq 'HTTP' ) {
1509 print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"http://$ipaddresses[$a]\" target=\"_blank\">$ipaddresses[$a]</a></td>";
1510}
1511elsif ( $webinterface[$a] eq 'HTTPS' ) {
1512 print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"https://$ipaddresses[$a]\" target=\"_blank\">$ipaddresses[$a]</a></td>";
1513}
1514else {
1515 print"<td align='center'>$ipaddresses[$a]</td>";
1516}
1517
1518my $dotip = length($ipaddresses[$a]) - rindex($ipaddresses[$a],'.');
1519 SWITCH: {
1520 foreach (@devs_color) {
1521 my $in = 0;
1522 $ic = "${_}";
1523
1524 foreach $interface (@devs_net) {
f928cc5a 1525 next if ( $netsettings{"$ic"."_DEV"} eq 'red0' && $netsettings{"RED_TYPE"} eq 'PPPOE');
0d6cc79d
SF
1526 if ( $netsettings{"$ic"."_DEV"} eq $interface ) {
1527 if ( &General::IpInSubnet($ipaddresses[$a], $netsettings{"$ic"."_NETADDRESS"}, $netsettings{"$ic"."_NETMASK"}) ) {
1528 print"<td align='center' height='20'><img src='$imgstatic/$devs_img[$in]' alt='$Lang::tr{$devs_alt[$in]}' title='$Lang::tr{$devs_alt[$in]}' /></td>";
1529 last SWITCH;
1530 }
1531 }
1532 $in++;
1533 }
1534 }
1535
0d6cc79d
SF
1536 if ( -e "$vpnpid" ) {
1537 foreach $key (keys(%vpnconfighash)) {
1538 next unless ($vpnconfighash{$key}[3] eq 'net');
c1fc92a9 1539
0d6cc79d 1540 my $convertip = &General::ipcidr2msk($vpnconfighash{$key}[11]);
a25c95b3 1541
0d6cc79d
SF
1542 my @net = split ("/", $convertip);
1543
1544 $vpnn2nip = $net[0];
1545 $vpnn2nmask = length($net[1]) - rindex($net[1],'.');
1546
1547 if (substr($ipaddresses[$a],0,length($ipaddresses[$a])-$dotip) eq substr($vpnn2nip,0,length($vpnn2nip)-$vpnn2nmask)) {
1548 print"<td align='center'><img align='middle' src='$imgstatic/vpn.png' alt='IPSec' title='IPSec' /></td>";
1549 last SWITCH;
1550 }
1551 }
1552 }
1553
1554 if ( $ovpnsettings{'DOVPN_SUBNET'} ne '' ) {
1555 @match = split ("/", $ovpnsettings{'DOVPN_SUBNET'});
1556
1557 if ( &General::IpInSubnet($ipaddresses[$a], $match[0], $match[1]) ) {
c1fc92a9
SFD
1558 print"<td align='center'><img src='$imgstatic/ovpn.png' alt='OpenVPN' title='OpenVPN' /></td>";
1559 last SWITCH;
0d6cc79d
SF
1560 }
1561 }
1562
1563 if ( %ovpnccdconfhash ne '' ) {
1564 foreach $key (keys(%ovpnccdconfhash)) {
c1fc92a9 1565
0d6cc79d 1566 my $convertip = &General::ipcidr2msk($ovpnccdconfhash{$key}[1]);
0d6cc79d
SF
1567 my @net = split ("/", $convertip);
1568
1569 $vpnn2nip = $net[0];
1570 $vpnn2nmask = length($net[1]) - rindex($net[1],'.');
1571
1572 if (substr($ipaddresses[$a],0,length($ipaddresses[$a])-$dotip) eq substr($vpnn2nip,0,length($vpnn2nip)-$vpnn2nmask)) {
1573 print"<td align='center'><img align='middle' src='$imgstatic/ovpn.png' alt='OpenVPN' title='OpenVPN' /></td>";
1574 last SWITCH;
1575 }
0d6cc79d
SF
1576 }
1577 }
a25c95b3 1578
f928cc5a 1579 if ( $netsettings{"RED_TYPE"} eq 'PPPOE' ) {
a25c95b3
SFD
1580 my $redipadr = qx'ip addr | grep red0 | grep inet | awk "{print \$2}"';
1581 my @rednet = split ("/", $redipadr);
1582 chomp ($rednet[1]);
1583 my $red_netmask = General::iporsubtodec($rednet[1]);
1584 my $red_netaddress = Network::get_netaddress("$rednet[0]/$red_netmask");
c1fc92a9 1585
a25c95b3
SFD
1586 if ( &General::IpInSubnet($ipaddresses[$a], $red_netaddress, $red_netmask) ) {
1587 print"<td align='center' height='20'><img src='$imgstatic/red.png' alt='$Lang::tr{'wio_red_lan'}' title='$Lang::tr{'wio_red_lan'}' /></td>";
1588 last SWITCH;
1589 }
f928cc5a
SF
1590 }
1591 else {
a25c95b3
SFD
1592 print"<td align='center'><img align='middle' src='$imgstatic/white.png' alt='$Lang::tr{'wio_unknown_lan'}' title='$Lang::tr{'wio_unknown_lan'}' /></td>";
1593 last SWITCH;
a25c95b3 1594 }
0d6cc79d
SF
1595 }
1596
1597if ( $webinterface[$a] eq 'HTTP' ) {
1598 print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"http://$names[$a]\" target=\"_blank\">$names[$a]</a></td>";
1599}
1600elsif ( $webinterface[$a] eq 'HTTPS' ) {
1601 print"<td align='center'><a title=\"$Lang::tr{'wio_webinterface_link'}\" href=\"https://$names[$a]\" target=\"_blank\">$names[$a]</a></td>";
1602}
1603else {
1604 print"<td align='center'>$names[$a]</td>";
1605}
1606
1607print"
1608 <td>
1609 <table bgcolor='$bgcolor' cellpadding='2' cellspacing='0' width='100%'>
1610 <tr height='20'>
1611 <td align='center'><font color='$color{'color21'}'><b>$statustxt</b></font></td>
1612 </tr>
1613 </table>
1614 </td>
1615
1616 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1617 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_sc_refresh'}' />
1618 <input type='image' name='$Lang::tr{'wio_sc_refresh'}' src='$imgstatic/refresh.png' align='middle' alt='$Lang::tr{'wio_sc_refresh'}' title='$Lang::tr{'wio_sc_refresh'}' />
1619 <input type='hidden' name='ID' value='$a' /></form></td>
1620
1621 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1622 <input type='hidden' name='ACTION' value='$Lang::tr{'enable disable dyndns'}' />
1623 <input type='image' name='$Lang::tr{'enable disable dyndns'}' src='/images/$dyndnsimg' align='middle' alt='$dyndnsimgtxt' title='$dyndnsimgtxt' />
1624 <input type='hidden' name='ID' value='$a' /></form></td>";
1625
1626if ( defined($dyndns[$a]) && ($dyndns[$a] eq 'on') ) {
1627 print"<td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1628 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_dyndns_refresh'}' />
1629 <input type='image' name='$Lang::tr{'wio_dyndns_refresh'}' src='/images/reload.gif' align='middle' alt='$Lang::tr{'wio_dyndns_refresh'}' title='$Lang::tr{'wio_dyndns_refresh'}' />
1630 <input type='hidden' name='ID' value='$a' /></form></td>";
1631}
1632else {
1633 print"<td width='3%' align='center'>-</td>";
1634}
1635
1636if ( -e "/var/log/rrd/wio/$id[$a].rrd" ) {
1637 print"
1638 <td width='3%' align='center'><form method='post' action='/cgi-bin/wiographs.cgi' enctype='multipart/form-data'>
1639 <input type='image' name='$Lang::tr{'wio_graphs'}' src='$imgstatic/graph.png' align='middle' alt='$Lang::tr{'wio_graphs'}' title='$Lang::tr{'wio_graphs'}' />
1640 <input type='hidden' name='HOSTID' value='$id[$a]' /><input type='hidden' name='HOSTNAME' value='$names[$a]' /></form></td>
1641 ";
1642}
1643else {
1644 print "<td width='3%' align='center'><img src='$imgstatic/no_graph.png' align='middle' alt='$Lang::tr{'wio_no_graphs'}' title='$Lang::tr{'wio_no_graphs'}' /></td>";
1645}
1646
1647if ( $wiosettings{'SENDEMAIL'} eq 'on') {
1648 print"<td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1649 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_mail_online'}' />
1650 <input type='image' name='$Lang::tr{'wio_mail_online'}' src='/images/$mailonimg' align='middle' alt='$mailonimgtxt' title='$mailonimgtxt' />
1651 <input type='hidden' name='ID' value='$a' /></form></td>
1652 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1653 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_mail_offline'}' />
1654 <input type='image' name='$Lang::tr{'wio_mail_offline'}' src='/images/$mailoffimg' align='middle' alt='$mailoffimgtxt' title='$mailoffimgtxt' />
1655 <input type='hidden' name='ID' value='$a' /></form></td>";
1656}
1657else {
1658 print"<td width='3%' align='center'>-</td>
1659 <td width='3%' align='center'>-</td>";
1660}
1661
1662print"
1663 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1664 <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
1665 <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' align='middle' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' />
1666 <input type='hidden' name='ID' value='$a' /></form></td>
1667
1668 <td width='3%' align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1669 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_remove_client'}' />
1670 <input type='image' name='$Lang::tr{'wio_remove_client'}' src='/images/delete.gif' align='middle' alt='$Lang::tr{'wio_remove_client'}' title='$Lang::tr{'wio_remove_client'}' onClick=\"return confirm('$Lang::tr{'wio_remove_client_hint'}')\" />
1671 <input type='hidden' name='ID' value='$a' /></form></td></tr>
1672";
1673
1674if ($remark[$a] && $wiosettings{'CLIENTREMARK'} eq 'on') {
1675 print"<tr".($a % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'><td>&nbsp;</td><td colspan='16' align='left'>$remark[$a]</td></tr>";
1676}
1677 print"<tr height='1'><td colspan='17' bgcolor='#696565'></td></tr>";
1678}
1679
1680print"</table>";
1681
1682&Header::closebox();
1683
1684}
1685
1686## add / modify client
1687
1688$checked{'EN'}{'on'} = ($wiosettings{'EN'} eq '' ) ? '' : "checked='checked'";
1689
1690$checked{'DYNDNS'}{'off'} = $checked{'DYNDNS'}{'on'} = '';
1691$checked{'DYNDNS'}{$wiosettings{'DYNDNS'}} = "checked='checked'";
1692
1693$checked{'SENDEMAILON'}{'off'} = $checked{'SENDEMAILON'}{'on'} = '';
1694$checked{'SENDEMAILON'}{$wiosettings{'SENDEMAILON'}} = "checked='checked'";
1695
1696$checked{'SENDEMAILOFF'}{'off'} = $checked{'SENDEMAILOFF'}{'on'} = '';
1697$checked{'SENDEMAILOFF'}{$wiosettings{'SENDEMAILOFF'}} = "checked='checked'";
1698
1699if (! defined($errormessage) && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} ) {
1700 $wiosettings{'PINGMETHODE'} = 'ip';
1701}
1702
1703$checked{'PINGMETHODE'}{'ip'} = $checked{'PINGMETHODE'}{'fqdn'} = '';
1704$checked{'PINGMETHODE'}{$wiosettings{'PINGMETHODE'}} = "checked='checked'";
1705
1706$selected{'WEBINTERFACE'}{'----'} = '';
1707$selected{'WEBINTERFACE'}{'HTTP'} = '';
1708$selected{'WEBINTERFACE'}{'HTTPS'} = '';
1709$selected{'WEBINTERFACE'}{$wiosettings{'WEBINTERFACE'}} = "selected='selected'";
1710
1711$buttontext = $Lang::tr{'wio_client_add'};
1712
1713if ( $wiosettings{'ACTION'} eq $Lang::tr{'edit'} || defined($errormessage) && ! defined($message) ) {
1714 &Header::openbox('100%', 'left', $Lang::tr{'wio_edit_client'});
1715 $buttontext = $Lang::tr{'update'};
1716}
1717else {
1718 &Header::openbox('100%', 'left', $Lang::tr{'wio_edit_settings'});
1719}
1720
1721if (! defined($errormessage) && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} ) {
1722print"
1723<table width='100%' border='0' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1724<tr>
a25c95b3
SFD
1725 <td width='33%' bgcolor='$color{'color20'}' align='left' height='25'><b>&nbsp;$Lang::tr{'wio_add'}</b></td>
1726 <td width='67%' align='right'>&nbsp;</td>
0d6cc79d
SF
1727</tr>
1728<tr>
1729 <td>&nbsp;</td>
1730</tr>
1731</table>
1732";
1733}
1734
1735print"
1736<form method='post' action='$ENV{'SCRIPT_NAME'}'>
1737<input type='hidden' name='ID' value='$wiosettings{'ID'}' />
1738<input type='hidden' name='CLIENTID' value='$wiosettings{'CLIENTID'}' />
1739<input type='hidden' name='ONLINE' value='$wiosettings{'ONLINE'}' />
1740<input type='hidden' name='TIMESTAMP' value='$wiosettings{'TIMESTAMP'}' />
1741";
1742
1743print"
1744<table width='100%' border='0' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1745<tr>
1746 <td height='30'>$Lang::tr{'wio_client_enable'}</td>
1747 <td align='left'><input type='checkbox' name='EN' $checked{'EN'}{'on'} /></td>
1748 <td colspan='4'>&nbsp;</td>
1749</tr>
1750<tr>
1751 <td height='30'>$Lang::tr{'wio ipadress'}:</td>
1752 <td align='left'><input type='text' name='IPADR' value='$wiosettings{'IPADR'}' size='25' /></td>
1753 <td>$Lang::tr{'wio name'}:</td>
1754 <td align='left'><input type='text' name='HOST' value='$wiosettings{'HOST'}' size='25' /></td>
1755 <td>$Lang::tr{'remark'}:</td>
1756 <td align='left'><input type='text' name='REMARK' value='$wiosettings{'REMARK'}' size='30'></td>
1757</tr>
1758<tr>
1759 <td height='30'>$Lang::tr{'wio_ping_send'}:</td>
1760 <td align='left'><input type='radio' name='PINGMETHODE' value='ip' $checked{'PINGMETHODE'}{'ip'} />&nbsp;IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='radio' name='PINGMETHODE' value='fqdn' $checked{'PINGMETHODE'}{'fqdn'} />&nbsp;FQDN</td>
1761 <td>$Lang::tr{'wio_dyndns'}:</td>
1762 <td align='left'><input type='checkbox' name='DYNDNS' $checked{'DYNDNS'}{'on'} /></td>
1763";
1764
1765if ( $wiosettings{'SENDEMAIL'} eq 'on' ) {
1766 print"<td>$Lang::tr{'wio_sendemail'}:</td>
1767 <td><input type='checkbox' name='SENDEMAILON' $checked{'SENDEMAILON'}{'on'} />&nbsp;$Lang::tr{'wio_online'}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' name='SENDEMAILOFF' $checked{'SENDEMAILOFF'}{'on'} />&nbsp;$Lang::tr{'wio_offline'}</td>";
1768}
1769else {
1770 print"<td colspan='2'>&nbsp;</td>";
1771}
1772
1773print"
1774</tr>
1775<tr>
1bee37ba 1776 <td height='30'>$Lang::tr{'wio_link_open'}:</td>
0d6cc79d
SF
1777 <td align='left' colspan='5'>
1778 <select size='1' name='WEBINTERFACE' width='80' style='width: 80px'>
1779 <option value='----' $selected{'WEBINTERFACE'}{'----'}>----</option>
1780 <option value='HTTP' $selected{'WEBINTERFACE'}{'HTTP'}>HTTP</option>
1781 <option value='HTTPS' $selected{'WEBINTERFACE'}{'HTTPS'}>HTTPS</option>
1782 </select>
1783 </td>
1784</tr>
1785</table>
1786<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1787<tr>
1788 <td width='20%' align='center'>&nbsp;</td>
1789";
1790
1791if ( $buttontext eq $Lang::tr{'update'} && ( defined($errormessage) || $wiosettings{'ACTION'} eq $Lang::tr{'edit'}) && ! defined($message) ) {
1792 print"<td width='20%' align='center'>&nbsp;</td>
1793 <td width='20%' align='center'>&nbsp;</td>
1794 <td width='20%' align='center'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_client_add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></td>
1795 <td width='20%' align='center'><input type='button' onClick='location.href=\"/cgi-bin/wio.cgi\"' value='$Lang::tr{'wio_back'}'></form></td>";
1796}
1797else {
1798 print"<td width='20%' align='center'>&nbsp;</td>
1799 <td width='20%' align='center'>&nbsp;</td>
1800 <td width='20%' align='center'>&nbsp;</td>
1801 <td width='20%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_client_add'}' /><input type='submit' name='SUBMIT' value='$buttontext' /></form></td>";
1802}
1803
1804print"
1805</tr>
1806</table>
1807";
1808
1809if ( $wiosettings{'ENABLE'} eq 'on' && !$errormessage && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} || $message == 2 ) {
1810
1811&hrline();
1812
1813## arp table entries
1814
1815print"
1816<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1817<tr>
a25c95b3
SFD
1818 <td width='33%' bgcolor='$color{'color20'}' align='left' height='25'><b>&nbsp;$Lang::tr{'wio_arp_table_entries'}</b></td>
1819 <td width='67%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='WIOGUISHOWARPTABLE' value='arptable' /><input type='submit' name='ACTION' value='$arpbuttontext' /></form></td>
0d6cc79d 1820</tr>
0d6cc79d 1821</table>
a25c95b3
SFD
1822";
1823
1824if ( $wiosettings{'WIOGUISHOWARPTABLE'} eq 'on' ) {
0d6cc79d 1825
a25c95b3 1826print"
0d6cc79d 1827<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
a25c95b3 1828<tr><td colspan='2'>&nbsp;</td></tr>
0d6cc79d
SF
1829<tr bgcolor='$color{'color20'}'>
1830 <td width='5%' align='center' height='20'><b>$Lang::tr{'wio_id'}</b></td>
1831 <td width='20%' align='center' height='20'><b>$Lang::tr{'wio_hwaddress'}</b></td>
1832 <td width='20%' align='center' height='20'><b>$Lang::tr{'wio ipadress'}</b></td>
1833 <td width='15%' align='center' height='20'><b>$Lang::tr{'wio network'}</b></td>
1834 <td width='20%' align='center' height='20'><b>$Lang::tr{'wio name'}</b></td>
1835 <td width='15%' align='center' height='20'><b>$Lang::tr{'wio_iface'}</b></td>
1836 <td width='5%' align='center' height='20'><b>$Lang::tr{'action'}</b></td>
1837</tr>
1838";
1839
1840$output = `/sbin/ip neigh list`;
1841$output = &Header::cleanhtml($output,"y");
1842
1843my $arpcnt = 0;
1844
1845foreach $line (split(/\n/, $output))
1846{
1847 if ($line =~ m/^(.*) dev ([^ ]+) lladdr ([0-9a-f:]*) (.*)$/) {
1848 my $arphost = gethostbyaddr(inet_aton($1), AF_INET);
1849 if ( $arphost eq 'localhost' ) { $arphost = ''; }
1850 push (@arpcache, "$3,$1,$arphost,$2\n");
1851 }
1852 elsif ($line =~ m/^(.*) dev ([^ ]+) (.*)$/) {
1853 my $arphost = gethostbyaddr(inet_aton($1), AF_INET);
1854 if ( $arphost eq 'localhost' ) { $arphost = ''; }
1855 push (@arpcache, ",$1,$arphost,$2\n");
1856 }
1857
1858 $arpcnt++;
1859}
1860
1861&SortDataFile('arpcache',@arpcache);
1862
1863foreach (@arpcache) {
1864 chomp;
1865
1866 @line = split (/\,/, $_);
1867
1868 print"<tr".($idarp % 2?" bgcolor='$color{'color20'}'":" bgcolor='$color{'color22'}'")." height='20'>";
1869 printf ("<td align='center'> %02d</td>", $idarp+1);
1870 print"<td align='center'>$line[0]</td>
1871 <td align='center'>$line[1]</td>";
1872
1873SWITCH: {
1874
1875 foreach (@devs_color) {
1876 my $in = 0;
1877 $ic = "${_}";
1878
1879 foreach $interface (@devs_net) {
1880 next if ( $netsettings{"$ic"."_DEV"} eq 'red0' && ($netsettings{"RED_TYPE"} eq 'DHCP' || $netsettings{"RED_TYPE"} eq 'PPPOE'));
1881
1882 if ($netsettings{"$ic"."_DEV"} eq $interface) {
1883 if ( &General::IpInSubnet($line[1], $netsettings{"$ic"."_NETADDRESS"}, $netsettings{"$ic"."_NETMASK"}) ) {
1884 print"<td align='center'><img src='$imgstatic/$devs_img[$in]' alt='$Lang::tr{$devs_alt[$in]}' title='$Lang::tr{$devs_alt[$in]}' /></td>";
1885 last SWITCH;
1886 }
1887 }
1888
1889 $in++;
1890 }
1891 }
1892
f928cc5a 1893 if ($netsettings{"RED_TYPE"} eq 'DHCP' || $netsettings{"RED_TYPE"} eq 'PPPOE' || $netsettings{"RED_TYPE"} eq 'STATIC') {
0d6cc79d
SF
1894 my $redipadr = qx'ip addr | grep red0 | grep inet | awk "{print \$2}"';
1895 my @rednet = split ("/", $redipadr);
1896 chomp ($rednet[1]);
1897 my $red_netmask = General::iporsubtodec($rednet[1]);
1898 my $red_netaddress = Network::get_netaddress("$rednet[0]/$red_netmask");
1899
1900 if ( &General::IpInSubnet($line[1], $red_netaddress, $red_netmask) ) {
1901 print"<td align='center' height='20'><img src='$imgstatic/red.png' alt='$Lang::tr{'wio_red_lan'}' title='$Lang::tr{'wio_red_lan'}' /></td>";
1902 last SWITCH;
1903 }
1904 else {
1905 print"<td align='center'><img align='middle' src='$imgstatic/white.png' alt='$Lang::tr{'wio_unknown_lan'}' title='$Lang::tr{'wio_unknown_lan'}' /></td>";
1906 last SWITCH;
1907 }
1908 }
1909}
1910
1911 print"<td align='center'>$line[2]</td>
1912 <td align='center'>".&WIO::color_devices($line[3])."</td>";
1913
1914 unless (&WIO::checkinto($line[1], '', @current)) {
1915 print"<td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>
1916 <input type='hidden' name='ACTION' value='$Lang::tr{'wio_add'}' />
1917 <input type='image' name='$Lang::tr{'wio_add'}' src='/images/add.gif' align='middle' alt='$Lang::tr{'wio_add'}' title='$Lang::tr{'wio_add'}' />
1918 <input type='hidden' name='ID' value='$idarp' /></form></td>";
1919 }
1920 else {
1921 print"<td align='center'><img src='$imgstatic/add.png' align='middle' alt='$Lang::tr{'wio_no_add'}' title='$Lang::tr{'wio_no_add'}' /></td>";
1922 }
1923
1924print"</tr>";
1925print"<tr height='1'><td colspan='17' bgcolor='#696565'></td></tr>";
1926$idarp++
1927}
1928
1929print"
1930</table>
1931";
a25c95b3 1932}
0d6cc79d
SF
1933
1934&hrline();
1935
1936print"
1937<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1938<tr>
a25c95b3
SFD
1939 <td width='33%' bgcolor='$color{'color20'}' align='left' height='25'><b>&nbsp;$Lang::tr{'wio_import_file'}</b></td>
1940 <td width='67%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='WIOGUISHOWCLIENTIMPORTTABLE' value='clientimport' /><input type='submit' name='ACTION' value='$clientimportbuttontext' /></form></td>
0d6cc79d 1941</tr>
0d6cc79d 1942</table>
a25c95b3
SFD
1943";
1944
1945if ( $wiosettings{'WIOGUISHOWCLIENTIMPORTTABLE'} eq 'on' ) {
1946
1947print"
0d6cc79d 1948<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
a25c95b3 1949<tr><td colspan='3'>&nbsp;</td></tr>
0d6cc79d
SF
1950<tr bgcolor='$color{'color22'}'>
1951 <form method='post' action='/cgi-bin/wio.cgi' enctype='multipart/form-data'>
1952 <td width='35%' align='right'>$Lang::tr{'wio_import_csv'}&nbsp;</td>
1953 <td width='40%' align='center'><input type='file' name='CSVFILE' size='30' /></td>
1954 <td width='25%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_import'}1' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_import'}' /></td>
1955 </form>
1956</tr>
1957<tr><td colspan='3'>&nbsp;</td></tr>
1958<tr bgcolor='$color{'color22'}'>
1959 <form method='post' action='/cgi-bin/wio.cgi' enctype='multipart/form-data'>
1960 <td width='35%' align='right'>$Lang::tr{'wio_import_hosts'}&nbsp;</td>
1961 <td width='40%' align='center'>&nbsp;</td>
1962 <td width='25%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_import'}2' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_import'}' /></td>
1963 </form>
1964</tr>
1965<tr><td colspan='3'>&nbsp;</td></tr>
1966<tr bgcolor='$color{'color22'}'>
1967 <form method='post' action='/cgi-bin/wio.cgi' enctype='multipart/form-data'>
1968 <td width='35%' align='right'>$Lang::tr{'wio_import_fixleases'}&nbsp;</td>
1969 <td width='40%' align='center'>&nbsp;</td>
1970 <td width='25%' align='right'><input type='hidden' name='ACTION' value='$Lang::tr{'wio_import'}3' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_import'}' /></td>
1971 </form>
1972</tr>
1973</table>
1974";
a25c95b3 1975}
0d6cc79d
SF
1976
1977&hrline;
1978
1979print"
1980<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1981<tr>
a25c95b3
SFD
1982 <td width='33%' bgcolor='$color{'color20'}' align='left' height='25'><b>&nbsp;$Lang::tr{'wio_net_scan'}</b></td>
1983 <td width='67%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}'><input type='hidden' name='WIOGUISHOWNETWORKSEARCHTABLE' value='networksearch' /><input type='submit' name='ACTION' value='$networksearchbuttontext' /></form></td>
0d6cc79d
SF
1984</tr>
1985</table>
a25c95b3
SFD
1986";
1987
1988if ( $wiosettings{'WIOGUISHOWNETWORKSEARCHTABLE'} eq 'on' ) {
1989
1990print"
0d6cc79d
SF
1991<table width='100%' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
1992<tr>
1993 <td colspan='3'>&nbsp;</td>
1994</tr>
1995";
1996
1997foreach (keys(%ifacecolor)) {
1998 if ( $_ eq 'GREEN' ) { $color = "$Header::colourgreen"; $net = $Lang::tr{'wio_net_scan_green'}; }
1999 elsif ( $_ eq 'BLUE' ) { $color = "$Header::colourblue"; $net = $Lang::tr{'wio_net_scan_blue'}; }
2000 else { $color = "$Header::colourorange"; $net = $Lang::tr{'wio_net_scan_orange'}; }
2001
2002 if ( $netsettings{"${_}_DEV"} eq 'disabled' || $netsettings{"${_}_DEV"} eq '' || $netsettings{"${_}_ADDRESS"} eq '' ) { next; }
2003 else {
2004 print <<END;
2005
2006 <tr bgcolor='$color{'color22'}'>
2007 <td width='35%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'>$Lang::tr{'wio_net_scan_vl'} <font color='$color'><b>$net</b></font> $Lang::tr{'wio_net_scan_l'}<font color='$color'><b> $netsettings{"${_}_DEV"} </b></font>$Lang::tr{'wio_net_scan_r'}</td>
2008 <td width='40%' align='center'><input type='text' name='${_}_IPLOW' value='$wiosettings{"${_}_IPLOW"}' size='14' STYLE='background-color:$color; text-align: center; color:white' /> - <input type='text' name='${_}_IPHIGH' value='$wiosettings{"${_}_IPHIGH"}' size='14' STYLE='background-color:$color; text-align: center; color:white' /></td>
2009 <td width='25%' align='right'><input type='hidden' name='ACTION' value='$ifacecolor{$_}' /><input type='hidden' name='ID' value='$netsettings{"${_}_DEV"}' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_net_scan_run'}'></form></td>
2010 </tr>
2011 <tr>
2012 <td colspan='3'>&nbsp;</td>
2013 </tr>
2014END
2015 }
2016}
2017
2018print"
2019</tr>
2020</table>
2021</form>
2022";
a25c95b3 2023}
0d6cc79d
SF
2024&Header::closebox();
2025}
2026
2027if ( $wiosettings{'ENABLE'} eq 'on' && !$errormessage && $wiosettings{'ACTION'} ne $Lang::tr{'edit'} || $message == 2 ) {
2028
2029&Header::openbox('100%', 'left', $Lang::tr{'wio_service'});
2030
2031print"
2032<table border='0' width='100%' bordercolor='$Header::bordercolour' cellspacing='0' cellpadding='0' style='border-collapse: collapse'>
2033<tr bgcolor='$color{'color22'}'>
f539ff6d 2034 <td colspan='2' align='right'></td>
fe6f676b
SF
2035";
2036
2037if ( $wiosettings{'LOGGING'} eq 'on' ) {
2038 print"<td width='10%' align='right'><form method='post' action='/cgi-bin/logs.cgi/log.dat' enctype='multipart/form-data'><input type='hidden' name='SECTION' value='wio' /><input type='submit' name='SUBMIT' value='$Lang::tr{'system logs'}' /></form></td>";
2039}
2040
2041print"
f539ff6d 2042 <td width='10%' align='right'><form method='post' action='$ENV{'SCRIPT_NAME'}' enctype='multipart/form-data'><input type='hidden' name='ACTION' value='$Lang::tr{'edit'}1' /><input type='submit' name='SUBMIT' value='$Lang::tr{'wio_edit_set'}' /></form></td>
0d6cc79d
SF
2043</tr>
2044</table>
2045";
2046}
2047
2048&Header::closebox();
2049}
2050
2051&Header::closebigbox();
2052&Header::closepage();
2053
2054############################################################################################################################
2055
2056sub SortDataFile {
2057my ($data,@checkfile) = @_;
2058 my $idsort = 0;
2059 our %entries = ();
2060
2061 sub sortips {
2062 my $qs = '';
2063
2064 if (rindex ($wiosettings{'SORT'},'Rev') != -1) {
2065 $qs = substr ($wiosettings{'SORT'},0,length($wiosettings{'SORT'})-3);
2066
2067 if ($qs eq 'IPADR') {
2068 my @a = split (/\./,$entries{$a}->{$qs});
2069 my @b = split (/\./,$entries{$b}->{$qs});
2070 ($b[0]<=>$a[0]) ||
2071 ($b[1]<=>$a[1]) ||
2072 ($b[2]<=>$a[2]) ||
2073 ($b[3]<=>$a[3]);
2074 }
2075 else {
2076 $entries{$b}->{$qs} cmp $entries{$a}->{$qs};
2077 }
2078 }
2079 else {
2080 $qs = $wiosettings{'SORT'};
2081
2082 if ($qs eq 'IPADR') {
2083 my @a = split (/\./,$entries{$a}->{$qs});
2084 my @b = split (/\./,$entries{$b}->{$qs});
2085 ($a[0]<=>$b[0]) ||
2086 ($a[1]<=>$b[1]) ||
2087 ($a[2]<=>$b[2]) ||
2088 ($a[3]<=>$b[3]);
2089 }
2090 else {
2091 $entries{$a}->{$qs} cmp $entries{$b}->{$qs};
2092 }
2093 }
2094 }
2095
2096 if ($data eq 'arpcache') {
2097 foreach (@checkfile) {
2098 chomp;
2099 @temp = split (',', $_);
2100
2101 my @record = ('KEY',$idsort++,'MAC',$temp[0],'IPADR',$temp[1],'HOST',$temp[2],'REMARK',$temp[3],'IFACE',$temp[4]);
2102 my $record = ();
2103 %{$record} = @record;
2104 $entries{$record->{KEY}} = $record;
2105 }
2106
2107 open(FILE, "> $logdir/.arpcache");
2108
2109 foreach (sort sortips keys %entries) {
2110 print FILE "$entries{$_}->{MAC},$entries{$_}->{IPADR},$entries{$_}->{HOST},$entries{$_}->{REMARK},$entries{$_}->{IFACE},$entries{$_}->{HW}\n";
2111 }
2112
2113 close(FILE);
2114
2115 open (FILE, "$logdir/.arpcache");
2116 @arpcache = <FILE>;
2117 close (FILE);
2118 }
2119 else {
2120 foreach (@checkfile) {
2121 chomp;
2122 @temp = split (',', $_);
2123
2124 my @record = ('KEY',$idsort++,'CLIENTID',$temp[0],'TIMESTAMP',$temp[1],'IPADR',$temp[2],'HOST',$temp[3],'EN',$temp[4],'REMARK',$temp[5],'DYNDNS',$temp[6],'SENDEMAILON',$temp[7],'SENDEMAILOFF',$temp[8],'PINGMETHODE',$temp[9],'ONLINE',$temp[10],'WEBINTERFACE',$temp[11]);
2125 my $record = ();
2126 %{$record} = @record;
2127 $entries{$record->{KEY}} = $record;
2128 }
2129
2130 open(FILE, "> $ipadrfile");
2131
2132 foreach (sort sortips keys %entries) {
2133 print FILE "$entries{$_}->{CLIENTID},$entries{$_}->{TIMESTAMP},$entries{$_}->{IPADR},$entries{$_}->{HOST},$entries{$_}->{EN},$entries{$_}->{REMARK},$entries{$_}->{DYNDNS},$entries{$_}->{SENDEMAILON},$entries{$_}->{SENDEMAILOFF},$entries{$_}->{PINGMETHODE},$entries{$_}->{ONLINE},$entries{$_}->{WEBINTERFACE}\n";
2134 }
2135
2136 close(FILE);
2137
2138 &loadips();
2139 }
2140}
2141
2142############################################################################################################################
2143
2144sub hrline {
2145
2146print"<table width='100%'><tr><td colspan='2' height='35'><hr></td></tr></table>";
2147
2148}
2149
2150############################################################################################################################
2151
2152sub back {
2153
2154print"<table width='100%'><tr><td width='10%'><a href='/cgi-bin/wio.cgi'><img src='/images/wio/back.png' alt='$Lang::tr{'wio_back'}' title='$Lang::tr{'wio_back'}' /></a></td><td>&nbsp;</td></tr></table>";
2155
2156}
2157
2158############################################################################################################################
2159
2160sub loadips {
2161
2162&General::readhasharray($ipadrfile, \%ipshash);
2163
2164open(FILE, "< $ipadrfile");
2165@current = <FILE>;
2166close (FILE);
2167
2168}
2169
2170############################################################################################################################
2171
2172sub writeips {
2173
2174open(FILE, "> $ipadrfile");
2175if ( defined($write) ) { print FILE @write; }
2176else { print FILE @current; }
2177close(FILE);
2178
2179}
2180
2181############################################################################################################################
2182
c1fc92a9
SFD
2183sub SortByTunnelName {
2184
2185 if ($vpnconfighash{$a}[1] lt $vpnconfighash{$b}[1]) {
2186 return -1;
2187 }
2188 elsif ($vpnconfighash{$a}[1] gt $vpnconfighash{$b}[1]) {
2189 return 1;
2190 }
2191 else {
2192 return 0;
2193 }
2194
0d6cc79d
SF
2195}
2196
2197############################################################################################################################
2198
c1fc92a9
SFD
2199sub validSave {
2200
0d6cc79d
SF
2201 if ( $wiosettings{'IPADR'} eq '' && $wiosettings{'PINGMETHODE'} eq 'ip' && $wiosettings{'DYNDNS'} eq '' ) {
2202 $errormessage = $Lang::tr{'wio_ip_empty'};
2203 }
2204
2205 if ( $wiosettings{'IPADR'} ne '' && (! &General::validip($wiosettings{'IPADR'})) ) {
2206 $errormessage = $Lang::tr{'wio_ip_error'};
2207 }
2208
2209 if ( $wiosettings{'HOST'} eq '' && $wiosettings{'PINGMETHODE'} eq 'fqdn' ) {
2210 $errormessage = $Lang::tr{'wio_host_empty'};
2211 }
2212
2213 if ( $wiosettings{'HOST'} ne '' && (! &General::validdomainname($wiosettings{'HOST'})) ) {
2214 $errormessage = $Lang::tr{'wio_host_error'};
2215 }
2216
2217 if ( $wiosettings{'DYNDNS'} eq 'on' && (! defined($errormessage)) ) {
2218 unless(&General::validfqdn($wiosettings{'HOST'})) { $errormessage = $Lang::tr{'wio_fqdn_error'}; }
2219 ( $wiosettings{'IPADR'}, $infomessage ) = &WIO::getdyndnsip($wiosettings{'IPADR'}, $wiosettings{'HOST'});
2220 $wiosettings{'PINGMETHODE'} = 'fqdn';
2221 }
2222
2223 if ( $wiosettings{'ID'} eq '' && ! defined($errormessage) ) { $errormessage = &WIO::checkinto($wiosettings{'IPADR'}, $wiosettings{'HOST'}, @current); }
2224
2225 if ( $wiosettings{'REMARK'} ne '' ) { $wiosettings{'REMARK'} =~ s/,/&#44;/g; }
c1fc92a9 2226
0d6cc79d 2227}