Handle hostnames with upper-case letters
[webmin.git] / bind8 / create_view.cgi
1 #!/usr/local/bin/perl
2 # create_view.cgi
3
4 require './bind8-lib.pl';
5 &error_setup($text{'vcreate_err'});
6 &ReadParse();
7 $add_to_file = &add_to_file();
8 $pconf = &get_config_parent($add_to_file);
9 $conf = $pconf->{'members'};
10 $access{'views'} == 1 || &error($text{'vcreate_ecannot'});
11 $access{'ro'} && &error($text{'vcreate_ecannot'});
12
13 # Validate inputs
14 $in{'name'} =~ /^\S+$/ || &error($text{'vcreate_ename'});
15 @views = &find("view", $conf);
16 foreach $v (@views) {
17         &error($text{'vcreate_etaken'}) if ($v->{'value'} eq $in{'name'});
18         }
19 $in{'class_def'} || $in{'class'} =~ /^[A-Za-z0-9]+$/ ||
20         &error($text{'vcreate_eclass'});
21
22 # Create the view
23 &lock_file(&make_chroot($add_to_file));
24 $dir = { 'name' => 'view',
25          'values' => [ $in{'name'}, $in{'class_def'} ? ( ) : ( $in{'class'} ) ],
26          'type' => 1,
27          'members' => [ ],
28          'file' => $add_to_file
29         };
30 if (!$in{'match_def'}) {
31         push(@{$dir->{'members'}}, { 'name' => 'match-clients',
32                                      'type' => 1,
33                                      'members' =>
34                 [ map { { 'name' => $_ } } split(/\s+/, $in{'match'}) ] } );
35         }
36 &save_directive($pconf, undef, [ $dir ], 0);
37 &flush_file_lines();
38 &unlock_file(&make_chroot($add_to_file));
39
40 # Add to user's ACL
41 if (!&can_edit_view($dir)) {
42         $access{'vlist'} = join(" ", &unique(
43                                 split(/\s+/, $access{'vlist'}), $in{'name'}));
44         &save_module_acl(\%access);
45         }
46 &webmin_log("create", "view", $in{'name'}, \%in);
47 &redirect("");
48