From fe729fed41e88c82b1d58e21dc42ecb9dadea131 Mon Sep 17 00:00:00 2001 From: Antoine Ginies Date: Tue, 27 Jan 2004 10:35:03 +0000 Subject: - correct some typo - add test of bash in /etc/shells - rewrite fonction to allow/deny from internet/intranet - force selection of intranet or internet to continue wizard --- ftp_wizard/Proftpd.pm | 114 +++++++++++++++++++------------------------------- 1 file changed, 44 insertions(+), 70 deletions(-) diff --git a/ftp_wizard/Proftpd.pm b/ftp_wizard/Proftpd.pm index d7870129..6c970323 100755 --- a/ftp_wizard/Proftpd.pm +++ b/ftp_wizard/Proftpd.pm @@ -33,7 +33,8 @@ my $wiz = MDK::Wizard::Wizcommon->new; my $o = { name => N("FTP wizard"), var => { - wiz_ftp_external => '', + wiz_ftp_external => '0', + wiz_ftp_internal => '1', # wiz_ftp_anon => '', # wiz_ftp_home => '', wiz_root_login => '', @@ -76,18 +77,15 @@ $o->{pages} = { }, config => { name => N("FTP Server") . "\n\n" . N("Your server can act as an FTP Server toward your internal network (intranet) and as an FTP Server for the Internet.") . "\n\n" . N("Select the kind of FTP service you want to activate:"), - pre => sub { - $o->{var}{wiz_ftp_internal} ||= 1; - $o->{var}{wiz_ftp_external} ||= 0; - }, data => [ { label => N("Enable the FTP Server for the Intranet"), type => 'bool', val => \$o->{var}{wiz_ftp_internal} }, { label => N("Enable the FTP Server for the Internet"), type => 'bool', val => \$o->{var}{wiz_ftp_external} }, ], + post => \&check_opt, next => 'options' }, options => { - name => N("Ftp Proftpd server options") . "\n\n" . N("Permit root login: allow root to log on ftp server.") . "\n" . N("Admin Email: email address of FTP maintainer.") . "\n" . N("Chroot Home user: Block user in their home directory.") . "\n\n" . N("allow FTP resume: allow resume upload or download on ftp server.") . "\n" . N("Allow FXP: allow file transfert via other ftp."), + name => N("Ftp Proftpd server options") . "\n\n" . N("Permit root login: allow root to log on ftp server.") . "\n" . N("Admin Email: email address of FTP administrator.") . "\n" . N("Chroot Home user: the users will only see their home directory.") . "\n\n" . N("Allow FTP resume: allow resume upload or download on ftp server.") . "\n" . N("Allow FXP: allow file transfert via other ftp."), pre => sub { $o->{var}{wiz_root_login} ||= 0; $o->{var}{wiz_default_root} ||= 1; @@ -101,6 +99,7 @@ $o->{pages} = { { label => N("Allow FTP resume:"), type => 'bool', val => \$o->{var}{wiz_ftp_resume} }, { label => N("Allow FXP:"), type => 'bool', val => \$o->{var}{wiz_ftp_fxp} }, ], + post => \&check_shell, next => 'summary', }, warning_dhcp => { @@ -108,6 +107,16 @@ $o->{pages} = { ignore => 1, next => 'config' }, + error_choose => { + name => N("Please choose allow connection to FTP server from internal or external."), + next => 'config', + }, + error_shell => { + name => N("I can't find bash in list of shells. Please correct."), + no_back => 1, + end => 1, + next => 0, + }, must_be_root => { name => N("Error.") . "\n\n" . N("Sorry, you must be root to do this..."), ignore => 1, @@ -151,6 +160,16 @@ sub new { }, $class; } +sub check_opt { + if ($o->{var}{wiz_ftp_external} == 0 && $o->{var}{wiz_ftp_internal} == 0) { + return 'error_choose' + } +} + +sub check_shell { + if (!any { /bash/ } cat_("/etc/shells")) { return 'error_shell' } +} + sub true { my ($val) = @_; return member($val, qw(1 '1' "1" true 'true' "true")); @@ -231,8 +250,6 @@ sub do_it { my $file = "/etc/proftpd.conf"; die "no ftp configuration file found ! warning." if !-f $file; MDK::Common::cp_af($file, $file . ".orig"); - local *NEW; - open(NEW, "< $file") or die "error while opening $file: $!"; my $allow = "all"; if ($wiz_ftp_internal && !$wiz_ftp_external) { ($allow) = $wiz->{net}->itf_get("IPADDR") =~ qr/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.)\d{1,3}$/; @@ -241,81 +258,38 @@ sub do_it { elsif (!$wiz_ftp_external) { $allow = "none"; } - $file = "/etc/proftpd.conf"; - open(NEW, "< $file"); - my $exist = 0; - local $_; - while () { # we need 3 elements to consider section as known - if (m/^\s*/s...m!^\s*!s) { - if (m/^\s*/s...m!^\s*!s) { - if (/^\s*(?!#)\s*Order /) { - $exist++; - } - if (/^\s*(?!#)\s*Allow /) { - $exist++; - } - if (/^\s*(?!#)\s*Deny /) { - $exist++; - } - } - } - } - close(NEW); - if ($exist < 3) { # Odd parameters are commented if exists to then add a known section - substInFile { - if (m/^\s*/s...m!^\s*!s) { - if (m/^\s*/s...m!^\s*!s) { - s/^\s*(?!#)\s*Order .*$/#$&\n/s; - s/^\s*(?!#)\s*Allow .*$/#$&\n/s; - s/^\s*(?!#)\s*Deny .*$/#$&\n/s; - } - } - } $file; - open(NEW, ">> $file"); - print NEW ' -# + + my $conf = cat_($file) . "#EndOfFile"; + my ($bloc) = $conf =~ /.*?(#drakwizard_pxe_b.*?#drakwizard_pxe_end)\n.*#EndOfFile/s; + + # print "$begin\n"; + # print "$end\n"; + + if (!$bloc) { + $bloc = " +#drakwizard_pxe_b Order allow,deny - Allow from '.$allow.' + Allow from $allow Deny from all -# -'; - close NEW; - } - else { # the known section (3 parameters) is replaced with our needs - substInFile { - if (m/^\s*/s...m!^\s*!s) { - if (m/^\s*/s...m!^\s*!s) { - if (/^\s*(?!#)\s*Order /i) { - if (!/\s*Order\s*allow,\s*deny\s*$/) { - s//#$&\n Order allow,deny\n/; - } - } - if (/^\s*(?!#)\s*Allow /i) { - if (!/\s*Allow\s*from\s*$allow\s*$/) { - s//#$&\n Allow from $allow/; - } - } - if (/^\s*(?!#)\s*Deny /i) { - if (!/\s*Deny\s*from\s*all\s*$/) { - s//#$&\n Deny from all\n/; - } - } - } - } - } $file; +#drakwizard_pxe_end + +"; + append_to_file($file, $bloc); + } else { + substInFile { s/Allow from.*/Allow from $allow/ } } # options # wiz_root_login wiz_server_admin wiz_default_root wiz_ftp_resume wiz_ftp_fxp if ($o->{var}{wiz_server_admin}) { if (any { /^ServerAdmin/ } cat_($file)) { - substInFile { s/ServerAdmin.*/ServerAdmin $o->{var}{wiz_server_admin}/ } $file + substInFile { s/ServerAdmin.*/ServerAdmin $o->{var}{wiz_server_admin}/ } $file } else { - append_to_file($file, "ServerAdmin $o->{var}{wiz_server_admin}") + append_to_file($file, "ServerAdmin $o->{var}{wiz_server_admin}\n") } } else { substInFile { s/ServerAdmin.*// } $file } -- cgit v1.2.1