mirror of
https://github.com/webmin/webmin.git
synced 2025-07-23 00:30:33 +00:00
102 lines
2.6 KiB
Perl
Executable File
102 lines
2.6 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# save_share.cgi
|
|
# Create, update or delete a samba share
|
|
|
|
require './file-lib.pl';
|
|
$disallowed_buttons{'sharing'} && &error($text{'ebutton'});
|
|
&ReadParse();
|
|
print "Content-type: text/plain\n\n";
|
|
if ($access{'ro'} || $access{'uid'}) {
|
|
# User has no access to samba
|
|
print "0\n";
|
|
exit;
|
|
}
|
|
|
|
%minfo = &get_module_info("samba");
|
|
&read_acl(\%acl, undef);
|
|
if (!%minfo || !&check_os_support(\%minfo) ||
|
|
!$acl{$base_remote_user,'samba'}) {
|
|
# Samba module not installed or supported
|
|
print "0\n";
|
|
exit;
|
|
}
|
|
|
|
&foreign_require("samba", "samba-lib.pl");
|
|
%sconfig = &foreign_config("samba");
|
|
&lock_file($sconfig{'smb_conf'});
|
|
@shares = &foreign_call("samba", "list_shares");
|
|
|
|
if ($in{'delete'}) {
|
|
# Deleting an old share
|
|
foreach $s (@shares) {
|
|
&foreign_call("samba", "get_share", $s);
|
|
if ($samba::share{'path'} &&
|
|
$samba::share{'path'} eq $in{'path'}) {
|
|
&foreign_call("samba", "delete_share", $s);
|
|
last;
|
|
}
|
|
}
|
|
print "1\n";
|
|
}
|
|
elsif ($in{'new'}) {
|
|
# Creating a new share
|
|
map { $taken{$_}++ } @shares;
|
|
if ($in{'path'} =~ /\/([^\/]+)$/) {
|
|
$base = $1;
|
|
}
|
|
else {
|
|
$base = "root";
|
|
}
|
|
if ($taken{$base}) {
|
|
for($i=2; $taken{$base.$i}; $i++) { }
|
|
$base = $base.$i;
|
|
}
|
|
$samba::share{'path'} = $in{'path'};
|
|
$samba::share{'available'} = $in{'available'} ? 'yes' : 'no';
|
|
$samba::share{'writeable'} = $in{'writable'} ? 'yes' : 'no';
|
|
$samba::share{'comment'} = $in{'comment'};
|
|
if ($in{'guest'} == 2) {
|
|
$samba::share{'public'} = 'yes';
|
|
$samba::share{'guest only'} = 'yes';
|
|
}
|
|
elsif ($in{'guest'} == 1) {
|
|
$samba::share{'public'} = 'yes';
|
|
}
|
|
&foreign_call("samba", "create_share", $base);
|
|
print "1\n";
|
|
}
|
|
else {
|
|
# Updating an existing share
|
|
foreach $s (@shares) {
|
|
&foreign_call("samba", "get_share", $s);
|
|
if ($samba::share{'path'} &&
|
|
$samba::share{'path'} eq $in{'path'}) {
|
|
# found the share to update
|
|
$samba::share{'available'} = $in{'available'} ? 'yes'
|
|
: 'no';
|
|
$samba::share{'writeable'} = $in{'writable'} ? 'yes'
|
|
: 'no';
|
|
$samba::share{'comment'} = $in{'comment'};
|
|
if ($in{'guest'} == 2) {
|
|
$samba::share{'public'} = 'yes';
|
|
$samba::share{'guest only'} = 'yes';
|
|
}
|
|
elsif ($in{'guest'} == 1) {
|
|
$samba::share{'public'} = 'yes';
|
|
delete($samba::share{'guest only'});
|
|
}
|
|
else {
|
|
delete($samba::share{'public'});
|
|
delete($samba::share{'guest only'});
|
|
}
|
|
&foreign_call("samba", "modify_share", $s, $s);
|
|
last;
|
|
}
|
|
}
|
|
print "1\n";
|
|
}
|
|
&unlock_file($sconfig{'smb_conf'});
|
|
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
|
|
'share', $in{'path'});
|
|
|