forked from webmin/webmin
-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathimport.cgi
executable file
·71 lines (62 loc) · 1.61 KB
/
import.cgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/local/bin/perl
# import.cgi
# Add an imported connection to the config file
require './ipsec-lib.pl';
&ReadParseMime();
&error_setup($text{'import_err'});
# Get the file
if ($in{'mode'} == 0) {
$in{'upload'} || &error($text{'import_eupload'});
$in{'upload'} =~ s/\r//g;
@data = split(/\n/, $in{'upload'});
}
else {
$in{'file'} || &error($text{'import_efile'});
open(FILE, $in{'file'}) || &error($text{'import_eopen'});
while(<FILE>) {
s/\r|\n//g;
push(@data, $_);
}
close(FILE);
}
# Read and validate it
$temp = &transname();
open(TEMP, ">$temp");
print TEMP map { "$_\n" } @data;
close(TEMP);
@iconf = &get_config($temp);
unlink($temp);
if (@iconf != 1 || $iconf[0]->{'name'} ne 'conn') {
&error($text{'import_eformat'});
}
@conf = &get_config();
foreach $c (@conf) {
if (lc($c->{'value'}) eq lc($iconf[0]->{'value'})) {
$clash = $c;
if (!$in{'over'}) {
&error(&text('import_eclash',
"<tt>$iconf[0]->{'value'}</tt>"));
}
}
}
# Add to the real config file
if ($clash) {
&lock_file($clash->{'file'});
$lref = &read_file_lines($clash->{'file'});
splice(@$lref, $clash->{'line'},
$clash->{'eline'} - $clash->{'line'} + 1, @data);
}
else {
&lock_file($config{'file'});
$lref = &read_file_lines($config{'file'});
push(@$lref, @data);
}
&flush_file_lines();
&unlock_all_files();
# Tell the user
&ui_print_header(undef, $text{'import_title'}, "");
print "<p>",&text($clash ? 'import_done2' : 'import_done1',
"<tt>$iconf[0]->{'value'}</tt>"),"<p>\n";
&ui_print_footer("", $text{'index_return'});
# All done
&webmin_log("import", "conn", $iconf[0]->{'value'}, $iconf[0]->{'values'});