Handle hostnames with upper-case letters
[webmin.git] / postfix / save_alias.cgi
1 #!/usr/local/bin/perl
2 #
3 # postfix-module by Guillaume Cottenceau <gc@mandrakesoft.com>,
4 # for webmin by Jamie Cameron
5 #
6 # Save, modify, delete an alias for Postfix
7
8
9 require './postfix-lib.pl';
10 &ReadParse();
11
12 $access{'aliases'} || &error($text{'aliases_ecannot'});
13 &error_setup($text{'alias_save_err'});
14
15 # Get the alias (if editing or deleting)
16 @afiles = &get_aliases_files(&get_current_value("alias_maps"));
17 @aliases = &list_postfix_aliases();
18 if (!$in{'new'}) {
19         $a = $aliases[$in{'num'}];
20         }
21 &lock_alias_files(\@afiles);
22
23 if ($in{'delete'}) {
24         # delete some alias
25         &delete_postfix_alias($a);
26         $loga = $a;
27         }
28 else {
29         # saving or creating .. check inputs
30         $in{'name'} =~ /^[^:@ ]+$/ ||
31                 &error(&text('asave_eaddr', $in{'name'}));
32         if ($in{'new'} || uc($a->{'name'}) ne uc($in{'name'})) {
33                 # is this name taken?
34                 for($i=0; $i<@aliases; $i++) {
35                         if (uc($in{'name'}) eq uc($aliases[$i]->{'name'})) {
36                                 &error(&text('asave_ealready', $in{'name'}));
37                                 }
38                         }
39                 }
40         for($i=0; defined($t = $in{"type_$i"}); $i++) {
41                 $v = $in{"val_$i"};
42                 $v =~ s/^\s+//;
43                 $v =~ s/\s+$//;
44                 if ($t == 1 && $v !~ /^(\S+)$/) {
45                         &error(&text('asave_etype1', $v));
46                         }
47                 elsif ($t == 3 && $v !~ /^\/(\S+)$/) {
48                         &error(&text('asave_etype3', $v));
49                         }
50                 elsif ($t == 4) {
51                         $v =~ /^(\S+)/ || &error($text{'asave_etype4none'});
52                         -x $1 || &error(&text('asave_etype4', $1));
53                         }
54                 elsif ($t == 5 && $v !~ /^\/(\S+)$/) {
55                         &error(&text('asave_etype5', $v));
56                         }
57                 elsif ($t == 6 && $v !~ /^\/(\S+)$/) {
58                         &error(&text('asave_etype6', $v));
59                         }
60                 if ($t == 1 || $t == 3) { push(@values, $v); }
61                 elsif ($t == 2) { push(@values, ":include:$v"); }
62                 elsif ($t == 4) { push(@values, "|$v"); }
63                 elsif ($t == 5) {
64                         # Setup autoreply script
65                         push(@values, "|$module_config_directory/autoreply.pl ".
66                                       "$v $in{'name'}");
67                         &system_logged("cp autoreply.pl $module_config_directory");
68                         &system_logged("chmod 755 $module_config_directory/config");
69                         }
70                 elsif ($t == 6) {
71                         # Setup filter script
72                         push(@values, "|$module_config_directory/filter.pl ".
73                                       "$v $in{'name'}");
74                         &system_logged("cp filter.pl $module_config_directory");
75                         &system_logged("chmod 755 $module_config_directory/config");
76                         }
77                 }
78
79         $newa{'name'} = $in{'name'};
80         $newa{'values'} = \@values;
81         if (defined($in{'cmt'})) {
82                 $newa{'cmt'} = $in{'cmt'};
83                 }
84         $newa{'enabled'} = $in{'enabled'};
85         if ($in{'new'}) {
86                 &create_postfix_alias(\%newa);
87                 }
88         else {
89                 &modify_postfix_alias($a, \%newa);
90                 }
91         $loga = \%newa;
92         }
93 &unlock_alias_files(\@afiles);
94
95 # re-creates aliases database
96 &regenerate_aliases();
97 &reload_postfix();
98
99 &webmin_log($in{'new'} ? 'create' : $in{'delete'} ? 'delete' : 'modify',
100             'alias', $loga->{'name'}, $loga);
101 &redirect("aliases.cgi");
102
103
104
105