forked from webmin/webmin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
save_global.cgi
executable file
·62 lines (55 loc) · 1.54 KB
/
save_global.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
#!/usr/local/bin/perl
# save_global.cgi
# Save global options
require './fetchmail-lib.pl';
&ReadParse();
&error_setup($text{'global_err'});
if ($config{'config_file'}) {
$file = $config{'config_file'};
}
else {
&can_edit_user($in{'user'}) || &error($text{'poll_ecannot'});
@uinfo = getpwnam($in{'user'});
$file = "$uinfo[7]/.fetchmailrc";
}
&lock_file($file);
@conf = &parse_config_file($file);
foreach $c (@conf) {
$poll = $c if ($c->{'defaults'});
}
$found++ if ($poll);
# Validate inputs
$in{'port_def'} || $in{'port'} =~ /^\d+$/ ||
&error($text{'poll_eport'});
if (!$in{'interface_def'}) {
$in{'interface'} =~ /^\S+$/ || &error($text{'poll_einterface'});
&check_ipaddress($in{'interface_net'}) || &error($text{'poll_enet'});
&check_ipaddress($in{'interface_mask'}) || !$in{'interface_mask'} ||
&error($text{'poll_emask'});
}
# Create the default structure
$poll->{'defaults'} = 1;
$poll->{'proto'} = $in{'proto'};
$poll->{'port'} = $in{'port_def'} ? undef : $in{'port'};
if ($in{'interface_def'}) {
delete($poll->{'interface'});
}
else {
local @interface = ( $in{'interface'}, $in{'interface_net'} );
push(@interface, $in{'interface_mask'}) if ($in{'interface_mask'});
$poll->{'interface'} = join("/", @interface);
}
if ($found) {
&modify_poll($poll, $file);
}
else {
&create_poll($poll, $file);
if ($in{'user'} && $< == 0) {
&system_logged("chown $in{'user'} $file");
}
&system_logged("chmod 700 $file");
}
&unlock_file($file);
&webmin_log("global", undef, $config{'config_file'} ? $file : $in{'user'},
\%in);
&redirect("");