summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xsamba_wizard/Samba.pm93
1 files changed, 89 insertions, 4 deletions
diff --git a/samba_wizard/Samba.pm b/samba_wizard/Samba.pm
index e0253cca..61dbe434 100755
--- a/samba_wizard/Samba.pm
+++ b/samba_wizard/Samba.pm
@@ -36,6 +36,7 @@ my $wiz = new MDK::Wizard::Wizcommon;
my $DOMAINNAME = chomp_(`dnsdomainname`);
my $SHORTHOSTNAME = chomp_(`hostname -s`);
my $wiz_samba_etc = "/etc/sysconfig/wizard_samba";
+my @listshare;
my $o = {
name => 'Samba wizard',
@@ -83,6 +84,11 @@ my $o = {
wiz_ldap_suffix => '',
wiz_ldap_root_pw => '',
wiz_ldap_root_pw_2 => '',
+ wiz_addshare_comment => '',
+ wiz_addshare_browseable => '',
+ wiz_addshare_writable => '',
+ wiz_addshare_createmode => '',
+ wiz_selected_share => '',
test => '',
},
init => sub {
@@ -111,8 +117,15 @@ my %type = (
2 => N('PDC - primary domain controller'),
3 => N('Standalone - standalone server'),
4 => N('Member - member of a domain'),
+ 5 => N('Share - modify a share'),
);
+my %share = (
+ 1 => N('Add - add a share'),
+ 2 => N('Remove - remove a share'),
+ 3 => N('Modify - modify a share'),
+ );
+
my @yesorno = qw(yes no); #push @yesorno, "";
my @loglevel = qw(0 1 2 3 4 5 6 7 8 9 10);
@@ -138,6 +151,9 @@ $o->{pages} = {
return 'ask_workgroup' }
elsif ($o->{var}{wiz_type} == 4) {
return 'member' }
+ elsif ($o->{var}{wiz_type} == 5 and -f $wiz_samba_etc) {
+ return 'share_menu';
+ }
},
data => [
{ label => N("Wich type of Samba server do you you want:"), val => \$o->{var}{wiz_type}, list => [ keys %type ], format => sub { $type{$_[0]} } },
@@ -223,6 +239,68 @@ $o->{pages} = {
},
next => 'ask_workgroup',
},
+ share_menu => {
+ name => N('What do you want todo with your share ?') . "\n\n" . N('add/remove/modify a share'),
+ data => [
+ { label => N("what do you want:"), val => \$o->{var}{wiz_share}, list => [ keys %share ], format => sub { $share{$_[0]} } },
+ ],
+ post => sub {
+ if ($o->{var}{wiz_share} == 1) {
+ return 'add_share' }
+ elsif ($o->{var}{wiz_share} == 2) {
+ return 'choose_share' }
+ elsif ($o->{var}{wiz_share} == 3) {
+ return 'choose_share' }
+ }
+ },
+ choose_share => {
+ name => N('Modify a share'),
+ pre => \&list_all_shares,
+ post => sub {
+ if ($o->{var}{wiz_share} == 2) {
+ return 'delete_share';
+ } else {
+ return 'modify_share';
+ }
+ },
+ data => [
+ { label => N('Choose share you want to modifie:'), val => \$o->{var}{wiz_selected_share}, fixed_list => \@listshare },
+ ],
+ },
+ delete_share => {
+ name => N('Delete a share'),
+ # pre => sub {
+ # $samba->{$o->{var}{wiz_selected_share}};
+ # },
+ data => [
+ { label => N('Delete this share:'), fixed_val => \$o->{var}{wiz_selected_share} },
+ ],
+ complete => sub {
+ remove_share($o->{var}{wiz_selected_share});
+ },
+ next => 'summary',
+ },
+ modify_share => {
+ name => N('Modify a share'),
+ # pre => sub {
+ # $samba->{$o->{var}{wiz_selected_share}};
+ # },
+ next => 'summary',
+ },
+ add_share => {
+ name => N('Add a share') . "\n" . N('You have selected to add a share.') . "\n" . N('Comment: description of the share') . "\n" . N('Browseable: view share') . "\n" . N('Writable: user can write in the share') . "\n" . N('Create mode: man chmod for more info'),
+ data => [
+ { label => N('Name of the share:'), val => \$o->{var}{wiz_addshare_name} },
+ { label => N('Comment:'), val => \$o->{var}{wiz_addshare_comment} },
+ { label => N('Browseable:'), val => \$o->{var}{wiz_addshare_browseable}, fixed_list => \@yesorno },
+ { label => N('Writable:'), val => \$o->{var}{wiz_add_share_writable}, fixed_list => \@yesorno },
+ { label => N('Create mode:'), val => \$o->{var}{wiz_addshare_createmode} },
+ ],
+ complete => sub {
+ chack_share_doesnt_exist($o->{var}{wiz_addshare_name});
+ },
+ next => 'summary_addshare',
+ },
ldap_conf => {
name => N('LDAP configuration for Domain Controlling') . "\n\n" . N('The account (dn) that samba uses to access the LDAP server. This account needs to have write access to the LDAP tree. You will need to give samba the password for this dn.'),
pre => sub {
@@ -549,6 +627,11 @@ sub add_printer {
$samba->{$printer}{printable} = 'yes';
}
+sub remove_share {
+ my ($share) = @_;
+ delete $samba->{$share};
+}
+
sub remove_printer {
my ($printer) = @_;
delete $samba->{$printer};
@@ -565,17 +648,19 @@ sub list_printers() {
} else { () }
}
-sub list_share() {
- my @listshare;
+sub list_all_shares() {
foreach my $clef (keys %$samba) {
if ($samba->{$clef}{printable} =~ /yes/i) {
print "$clef est une imprimante\n";
+ } elsif ($clef =~ /global/ or $clef =~ /print\$/) {
+ print "unwanted\n";
} else {
push @listshare, $clef;
}
- print "------------- \n";
- foreach (@listshare) { print "$_\n"; }
}
+ print "------------- \n";
+ foreach (@listshare) { print "$_\n"; }
+ return @listshare;
}
sub printer_sharing() {