diff options
Diffstat (limited to 'samba_wizard/scripts/Smbconf.pm')
-rwxr-xr-x | samba_wizard/scripts/Smbconf.pm | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/samba_wizard/scripts/Smbconf.pm b/samba_wizard/scripts/Smbconf.pm new file mode 100755 index 00000000..0b3f8e87 --- /dev/null +++ b/samba_wizard/scripts/Smbconf.pm @@ -0,0 +1,116 @@ +#! /usr/bin/perl -w + +package Smbconf; +require "__WIZ_HOME__/common/scripts/Vareqval.pm"; + +use strict; + +# All possibilies in the config file must be precedeed by ";" +# This script can just comment, uncomment or/and change values +# but can not add anything. +# so one variable cannot be commented and not in the same file. + +my %conf; +my @tab; + +sub read_conf { + my ($file) = @_; + my $menu; + + open(FH, $file) or die "$!"; + while (<FH>) { + if (/^(\s*\;?\s*)\[(.*)\].*/) { + $menu = $2; + $conf{$menu}{__comment} = $1; + } + elsif (/^(?!\#)(\s*\;*\s*)(.*?)\s*=\s*(.*)\s*$/) { + $conf{$menu}{$2}{value} = $3; + $conf{$menu}{$2}{comment} = $1; + } + push @tab, $_; + } +} + +sub write_conf { + my ($file) = @_; + my $menu; + + open(FH, "> $file") or die "$!"; + foreach (@tab) { + if (/^\s*\;?\s*\[(.*)\].*/) { + $menu = $1; + print FH "$conf{$menu}{__comment}"."[$menu]\n"; + } + elsif (/^(?!\#)\s*\;*\s*(.*?)\s*=/) { + print FH "$conf{$menu}{$1}{comment}"."$1" ." = ". "$conf{$menu}{$1}{value}\n"; + } + else { + print FH $_; + } + } +} + +sub comment_menu { + my ($menu, $str) = @_; + + $conf{$menu}{__comment} = $str; + foreach (keys %{$conf{$menu}}) { + ($_ eq "__comment") and next; + $conf{$menu}{$_}{comment} = $str; + } +} + +sub comment_var { + my ($menu, $var, $str) = @_; + + $conf{$menu}{$var}{comment} = $str; +} + +sub chg_var { + my ($menu, $var, $str) = @_; + + $conf{$menu}{$var}{value} = $str; +} + +sub file_sharing { + comment_menu("homes", ";"); + comment_menu("public", ""); + chg_var("global", "security", "share"); +} + +sub printer_sharing { + comment_menu("printers", ""); +} + +# remember one variable cannot be commented and not in the same file. + +sub hello { + my ($str) = @_; + + print $str."\n"; +} + +sub finish { + my ($file, $device, $ip); + + read_conf("__WIZ_HOME__/samba_wizard/scripts/smb.conf.default"); + $file = "/etc/sysconfig/mdk_serv"; + my %mdk = Vareqval->get($file); + $mdk{wiz_banner} = $ENV{wiz_banner}; + $mdk{wiz_workgroup} = $ENV{wiz_workgroup}; + $mdk{wiz_do_printer_sharing} = $ENV{wiz_do_printer_sharing}; + $mdk{wiz_do_file_sharing} = $ENV{wiz_do_file_sharing}; + Vareqval->commit($file, \%mdk); + chg_var("global", "workgroup", $ENV{wiz_workgroup}); + chg_var("global", "server string", $ENV{wiz_banner}); + $device = $mdk{wiz_device}; + my %mdk = Vareqval->get("/etc/sysconfig/network-scripts/ifcfg-".$device); + $ip = $mdk{IPADDR}; + ($ENV{wiz_do_file_sharing} eq "true") and file_sharing(); + ($ENV{wiz_do_printer_sharing} eq "enabled") and printer_sharing(); + chg_var("global", "hosts allow", $ip); + chg_var("global", "security", "share"); + write_conf("/etc/samba/smb.conf"); + system("/etc/rc.d/init.d/smb restart >/dev/null 2>&1"); +} +1; |