2 # Actually do an import
4 require './itsecur-lib.pl';
5 &can_edit_error("import");
6 &error_setup($text{'import_err'});
9 if (&foreign_check("net")) {
10 &foreign_require("net", "net-lib.pl");
11 foreach $i (&net::active_interfaces(), &net::boot_interfaces()) {
12 $iface{$i->{'fullname'}} = $i;
15 %services = map { $_->{'name'}, $_ } &list_services();
16 %times = map { $_->{'name'}, $_ } &list_times();
19 if (!$in{'src_def'}) {
20 -r $in{'src'} || &error_cleanup($text{'restore_esrc'});
21 $data = `cat $in{'src'}`;
24 $in{'file'} || &error_cleanup($text{'restore_efile'});
31 foreach $line (split(/\n/, $data)) {
37 while($line && $line =~ /^,?("([^"]*)"|([^,]*))(.*)$/) {
41 @row >= 4 || &error(&text('import_erow', $i, $oldline));
44 $rule = { 'enabled' => 1 };
45 $rule->{'source'} = &parse_srcdest($row[0]);
46 $rule->{'source'} || &error(text('import_esource', $i, $row[0]));
47 $rule->{'dest'} = &parse_srcdest($row[1]);
48 $rule->{'dest'} || &error(text('import_edest', $i, $row[1]));
49 @servs = split(/\s+/, $row[2]);
51 $services{$s} || &error(text('import_eservice', $i, $s));
53 $rule->{'service'} = @servs ? join(",", @servs) : "*";
54 if ($row[3] =~ s/\s+log$//i) {
60 &indexof(lc($row[3]), @actions) >= 0 ||
61 &error(text('import_eaction', $i, $row[3]));
62 $rule->{'action'} = lc($row[3]);
63 $rule->{'desc'} = $row[4] || "*";
65 $times{$row[5]} || &error(text('import_etime', $i, $row[5]));
66 $rule->{'time'} = $row[5];
69 $rule->{'time'} = "*";
71 push(@newrules, $rule);
74 # Ensure that new rules are sane
77 &lock_itsecur_files();
78 @rules = &list_rules();
79 push(@rules, @newrules);
82 &unlock_itsecur_files();
85 &header($text{'import_title'}, "",
86 undef, undef, undef, undef, &apply_button());
89 print "<p>",&text('import_done1', scalar(@newrules)),"<p>\n";
92 &footer("", $text{'index_return'});
93 &remote_webmin_log("import", "rules", $in{'src_def'} ? undef : $in{'src'});
100 elsif (&valid_host($_[0])) {
103 elsif ($iface{lc($_[0])}) {
104 return "%".lc($_[0]);