diff options
Diffstat (limited to 'samba_wizard')
-rwxr-xr-x | samba_wizard/scripts/check_banner.sh | 39 | ||||
-rwxr-xr-x | samba_wizard/scripts/check_services.sh | 44 | ||||
-rwxr-xr-x | samba_wizard/scripts/check_workgroup.sh | 38 | ||||
-rwxr-xr-x | samba_wizard/scripts/do_it_samba.sh | 80 | ||||
-rwxr-xr-x | samba_wizard/scripts/smbconfig.pl | 232 |
5 files changed, 433 insertions, 0 deletions
diff --git a/samba_wizard/scripts/check_banner.sh b/samba_wizard/scripts/check_banner.sh new file mode 100755 index 00000000..42aed456 --- /dev/null +++ b/samba_wizard/scripts/check_banner.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# +# Wizard +# +# Copyright (C) 2000 Mandrakesoft. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# See file LICENSE for further informations on licensing terms. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Authors: Jerome Dumonteil, Maurizio De Cecco, Enzo Maggi +# icons: Helene Durosini <ln@mandrakesoft.com> +# <corporate@mandrakesoft.com> http://www.mandrakesoft.com + +# script for wizard samba configuration +# +# checking if the provided server banner is correct : + + +if [ -z "${wiz_banner}" ] ;then + echo_debug "wiz_banner is empty, should not." + exit 1 +fi + + +# all seems to be ok +exit 10 + diff --git a/samba_wizard/scripts/check_services.sh b/samba_wizard/scripts/check_services.sh new file mode 100755 index 00000000..802bc320 --- /dev/null +++ b/samba_wizard/scripts/check_services.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# +# Wizard +# +# Copyright (C) 2000 Mandrakesoft. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# See file LICENSE for further informations on licensing terms. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Authors: Jerome Dumonteil, Maurizio De Cecco, Enzo Maggi +# icons: Helene Durosini <ln@mandrakesoft.com> +# <corporate@mandrakesoft.com> http://www.mandrakesoft.com + +# script for wizard samba configuration +# +# checking if the provided services are correct : + + +if [ -z "${wiz_do_file_sharing}" ] ;then + echo_debug "wiz_do_file_sharing is empty, should not." + exit 1 +fi + +if [ -z "${wiz_do_printer_sharing}" ] ;then + echo_debug "wiz_do_file_sharing is empty, should not." + exit 1 +fi + + +# all seems to be ok +exit 10 + diff --git a/samba_wizard/scripts/check_workgroup.sh b/samba_wizard/scripts/check_workgroup.sh new file mode 100755 index 00000000..db70ec8b --- /dev/null +++ b/samba_wizard/scripts/check_workgroup.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# +# Wizard +# +# Copyright (C) 2000 Mandrakesoft. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# See file LICENSE for further informations on licensing terms. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Authors: Jerome Dumonteil, Maurizio De Cecco, Enzo Maggi +# icons: Helene Durosini <ln@mandrakesoft.com> +# <corporate@mandrakesoft.com> http://www.mandrakesoft.com + +# script for wizard samba configuration +# +# checking if the provided server workgroup is correct : + + +if [ -z "${wiz_workgroup}" ] ;then + echo_debug "wiz_banner is empty, should not." + exit 1 +fi + + +# all seems to be ok +exit 10 diff --git a/samba_wizard/scripts/do_it_samba.sh b/samba_wizard/scripts/do_it_samba.sh new file mode 100755 index 00000000..2f3fc0be --- /dev/null +++ b/samba_wizard/scripts/do_it_samba.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# +# Wizard +# +# Copyright (C) 2000 Mandrakesoft. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# See file LICENSE for further informations on licensing terms. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Authors: Jerome Dumonteil, Maurizio De Cecco, Enzo Maggi +# icons: Helene Durosini <ln@mandrakesoft.com> +# <corporate@mandrakesoft.com> http://www.mandrakesoft.com + +# +# set up the config for samba +# assuming all dependencies are ok + +file=/etc/sysconfig/mdk_serv + +# store the variables + +chg_val ${file} wiz_banner ${wiz_banner} s +chg_val ${file} wiz_workgroup ${wiz_workgroup} s +chg_val ${file} wiz_do_printer_sharing ${wiz_do_printer_sharing} s +chg_val ${file} wiz_do_file_sharing ${wiz_do_file_sharing} s + + +ip=`get_var wiz_ip_net` + + +echo_debug "printer ${wiz_do_printer_sharing}" +echo_debug "file share ${wiz_do_file_sharing}" +echo_debug "banner ${wiz_banner}" +echo_debug "workgr ${wiz_workgroup}" + + +# samba configuration file +config="/etc/samba/smb.conf" +if [ ! -f ${config} ]; then + echo_debug "no smb.conf configuration file found ! exiting." + exit 2 +fi + +bck_file ${config} + +cat ${CWD}/scripts/smb.conf.default > ${config} + +${CWD}/scripts/smbconfig.pl --set-hosts-allow="${ip%.*}. 127." \ +--set-workgroup="${wiz_workgroup}" --set-banner="${wiz_banner}" + +if [ "${wiz_do_file_sharing}" == "true" ]; then + echo_debug "enabling file sharing" + ${CWD}/scripts/smbconfig.pl --remove-homes --enable-public --set-security-share +fi + +if [ "${wiz_do_printer_sharing}" == "enabled" ]; then + echo_debug "enabling printer access" + ${CWD}/scripts/smbconfig.pl --enable-printer-access +fi + + +echo_debug "restarting service smb" +# restarting service +#/etc/rc.d/init.d/smb restart >/dev/null 2>&1 + + +# exiting ok +exit 1 diff --git a/samba_wizard/scripts/smbconfig.pl b/samba_wizard/scripts/smbconfig.pl new file mode 100755 index 00000000..bee6d7a8 --- /dev/null +++ b/samba_wizard/scripts/smbconfig.pl @@ -0,0 +1,232 @@ +#!/usr/bin/perl -w +# +# smbconfig by Guillaume Cottenceau <gc@mandrakesoft.com> +# +# Copyright (c) 2000 by Mandrakesoft +# +# Permission to use, copy, modify, and distribute this software and its +# documentation under the terms of the GNU General Public License is hereby +# granted. No representations are made about the suitability of this software +# for any purpose. It is provided "as is" without express or implied warranty. +# See the GNU General Public License for more details. + +$program_name = "smbconfig"; +$version = "0.1.3"; + +$debug_printings = 0; + + +sub debug_print +{ + $debug_printings && print "[DEBUG] ".$_[0]; +} + +sub debug_print2 +{ + $debug_printings && print $_[0]; +} + + +sub fail +{ + die "Exiting on failure.\n"; +} + + +sub fail_with_message +{ + print $_[0]; + fail(); +} + + +@options = ( [ "--debug", "\t\tadditional debug printings", \$debug_printings ] ); + +@modes = ( [ "--help", "\t\tthis help screen", \&show_options ], + [ "--set-security-share", "setup security = share, very useful because we would need otherwise smbpasswd", \&set_security_share ], + [ "--set-hosts-allow=<..>", "setup which hosts are allowed to access; for example \"192.168.1. 127.\"", \&set_hosts_allow ], + [ "--set-workgroup=<name>", "setup workgroup name", \&set_workgroup ], + [ "--set-banner=<name>", "setup the \"server string\" banner of this smb server", \&set_banner ], + [ "--remove-homes", "\tremove the default [homes] share (which needs the security=user)", \&remove_homes ], + [ "--enable-public", "\tenable read-write share \"public\" at /home/local/samba-public", \&enable_corpo_public ], + [ "--enable-printer-access", "setup access to printers of this machine", \&set_printer_access ] ); + + + +sub read_conf +{ + open(FH, "+< /etc/samba/smb.conf") or fail_with_message("Could not open /etc/samba/smb.conf\n"); + @conf = <FH> or fail_with_message("Could not read /etc/samba/smb.conf\n"); + debug_print("/etc/samba/smb.conf read, #lines=".$#conf."\n"); +} + +sub write_conf +{ + debug_print("Will write /etc/samba/smb.conf, #lines=".$#conf."\n"); + seek(FH, 0, 0) or fail_with_message("Could not seek in /etc/samba/smb.conf\n"); + print FH @conf or fail_with_message("Could not write /etc/samba/smb.conf\n"); + truncate(FH, tell(FH)) or fail_with_message("Could not truncate /etc/samba/smb.conf\n"); + close(FH) or fail_with_message("Could not close /etc/samba/smb.conf\n"); +} + +# set_parameter: section param value +sub set_parameter +{ + my $section = $_[0]; my $param = $_[1]; my $value = $_[2]; + debug_print("Attempt to find section \"$section\", parameter \"$param\", and setup to \"$value\"\n"); + my $i = 0; + ($i++ && (lc($_) =~ /^\s*\[$section\]/) && last) foreach (@conf); + while (1) + { + ($i < $#conf) or ($conf[$i] = "$conf[$i]\n\n\t$param = $value") and last; + ($conf[$i] =~ /^\s*\[\S+\]/) && ($conf[$i] = "\t$param = $value\n\n$conf[$i]") && last; + ($conf[$i] =~ /^\s*$param\s*=/) && ($conf[$i] = "\t$param = $value\n") && last; + $i++; + } +} + +sub enable_corpo_public +{ + system("mkdir -p /home/local/samba-public") && fail_with_message("Could not create public dir. Probably run as non-root..\n"); + system("chown nobody /home/local/samba-public") && fail_with_message("Could not chown public dir to nobody. Requests admin help.\n"); + my $i = 0; + ($i++ && (lc($_) =~ /^\s*\[public\]/) && fail_with_message("An active [public] section has been found in /etc/samba/smb.conf at line $i\n")) foreach (@conf); + push(@conf, ( "$banner"."[public]\n\tcomment = Public space with read-write access\n\tpath = /home/local/samba-public\n\tguest ok = yes\n\twriteable = yes\n" )); + $did_something = 1; +} + + +sub set_workgroup +{ + set_parameter("global", "workgroup", $_[0]); + $did_something = 1; +} + +sub set_banner +{ + set_parameter("global", "server string", $_[0]); + $did_something = 1; +} + +sub set_security_share +{ + set_parameter("global", "security", "share"); + $did_something = 1; +} + +sub set_hosts_allow +{ + set_parameter("global", "hosts allow", $_[0]); + $did_something = 1; +} + + +sub set_printer_access +{ + my $i = 0; my $found = 0; + # look for default section "printers" + ($i++ && (lc($_) =~ /^\s*\[printers\]/) && ($found = 1) && last) foreach (@conf); + ($found) && debug_print("Printer section found at line $i\n"); + if ($found == 1) + { + $conf[$i-1] = ";".$conf[$i-1]; + while ($i <= $#conf) + { + (($conf[$i] =~ /^\s*\[\S+\]/) && last) || ($conf[$i] = ";".$conf[$i]); + $i++; + } + debug_print("End of printer section at line $i\n"); + } + push(@conf, ( "$banner"."[printers]\n\tcomment = All Printers\n\tpath = /var/spool/samba\n\tbrowseable = no\n\tguest ok = yes\n\twritable = no\n\tprintable = yes\n" )); + $did_something = 1; +} + +sub remove_homes +{ + my $i = 0; my $found = 0; + # look for default section "printers" + ($i++ && (lc($_) =~ /^\s*\[homes\]/) && ($found = 1) && last) foreach (@conf); + ($found) && debug_print("[homes] section found at line $i\n"); + if ($found == 1) + { + $conf[$i-1] = ";".$conf[$i-1]; + while ($i <= $#conf) + { + (($conf[$i] =~ /^\s*\[\S+\]/) && last) || ($conf[$i] = ";".$conf[$i]); + $i++; + } + debug_print("End of [homes] section at line $i\n"); + } + $did_something = 1; +} + + +sub show_options +{ + print "$program_name v$version helps auto-config of Samba.\n\n"; + + print "mode:\n"; + print "\t".$_->[0]."\t\t".$_->[1]."\n" foreach (@modes); + print "options:\n"; + print "\t".$_->[0]."\t\t".$_->[1]."\n" foreach (@options); + print "\n"; + $did_something = 1; +} + + +sub arg_without_value +{ + $_[0] =~ /([^=]*)/; + return $1; +} + +sub arg_value +{ + $_[0] =~ /([^=]*)=(.*)/; + return $2; +} + +# Disable file buffering [to display strings on the tty even when no trailing \n is added] +$| = 1; + +$date = `date`; chop $date; +$host = `hostname`; chop $host; +$banner = "\n### Autogenerated by $program_name at $date on host $host\n"; + +$did_something = 0; + + +foreach $arg (@ARGV) +{ + (($arg eq $_->[0]) && (${$_->[2]} = 1)) foreach (@options) +} + + +read_conf(); + +foreach $arg (@ARGV) +{ + ((arg_without_value($arg) eq arg_without_value($_->[0])) && &{$_->[2]}(arg_value($arg))) foreach (@modes) +} + + +($did_something && write_conf()) || show_options(); + + + +# Changelog +# +# 0.1.3 +# remove smb.conf end of file bug +# +# 0.1.2 +# added parameter support: hosts allow +# +# 0.1.1 +# added parameter support: server string +# support multiple parameter sets at same time +# added parameter support: security = share +# added remove homes +# +# 0.1.0 +# first version with configure for printers, public, workgroup |