Handle hostnames with upper-case letters
[webmin.git] / samba / save_fshare.cgi
1 #!/usr/local/bin/perl
2 # save_fshare.cgi
3 # Save a new or edited file share
4
5 require './samba-lib.pl';
6 &ReadParse();
7 &lock_file($config{'smb_conf'});
8 &get_share($in{old_name}) if $in{old_name};
9
10 # check acls
11
12 &error_setup("<blink><font color=red>$text{'eacl_aviol'}</font></blink>");
13 if ($in{old_name}) {
14     &error("$text{'eacl_np'} $text{'eacl_pus'}") 
15                 unless &can('rw', \%access, $in{old_name});
16         }
17 else {
18     &error("$text{'eacl_np'} $text{'eacl_pcrs'}") unless $access{'c_fs'};
19         }
20
21 &error_setup($text{'savefshare_fail'});
22 # store share options
23 if ($in{old_name} eq "global") {
24         $name = "global";
25         }
26 else {
27         $name = $in{"homes"} ? "homes" : $in{"share"};
28         if ($in{"path"} !~ /\S/ && !$in{"homes"}) {
29                 &error($text{'savefshare_nopath'});
30                 }
31         }
32 &setval("path", $in{"path"});
33 &setval("available", $in{"available"});
34 &setval("browseable", $in{"browseable"});
35 &setval("comment", $in{"comment"});
36
37 # Check for clash
38 if ($name ne "global") {
39         foreach (&list_shares()) {
40                 $exists{$_}++;
41                 }
42         if (!$in{old_name} && $exists{$name}) {
43                 &error(&text('savefshare_exist', $name));
44                 }
45         elsif ($in{old_name} ne $name && $exists{$name}) {
46                 &error(&text('savefshare_exist', $name));
47                 }
48         elsif ($name !~ /^[A-Za-z0-9_\$\- ]+$/) {
49                 &error(&text('savefshare_mode', $name));
50                 }
51         elsif ($name eq "global") {   # unreachable code ? EB
52                 &error($text{'savefshare_global'});
53                 }
54         }
55
56 # Check creator
57 if ($in{'create'} eq "yes") {
58         defined(getpwnam($in{'createowner'})) ||
59                 &error($text{'savefshare_owner'});
60         defined(getgrnam($in{'creategroup'})) ||
61                 &error($text{'savefshare_group'});
62         $in{'createperms'} =~ /^[0-7]{3,4}$/ ||
63                 &error($text{'savefshare_perms'});
64         }
65
66 # Update config file
67 if ($in{old_name}) {
68         # Changing an existing share
69         &modify_share($in{old_name}, $name);
70         if ($name ne $in{old_name}) {
71                 local $oldacl=$access{'ACLfs_' . $in{old_name}};
72                 &drop_samba_acl(\%access, $in{old_name});
73                 &save_samba_acl($oldacl, \%access, $name);
74                 }
75         }
76 else {
77         # Creating a new share
78         &create_share($name);
79         if ($in{'create'} eq "yes" && !-d $in{'path'}) {
80                 &make_dir($in{'path'}, oct($in{'createperms'}));
81                 &set_ownership_permissions($in{'createowner'},
82                                            $in{'creategroup'},
83                                            oct($in{'createperms'}),
84                                            $in{'path'});
85                 }
86         &save_samba_acl('rwvVsSpPnNoO', \%access, $name);
87         }
88 &unlock_file($config{'smb_conf'});
89 &webmin_log($in{old_name} ? "save" : "create", "fshare", $name, \%in);
90 &redirect("");