Handle hostnames with upper-case letters
[webmin.git] / sendmail / save_mailer.cgi
1 #!/usr/local/bin/perl
2 # save_mailer.cgi
3 # Save, create or delete a mailertable entry
4
5 require './sendmail-lib.pl';
6 require './mailers-lib.pl';
7 &ReadParse();
8 $access{'mailers'} || &error($text{'msave_ecannot'});
9 $conf = &get_sendmailcf();
10 $mfile = &mailers_file($conf);
11 &lock_file($mfile);
12 ($mdbm,$mdbmtype) = &mailers_dbm($conf);
13 @mailers = &list_mailers($mfile);
14 foreach $ml (@mailers) { $already{$ml->{'domain'}}++; }
15 if (!$in{'new'}) { $m = $mailers[$in{'num'}]; }
16
17 if ($in{'delete'}) {
18         # delete some mailer entry
19         $logm = $m;
20         &delete_mailer($m, $mfile, $mdbm, $mdbmtype);
21         }
22 else {
23         # Saving or creating.. check inputs
24         &error_setup($text{'msave_err'});
25         $domain = $in{'from_type'} == 1 ? ".".$in{'from_dom'} :
26                   $in{'from_type'} == 2 ? $in{'from_all'} : $in{'from_host'};
27         $domain =~ /^[A-z0-9\-\.]+$/ ||
28                 &error(&text('msave_edomain', $domain));
29         if ($already{$domain} && ($in{'new'} || $m->{'domain'} ne $domain)) {
30                 &error(&text('msave_edup', $domain));
31                 }
32         if ($in{'new'} && $in{'from_type'} == 2 &&
33             $already{".".$in{'from_all'}}) {
34                 &error(&text('msave_edup', $domain));
35                 }
36         $mailer = $in{'mailer'};
37         $dest = $in{'dest'};
38         $dest =~ s/\s+/:/g;
39
40         $newm{'domain'} = $domain;
41         $newm{'mailer'} = $mailer;
42         if ($in{'nomx'} && $mailer =~ /smtp|relay/) {
43                 $dest = join(":", map { "[".$_."]" } split(/:/, $dest));
44                 }
45         $newm{'dest'} = $dest;
46         $newm{'cmt'} = $in{'cmt'};
47         if ($in{'new'}) {
48                 &create_mailer(\%newm, $mfile, $mdbm, $mdbmtype);
49                 if ($in{'from_type'} == 2) {
50                         # Add extra for hosts in domain
51                         $newm{'domain'} = ".".$in{'from_all'};
52                         &create_mailer(\%newm, $mfile, $mdbm, $mdbmtype);
53                         }
54                 }
55         else {
56                 &modify_mailer($m, \%newm, $mfile, $mdbm, $mdbmtype);
57                 }
58         $logm = \%newm;
59         }
60 &unlock_file($mfile);
61 &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
62             "mailer", $logm->{'domain'}, $logm);
63 &redirect("list_mailers.cgi");
64