Handle hostnames with upper-case letters
[webmin.git] / bacula-backup / save_fileset.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete a file set
3
4 require './bacula-backup-lib.pl';
5 &ReadParse();
6 $conf = &get_director_config();
7 $parent = &get_director_config_parent();
8 @filesets = &find("FileSet", $conf);
9
10 if (!$in{'new'}) {
11         $fileset = &find_by("Name", $in{'old'}, \@filesets);
12         $fileset || &error($text{'fileset_egone'});
13         }
14 else {
15         $fileset = { 'type' => 1,
16                      'name' => 'FileSet',
17                      'members' => [ ] };
18         }
19
20 &lock_file($parent->{'file'});
21 if ($in{'delete'}) {
22         # Just delete this one
23         $name = &find_value("Name", $fileset->{'members'});
24         $child = &find_dependency("FileSet", $name, [ "Job", "JobDefs" ], $conf);
25         $child && &error(&text('fileset_echild', $child));
26         &save_directive($conf, $parent, $fileset, undef, 0);
27         }
28 else {
29         # Validate and store inputs
30         &error_setup($text{'fileset_err'});
31         $in{'name'} =~ /\S/ || &error($text{'fileset_ename'});
32         if ($in{'new'} || $in{'name'} ne $in{'old'}) {
33                 $clash = &find_by("Name", $in{'name'}, \@filesets);
34                 $clash && &error($text{'fileset_eclash'});
35                 }
36         &save_directive($conf, $fileset, "Name", $in{'name'}, 1);
37
38         # Save included files
39         $in{'include'} =~ s/\r//g;
40         $in{'include'} =~ s/\\/\//g;
41         @include = split(/\n+/, $in{'include'});
42         $inc = &find("Include", $fileset->{'members'});
43         if (!$inc) {
44                 $inc = { 'name' => 'Include', 'type' => 1, 'members' => [ ] };
45                 &save_directive($conf, $fileset, undef, $inc, 1);
46                 }
47         &save_directives($conf, $inc, "File", \@include, 2);
48         $opts = &find("Options", $inc->{'members'});
49         if (!$opts) {
50                 $opts = { 'name' => 'Options', 'type' => 1, 'members' => [ ] };
51                 &save_directive($conf, $inc, undef, $opts, 2);
52                 }
53         &save_directive($conf, $opts, "signature",
54                         $in{'signature'} || undef, 3);
55
56         # Save excluded files
57         $in{'exclude'} =~ s/\r//g;
58         $in{'exclude'} =~ s/\\/\//g;
59         @exclude = split(/\n+/, $in{'exclude'});
60         $exc = &find("Exclude", $fileset->{'members'});
61         if (!$exc && @exclude) {
62                 $exc = { 'name' => 'Exclude', 'type' => 1, 'members' => [ ] };
63                 &save_directive($conf, $fileset, undef, $exc, 1);
64                 }
65         if ($exc) {
66                 &save_directives($conf, $exc, "File", \@exclude, 2);
67                 }
68
69         # Save compression level
70         if ($in{'comp'}) {
71                 &save_directive($conf, $opts, "Compression", $in{'comp'}, 1);
72                 }
73         else {
74                 &save_directive($conf, $opts, "Compression", undef);
75                 }
76
77         &save_directive($conf, $opts, "OneFS", $in{'onefs'} || undef, 1);
78
79         # Create or update
80         if ($in{'new'}) {
81                 &save_directive($conf, $parent, undef, $fileset, 0);
82                 }
83         }
84
85 &flush_file_lines();
86 &unlock_file($parent->{'file'});
87 &auto_apply_configuration();
88 &webmin_log($in{'new'} ? "create" : $in{'delete'} ? "delete" : "modify",
89             "fileset", $in{'old'} || $in{'name'});
90 &redirect("list_filesets.cgi");
91