Handle hostnames with upper-case letters
[webmin.git] / filter / save_auto.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete an autoreply filter
3
4 require './filter-lib.pl';
5 &foreign_require("mailbox", "mailbox-lib.pl");
6 &ReadParse();
7 &error_setup($text{'auto_err'});
8
9 # Find existing autoreply filter object
10 &lock_file($procmail::procmailrc);
11 @filters = &list_filters();
12 ($old) = grep { $_->{'actionreply'} && $_->{'nocond'} } @filters;
13 $filter = $old;
14
15 if ($filter && !$in{'enabled'}) {
16         # Just delete
17         &delete_filter($filter);
18         }
19 elsif ($in{'enabled'}) {
20         # Create or update
21         if (!$filter) {
22                 $filter = { 'actionreply' => 1,
23                             'body' => 0,
24                             'continue' => 1 };
25                 }
26         $in{'reply'} =~ /\S/ || &error($text{'save_ereply'});
27         $in{'reply'} =~ s/\r//g;
28         $filter->{'reply'}->{'autotext'} = $in{'reply'};
29
30         # From address (automatic)
31         $filter->{'reply'}->{'from'} = &mailbox::get_preferred_from_address();
32
33         # File
34         $idx = defined($filter->{'index'}) ? $filter->{'index'}
35                                            : scalar(@filters);
36         $filter->{'reply'}->{'autoreply'} ||=
37                 "$remote_user_info[7]/autoreply.$idx.txt";
38
39         # Reply period
40         if ($config{'reply_force'}) {
41                 # Forced to minimum
42                 $min = $config{'reply_min'} || 60;
43                 $filter->{'reply'}->{'period'} = $min*60;
44                 $filter->{'reply'}->{'replies'} ||=
45                         "$user_module_config_directory/replies";
46                 }
47         elsif ($in{'period_def'}) {
48                 # No autoreply period
49                 delete($filter->{'reply'}->{'replies'});
50                 delete($filter->{'reply'}->{'period'});
51                 }
52         else {
53                 # Set reply period and tracking file
54                 $in{'period'} =~ /^\d+$/ ||
55                         &error($text{'save_eperiod'});
56                 if ($config{'reply_min'} &&
57                     $in{'period'} < $config{'reply_min'}) {
58                         &error(&text('save_eperiodmin', $config{'reply_min'}));
59                         }
60                 $filter->{'reply'}->{'period'} = $in{'period'}*60;
61                 $filter->{'reply'}->{'replies'} ||=
62                         "$user_module_config_directory/replies";
63                 }
64
65         # Save character set
66         if ($in{'charset_def'} == 1) {
67                 delete($filter->{'reply'}->{'charset'});
68                 }
69         elsif ($in{'charset_def'} == 2) {
70                 $filter->{'reply'}->{'charset'} = &get_charset();
71                 }
72         else {
73                 $in{'charset'} =~ /^[a-z0-9\.\-\_]+$/i ||
74                         error($text{'save_echarset'});
75                 $filter->{'reply'}->{'charset'} = $in{'charset'};
76                 }
77
78         if ($old) {
79                 &modify_filter($filter);
80                 }
81         else {
82                 &insert_filter($filter);
83                 }
84         }
85
86 &unlock_file($procmail::procmailrc);
87 &redirect("");
88