Mail-SpamAssassin
view release on metacpan or search on metacpan
spamd-apache2/lib/Mail/SpamAssassin/Spamd/Apache2.pm view on Meta::CPAN
die APR::Error::strerror($rc) unless $rc == APR::Const::SUCCESS; # timeout
next unless $self->in->flatten(my $chunk);
$self->in->cleanup;
my $chlen = length $chunk;
$len += $chlen;
# this is never true, actually... get_brigade ensures we won't get
# more bytes... well, at least it's logically correct. ;-)
# we could check if $message ends with "\n" to detect weird cases.
if ($content_length && $len > $content_length) {
$self->protocol_error('(Content-Length mismatch: Expected'
. " $content_length bytes, got $len bytes");
return Apache2::Const::FORBIDDEN;
}
$message .= $chunk;
last if $content_length && $len == $content_length;
}
$self->{actual_length} = $len;
$self->{parsed} = $self->spamtest->parse($message , 0);
undef;
}
#
# Code to deal with user configuration.
#
# Run handle_* directly (ie. not from read_user_config) only if you know
# what you are doing.
#
# Change handle_* to return undef if not found and 0 if something's wrong?
#
sub handle_user_local { # -: a
require File::Spec;
my $self = shift;
my($username) = @_;
my ($name, $uid, $gid, $dir) = (getpwnam $username)[0, 2, 3, 7];
unless (defined $uid) {
my $errmsg = "handle_user unable to find user: '$username'";
if ($self->spamtest->{'paranoid'}) { # FIXME: return something? die? whatever?
$self->service_unavailable_error($errmsg);
}
else {
# if we are given a username, but can't look it up, maybe name
# services are down? let's break out here to allow them to get
# 'defaults' when we are not running paranoid
info($errmsg);
}
return 0;
}
my $cf_dir = File::Spec->catdir($dir, '.spamassassin');
my $cf_file = File::Spec->catfile($cf_dir, 'user_prefs');
if (!-l $cf_dir && -d _ && !-d $cf_file && -f _ && -s _) {
$self->spamtest->read_scoreonly_config($cf_file);
# if the $cf_dir group matches ours, assume we can write there
my $user_dir = $) == (stat $cf_dir)[5] ? $dir : undef;
$self->spamtest->signal_user_changed(
{ username => $username, user_dir => $user_dir, });
}
return 1;
}
=head1 TODO
Timeout...
NetSet
=head1 BUGS
See E<lt>http://bugzilla.spamassassin.org/E<gt>.
=head1 SEE ALSO
C<httpd(8)>,
C<spamd(1)>,
C<apache-spamd(1)>,
C<Mail::SpamAssassin::Spamd::Apache2::Config(3)>
=cut
1;
# vim: ts=2 sw=2 et
( run in 1.434 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )