You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by fe...@apache.org on 2004/04/16 01:13:08 UTC
svn commit: rev 10034 - incubator/spamassassin/trunk/spamd
Author: felicity
Date: Thu Apr 15 16:13:07 2004
New Revision: 10034
Modified:
incubator/spamassassin/trunk/spamd/spamd.raw
Log:
move parts around in spamd so that errors are displayed before becoming a daemon (like Storable is needed but not available ...)
Modified: incubator/spamassassin/trunk/spamd/spamd.raw
==============================================================================
--- incubator/spamassassin/trunk/spamd/spamd.raw (original)
+++ incubator/spamassassin/trunk/spamd/spamd.raw Thu Apr 15 16:13:07 2004
@@ -425,15 +425,32 @@
# duplicating log messages.
# TVD: isn't this already done up above?
-my $dontcopy = 1;
-if ( $opt{'create-prefs'} ) { $dontcopy = 0; }
+# support setuid() to user unless -u, we're not root, or doing --vpopmail
+my $setuid_to_user = ($opt{'username'} || $> != 0 || $opt{'vpopmail'}) ? 0 : 1;
+my $current_user;
-# Untaint the pidfile path before we use it
-if ( defined $opt{'pidfile'} ) {
- $opt{'pidfile'} =
- Mail::SpamAssassin::Util::untaint_file_path( $opt{'pidfile'} );
+my $client; # used for the client connection ...
+my $childlimit; # max number of kids allowed
+my $clients_per_child; # number of clients each child should process
+my %children = (); # current children
+
+if ( defined $opt{'max-children'} ) {
+ ( $childlimit, $clients_per_child ) = split ( /[,:]/, $opt{'max-children'} );
+
+ # Make sure that the values are at least 1
+ $childlimit = undef if ( defined $childlimit && $childlimit < 1 );
+ $clients_per_child = undef
+ if ( defined $clients_per_child && $clients_per_child < 1 );
}
+# Set some "sane" limits for defaults
+$childlimit ||= 5;
+$clients_per_child ||= 1000;
+
+
+my $dontcopy = 1;
+if ( $opt{'create-prefs'} ) { $dontcopy = 0; }
+
my $orighome;
if ( defined $ENV{'HOME'} ) {
if ( defined $opt{'username'} )
@@ -529,16 +546,46 @@
|| die "Could not create INET socket: $! $@\n";
}
+my $spamtest = Mail::SpamAssassin->new(
+ {
+ dont_copy_prefs => $dontcopy,
+ rules_filename => ( $opt{'configpath'} || 0 ),
+ site_rules_filename => ( $opt{'siteconfigpath'} || 0 ),
+ local_tests_only => ( $opt{'local'} || 0 ),
+ debug => ( $opt{'debug'} || 0 ),
+ paranoid => ( $opt{'paranoid'} || 0 ),
+ home_dir_for_helpers => (
+ defined $opt{'home_dir_for_helpers'}
+ ? $opt{'home_dir_for_helpers'}
+ : $orighome
+ ),
+ PREFIX => $PREFIX,
+ DEF_RULES_DIR => $DEF_RULES_DIR,
+ LOCAL_RULES_DIR => $LOCAL_RULES_DIR
+ }
+);
+
+preload_modules_with_tmp_homedir();
+
+# If we're going to be switching users in check(), let's backup the
+# fresh configuration now for later restoring ...
+my %conf_backup = ();
+if ($setuid_to_user) {
+ $spamtest->copy_config(undef, \%conf_backup) ||
+ die "error returned from copy_config, no Storable module?\n";
+}
+
$opt{'daemonize'} and daemonize();
if ( defined( $opt{'pidfile'} ) ) {
+ $opt{'pidfile'} =
+ Mail::SpamAssassin::Util::untaint_file_path( $opt{'pidfile'} );
open PIDF, ">$opt{'pidfile'}" or warn "Can't write to PID file: $!";
print PIDF "$$\n";
close PIDF;
}
# support non-root use (after we bind to the port)
-my $setuid_to_user = 0;
if ( $opt{'username'} ) {
my ( $uuid, $ugid ) = ( getpwnam( $opt{'username'} ) )[ 2, 3 ];
if ( !defined $uuid || $uuid == 0 ) {
@@ -572,29 +619,6 @@
}
}
-elsif ( $> == 0 ) {
- if ( !$opt{'vpopmail'} ) {
- $setuid_to_user = 1;
- }
-}
-
-my $client; # used for the client connection ...
-my $childlimit; # max number of kids allowed
-my $clients_per_child; # number of clients each child should process
-my %children = (); # current children
-
-if ( defined $opt{'max-children'} ) {
- ( $childlimit, $clients_per_child ) = split ( /[,:]/, $opt{'max-children'} );
-
- # Make sure that the values are at least 1
- $childlimit = undef if ( defined $childlimit && $childlimit < 1 );
- $clients_per_child = undef
- if ( defined $clients_per_child && $clients_per_child < 1 );
-}
-
-# Set some "sane" limits for defaults
-$childlimit ||= 5;
-$clients_per_child ||= 1000;
# restart handling. do this here before compile_now() as that may
# take a while.
@@ -613,37 +637,6 @@
logmsg( "server started on $listeninfo (running version "
. Mail::SpamAssassin::Version()
. ")" );
-
-my $current_user;
-
-my $spamtest = Mail::SpamAssassin->new(
- {
- dont_copy_prefs => $dontcopy,
- rules_filename => ( $opt{'configpath'} || 0 ),
- site_rules_filename => ( $opt{'siteconfigpath'} || 0 ),
- local_tests_only => ( $opt{'local'} || 0 ),
- debug => ( $opt{'debug'} || 0 ),
- paranoid => ( $opt{'paranoid'} || 0 ),
- home_dir_for_helpers => (
- defined $opt{'home_dir_for_helpers'}
- ? $opt{'home_dir_for_helpers'}
- : $orighome
- ),
- PREFIX => $PREFIX,
- DEF_RULES_DIR => $DEF_RULES_DIR,
- LOCAL_RULES_DIR => $LOCAL_RULES_DIR
- }
-);
-
-preload_modules_with_tmp_homedir();
-
-# If we're going to be switching users in check(), let's backup the
-# fresh configuration now for later restoring ...
-my %conf_backup = ();
-if ($setuid_to_user) {
- $spamtest->copy_config(undef, \%conf_backup) ||
- die "error returned from copy_config, no Storable module?\n";
-}
# Fork off our children.
for ( 1 .. $childlimit ) {