Author: radu
Date: Thu Sep 4 04:38:54 2008
New Revision: 938
Modified:
trunk/Changes
trunk/qpsmtpd-async
trunk/qpsmtpd-prefork
Log:
Detach and daemonize only after reading the configuration and loading
the plugins, to give the init scripts a chance to detect failed startups
due to broken configuration or plugins.
Modified: trunk/Changes
==============================================================================
--- trunk/Changes (original)
+++ trunk/Changes Thu Sep 4 04:38:54 2008
@@ -1,3 +1,7 @@
+ async, prefork: detach and daemonize only after reading the configuration
+ and loading the plugins, to give the init scripts a chance to detect
+ failed startups due to broken configuration or plugins (Diego d'Ambra)
+
plugins/tls: close the file descriptor for the SSL socket
Set the Return-Path header when queuing into maildir mailboxes.
Modified: trunk/qpsmtpd-async
==============================================================================
--- trunk/qpsmtpd-async (original)
+++ trunk/qpsmtpd-async Thu Sep 4 04:38:54 2008
@@ -248,21 +248,6 @@
IO::Handle::blocking($CONFIG_SERVER, 0);
binmode($CONFIG_SERVER, ':raw');
- if ($DETACH) {
- open STDIN, '/dev/null' or die "/dev/null: $!";
- open STDOUT, '>/dev/null' or die "/dev/null: $!";
- open STDERR, '>&STDOUT' or die "open(stderr): $!";
- defined (my $pid = fork) or die "fork: $!";
- exit 0 if $pid;
- POSIX::setsid or die "setsid: $!";
- }
-
- if ($PID_FILE) {
- open PID, ">$PID_FILE" || die "$PID_FILE: $!";
- print PID $$,"\n";
- close PID;
- }
-
# Drop priviledges
my (undef, undef, $quid, $qgid) = getpwnam $USER or
die "unable to determine uid/gid for $USER\n";
@@ -285,6 +270,21 @@
my $plugin_loader = Qpsmtpd::SMTP->new();
$plugin_loader->load_plugins;
+ if ($DETACH) {
+ open STDIN, '/dev/null' or die "/dev/null: $!";
+ open STDOUT, '>/dev/null' or die "/dev/null: $!";
+ open STDERR, '>&STDOUT' or die "open(stderr): $!";
+ defined (my $pid = fork) or die "fork: $!";
+ exit 0 if $pid;
+ POSIX::setsid or die "setsid: $!";
+ }
+
+ if ($PID_FILE) {
+ open PID, ">$PID_FILE" || die "$PID_FILE: $!";
+ print PID $$,"\n";
+ close PID;
+ }
+
$plugin_loader->log(LOGINFO, 'Running as user '.
(getpwuid($>) || $>) .
', group '.
Modified: trunk/qpsmtpd-prefork
==============================================================================
--- trunk/qpsmtpd-prefork (original)
+++ trunk/qpsmtpd-prefork Thu Sep 4 04:38:54 2008
@@ -150,20 +150,6 @@
}
}
-if ($detach) {
- open STDIN, '/dev/null' or die "/dev/null: $!";
- open STDOUT, '>/dev/null' or die "/dev/null: $!";
- open STDERR, '>&STDOUT' or die "open(stderr): $!";
- defined (my $pid = fork) or die "fork: $!";
- exit 0 if $pid;
- POSIX::setsid or die "setsid: $!";
-}
-
-if ($pid_file) {
- print PID $$,"\n";
- close PID;
-}
-
run();
#start daemon
@@ -262,6 +248,20 @@
# after each connection
$qpsmtpd = $qpsmtpd_base = qpsmtpd_instance();
+ if ($detach) {
+ open STDIN, '/dev/null' or die "/dev/null: $!";
+ open STDOUT, '>/dev/null' or die "/dev/null: $!";
+ open STDERR, '>&STDOUT' or die "open(stderr): $!";
+ defined (my $pid = fork) or die "fork: $!";
+ exit 0 if $pid;
+ POSIX::setsid or die "setsid: $!";
+ }
+
+ if ($pid_file) {
+ print PID $$,"\n";
+ close PID;
+ }
+
# child reaper
$SIG{CHLD} = \&reaper;
spawn_children();