Handle hostnames with upper-case letters
[webmin.git] / bind8 / create_delegation.cgi
1 #!/usr/local/bin/perl
2 # create_forward.cgi
3 # Create a new forward zone
4
5 require './bind8-lib.pl';
6 &ReadParse();
7 &error_setup($text{'dcreate_err'});
8 $access{'delegation'} || &error($text{'dcreate_ecannot'});
9 $access{'ro'} && &error($text{'master_ero'});
10 $conf = &get_config();
11 if ($in{'view'} ne '') {
12         $view = $conf->[$in{'view'}];
13         &can_edit_view($view) || &error($text{'master_eviewcannot'});
14         $vconf = $view->{'members'};
15         }
16 else {
17         $vconf = $conf;
18         }
19
20 # validate inputs
21 if ($in{'rev'}) {
22         local($ipv4);
23         ($ipv4 = &check_net_ip($in{'zone'})) ||
24         $config{'support_aaaa'} &&
25         (($in{'zone'} =~ /^([\w:]+)(\/\d+)$/) || &check_ip6address($1)) ||
26                 &error(&text('create_enet', $in{'zone'}));
27         if ($ipv4) {
28                 $in{'zone'} = &ip_to_arpa($in{'zone'});
29                 }
30         else {
31                 $in{'zone'} = &net_to_ip6int($1, ($2 ? substr($2, 1) : "" ));
32                 }
33         }
34 else {
35         ($in{'zone'} =~ /^[\d\.]+$/ || $in{'zone'} =~ /^[\d\:]+(\/[\d]+)?$/) &&
36                 &error(&text('create_edom2', $in{'zone'}));
37         &valdnsname($in{'zone'}, 0, ".") ||
38                 &error(&text('create_edom', $in{'zone'}));
39         }
40 $in{'zone'} =~ s/\.$//;
41 foreach $z (&find("zone", $vconf)) {
42         if (lc($z->{'value'}) eq lc($in{'zone'})) {
43                 &error($text{'master_etaken'});
44                 }
45         }
46
47 # Create structure
48 @mdirs = map { { 'name' => $_ } } @masters;
49 $dir = { 'name' => 'zone',
50          'values' => [ $in{'zone'} ],
51          'type' => 1,
52          'members' => [ { 'name' => 'type',
53                           'values' => [ 'delegation-only' ] }
54                       ]
55         };
56
57 # Create zone directive
58 &create_zone($dir, $conf, $in{'view'});
59 &webmin_log("create", "delegation", $in{'zone'}, \%in);
60
61 # Get the new zone's index
62 $idx = &get_zone_index($in{'zone'}, $in{'view'});
63
64 &add_zone_access($in{'zone'});
65 &redirect("edit_delegation.cgi?index=$idx&view=$in{'view'}");
66