Handle hostnames with upper-case letters
[webmin.git] / samba / save_pshare.cgi
1 #!/usr/local/bin/perl
2 # save_pshare.cgi
3 # Save a new or edited printer 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_ps'};
19     }
20
21 &error_setup($text{'savepshare_fail'});
22 if ($in{old_name} eq "global") {
23         $name = "global";
24         }
25 else {
26         # store share options
27         $name = $in{printers} ? "printers" : $in{"share"};
28         }
29 #if ($in{"path"} !~ /\S/ && !$in{"printers"}) {
30 #       &error("No spool directory given");
31 #       }
32 &setval("printer", $in{"printer"});
33 &setval("path", $in{"path"});
34 &setval("available", $in{"available"});
35 &setval("browseable", $in{"browseable"});
36 if ($name ne "global") { &setval("printable", "yes"); }
37 &setval("comment", $in{"comment"});
38
39 # Check for clash
40 if ($name ne "global") {
41         foreach (&list_shares()) {
42                 $exists{$_}++;
43                 }
44         if (!$in{old_name} && $exists{$name}) {
45                 &error(&text('savepshare_exist', $name));
46                 }
47         elsif ($in{old_name} ne $name && $exists{$name}) {
48                 &error(&text('savepshare_exist', $name));
49                 }
50         elsif ($name !~ /^[A-Za-z0-9_\$\- ]+$/) {
51                 &error(&text('savepshare_name', $name));
52                 }
53         elsif ($name eq "global") {
54                 &error($text{'savepshare_global'});
55                 }
56         }
57
58 # Update config file
59 if ($in{old_name}) {
60         # Changing an existing share
61         &modify_share($in{old_name}, $name);
62         if ($name ne $in{old_name}) {
63                 local $oldacl=$access{'ACLps_' . $in{old_name}};
64                 &drop_samba_acl(\%access, $in{old_name});
65                 &save_samba_acl($oldacl, \%access, $name);
66             }
67     }
68 else {
69     # Creating a new share
70     &create_share($name);
71         &save_samba_acl('rwvVsSoO', \%access, $name);
72     }
73 &unlock_file($config{'smb_conf'});
74 &webmin_log($in{old_name} ? "save" : "create", "pshare", $name, \%in);
75 &redirect("");
76