Handle hostnames with upper-case letters
[webmin.git] / sendmail / save_generic.cgi
1 #!/usr/local/bin/perl
2 # save_generic.cgi
3 # Save, create or delete an outgoing address mapping
4
5 require './sendmail-lib.pl';
6 require './generics-lib.pl';
7 &ReadParse();
8 $access{'omode'} || &error($text{'gsave_ecannot'});
9 $conf = &get_sendmailcf();
10 $gfile = &generics_file($conf);
11 &lock_file($gfile);
12 ($gdbm, $gdbmtype) = &generics_dbm($conf);
13 @gens = &list_generics($gfile);
14 if (!$in{'new'}) {
15         $g = $gens[$in{'num'}];
16         &can_edit_generic($g) ||
17                 &error($text{'gsave_ecannot2'});
18         }
19
20 if ($in{'delete'}) {
21         # delete some mapping
22         $logg = $g;
23         &delete_generic($g, $gfile, $gdbm, $gdbmtype);
24         }
25 else {
26         # Saving or creating.. check inputs
27         &error_setup($text{'gsave_err'});
28         $in{'from'} =~ /^\S+$/ ||
29                 &error(&text('gsave_efrom', $in{'from'}));
30         $access{'omode'} == 1 || $in{'from'} =~ /$access{'oaddrs'}/ ||
31                 &error(&text('gsave_ematch', $access{'oaddrs'}));
32         $in{'to'} =~ /^\S+\@[a-z0-9\.\-\_]+$/i ||
33                 &error(&text('gsave_eto', $in{'to'}));
34         if ($in{'new'} || lc($in{'from'}) ne lc($g->{'from'})) {
35                 ($same) = grep { lc($_->{'from'}) eq lc($in{'from'}) }
36                                @gens;
37                 $same && &error(&text('gsave_ealready', $in{'from'}));
38                 }
39         $newg{'from'} = $in{'from'};
40         $newg{'to'} = $in{'to'};
41         $newg{'cmt'} = $in{'cmt'};
42         &can_edit_generic(\%newg) ||
43                 &error($text{'gsave_ecannot3'});
44         if ($in{'new'}) {
45                 &create_generic(\%newg, $gfile, $gdbm, $gdbmtype);
46                 }
47         else {
48                 &modify_generic($g, \%newg, $gfile, $gdbm, $gdbmtype);
49                 }
50         $logg = \%newg;
51         }
52 &unlock_file($gfile);
53 &webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
54             "generic", $logg->{'from'}, $logg);
55 &redirect("list_generics.cgi");
56