3 # Update, create or delete a server to poll
5 require './fetchmail-lib.pl';
7 &error_setup($text{'poll_err'});
8 if ($config{'config_file'}) {
9 $file = $config{'config_file'};
12 &can_edit_user($in{'user'}) || &error($text{'poll_ecannot'});
13 @uinfo = getpwnam($in{'user'});
14 $file = "$uinfo[7]/.fetchmailrc";
16 @conf = &parse_config_file($file);
18 $poll = $conf[$in{'idx'}];
23 # Go back to the edit form
24 &redirect("edit_poll.cgi?file=$file&idx=$in{'idx'}&adduser=1&user=$in{'user'}");
27 elsif ($in{'check'}) {
28 # Go to the mail checking CGI
29 &redirect("check.cgi?file=$file&idx=$in{'idx'}&adduser=1&user=$in{'user'}");
32 elsif ($in{'delete'}) {
33 # Just delete the poll
34 &delete_poll($poll, $file);
37 # Validate poll inputs
38 $in{'poll'} =~ /^\S+$/ || &error($text{'poll_epoll'});
39 $in{'via_def'} || &check_host($in{'via'}) ||
40 &error($text{'poll_evia'});
41 !$in{'via_def'} || &check_host($in{'poll'}) ||
42 &error($text{'poll_epoll'});
43 $in{'port_def'} || $in{'port'} =~ /^\d+$/ ||
44 &error($text{'poll_eport'});
45 if (!$in{'interface_def'}) {
46 $in{'interface'} =~ /^\S+$/ || &error($text{'poll_einterface'});
47 &check_ipaddress($in{'interface_net'}) ||
48 &error($text{'poll_enet'});
49 &check_ipaddress($in{'interface_mask'}) ||
50 !$in{'interface_mask'} ||
51 &error($text{'poll_emask'});
54 # Create the poll structure
55 $poll->{'poll'} = $in{'poll'};
56 $poll->{'skip'} = $in{'skip'};
57 $poll->{'via'} = $in{'via_def'} ? undef : $in{'via'};
58 $poll->{'proto'} = $in{'proto'};
59 $poll->{'auth'} = $in{'auth'};
60 $poll->{'port'} = $in{'port_def'} ? undef : $in{'port'};
61 if ($in{'interface_def'}) {
62 delete($poll->{'interface'});
65 local @interface = ( $in{'interface'}, $in{'interface_net'} );
66 push(@interface, $in{'interface_mask'})
67 if ($in{'interface_mask'});
68 $poll->{'interface'} = join("/", @interface);
71 # Validate user inputs
72 for($i=0; defined($in{"user_$i"}); $i++) {
73 $user = $poll->{'users'}->[$i];
74 next if (!$in{"user_$i"});
75 $in{"user_$i"} =~ /^\S*$/ || &error($text{'poll_euser'});
76 $user->{'user'} = $in{"user_$i"};
77 $user->{'pass'} = $in{"pass_$i"};
78 local @is = split(/\s+/, $in{"is_$i"});
80 $user->{'keep'} = $in{"keep_$i"};
81 $user->{'fetchall'} = $in{"fetchall_$i"};
82 if ($in{"keep_$i"} == 1 && $in{"fetchall_$i"} == 1) {
83 &error($text{'poll_eboth'});
85 $user->{'ssl'} = $in{"ssl_$i"};
86 $user->{'preconnect'} = $in{"preconnect_$i"};
87 $user->{'postconnect'} = $in{"postconnect_$i"};
90 $poll->{'users'} = \@users;
93 &create_poll($poll, $file);
94 if ($in{'user'} && $< == 0) {
95 local @uinfo = getpwnam($in{'user'});
96 &system_logged("chown $uinfo[2]:$uinfo[3] $file");
98 &system_logged("chmod 700 $file");
101 &modify_poll($poll, $file);
106 &webmin_log($in{'new'} ? 'create' : $in{'delete'} ? 'delete' : 'modify',
107 'poll', $poll->{'poll'},
108 $config{'config_file'} ? { 'file' => $file }
109 : { 'user' => $in{'user'} } );
110 &redirect(!$fetchmail_config && $config{'view_mode'} ?
111 "edit_user.cgi?user=$in{'user'}" : "");
115 return 1 if (&to_ipaddress($_[0]) || &to_ip6address($_[0]));
116 return 0 if (&to_ipaddress("www.webmin.com")); # only fail if we are online