]>
Commit | Line | Data |
---|---|---|
27f4a6b1 AM |
1 | #!/usr/bin/perl |
2 | ||
3 | ||
4 | require '/var/ipfire/general-functions.pl'; | |
5 | use Socket; | |
6 | ||
7 | my $ipgrouppath = "${General::swroot}/outgoing/groups/ipgroups/"; | |
8 | my $macgrouppath = "${General::swroot}/outgoing/groups/macgroups/"; | |
9 | my $outgoingrules = "${General::swroot}/outgoing/rules"; | |
10 | my $outfwsettings = "${General::swroot}/outgoing/settings"; | |
11 | my $host = "Converted "; | |
12 | my $confighosts = "${General::swroot}/fwhosts/customhosts"; | |
13 | my $confignets = "${General::swroot}/fwhosts/customnetworks"; | |
14 | my $configgroups = "${General::swroot}/fwhosts/customgroups"; | |
15 | my $ovpnsettings = "${General::swroot}/ovpn/settings"; | |
16 | my $ovpnconfig = "${General::swroot}/ovpn/ovpnconfig"; | |
17 | my $ccdconfig = "${General::swroot}/ovpn/ccd.conf"; | |
18 | my $fwdfwconfig = "${General::swroot}/forward/config"; | |
19 | my $fwdfwsettings = "${General::swroot}/forward/settings"; | |
20 | my @ipgroups = qx(ls $ipgrouppath); | |
21 | my @macgroups = qx(ls $macgrouppath); | |
22 | my @hostarray=(); | |
23 | my %outsettings=(); | |
24 | my %hosts=(); | |
25 | my %nets=(); | |
26 | my %groups=(); | |
27 | my %settingsovpn=(); | |
28 | my %configovpn=(); | |
29 | my %ccdconf=(); | |
30 | my %fwconf=(); | |
31 | my %fwdsettings=(); | |
32 | &General::readhash($outfwsettings,\%outsettings); | |
33 | ||
27f4a6b1 AM |
34 | &process_groups; |
35 | &process_rules; | |
36 | ||
27f4a6b1 AM |
37 | sub process_groups |
38 | { | |
2833f567 AM |
39 | if(! -d "/var/log/converters"){ mkdir("/var/log/converters");} |
40 | if( -f "/var/log/converters/groups-convert.log"){unlink ("/var/log/converters/groups-convert.log");} | |
41 | open (LOG, ">/var/log/converters/groups-convert.log") or die $!; | |
27f4a6b1 AM |
42 | #IP Group processing |
43 | foreach my $group (@ipgroups){ | |
44 | chomp $group; | |
45 | open (DATEI, "<$ipgrouppath/$group"); | |
46 | my @zeilen = <DATEI>; | |
47 | foreach my $ip (@zeilen){ | |
48 | chomp($ip); | |
49 | $ip =~ s/\s//gi; | |
50 | my $val=&check_ip($ip); | |
51 | if($val){ | |
52 | push(@hostarray,$val.",ip"); | |
53 | } | |
54 | else{ | |
55 | print LOG "-> IP \"$ip\" from group $group not converted (invalid IP) \n"; | |
56 | } | |
57 | $val=''; | |
58 | } | |
59 | &new_hostgrp($group,'ip'); | |
60 | @hostarray=(); | |
61 | } | |
62 | $group=''; | |
63 | @zeilen=(); | |
64 | @hostarray=(); | |
65 | #MAC Group processing | |
66 | foreach my $group (@macgroups){ | |
67 | chomp $group; | |
68 | open (DATEI, "<$macgrouppath/$group"); | |
69 | my @zeilen = <DATEI>; | |
70 | foreach my $mac (@zeilen){ | |
71 | chomp($mac); | |
72 | $mac =~ s/\s//gi; | |
73 | #MAC checking | |
74 | if(&General::validmac($mac)){ | |
75 | $val=$mac; | |
76 | } | |
77 | if($val){ | |
78 | push(@hostarray,$val.",mac"); | |
79 | } | |
80 | else{ | |
81 | print LOG "-> Mac $mac from group $group not converted (invalid MAC)\n"; | |
82 | } | |
83 | $val=''; | |
84 | } | |
85 | &new_hostgrp($group,'mac'); | |
86 | @hostarray=(); | |
87 | } | |
88 | close (LOG); | |
89 | } | |
90 | sub check_ip | |
91 | { | |
92 | my $adr=shift; | |
93 | my $a; | |
94 | #ip with subnet in decimal | |
95 | if($adr =~ m/^(\d\d?\d?).(\d\d?\d?).(\d\d?\d?).(\d\d?\d?)\/(\d{1,2})$/){ | |
96 | $adr=int($1).".".int($2).".".int($3).".".int($4); | |
97 | my $b = &General::iporsubtodec($5); | |
98 | $a=$adr."/".$b; | |
99 | } | |
100 | if($adr =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/){ | |
101 | $adr=int($1).".".int($2).".".int($3).".".int($4); | |
102 | if(&General::validip($adr)){ | |
103 | $a=$adr."/255.255.255.255"; | |
104 | } | |
105 | } | |
106 | if(&General::validipandmask($adr)){ | |
107 | $a=&General::iporsubtodec($adr); | |
108 | } | |
109 | return $a; | |
110 | } | |
111 | sub new_hostgrp | |
112 | { | |
113 | &General::readhasharray($confighosts,\%hosts); | |
114 | &General::readhasharray($confignets,\%nets); | |
115 | &General::readhasharray($configgroups,\%groups); | |
116 | my $grp=shift; | |
117 | my $run=shift; | |
118 | my $name; #"converted" | |
119 | my $name2; | |
120 | my $name3; #custom host/custom net | |
121 | foreach my $adr (@hostarray){ | |
122 | if($run eq 'ip'){ | |
123 | my ($ip,$type) = split(",",$adr); | |
124 | my ($ippart,$subnet) = split("/",$ip); | |
125 | my ($byte1,$byte2,$byte3,$byte4) = split(/\./,$subnet); | |
126 | if($byte4 eq '255'){ | |
127 | if(!&check_host($ip)){ | |
128 | my $key = &General::findhasharraykey(\%hosts); | |
129 | $name="host "; | |
130 | $name2=$name.$ippart; | |
131 | $name3="Custom Host"; | |
132 | $hosts{$key}[0] = $name2; | |
133 | $hosts{$key}[1] = $type; | |
134 | $hosts{$key}[2] = $ip; | |
135 | $hosts{$key}[3] = 1; | |
136 | }else{ | |
137 | print LOG "Host (IP) $ip already exists\n"; | |
138 | } | |
139 | }elsif($byte4 < '255'){ | |
140 | if(!&check_net($ippart,$subnet)){ | |
141 | my $netkey = &General::findhasharraykey(\%nets); | |
142 | $name="net "; | |
143 | $name2=$name.$ippart; | |
144 | $name3="Custom Network"; | |
145 | $nets{$netkey}[0] = $name2; | |
146 | $nets{$netkey}[1] = $ippart; | |
147 | $nets{$netkey}[2] = $subnet; | |
148 | $nets{$netkey}[3] = 1; | |
149 | }else{ | |
150 | print LOG "Network $ippart already exists\n"; | |
151 | } | |
152 | } | |
153 | if($name2){ | |
154 | my $grpkey = &General::findhasharraykey(\%groups); | |
155 | $groups{$grpkey}[0] = $grp; | |
156 | $groups{$grpkey}[1] = ''; | |
157 | $groups{$grpkey}[2] = $name2; | |
158 | $groups{$grpkey}[3] = $name3; | |
159 | $groups{$grpkey}[4] = 0; | |
160 | } | |
161 | }elsif($run eq 'mac'){ | |
162 | #MACRUN | |
163 | my ($mac,$type) = split(",",$adr); | |
164 | if(!&check_host($mac)){ | |
165 | my $key = &General::findhasharraykey(\%hosts); | |
166 | $name="host "; | |
167 | $name2=$name.$mac; | |
168 | $name3="Custom Host"; | |
169 | $hosts{$key}[0] = $name2; | |
170 | $hosts{$key}[1] = $type; | |
171 | $hosts{$key}[2] = $mac; | |
172 | $hosts{$key}[3] = 1; | |
173 | }else{ | |
174 | print LOG "Host (MAC) $mac already exists\n"; | |
175 | } | |
176 | if($name2){ | |
177 | my $grpkey = &General::findhasharraykey(\%groups); | |
178 | $groups{$grpkey}[0] = $grp; | |
179 | $groups{$grpkey}[1] = ''; | |
180 | $groups{$grpkey}[2] = $name2; | |
181 | $groups{$grpkey}[3] = $name3; | |
182 | $groups{$grpkey}[4] = 0; | |
183 | } | |
184 | } | |
185 | } | |
186 | &General::writehasharray($confighosts,\%hosts); | |
187 | &General::writehasharray($configgroups,\%groups); | |
188 | &General::writehasharray($confignets,\%nets); | |
189 | } | |
190 | sub check_host | |
191 | { | |
192 | my $ip=shift; | |
193 | foreach my $key (sort keys %hosts) | |
194 | { | |
195 | if($hosts{$key}[2] eq $ip) | |
196 | { | |
197 | return 1; | |
198 | } | |
199 | } | |
200 | return 0; | |
201 | } | |
202 | sub check_net | |
203 | { | |
204 | my $ip=shift; | |
205 | my $sub=shift; | |
206 | foreach my $key (sort keys %nets) | |
207 | { | |
208 | if($nets{$key}[1] eq $ip && $nets{$key}[2] eq $sub) | |
209 | { | |
210 | return 1; | |
211 | } | |
212 | } | |
213 | return 0; | |
214 | } | |
215 | sub check_grp | |
216 | { | |
217 | my $grp=shift; | |
218 | my $value=shift; | |
219 | foreach my $key (sort keys %groups) | |
220 | { | |
221 | if($groups{$key}[0] eq $grp && $groups{$key}[2] eq $value) | |
222 | { | |
223 | return 1; | |
224 | } | |
225 | } | |
226 | return 0; | |
227 | } | |
228 | sub process_rules | |
229 | { | |
230 | print "Outgoing ist im Mode $outsettings{'POLICY'}\n"; | |
231 | &General::readhash($fwdfwsettings,\%fwdsettings); | |
232 | if($fwdsettings{'POLICY'} ne $outsettings{'POLICY'}){ | |
233 | $fwdsettings{'POLICY'}=$outsettings{'POLICY'}; | |
234 | &General::writehash($fwdfwsettings,\%fwdsettings); | |
235 | } | |
236 | #open LOG | |
2833f567 AM |
237 | if( -f "/var/log/converters/outgoingfw-convert.log"){unlink ("/var/log/converters/outgoingfw-convert.log");} |
238 | open (LOG, ">/var/log/converters/outgoingfw-convert.log") or die $!; | |
27f4a6b1 AM |
239 | |
240 | my ($type,$action,$active,$grp1,$source,$grp2,$useport,$port,$prot,$grp3,$target,$remark,$log,$time,$time_mon,$time_tue,$time_wed,$time_thu,$time_fri,$time_sat,$time_sun,$time_from,$time_to); | |
241 | if ($outsettings{'POLICY'} eq 'MODE1'){ | |
242 | $type='ALLOW'; | |
243 | $action='ACCEPT'; | |
244 | }elsif($outsettings{'POLICY'} eq 'MODE2'){ | |
245 | $type='DENY'; | |
246 | $action='DROP'; | |
247 | }else{ | |
248 | return; | |
249 | } | |
250 | open (DATEI, "<$outgoingrules"); | |
251 | my @lines = <DATEI>; | |
252 | foreach my $rule (@lines) | |
253 | { | |
254 | chomp($rule); | |
255 | print LOG "processing: $rule\n"; | |
256 | print "$rule\n"; | |
257 | my @configline = split( /\;/, $rule ); | |
258 | my @prot=(); | |
259 | if($configline[0] eq $type){ | |
260 | #some variables we can use from old config | |
261 | if($configline[1] eq 'on'){ $active='ON';}else{$active='';} | |
262 | if($configline[3] eq 'all'){ | |
263 | push(@prot,"tcp"); | |
264 | push(@prot,"udp"); | |
265 | $useport='ON'; | |
266 | $grp3='TGT_PORT'; | |
267 | ||
268 | }else{ | |
269 | push(@prot,$configline[3]); | |
270 | $useport='ON'; | |
271 | $grp3='TGT_PORT'; | |
272 | } | |
273 | if($configline[4] ne ''){ $remark=$configline[4];}else{$remark='';} | |
274 | if($configline[9] eq 'aktiv'){ $log='ON';}else{$log='';} | |
275 | ||
276 | if($configline[10] eq 'on' && $configline[11] eq 'on' && $configline[12] eq 'on' && $configline[13] eq 'on' && $configline[14] eq 'on' && $configline[15] eq 'on' && $configline[16] eq 'on'){ | |
277 | if($configline[17] eq '00:00' && $configline[18] eq '00:00'){ | |
278 | $time=''; | |
279 | }else{ | |
280 | $time='ON'; | |
281 | } | |
282 | }else{ | |
283 | $time='ON'; | |
284 | } | |
285 | $time_mon=$configline[10]; | |
286 | $time_tue=$configline[11]; | |
287 | $time_wed=$configline[12]; | |
288 | $time_thu=$configline[13]; | |
289 | $time_fri=$configline[14]; | |
290 | $time_sat=$configline[15]; | |
291 | $time_sun=$configline[16]; | |
292 | $time_from=$configline[17]; | |
293 | $time_to=$configline[18]; | |
294 | ############################################################ | |
295 | #sourcepart | |
296 | if ($configline[2] eq 'green') { | |
297 | $grp1='std_net_src'; | |
298 | $source='GREEN'; | |
299 | }elsif ($configline[2] eq 'orange') { | |
300 | $grp1='std_net_src'; | |
301 | $source='ORANGE'; | |
302 | }elsif ($configline[2] eq 'red') { | |
303 | print LOG "-> Rule not converted, is an outgoing rule.Please put it manually in /etc/sysconfig/firewall.local \n"; | |
304 | next; | |
305 | }elsif ($configline[2] eq 'blue') { | |
306 | $grp1='std_net_src'; | |
307 | $source='BLUE'; | |
308 | }elsif ($configline[2] eq 'ipsec') { | |
309 | print LOG "-> Rule not converted, ipsec+ interface is obsolet since IPFire 2.7 \n"; | |
310 | next; | |
311 | }elsif ($configline[2] eq 'ovpn') { | |
312 | &build_ovpn_grp; | |
313 | }elsif ($configline[2] eq 'ip') { | |
314 | my $z=&check_ip($configline[5]); | |
315 | if($z){ | |
316 | $grp1='src_addr'; | |
317 | $source=$z; | |
318 | }else{ | |
319 | print LOG "-> Rule not converted, missing/invalid source ip \"$configline[5]\"\n"; | |
320 | next; | |
321 | } | |
322 | }elsif ($configline[2] eq 'mac') { | |
323 | if(&General::validmac($configline[6])){ | |
324 | $grp1='src_addr'; | |
325 | $source=$configline[6]; | |
326 | }else{ | |
327 | print LOG"-> Rule not converted, invalid MAC \"$configline[6]\" \n"; | |
328 | next; | |
329 | } | |
330 | }elsif ($configline[2] eq 'all') { | |
331 | $grp1='std_net_src'; | |
332 | $source='ALL'; | |
333 | }else{ | |
334 | #&General::readhasharray($configgroups,\%groups); | |
335 | foreach my $key (sort keys %groups){ | |
336 | if($groups{$key}[0] eq $configline[2]){ | |
337 | $grp1='cust_grp_src'; | |
338 | $source=$configline[2]; | |
339 | } | |
340 | } | |
341 | if ($grp1 eq '' || $source eq ''){ | |
342 | print LOG "-> Rule not converted, no valid source recognised\n"; | |
343 | } | |
344 | } | |
345 | ############################################################ | |
346 | #destinationpart | |
347 | if($configline[7] ne ''){ | |
348 | my $address=&check_ip($configline[7]); | |
349 | if($address){ | |
350 | $grp2='tgt_addr'; | |
351 | $target=$address; | |
352 | }elsif(!$address){ | |
353 | my $getwebsiteip=&get_ip_from_domain($configline[7]); | |
354 | if ($getwebsiteip){ | |
355 | $grp2='tgt_addr'; | |
356 | $target=$getwebsiteip; | |
357 | }else{ | |
358 | print LOG "-> Rule not converted, invalid domain \"$configline[7]\"\n"; | |
359 | next; | |
360 | } | |
361 | } | |
362 | }else{ | |
363 | $grp2='std_net_tgt'; | |
364 | $target='ALL'; | |
365 | } | |
366 | if($configline[8] ne ''){ | |
367 | if (!($configline[8] =~ /^(\d+)\:(\d+)$/)) { | |
368 | if(&General::validport($configline[8])){ | |
369 | $useport='ON'; | |
370 | $port=$configline[8]; | |
371 | $grp3='TGT_PORT'; | |
372 | }else{ | |
373 | print LOG "-> Rule not converted, invalid destination Port \"$configline[8]\"\n"; | |
374 | next; | |
375 | } | |
376 | }else{ | |
377 | my ($a1,$a2) = split(/\:/,$configline[8]); | |
378 | if (&General::validport($a1) && &General::validport($a2) && $a1 < $a2){ | |
379 | $useport='ON'; | |
380 | $port=$configline[8]; | |
381 | $grp3='TGT_PORT'; | |
382 | }else{ | |
383 | print LOG "-> Rule not converted, invalid destination Port \"$configline[8]\"\n"; | |
384 | next; | |
385 | } | |
386 | } | |
387 | } | |
388 | }else{ | |
389 | print LOG "-> Rule not converted because not for Firewall mode $outsettings{'POLICY'} (we are only converting for actual mode)\n"; | |
390 | } | |
391 | &General::readhasharray($fwdfwconfig,\%fwconfig); | |
392 | my $check; | |
393 | foreach my $protocol (@prot){ | |
394 | $protocol=uc($protocol); | |
395 | print"0:$action 1:FORWARDFW 2:$active 3:$grp1 4:$source 5:$grp2 6:$target 7:src_srv(leer) 8:srcprot(leer) 9:icmp(leer) 10:srcport(leer) 11:$useport 12:$protocol 13:icmp(leer) 14:$grp3 15:$port 16:$remark 17:$log 18:$time 19:$time_mon 20:$time_tue 21:$time_wed 22:$time_thu 23:$time_fri 24:$time_sat 25:$time_sun 26:$time_from 27:$time_to\n\n"; | |
396 | print LOG "-> Converted: $action,FORWARDFW,$active,$grp1,$source,$grp2,$target,,,,,$useport,$protocol,,$grp3,$port,$remark,$log,$time,$time_mon,$time_tue,$time_wed,$time_thu,$time_fri,$time_sat,$time_sun,$time_from,$time_to\n"; | |
397 | #Put rules into system.... | |
398 | ########################### | |
399 | ||
400 | #check for double rules | |
401 | foreach my $key (sort keys %fwconfig){ | |
402 | if("$action,FORWARDFW,$active,$grp1,$source,$grp2,$target,,,,,$useport,$protocol,,$grp3,$port,$remark,$log,$time,$time_mon,$time_tue,$time_wed,$time_thu,$time_fri,$time_sat,$time_sun,$time_from,$time_to" | |
403 | eq "$fwconfig{$key}[0],$fwconfig{$key}[1],$fwconfig{$key}[2],$fwconfig{$key}[3],$fwconfig{$key}[4],$fwconfig{$key}[5],$fwconfig{$key}[6],,,,,$fwconfig{$key}[11],$fwconfig{$key}[12],,$fwconfig{$key}[14],$fwconfig{$key}[15],$fwconfig{$key}[16],$fwconfig{$key}[17],$fwconfig{$key}[18],$fwconfig{$key}[19],$fwconfig{$key}[20],$fwconfig{$key}[21],$fwconfig{$key}[22],$fwconfig{$key}[23],$fwconfig{$key}[24],$fwconfig{$key}[25],$fwconfig{$key}[26],$fwconfig{$key}[27]"){ | |
404 | $check='on'; | |
405 | next; | |
406 | } | |
407 | } | |
408 | if($check ne 'on'){ | |
409 | #increase groupcounter | |
410 | my $check1; | |
411 | if($grp1 eq 'cust_grp_src'){ | |
412 | foreach my $key (sort keys %groups){ | |
413 | if($groups{$key}[0] eq $source){ | |
414 | $groups{$key}[4]++; | |
415 | $check1='on'; | |
416 | } | |
417 | } | |
418 | if($check1 eq 'on'){ | |
419 | print" schreibe in gruppe\n"; | |
420 | &General::writehasharray($configgroups,\%groups); | |
421 | } | |
422 | } | |
423 | print"SCHREIBE REGEL!\n"; | |
424 | my $key = &General::findhasharraykey(\%fwconfig); | |
425 | $fwconfig{$key}[0] = $action; | |
426 | $fwconfig{$key}[1] = "FORWARDFW"; | |
427 | $fwconfig{$key}[2] = $active; | |
428 | $fwconfig{$key}[3] = $grp1; | |
429 | $fwconfig{$key}[4] = $source; | |
430 | $fwconfig{$key}[5] = $grp2; | |
431 | $fwconfig{$key}[6] = $target; | |
432 | $fwconfig{$key}[11] = $useport; | |
433 | $fwconfig{$key}[12] = $protocol; | |
434 | $fwconfig{$key}[14] = $grp3; | |
435 | $fwconfig{$key}[15] = $port; | |
436 | $fwconfig{$key}[16] = $remark; | |
437 | $fwconfig{$key}[17] = $log; | |
438 | $fwconfig{$key}[18] = $time; | |
439 | $fwconfig{$key}[19] = $time_mon; | |
440 | $fwconfig{$key}[20] = $time_tue; | |
441 | $fwconfig{$key}[21] = $time_wed; | |
442 | $fwconfig{$key}[22] = $time_thu; | |
443 | $fwconfig{$key}[23] = $time_fri; | |
444 | $fwconfig{$key}[24] = $time_sat; | |
445 | $fwconfig{$key}[25] = $time_sun; | |
446 | $fwconfig{$key}[26] = $time_from; | |
447 | $fwconfig{$key}[27] = $time_to; | |
448 | } | |
449 | } | |
450 | &General::writehasharray($fwdfwconfig,\%fwconfig); | |
451 | system("/usr/local/bin/forwardfwctrl"); | |
452 | @prot=(); | |
453 | } | |
454 | close(LOG); | |
455 | @lines=(); | |
456 | } | |
457 | sub get_ip_from_domain | |
458 | { | |
459 | $web=shift; | |
460 | my $resolvedip; | |
461 | my $checked; | |
462 | my ($name,$aliases,$addrtype,$length,@addrs) = gethostbyname($web); | |
463 | if(@addrs){ | |
464 | $resolvedip=inet_ntoa($addrs[0]); | |
465 | return $resolvedip; | |
466 | } | |
467 | return; | |
468 | } | |
469 | sub build_ovpn_grp | |
470 | { | |
471 | &General::readhasharray($confighosts,\%hosts); | |
472 | &General::readhasharray($confignets,\%nets); | |
473 | &General::readhasharray($configgroups,\%groups); | |
474 | &General::readhasharray($ovpnconfig,\%configovpn); | |
475 | &General::readhasharray($ccdconfig,\%ccdconf); | |
476 | &General::readhash($ovpnsettings,\%settingsovpn); | |
477 | #get ovpn nets | |
478 | my @ovpnnets=(); | |
479 | if($settingsovpn{'DOVPN_SUBNET'}){ | |
480 | my ($net,$subnet)=split("/",$settingsovpn{'DOVPN_SUBNET'}); | |
481 | push (@ovpnnets,"$net,$subnet,dynamic"); | |
482 | } | |
483 | foreach my $key (sort keys %ccdconf){ | |
484 | my ($net,$subnet)=split("/",$ccdconf{$key}[1]); | |
485 | $subnet=&General::iporsubtodec($subnet); | |
486 | push (@ovpnnets,"$net,$subnet,$ccdconf{$key}[0]"); | |
487 | } | |
488 | foreach my $key (sort keys %configovpn){ | |
489 | if ($configovpn{$key}[3] eq 'net'){ | |
490 | my ($net,$subnet)=split("/",$configovpn{$key}[27]); | |
491 | push (@ovpnnets,"$net,$subnet,$configovpn{$key}[2]"); | |
492 | } | |
493 | } | |
494 | #add ovpn nets to customnetworks/groups | |
495 | foreach my $line (@ovpnnets){ | |
496 | my ($net,$subnet,$name) = split(",",$line); | |
497 | if (!&check_net($net,$subnet)){ | |
498 | my $netkey = &General::findhasharraykey(\%nets); | |
499 | $name2=$name."(ovpn)".$net; | |
500 | $name3="Custom Network"; | |
501 | $nets{$netkey}[0] = $name2; | |
502 | $nets{$netkey}[1] = $net; | |
503 | $nets{$netkey}[2] = $subnet; | |
504 | $nets{$netkey}[3] = 1; | |
505 | }else{ | |
506 | print LOG "-> Custom Network with same IP already exist \"$net/$subnet\" (you can ignore this, if this run was manual from shell)\n"; | |
507 | } | |
508 | if($name2){ | |
509 | my $grpkey = &General::findhasharraykey(\%groups); | |
510 | $groups{$grpkey}[0] = "ovpn"; | |
511 | $groups{$grpkey}[1] = ''; | |
512 | $groups{$grpkey}[2] = $name2; | |
513 | $groups{$grpkey}[3] = "Custom Network"; | |
514 | $groups{$grpkey}[4] = 0; | |
515 | } | |
516 | $name2=''; | |
517 | } | |
518 | @ovpnnets=(); | |
519 | &General::writehasharray($confighosts,\%hosts); | |
520 | &General::writehasharray($configgroups,\%groups); | |
521 | &General::writehasharray($confignets,\%nets); | |
522 | } |