PKGBUILDs/extra/pure-ftpd/pure-config.pl
2009-10-09 21:23:22 -05:00

121 lines
3.2 KiB
Perl

#! /usr/bin/perl
# (C) 2001-2004 Aristotle Pagaltzis
# derived from code (C) 2001-2002 Frank Denis and Matthias Andree
use strict;
my ($conffile, @flg) = @ARGV;
my $PUREFTPD;
-x && ($PUREFTPD=$_, last) for qw(
${exec_prefix}/sbin/pure-ftpd
/usr/local/pure-ftpd/sbin/pure-ftpd
/usr/local/pureftpd/sbin/pure-ftpd
/usr/local/sbin/pure-ftpd
/usr/sbin/pure-ftpd
);
my %simple_switch_for = (
IPV4Only => "-4",
IPV6Only => "-6",
ChrootEveryone => "-A",
BrokenClientsCompatibility => "-b",
Daemonize => "-B",
VerboseLog => "-d",
DisplayDotFiles => "-D",
AnonymousOnly => "-e",
NoAnonymous => "-E",
DontResolve => "-H",
AnonymousCanCreateDirs => "-M",
NATmode => "-N",
CallUploadScript => "-o",
AntiWarez => "-s",
AllowUserFXP => "-w",
AllowAnonymousFXP => "-W",
ProhibitDotFilesWrite => "-x",
ProhibitDotFilesRead => "-X",
AllowDotFiles => "-z",
AutoRename => "-r",
AnonymousCantUpload => "-i",
LogPID => "-1",
NoChmod => "-R",
KeepAllFiles => "-K",
CreateHomeDir => "-j",
NoRename => "-G",
CustomerProof => "-Z",
NoTruncate => "-0",
);
my %string_switch_for = (
SyslogFacility => "-f",
FortunesFile => "-F",
ForcePassiveIP => "-P",
Bind => "-S",
AnonymousBandwidth => "-t",
UserBandwidth => "-T",
TrustedIP => "-V",
AltLog => "-O",
PIDFile => "-g",
);
my %numeric_switch_for = (
MaxIdleTime => "-I",
MaxDiskUsage => "-k",
TrustedGID => "-a",
MaxClientsNumber => "-c",
MaxClientsPerIP => "-C",
MaxLoad => "-m",
MinUID => "-u",
TLS => "-Y",
);
my %numpairb_switch_for = (
LimitRecursion => "-L",
PassivePortRange => "-p",
AnonymousRatio => "-q",
UserRatio => "-Q",
);
my %numpairc_switch_for = (
Umask => "-U",
Quota => "-n",
PerUserLimits => "-y",
);
my %auth_method_for = (
LDAPConfigFile => "ldap",
MySQLConfigFile => "mysql",
PGSQLConfigFile => "pgsql",
PureDB => "puredb",
ExtAuth => "extauth",
);
my $simple_switch = qr/(@{[join "|", keys %simple_switch_for ]})\s+yes/i;
my $string_switch = qr/(@{[join "|", keys %string_switch_for ]})\s+(\S+)/i;
my $numeric_switch = qr/(@{[join "|", keys %numeric_switch_for ]})\s+(\d+)/i;
my $numpairb_switch = qr/(@{[join "|", keys %numpairb_switch_for ]})\s+(\d+)\s+(\d+)/i;
my $numpairc_switch = qr/(@{[join "|", keys %numpairc_switch_for ]})\s+(\d+):(\d+)/i;
my $auth_method = qr/(@{[join "|", keys %auth_method_for ]})\s+(\S+)/i;
die "Usage: pure-config.pl <configuration file> [extra options]\n"
unless defined $conffile;
open CONF, "< $conffile" or die "Can't open $conffile: $!\n";
!/^\s*(?:$|#)/ and (chomp, push @flg,
/$simple_switch/i ? ($simple_switch_for{$1}) :
/$string_switch/i ? ($string_switch_for{$1} . $2) :
/$numeric_switch/i ? ($numeric_switch_for{$1} . $2) :
/$numpairb_switch/i ? ($numpairb_switch_for{$1} . "$2:$3") :
/$numpairc_switch/i ? ($numpairc_switch_for{$1} . "$2:$3") :
/$auth_method/i ? ("-l" . "$auth_method_for{$1}:$2") :
/UnixAuthentication\s+yes/i ? ("-l" . "unix") :
/PAMAuthentication\s+yes/i ? ("-l" . "pam") :
()
) while <CONF>;
close CONF;
print "Running: $PUREFTPD ", join(" ", @flg), "\n";
exec { $PUREFTPD } ($PUREFTPD, @flg) or die "cannot exec $PUREFTPD: $!";