Ezmlm
view release on metacpan or search on metacpan
my($VHOST, $comandline, $hostname);
# Do we want to use command line switches
my $commandline = '';
$commandline = '-' . $list{'-switches'} if(defined($list{'-switches'}));
my @commandline;
foreach ("ewords('\s+', 1, $commandline)) {
next if (!defined($_));
# untaint input
$_ =~ s/['"]//g;
$_ =~ m/^([\w _\/,\.\@:'"-]*)$/;
if ($_ =~ /^\s*$/) {
push @commandline, "";
} else {
push @commandline, $1;
}
}
# These three variables are essential
($self->_seterror(-1, 'must define -dir in a make()') && return 0) unless(defined($list{'-dir'}));
($self->_seterror(-1, 'must define -qmail in a make()') && return 0) unless(defined($list{'-qmail'}));
($self->_seterror(-1, 'must define -name in a make()') && return 0) unless(defined($list{'-name'}));
# Determine hostname if it is not supplied
$hostname = $self->_getdefaultdomain;
if(defined($list{'-host'})) {
$VHOST = 1 unless ($list{'-host'} eq $hostname);
} else {
$list{'-host'} = $hostname;
}
# does the mailing list directory already exist?
if (-e $list{'-dir'}) {
$self->_seterror(-1,
'-the mailing list directory already exists: ' . $list{'-dir'});
return undef;
}
# Attempt to make the list if we can.
if (system("$EZMLM_BASE/ezmlm-make", @commandline, $list{'-dir'}, $list{'-qmail'}, $list{'-name'}, $list{'-host'}) != 0) {
$self->_seterror($?, '-failed to create mailing list - check your webserver\'s log file for details');
return undef;
}
# Sort out the DIR/inlocal problem if necessary
if(defined($VHOST)) {
unless(defined($list{'-user'})) {
($self->_seterror(-1, '-user must match virtual host user in make()') && return 0) unless($list{'-user'} = $self->_getvhostuser($list{'-host'}));
}
open(INLOCAL, ">$list{'-dir'}/inlocal") || ($self->_seterror(-1, 'unable to read inlocal in make()') && return 0);
print INLOCAL $list{'-user'} . '-' . $list{'-name'} . "\n";
close INLOCAL;
}
$self->_seterror(undef);
return $self->setlist($list{'-dir'});
}
# == Update the current list ==
sub update {
my($self, $switches) = @_;
my($outhost, $inlocal);
# Do we have the command line switches
($self->_seterror(-1, 'nothing to update()') && return 0) unless(defined($switches));
$switches = '-e' . $switches;
my @switch_list;
foreach ("ewords('\s+', 1, $switches)) {
next if (!defined($_));
# untaint input
$_ =~ s/['"]//g;
$_ =~ m/^([\w _\/,\.\@:'"-]*)$/;
if ($_ =~ /^\s*$/) {
push @switch_list, "";
} else {
push @switch_list, $1;
}
}
# can we actually alter this list;
($self->_seterror(-1, 'must setlist() before you update()') && return 0) unless(defined($self->{'LIST_NAME'}));
# check for important files: 'config' (idx < v5.0) or 'flags' (idx >= 5.0)
($self->_seterror(-1, "$self->{'LIST_NAME'} does not appear to be a valid list in update()") && return 0) unless((-e "$self->{'LIST_NAME'}/config") || (-e "$self->{'LIST_NAME'}/flags"));
# Work out if this is a vhost.
open(OUTHOST, "<$self->{'LIST_NAME'}/outhost") || ($self->_seterror(-1, 'unable to read outhost in update()') && return 0);
chomp($outhost = <OUTHOST>);
close(OUTHOST);
# Save the contents of inlocal if it is a vhost
unless($outhost eq $self->_getdefaultdomain) {
open(INLOCAL, "<$self->{'LIST_NAME'}/inlocal") || ($self->_seterror(-1, 'unable to read inlocal in update()') && return 0);
chomp($inlocal = <INLOCAL>);
close(INLOCAL);
}
# Attempt to update the list if we can.
system("$EZMLM_BASE/ezmlm-make", @switch_list, $self->{'LIST_NAME'}) == 0
|| ($self->_seterror($?) && return undef);
# Sort out the DIR/inlocal problem if necessary
if(defined($inlocal)) {
open(INLOCAL, ">$self->{'LIST_NAME'}/inlocal") || ($self->_seterror(-1, 'unable to write inlocal in update()') && return 0);
print INLOCAL "$inlocal\n";
close INLOCAL;
}
$self->_seterror(undef);
return $self->{'LIST_NAME'};
}
# == Get a list of options for the current list ==
sub getconfig {
my($self) = @_;
my($options);
# Read the config file
if(-e $self->{LIST_NAME} . "/flags") {
# this file exists since ezmlm-idx-5.0.0
( run in 0.848 second using v1.01-cache-2.11-cpan-5a3173703d6 )