]> git.ipfire.org Git - ipfire-2.x.git/blame - html/cgi-bin/networks.cgi
immernoch das alte Problem...
[ipfire-2.x.git] / html / cgi-bin / networks.cgi
CommitLineData
cd1a2927
MT
1#!/usr/bin/perl\r
2#\r
3# This file is part of the IPCop Firewall.\r
4#\r
5# IPCop is free software; you can redistribute it and/or modify\r
6# it under the terms of the GNU General Public License as published by\r
7# the Free Software Foundation; either version 2 of the License, or\r
8# (at your option) any later version.\r
9#\r
10# IPCop is distributed in the hope that it will be useful,\r
11# but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
13# GNU General Public License for more details.\r
14#\r
15# You should have received a copy of the GNU General Public License\r
16# along with IPCop; if not, write to the Free Software\r
17# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
18#\r
19# Copyright (C) 2003-09-22 Darren Critchley <darrenc@telus.net>\r
20#\r
21# $Id: networks.cgi,v 1.2.2.3 2005/04/29 23:37:06 franck78 Exp $\r
22#\r
23\r
24use strict;\r
25\r
26require 'CONFIG_ROOT/general-functions.pl';\r
27require "${General::swroot}/lang.pl";\r
28require "${General::swroot}/header.pl";\r
29\r
30my %netsettings=();\r
31&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);\r
32\r
33my @networks=();\r
34my $filename = "${General::swroot}/firewall/customnetworks";\r
35&setup_default_networks();\r
36\r
37&Header::getcgihash(\%cgiparams);\r
38\r
39if ($cgiparams{'ACTION'} eq $Lang::tr{'add'}){\r
40\r
41 &validateparams();\r
42 unless($errormessage){\r
43 $key++; # Add one to last sequence number\r
44 open(FILE,">>$filename") or die 'Unable to open custom networks file.';\r
45 flock FILE, 2;\r
46 print FILE "$key,$cgiparams{'NAME'},$cgiparams{'IPADDRESS'},$cgiparams{'NETMASK'}\n";\r
47 close(FILE);\r
48 &General::log("$Lang::tr{'network added'}: $cgiparams{'NAME'}");\r
49 undef %cgiparams;\r
50 }\r
51}\r
52\r
53if ($cgiparams{'ACTION'} eq $Lang::tr{'update'})\r
54{\r
55 &validateparams();\r
56 # Darren Critchley - If there is an error don't waste any more processing time\r
57 if ($errormessage) { $cgiparams{'ACTION'} = $Lang::tr{'edit'}; goto UPD_ERROR; }\r
58\r
59 unless($errormessage){\r
60 open(FILE, $filename) or die 'Unable to open custom networks file.';\r
61 my @current = <FILE>;\r
62 close(FILE);\r
63 open(FILE, ">$filename") or die 'Unable to open config file.';\r
64 flock FILE, 2;\r
65 foreach my $line (@current) {\r
66 chomp($line);\r
67 my @temp = split(/\,/,$line);\r
68 if ($cgiparams{'KEY'} eq $temp[0]) {\r
69 print FILE "$cgiparams{'KEY'},$cgiparams{'NAME'},$cgiparams{'IPADDRESS'},$cgiparams{'NETMASK'}\n";\r
70 } else {\r
71 print FILE "$line\n";\r
72 }\r
73 }\r
74 close(FILE);\r
75 &General::log("$Lang::tr{'network updated'}: $cgiparams{'NAME'}");\r
76 undef %cgiparams;\r
77 }\r
78UPD_ERROR:\r
79}\r
80\r
81if ($cgiparams{'ACTION'} eq $Lang::tr{'edit'})\r
82{\r
83 open(FILE, "$filename") or die 'Unable to open custom networks file.';\r
84 my @current = <FILE>;\r
85 close(FILE);\r
86\r
87 unless ($errormessage)\r
88 {\r
89 foreach my $line (@current)\r
90 {\r
91 chomp($line);\r
92 my @temp = split(/\,/,$line);\r
93 if ($cgiparams{'KEY'} eq $temp[0]) {\r
94 $cgiparams{'NAME'} = $temp[1];\r
95 $cgiparams{'IPADDRESS'} = $temp[2];\r
96 $cgiparams{'NETMASK'} = $temp[3];\r
97 }\r
98 \r
99 }\r
100 }\r
101}\r
102\r
103if ($cgiparams{'ACTION'} eq $Lang::tr{'remove'})\r
104{\r
105 open(FILE, $filename) or die 'Unable to open custom networks file.';\r
106 my @current = <FILE>;\r
107 close(FILE);\r
108\r
109 open(FILE, ">$filename") or die 'Unable to open custom networks file.';\r
110 flock FILE, 2;\r
111 foreach my $line (@current)\r
112 {\r
113 chomp($line);\r
114 if ($line ne '') { \r
115 my @temp = split(/\,/,$line);\r
116 if ($cgiparams{'KEY'} eq $temp[0]) {\r
117 &General::log("$Lang::tr{'network removed'}: $temp[1]");\r
118 } else {\r
119 print FILE "$temp[0],$temp[1],$temp[2],$temp[3]\n";\r
120 }\r
121 }\r
122 }\r
123 close(FILE);\r
124 undef %cgiparams;\r
125}\r
126\r
127if ($cgiparams{'ACTION'} eq $Lang::tr{'reset'})\r
128{\r
129 undef %cgiparams;\r
130}\r
131\r
132if ($cgiparams{'ACTION'} eq '')\r
133{\r
134 $cgiparams{'KEY'} = '';\r
135 $cgiparams{'IPADDRESS'} = '';\r
136 $cgiparams{'NETMASK'} = '';\r
137 $cgiparams{'NAME'} = '';\r
138}\r
139\r
140&Header::showhttpheaders();\r
141\r
142&Header::openpage($Lang::tr{'networks settings'}, 1, '');\r
143\r
144&Header::openbigbox('100%', 'LEFT', '', $errormessage);\r
145\r
146# DEBUG DEBUG\r
147#&Header::openbox('100%', 'LEFT', 'DEBUG');\r
148#foreach $line (keys %cgiparams) {\r
149# print "<CLASS NAME='base'>$line = $cgiparams{$line}<BR>";\r
150#}\r
151#print "$ENV{'QUERY_STRING'}\n";\r
152#print "&nbsp;</CLASS>\n";\r
153#&Header::closebox();\r
154\r
155if ($errormessage) {\r
156 &Header::openbox('100%', 'LEFT', $Lang::tr{'error messages'});\r
157 print "<CLASS NAME='base'><FONT COLOR='${Header::colourred}'>$errormessage\n</FONT>";\r
158 print "&nbsp;</CLASS>\n";\r
159 &Header::closebox();\r
160}\r
161\r
162if ($cgiparams{'ACTION'} eq $Lang::tr{'edit'}){\r
163 &Header::openbox('100%', 'LEFT', "$Lang::tr{'edit network'}:");\r
164} else {\r
165 &Header::openbox('100%', 'LEFT', "$Lang::tr{'add network'}:");\r
166}\r
167print <<END\r
168<FORM METHOD='POST'>\r
169<DIV ALIGN='CENTER'>\r
170<TABLE WIDTH='100%'>\r
171<TR align="center">\r
172 <TD><strong>$Lang::tr{'name'}</strong></TD>\r
173 <TD><strong>$Lang::tr{'ip address'}</strong></TD>\r
174 <TD><strong>$Lang::tr{'netmask'}</strong></TD>\r
175 <TD>&nbsp;</TD>\r
176 <TD>&nbsp;</TD>\r
177 <TD>&nbsp;</TD>\r
178</TR>\r
179<TR align="center">\r
180 <TD>\r
181 <INPUT TYPE='TEXT' NAME='NAME' VALUE='$cgiparams{'NAME'}' SIZE='20' MAXLENGTH='20'>\r
182 </TD>\r
183 <TD>\r
184 <INPUT TYPE='TEXT' NAME='IPADDRESS' VALUE='$cgiparams{'IPADDRESS'}' SIZE='15' MAXLENGTH='15'>\r
185 </TD>\r
186 <TD>\r
187 <INPUT TYPE='TEXT' NAME='NETMASK' VALUE='$cgiparams{'NETMASK'}' SIZE='15' MAXLENGTH='15'>\r
188 </TD>\r
189END\r
190;\r
191if ($cgiparams{'ACTION'} eq $Lang::tr{'edit'}){\r
192# Darren Critchley - put in next release - author has authorized GPL inclusion\r
193# print "<TD ALIGN='CENTER'><a href='ipcalc.cgi' target='_blank'>IP Calculator</a></TD>\n";\r
194 print "<TD ALIGN='CENTER'><INPUT TYPE='SUBMIT' NAME='ACTION' VALUE='$Lang::tr{'update'}'></TD>\n";\r
195 print "<INPUT TYPE='HIDDEN' NAME='KEY' VALUE='$cgiparams{'KEY'}'>\n";\r
196 print "<TD ALIGN='CENTER'><INPUT TYPE='SUBMIT' NAME='ACTION' VALUE='$Lang::tr{'reset'}'></TD>\n";\r
197} else {\r
198# Darren Critchley - put in next release - author has authorized GPL inclusion\r
199# print "<TD ALIGN='CENTER'><a href='ipcalc.cgi' target='_blank'>IP Calculator</a></TD>\n";\r
200 print "<TD ALIGN='CENTER'><INPUT TYPE='SUBMIT' NAME='ACTION' VALUE='$Lang::tr{'add'}'></TD>\n";\r
201 print "<TD ALIGN='CENTER'><INPUT TYPE='SUBMIT' NAME='ACTION' VALUE='$Lang::tr{'reset'}'></TD>\n";\r
202}\r
203print <<END \r
204</TR>\r
205</TABLE>\r
206</DIV>\r
207</FORM>\r
208END\r
209;\r
210&Header::closebox();\r
211\r
212&Header::openbox('100%', 'LEFT', "$Lang::tr{'custom networks'}:");\r
213print <<END\r
214<DIV ALIGN='CENTER'>\r
215<TABLE WIDTH='100%' ALIGN='CENTER'>\r
216<TR align="center">\r
217 <TD><strong>$Lang::tr{'name'}</strong></TD>\r
218 <TD><strong>$Lang::tr{'ip address'}</strong></TD>\r
219 <TD><strong>$Lang::tr{'netmask'}</strong></TD>\r
220</TR>\r
221END\r
222;\r
223&display_custom_networks();\r
224print <<END\r
225</TABLE>\r
226</DIV>\r
227END\r
228;\r
229&Header::closebox();\r
230\r
231&Header::openbox('100%', 'LEFT', "$Lang::tr{'default networks'}:");\r
232print <<END\r
233<DIV ALIGN='CENTER'>\r
234<TABLE WIDTH='100%' ALIGN='CENTER'>\r
235<TR align="center">\r
236 <TD><strong>$Lang::tr{'name'}</strong></TD>\r
237 <TD><strong>$Lang::tr{'ip address'}</strong></TD>\r
238 <TD><strong>$Lang::tr{'netmask'}</strong></TD>\r
239</TR>\r
240END\r
241;\r
242&display_default_networks();\r
243print <<END\r
244</TABLE>\r
245</DIV>\r
246END\r
247;\r
248&Header::closebox();\r
249 \r
250 print "$Lang::tr{'this feature has been sponsored by'} : ";\r
251 print "<A HREF='http://www.kdi.ca/' TARGET='_blank'>Kobelt Development Inc.</A>.\n";\r
252\r
253&Header::closebigbox();\r
254\r
255&Header::closepage();\r
256\r
257sub display_custom_networks\r
258{\r
259 open(FILE, "$filename") or die 'Unable to open networks file.';\r
260 my @current = <FILE>;\r
261 close(FILE);\r
262\r
263 my $id = 0;\r
264 foreach $line (@current)\r
265 {\r
266 chomp($line);\r
267 if ($line ne ''){\r
268 my @temp = split(/\,/,$line);\r
269 # Darren Critchley highlight the row we are editing\r
270 if ( $cgiparams{'ACTION'} eq $Lang::tr{'edit'} && $cgiparams{'KEY'} eq $temp[0] ) { \r
271 print "<TR BGCOLOR='${Header::colouryellow}'>\n";\r
272 } else {\r
273 if ($id % 2) {\r
274 print "<TR BGCOLOR='${Header::table1colour}'>\n"; \r
275 } else {\r
276 print "<TR BGCOLOR='${Header::table2colour}'>\n";\r
277 }\r
278 }\r
279 print "<TD>$temp[1]</TD>\n";\r
280 print "<TD ALIGN='CENTER'>$temp[2]</TD>\n";\r
281 print "<TD ALIGN='CENTER'>$temp[3]</TD>\n";\r
282 print <<END\r
283<FORM METHOD='POST' NAME='frm$temp[0]'>\r
284<TD ALIGN='CENTER'>\r
285 <INPUT TYPE='hidden' NAME='ACTION' VALUE='$Lang::tr{'edit'}'>\r
286 <INPUT TYPE='image' NAME='$Lang::tr{'edit'}' src='/images/edit.gif' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' width='20' height='20' border='0'>\r
287 <INPUT TYPE='hidden' NAME='KEY' VALUE='$temp[0]'>\r
288</TD>\r
289</FORM>\r
290<FORM METHOD='POST' NAME='frm$temp[0]b'>\r
291<TD ALIGN='CENTER'>\r
292 <INPUT TYPE='hidden' NAME='ACTION' VALUE='$Lang::tr{'remove'}'>\r
293 <INPUT TYPE='image' NAME='$Lang::tr{'remove'}' src='/images/delete.gif' alt='$Lang::tr{'remove'}' title='$Lang::tr{'remove'}' width='20' height='20' border='0'>\r
294 <INPUT TYPE='hidden' NAME='KEY' VALUE='$temp[0]'>\r
295</TD>\r
296</FORM>\r
297END\r
298;\r
299 print "</TR>\n";\r
300 $id++;\r
301 }\r
302 }\r
303}\r
304\r
305sub display_default_networks\r
306{\r
307 foreach $line (sort @networks)\r
308 {\r
309 my @temp = split(/\,/,$line);\r
310 if ($id % 2) {\r
311 print "<TR BGCOLOR='${Header::table1colour}'>\n"; \r
312 } else {\r
313 print "<TR BGCOLOR='${Header::table2colour}'>\n";\r
314 }\r
315 print "<TD>$temp[0]</TD>\n";\r
316 print "<TD ALIGN='CENTER'>$temp[1]</TD>\n";\r
317 print "<TD ALIGN='CENTER'>$temp[2]</TD>\n";\r
318 print "</TR>\n";\r
319 $id++;\r
320 }\r
321}\r
322\r
323sub setup_default_networks\r
324{\r
325 # Get current defined networks (Red, Green, Blue, Orange)\r
326 my $line = "Any,0.0.0.0,0.0.0.0";\r
327 push (@networks, $line);\r
328 $line = "localhost,127.0.0.1,255.255.255.255";\r
329 push (@networks, $line);\r
330 $line = "localnet,127.0.0.0,255.0.0.0";\r
331 push (@networks, $line);\r
332 $line = "Private Network 10.0.0.0,10.0.0.0,255.0.0.0";\r
333 push (@networks, $line);\r
334 $line = "Private Network 172.16.0.0,172.16.0.0,255.240.0.0";\r
335 push (@networks, $line);\r
336 $line = "Private Network 192.168.0.0,192.168.0.0,255.255.0.0";\r
337 push (@networks, $line);\r
338 \r
339 my $red_address=`cat ${General::swroot}/red/local-ipaddress`;\r
340 $line = "Red Address,$red_address,";\r
341 push (@networks, $line);\r
342 \r
343 $line = "Green Address,$netsettings{'GREEN_ADDRESS'},255.255.255.255";\r
344 push (@networks, $line);\r
345 $line = "Green Network,$netsettings{'GREEN_NETADDRESS'},$netsettings{'GREEN_NETMASK'}";\r
346 push (@networks, $line);\r
347 \r
348 if ($netsettings{'ORANGE_DEV'}ne ''){\r
349 $line = "Orange Address,$netsettings{'ORANGE_ADDRESS'},255.255.255.255";\r
350 push (@networks, $line);\r
351 $line = "Orange Network,$netsettings{'ORANGE_NETADDRESS'},$netsettings{'ORANGE_NETMASK'}";\r
352 push (@networks, $line);\r
353 } \r
354 \r
355 if ($netsettings{'BLUE_DEV'}ne ''){\r
356 $line = "Blue Address,$netsettings{'BLUE_ADDRESS'},255.255.255.255";\r
357 push (@networks, $line);\r
358 $line = "Blue Network,$netsettings{'BLUE_NETADDRESS'},$netsettings{'BLUE_NETMASK'}";\r
359 push (@networks, $line);\r
360 } \r
361 open(FILE, "${General::swroot}/ethernet/aliases") or die 'Unable to open aliases file.';\r
362 my @current = <FILE>;\r
363 close(FILE);\r
364 my $ctr = 0;\r
365 foreach my $lne (@current)\r
366 {\r
367 if ($lne ne ''){\r
368 chomp($lne); \r
369 my @temp = split(/\,/,$lne);\r
370 if ($temp[2] eq '') {\r
371 $temp[2] = "Alias $ctr : $temp[0]";\r
372 }\r
373 $line = "$temp[2],$temp[0],";\r
374 push (@networks, $line);\r
375 $ctr++;\r
376 }\r
377 }\r
378}\r
379\r
380# Validate Field Entries\r
381sub validateparams \r
382{\r
383 if ($cgiparams{'NAME'} eq '') {\r
384 $errormessage = $Lang::tr{'nonetworkname'};\r
385 return;\r
386 }\r
387 $cgiparams{'NAME'}=&Header::cleanhtml($cgiparams{'NAME'});\r
388 unless(&General::validip($cgiparams{'IPADDRESS'})){$errormessage = $Lang::tr{'invalid ip'}; }\r
389 unless($errormessage){\r
390 my @tmp = split(/\./,$cgiparams{'IPADDRESS'});\r
391 if ($cgiparams{'NETMASK'} eq '' && $tmp[3] ne '255' && $tmp[3] ne '0'){\r
392 $cgiparams{'NETMASK'} = "255.255.255.255";\r
393 }\r
394 }\r
395 unless(&General::validmask($cgiparams{'NETMASK'})){$errormessage = $Lang::tr{'subnet is invalid'}; }\r
396 \r
397 open(FILE, $filename) or die 'Unable to open custom network file.';\r
398 my @current = <FILE>;\r
399 close(FILE);\r
400 foreach my $line (@current)\r
401 {\r
402 chomp($line);\r
403 if ($line ne '') {\r
404 my @temp = split(/\,/,$line);\r
405 if ($cgiparams{'NAME'} eq $temp[1] && $cgiparams{'KEY'} ne $temp[0]) {\r
406 $errormessage=$Lang::tr{'duplicate name'};\r
407 return;\r
408 }\r
409 $key=$temp[0];\r
410 }\r
411 }\r
412 foreach $line (@networks)\r
413 {\r
414 my @temp = split(/\,/,$line);\r
415 if ($cgiparams{'NAME'} eq $temp[0]) {\r
416 $errormessage=$Lang::tr{'duplicate name'};\r
417 return;\r
418 }\r
419 }\r
420}\r