Handle hostnames with upper-case letters
[webmin.git] / qmailadmin / save_alias.cgi
1 #!/usr/local/bin/perl
2 # save_alias.cgi
3 # Save or delete a new or existing alias
4
5 require './qmail-lib.pl';
6 &ReadParse();
7 &error_setup($text{'asave_err'});
8
9 @aliases = &list_aliases();
10 foreach $ex (@aliases) {
11         $exists{lc($ex)}++;
12         }
13 $a = &get_alias($in{'old'});
14
15 if ($in{'delete'}) {
16         # delete some alias
17         $loga = $a;
18         &delete_alias($a);
19         }
20 else {
21         # saving or creating .. check inputs
22         $in{'name'} =~ /^[^:@ ]+$/ ||
23                 &error(&text('asave_eaddr', $in{'name'}));
24         local $n = $in{'name'};
25         $n =~ s/\./:/g;
26         if ($in{'virt'}) {
27                 $in{'virt'} =~ s/\./:/g;
28                 $n = $in{'virt'}.'-'.$n;
29                 }
30
31         if ($in{'new'} || lc($a->{'name'}) ne lc($n)) {
32                 # is this name taken?
33                 $exists{$n} &&
34                         &error(&text('asave_ealready', $in{'name'}));
35                 }
36         for($i=0; defined($t = $in{"type_$i"}); $i++) {
37                 $v = $in{"val_$i"};
38                 if ($t == 1 && $v !~ /^(\S+)$/) {
39                         &error(&text('asave_etype1', $v));
40                         }
41                 elsif ($t == 2 && $v !~ /^\/(\S+)[^\/\s]$/) {
42                         &error(&text('asave_etype2', $v));
43                         }
44                 elsif ($t == 3 && $v !~ /^\/(\S+)[^\/\s]$/) {
45                         &error(&text('asave_etype3', $v));
46                         }
47                 elsif ($t == 4) {
48                         $v =~ /^(\S+)/ || &error($text{'asave_etype4none'});
49                         -x $1 || &error(&text('asave_etype4', "$1"));
50                         }
51                 elsif ($t == 5 && $v !~ /^\/\S+$/) {
52                         &error(&text('asave_etype5', $v));
53                         }
54                 elsif ($t == 6 && $v !~ /^\/\S+$/) {
55                         &error(&text('asave_etype6', $v));
56                         }
57                 if ($t == 1) { push(@values, "&$v"); }
58                 elsif ($t == 2) { push(@values, "$v/"); }
59                 elsif ($t == 3) { push(@values, "$v"); }
60                 elsif ($t == 4) { push(@values, "|$v"); }
61                 elsif ($t == 5) {
62                         # Setup autoreply script
63                         push(@values, "|$module_config_directory/autoreply.pl ".
64                                       "$v $in{'name'}");
65                         &system_logged("cp autoreply.pl $module_config_directory");
66                         &system_logged("chmod 755 $module_config_directory/config");
67                         }
68                 elsif ($t == 6) {
69                         # Setup filter script
70                         push(@values, "|$module_config_directory/filter.pl ".
71                                       "$v $in{'name'}");
72                         &system_logged("cp filter.pl $module_config_directory");
73                         &system_logged("chmod 755 $module_config_directory/config");
74                         }
75                 }
76
77         $newa{'name'} = $n;
78         $newa{'values'} = \@values;
79         if ($in{'new'}) { &create_alias(\%newa); }
80         else { &modify_alias($a, \%newa); }
81         $loga = \%newa;
82         }
83 &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
84             "alias", $loga->{'name'}, $loga);
85 &redirect("list_aliases.cgi");
86