diff options
-rwxr-xr-x | samba_wizard/scripts/Smbconf.pm | 116 | ||||
-rw-r--r-- | web_wizard/scripts/Webconf.pm | 62 |
2 files changed, 178 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; diff --git a/web_wizard/scripts/Webconf.pm b/web_wizard/scripts/Webconf.pm new file mode 100644 index 00000000..69f99194 --- /dev/null +++ b/web_wizard/scripts/Webconf.pm @@ -0,0 +1,62 @@ +#!/usr/bin/perl + +package Webconf; +require "__WIZ_HOME__/common/scripts/Vareqval.pm"; + +use strict; + +my $that; +my %mdk; +my $device; +my $s; + +sub finish { + my $old = "/etc/httpd/conf/commonhttpd.conf"; + my $new = "/tmp/commonhttpd.conf"; + my $bak = "/etc/httpd/conf/commonhttpd.conf.orig"; + + open(OLD, "< $old") or die "can't open $old: $!"; + open(NEW, "> $new") or die "can't open $new: $!"; + + if ($ENV{wiz_web_external} eq "1") { + $that = "all"; + } + elsif ($ENV{wiz_web_internal} eq "1") { + $device = $mdk{wiz_device}; + %mdk = Vareqval->get("/etc/sysconfig/network-scripts/ifcfg-".$device); + $that = "$mdk{IPADDR}"; + } + else { + $that = "localhost"; + } + + if ($ENV{wiz_web_external} eq "1") { + my $that = "all"; + } + elsif ($ENV{wiz_web_internal} eq "1") { + %mdk = Vareqval->get("/etc/sysconfig/mdk_serv"); + defined $mdk{wiz_device} and $device = $mdk{wiz_device} or die "wiz_device not found in mdk_serv\n"; + %mdk = Vareqval->get("/etc/sysconfig/network-scripts/ifcfg-".$device); + defined $mdk{IPADDR} and $that = $mdk{IPADDR} or die "IPADDR not found in /etc/sysconfig/network-scripts/ifcfg-xxx\n"; + } + else { + $that = "localhost"; + print "hello\n" + } + while (<OLD>) { + if( m /^[[:space:]]*<Directory \/home/s...m/^[[:space:]]*<\/Directory>/s ) { + { s /^[[:space:]]*Allow .*$/ Allow from $that\n/s;} + ;} + if( m /^[[:space:]]*<Directory \/var\/www/s...m/^[[:space:]]*<\/Directory>/s ) { + { s /^[[:space:]]*Allow .*$/ Allow from $that\n/s;} + ;} + print NEW $_ or die "can't write to $new: $!"; + } + close(OLD) or die "can't close $old: $!"; + close(NEW) or die "can't close $new: $!"; + + rename($old, $bak) or die "can't rename $old to $bak: $!"; + rename($new, $old) or die "can't rename $new to $old: $!"; +} + +1; |